Integrate Sentry and implement a feature flagged feature (disabled by default)
to force crash the app using the function mobile/status.go#IntendedPanic()
provided by status-go. Because the feature is feature flagged and disabled, it
is not available in release builds.
Fixes: https://github.com/status-im/status-mobile/issues/21656
Documentation about Sentry in status-go:
https://github.com/status-im/status-go/blob/3466ac2661bb19cd0eaa27761551de3b4d31b393/internal/sentry/README.md#L60
Areas that may be impacted: Whenever a panic happens in status-go and usage data
collection is enabled we will send error data to Sentry. In theory, nothing
should change for the user, therefore nothing should be visibly different in the
app's behavior.
Steps to test:
Before following the steps below, the CI must be configured with the appropriate
SENTRY_DSN_STATUS_GO value. You can also use a free tier cloud instance to do
your own testing in case you want to play around with Sentry.
1. Login with any profile.
2. Enable usage data collection (for now, Sentry and analytics are tied to the
same setting in status-go).
3. Go to Settings > Feature flags and enable app-monitoring > intentional-crash
4. Go to Settings > Advanced > and press on Force crash immediately
Usually you should see the error in the Sentry dashboard in a matter of seconds.
* [#22029] fix: bridge button when there is single account
* [#22029] fix: trigger start bridge if all condition met
* [#22029] docs: add clarification for bridge flow logic based on account selection
This PR fixes the path to hack deps script and re-generates `gradle` deps.
Previous PRs passed build phase because we already have the `gradle` deps we need.
However make `nix-update-gradle` would fail due to the incorrect path.
* [#21483] fix: update collectible amounts after sending
* [#21483] test: cover funcs with unit test
* [#21483] fix: add condition to update only pending collectible
* [#21483] fix: use parse int for conversion
* [#21483] fix: round up dispatch delay
To remove hardcoding of specific versions of missing gradle
dependencies, we will use `get_versions.sh` to fetch them dynamically.
Also disable default lint checks to remove redundant
`lintVitalReportRelease` task and dependency.
- Remove now unnecessary wrapper for reanimated/view
- Use kebab-case keywords for the hole-view component
- Use rn/StyleSheet.absoluteFill along with ClojureScript styles
- Fix keys inside view's `:transform` property
- Remove some uses of `merge` to pass styles to components
- Add tests for `convert-prop-value`
Add option to copy message ID when long pressing on a chat message. Similar to
how it's implemented in the desktop client, the option is only visible if the
user enables the DEBUG log level.
Fixes https://github.com/status-im/status-mobile/issues/21984
This commit:
- removes EIP-3770 address format (with chain prefix) from the UI and displays/uses only the address
- removes editing of preferred networks for an account and saved address
- copy/paste functions will remove the chain prefix from the address (if any)
- adds base chain explorer links to account and saved address
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* Add `buttons-style` prop to bottom actions to allow same button dimensions
* Make events to update a profile more generic
* Fix tests
* Add modal screen to update the profile
* Add introduce yourself modal
* Ask user to update their profile before sending a message or contact request
* Fix color picker selected styles
* Remove some `:f>` now unnecessary
* No longer shows the modal if the user manually updates their profile
This commit adds a script that overrides `git` to echo version required by `status-go` derivation.
Also fixes error messages like this when building `status-go` :
```
fatal: not a git repository (or any of the parent directories): .git
```
These messages can be often misleading to some developers.
This change resolves some issues related to text-overflow in the app, and it also ensures we use the correct drawer title when editing a user nickname.
* [#21305] fix: sort assets by value and collectibles by name
* [#21305] fix: use seq to check name is nil or empty
* [#21305] fix: normalize text to sort properly
This changes adds support for connecting remotely to re-frisk when running the app on a mobile device. This change is essentially aimed towards better support for introspecting on iOS devices, but these changes should also work for Android devices too. Note, that running in the Android simulator may still require port-forwarding with `adb reverse`.
This change integrates status-go changes that fix an underlying issue with generating identity images. Now identity images will be generated with a populated `clock` field, so we no longer need our existing workaround.
This commit fixes the user is not taken to the activity tab after the TX is placed if the user enters the send flow from collectible details screen (inside the account)
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* chore: add error logging events and effects
* chore: restructure tests and effects for delete-message-for-me
* chore: refactor events and effects and tests for chat-contacts
* chore: refactor and add tests for accepting and declining contact request
* chore: refactor chat-contacts rf/defn to defn
* chore: add :fx key as a mergeable effect for rf/merge when running tests
* chore: refactor rf/defn and add tests for delete-message-for-me
* chore: remove log effects for contacts
* chore: remove logs effects for delete-message-for-me
* fix: update chat usage of sync-all
* fix: resolve schema error with missing action-label for contact-request dismissed state
* fix: ensure chat-contacts event error handlers are compatible with re-frame
* fix: ensure delete-message-for-me event error handlers are compatible with re-frame
* chore: refactor and test delete-message events
* chore: refactor log events and effects
* chore: use log effect in delete-message
* chore: use log events and effects inside chat-contacts
* chore: use log effects inside delete-message-for-me
* chore: remove unneeded test for delete-message-for-me
* chore: format bottom-drawer component
* chore: format delete-message
* chore: format delete-message-for-me
This change refactors the codebase to avoid using deprecated functions and components related to the `custom-color` function (now removed) and the touchable-without-feedback component.
These warnings are fixed:
```
warning: ignoring the client-specified setting 'keep-derivations', because it is a restricted setting and you are not a trusted user
warning: ignoring the client-specified setting 'keep-outputs', because it is a restricted setting and you are not a trusted user
warning: ignoring the client-specified setting 'sandbox', because it is a restricted setting and you are not a trusted user
warning: ignoring the client-specified setting 'stalled-download-timeout', because it is a restricted setting and you are not a trusted user
warning: ignoring the client-specified setting 'trusted-public-keys', because it is a restricted setting and you are not a trusted user
warning: ignoring the client-specified setting 'trusted-substituters', because it is a restricted setting and you are not a trusted user
```
* Change multiple uses of `merge` to `assoc` in flat-list wrapper
* Fix fast-image wrapper to avoid blinking
* merge -> assoc usage in chat-item component
* Fix avatar not being updated when the user changes their username
* Fix scalable avatar issues
- On Android, the border was inconsistent depending on the theme.
- Fix animation, simplify the calculation, and now it matches designs
* Avoid blinking by using rn/memo
This commit fixes routes not cleaned properly ("Context Canceled" and "No Routes Found" errors thrown on generating the next route) when the user navigates back from the TX confirmation screen using the device's back button/gesture.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit fixes
- the send flow for collectibles (ERC721 and ERC1155)
- picking the right balance of the ERC1155 in the send flow from the account page, based on the account viewing by the user
- the balance of ERC1155 is sometimes incorrect if the collectible is present in more than one account of the user
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit fixes the slider-button doesn't reset after the completion of slider in standard authentication with keycard keypairs.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change adds some metrics events for tracking when keycard users have reached an unavailable feature, when keycard users have successfully logged in, and when keycard users have succeeded or failed to migrate to keycard.
* Share usage data screen image done
* Update login by syncing and login using recovery phrase images
* Small refactor: remove `merge` and add a `let` binding
* Fix modal entering expected animation
* Remove password disclaimer, update copy and simplify implementation
* Remove non-existing wallet event
* Skip profile configuration for the "create profile" onboarding flow
* Include flow for new profiles when another profile already exists
* Add explanation about temp username
* Point 20 to a constant
* Simplify create profile password screen
* Fix password creation screen jump on mount
* e2e: updated tests
* Completely remove the "create profile" onboarding screen
* e2e: updated tests with recovering user
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
This commit fixes the token/networks going to zero/disabled in the "Bridge to" screen when the user navigates back from the input screen.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change adds a new action to the action-drawer for opened communities. Now opened communities can be closed by users by pressing on the "Close community" action. Note, that this action will only be available to communities displayed in communities list under the opened tab.
Add WebSocket keep-alive mechanism using ping/pong frames to maintain connection stability:
- Add ping timer that sends ping every 30 seconds
- Automatically reconnect if ping fails
- Properly cleanup timer on disconnect
- Add logging for StatusGo server requests
This helps prevent connection timeouts and ensures timely detection of connection issues.
Improves tracking of login and successful onboarding completion according to
requests from non-technical analytics users and to synchronize with desktop. We
now publish two new events user-logged-in and onboarding-completed.
Fixes https://github.com/status-im/status-mobile/issues/21679
Areas that may be impacted: no impact is expected whatsoever, but login and
onboarding code were lightly touched.
- Event user-logged-in is always published, whenever the profile login is
successful. If the user created a profile, we publish both
onboarding-completed and user-logged-in.
- Event onboarding-completed is published if the user created a profile,
recovered using seed phrase or paired devices successfully.
This commit replaces the fallback for an unknown token image (where we display the first letter of the token name) with the default token image
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change adds support for displaying the keycards inside the keycards settings screen. Note, that the keycards that are displayed are the keycards that are associated to the user's profile keypair.
This change fixes some of the re-rendering issues that occur inside the contact list when creating a new chat. Most important is that we avoid extra re-renders by configuring the flat-list with stable props. And we also avoid re-rendering avatar images each time the avatar component re-renders.
This commit explicitly specifies location and version of `CryptoSwift` pod in attempt to fix errors like this in CI.
```
None of your spec sources contain a spec satisfying the dependencies: `CryptoSwift (= 1.8.0), CryptoSwift`.
```
This commit
- adds container-style prop to the wallet card component
- makes the Buy and Receive CTAs (cards) width flexible as we display two cards, and it needs to fill the screen width.
NOTE: The component's fixed width is 161, but in certain phones, it's small and does not fill the screen's whole width.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
In Google Play and App Store, it is desirable to use en-GB (English UK) as the
default locale for legal reasons. We heard from F-Droid folks that en-GB is not
as well supported as en-US
https://github.com/status-im/status-mobile/issues/21665.
In this PR we go back to en-US as the default locale in fastlane and update the
text for English (UK) standards. Google Play and App Store shouldn’t be affected
and will use en-GB as the default locale.
Fixes https://github.com/status-im/status-mobile/issues/21665
This commit:
- Removes the usage of deprecated "wallet_filterActivityAsync RPC" and updates it to "wallet_startActivityFilterSessionV2" with other supporting activity filter session RPCs
- Removes deprecated "wallet_checkRecentHistoryForChainIDs" RPC as we no longer support past transaction history
- Added support for Bridge, Swap and Approval activities
- Added context for the sender and receiver if the address is known (own accounts or saved addresses)
- Added support for viewing, copying and sharing links to TX details on block explorer
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit:
- adds wallet-card component
- adds Buy and Receive CTAs above the assets list in the wallet home if the balance is zero
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
https://github.com/status-im/status-go/compare/032eb5b6...c014fbfc
- Rename LOG_REQUEST_GO env variable to API_LOGGING_ENABLED across all env files
- Rename requests.log to api.log for consistency
- Remove standalone initLogging functionality from native modules as it's now
handled within InitializeApplication
- Add logging configuration (logEnabled, logLevel, apiLoggingEnabled) to
InitializeApplication params
- Add logDir parameter for Android to ensure proper log file location
This change consolidates logging initialization into the InitializeApplication
flow and makes the naming more consistent with its actual functionality.
This commit fixes the error thrown when tapping the From or To sections in the transaction confirmation screen.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Integrates the optimizations coming from the status-go PR
https://github.com/status-im/status-go/pull/6106. Now messenger filters are
set-up concurrently and we can call the endpoint wakuext_chatsPreview twice:
once for non-community chats and once for community chats. This way, the user
should be able to see some data render before the slow part ends
(community-related data).
Fixes https://github.com/status-im/status-mobile/issues/21456
Areas that may be impacted
- Login
- Loading of data after login (contacts, chats, etc)
Primarily, this change fixes an issue related to the Keycard PIN error message not being visible displayed on some devices. Additionally, this change also clears the PIN entry state after failing to enter the correct Keycard PIN. And this change also allows for the PIN entry component to have two separate error modes: one for the entire component and another for just the info text.
* [#21557] feat: show from account page in swap flow
* [#21557] feat: add disabled state to account-item
* [#21557] fix: apply suggestion
* [#21557] fix: add format address util and rename screen
* [#21557] fix: check and count account with token balance
* [#21557] fix: check for root screen
* chore: upgraded watchman, otherwise it's not used with current metro
The latest metro version requires watchman capabilities that are not
available in the version we locked, so it was not used. Instead we
used the "node watcher", which is slower and buggier (at least for me
metro was timing out quite often)
* fix: watchman ignore .clj-kondo, .shadow-cljs
* Rework login and logout flow to keep biometrics valid
- Move logout logic to a new namespace, the implementation no longer uses `rf/defn`
* Code style fixes
* Fix warning: "null is not an image" in login
* Fix biometric icons used all over the app
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
This commit fixes ParaSwap contract address displayed on the setting approval cap for a token.
Since we get the approval contract address in the swap proposal, we take that as higher precedence over the hardcoded value in the constants file
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* feat: hide token price-change info if no token balance
* fix: show dapps header button only on account screen
* ref: renamed to above-zero? and using it where needed
* fix: removed bridge icon from submit button
This commit should help with potential freezes right after login, especially in
low-end devices and for users with more data.
The default behavior for the effect :json-rpc/call is to transform the
response to CLJS data using (js->clj data :keywordize-keys true), even if the
result is never used. The problem is that the response from
wakuext_startMessenger can be a very large struct! This PR simply adds the
missing line :js-response true.
https://github.com/status-im/status-mobile/blob/ca22b67d0e82a3cb123be2174b3ef2157e676e08/src/status_im/common/json_rpc/events.cljs#L85-L87
type MessengerResponse struct {
Contacts []*Contact
Invitations []*GroupChatInvitation
CommunityChanges []*communities.CommunityChanges
AnonymousMetrics []*appmetrics.AppMetric
Mailservers []mailservers.Mailserver
CommunityStorenodes []storenodes.Storenode
Bookmarks []*browsers.Bookmark
Settings []*settings.SyncSettingField
IdentityImages []images.IdentityImage
CustomizationColor string
WatchOnlyAccounts []*accounts.Account
Keypairs []*accounts.Keypair
AccountsPositions []*accounts.Account
TokenPreferences []walletsettings.TokenPreferences
CollectiblePreferences []walletsettings.CollectiblePreferences
DiscordCategories []*discord.Category
DiscordChannels []*discord.Channel
DiscordOldestMessageTimestamp int
BackupHandled bool
// notifications a list of notifications derived from messenger events
// that are useful to notify the user about
installations map[string]*multidevice.Installation
notifications map[string]*localnotifications.Notification
requestsToJoinCommunity map[string]*communities.RequestToJoin
chats map[string]*Chat
removedChats map[string]bool
removedMessages map[string]*RemovedMessage
deletedMessages map[string]string
communities map[string]*communities.Community
communitiesSettings map[string]*communities.CommunitySettings
activityCenterNotifications map[string]*ActivityCenterNotification
activityCenterState *ActivityCenterState
messages map[string]*common.Message
pinMessages map[string]*common.PinMessage
discordMessages map[string]*protobuf.DiscordMessage
discordMessageAttachments map[string]*protobuf.DiscordMessageAttachment
discordMessageAuthors map[string]*protobuf.DiscordMessageAuthor
currentStatus *UserStatus
statusUpdates map[string]UserStatus
clearedHistories map[string]*ClearedHistory
verificationRequests map[string]*verification.Request
trustStatus map[string]verification.TrustStatus
emojiReactions map[string]*EmojiReaction
savedAddresses map[string]*wallet.SavedAddress
ensUsernameDetails []*ensservice.UsernameDetail
updatedProfileShowcaseContactIDs map[string]bool
seenAndUnseenMessages map[string]*SeenUnseenMessages
}
This change resolves an issue with un-opened, joined, and pending communities being visible inside the "opened" communities tab. With this change, the "opened" community tab will only display spectated (opened) communities that have not been joined or pending to be joined.
This change fixes the appearance of the disclaimer checkbox inside the create/change password forms to use the user's customization color. Additionally, this change also changes the password-hint success icons to use the check-circle because of its solid opacity.
related issue : https://github.com/status-im/status-mobile/issues/15447
This commit makes use of https://github.com/gradle/github-dependency-graph-gradle-plugin to generate deps so that we may get rid of the AWK script that parses `gradle` output to figure out `gradle` dependencies.
credits to Vedran for doing initial research on this dependency generator plugin.
We still miss a few dependencies and are not completely able to get rid of the hack list step just yet.
I also moved `react-native-share` out of `pluginManagement ` block in `android/settings.gradle` because it does not belong there.
This commit
- fixes the networks/chains supported by the token based on the token list fetched from status-go instead of relying on the balance-per-chain map as status-go returns balance for chains only if there is a positive balance
- adds supported-networks key to token data map for network details
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change refactors the navigation-screens namespace to organise each screen definition into a group based on the app features. It also adds some metrics tracking to all the of the screens defined in the navigation-screens namespace.
Additionally, in this change we've introduced a new build configuration for shadow-cljs which allows us to conditionally include code for certain shadow-cljs builds. In this case, we've decided to only exclude the metrics re-frame interceptor from being required when running the component-tests build. This is due to a complication with the metrics interceptor depending on the navigation-screens namespace, which would eventually require many other third-party dependencies that do not have mocks defined for the component tests. To avoid defining more mocks, we've avoided requiring the metrics interceptor for now.
* fix: filter tokens by balance on select asset
* feat: added network-list-with-positive-balance
* fix: swaps error when using networks with balance
* fix: hide send/bridge/swap when no token balance
This commit:
- Adds a PDF viewer screen to view PDFs within the app instead of opening them on the system browser
- Updates the swap provider (ParaSwap) terms and conditions to be displayed within the app
- Increases APK size limit to 80 MB
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Co-authored-by: Siddarth Kumar <siddarthkay@gmail.com>
* Make `->bignumbers` more general
* Fix case when there are not enough assets to pay gas fees:
- Fix the UI to match Figma
- Fix logic to handle the case
- Perform refactoring to surrounding code
* Change `defonce ^:const` -> `def ^:const` in `status-im.contexts.chat.messenger.messages.list.view` to be more REPL friendly
* Remove animations from `status-im.contexts.chat.messenger.messages.pin.banner.style`
* Simplify placeholder for messages
* Replace shared-value with a ratom usage since no animations were performed.
* Fix the style for the new designs and remove now unnecessary animations
* Improve chat component implementation
The previous implementation has two main problems:
1. It is creating atoms and ratoms in non-form-2-components.
2. Conditionally uses a hook: `rn/use-mount` in `lazy-chat-screen`.
The new implementation fixes the previous problems, improves the readability and passes only the props needed to its children.
* Remove action buttons from the chat screen
* Remove now unused code
* Replace reanimated/view -> rn/view where no animations are made
* feat: moved disconnect logic to function
* ref: moved rpc calls to rpc ns
* ref: moved session approval logic to function
* fix: small fixes for sessions
* test: wallet-connect/on-session-delete event test
* test: added event tests for wc sessions
* fix: require sessions events ns
* fix: the wallet was loaded after wc sometimes
* feat: added type data flattening + tests
* feat: added typed data flattened ui
* ref: moved typed data utils into their own ns
* ref: small changes & formatting
* feat: show typed data view only for typed data requests
* ref: moved typed-data? into sub
* fix: tests and styling
This commit
- Stops route calculation when the user
- changes FROM account
- changes the send (input) amount
- goes back from the routes calculation page
- after the transaction is successfully submitted
- goes back from tx confirmation page for collectibles
- Prevents the keyboard being dismissed while entering the password on the transaction confirmation page
- Fixes multiple edit tiles/boxes added to receiver routes
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change adapts the code to avoid persisting the string `"<0.01"` in the wallet-send UI state. This change also modifies some of the BigNumber utility functions to validate that only BigNumbers are used with the utility functions. And the this change also tries to stop requesting route suggestions after exiting the wallet-send flow.
This change adds a re-frame event for `:open-url` which will allow UI components to open a url using the re-frame effect `:effects/open-url`. Additionally, some code was refactored to use the `:open-url` event instead of directly opening the urls with the `open-url` function.
This commit fixes the max value that is not updated when the user switches the token/network in the input amount screen
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
nix: use nixpkgs unstable for gradle 8.8
nix: ldflags are expected to be a list
chore: fix deprecated vendorSha256
nix: bump jdk to 17 & pass java version to gradle
make: set universalApk false in run-android target
nix: fix --replace deprecation warning
- https://github.com/NixOS/nixpkgs/pull/260776
ios: update pod and gem lockfiles
nix: bump nodejs to 20.12.2
nix: add Xcode 16.0 to allowed versions
chore: upgrade rn-image-crop-picker lib
nix: full path for missing dep in node_modules sh
e2e: removed redundant element
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
* Fix not joined drawer options for token gated communities
* Remove `show-not-implemented-features?` flag for token gated options
* Fix component tests
As recommended in
https://github.com/status-im/status-go/pull/5570#discussion_r1692345230 [1] and
https://github.com/status-im/status-go/pull/5570#discussion_r1690794119 [2], we set
the Waku config flag WakuV2EnableMissingMessageVerification to true. The flag
can't be toggled in the UI because there's no supporting endpoint for that in
status-go at the moment.
[1] I doubt the hash based store-query going to be as expensive as legacy-store.
Because we only query hashes and if we miss any messages we fetch them which
would improve message reliability.
https://github.com/status-im/status-go/pull/5511 is expensive as it doesn't
query hashes rather full messages. I think we can keep this new flag enabled by
default and provide a switch in the app in case it becomes expensive to disable
it.
[2] we can keep this enabled for mobile by default. The reason
WakuV2EnableStoreConfirmationForMessagesSent was disabled is as it was giving
bad UX to users where messages were sent but still showing as not sent due to
storeNode performance issues. But this flag doesn't give any bad UX, so we can
keep it enabled by default.
Fixes https://github.com/status-im/status-mobile/issues/20879
* WC: Last account that established connection is not selected when connecting through global scanner
* WC: Last account that established connection is not selected when connecting through global scanner
* Fixes
this commit implemented logging request/response between status-mobile and status-go.
to access `requests.log`, shake your phone and share the logs.
TBD:
- adding `device id` into request to proxy server, we can implement it in a separate PR if needed.
- not sure if we need logging the request made in the backend that not asked by frontend directly
This commit:
- fixes crash while sending an ERC115 collectible
- fixes routes are fetched if we enter 0 in the input
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit fixes the delay in showing the currency symbol in the wallet by moving the RPC call to login phase 1 along with wallet initialisation. This helps us to improve the wallet UX by skipping the waiting to start the messenger.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* fixed overlapping last message by the composer when there is a pinned message
* prevent a user who is not a member of a community from pinning or unpinning channel messages
---------
Co-authored-by: Ulises M <ulises.ssb@hotmail.com>
* Fix input amount step skipped while sending a token
* Rename events to remove the `wallet` unnecessary suffix
* Code style fixes
* Fix React warnings:
1. About unique key in `select-address.tabs.view` along with a refactor
2. The deprecated `:keyboard-should-persist-taps` as `true` in `send.select-address.view`
* Hide account switcher while sending a collectible
* Fix tests
In my previous PR -> https://github.com/status-im/status-mobile/pull/21163 I had attempted to build universalAPK only for release builds but had missed out on these changes.
This commit ensures `universalApk` value of `gradle` config is properly set.
This commit also points to my branch in `status-jenkins-lib` which modifies the APK size restrictions.
Its not `110 MB` for Universal APKs and `70 MB` for Individual Architecture APKs
* [#20150] feat: wallet connect pairing via deep links
* [#20150] feat: redirect to the dapp after finish response
* [#20150] test: add tests for events and utils
* [#20150] fix: reviewer's feedback
This change attempts to fix the calendar component specs to avoid errors with finding multiple elements with the same text. Prior to this change it was possible for multiple elements to be found with the same number of the day, like "5", which caused the tests helpers to thrown an exception. Now the specs will use a different test helper to avoid the exceptions, and we've adjusted the test data to avoid duplicate day numbers too.
This commit:
- fixes profile with ENS can edit their name
- fixes identicon ring is shown for the profile with ENS
- updates the profile URL for the profile with ENS
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* wip, small renamings
* Added metamask regex
* Added tests for metamask conversion
* Add metamask address to shell scanner and wallet address scanner
* unify address functions usage
* address-related functions moved to a dedicated namespace
* minor fixes
* fix lint and tests
* review notes fixes
* return back function
* lint fix
* Support metamask addresses without suffix, prefixed `:ethereum`
This commit removes passing random emoji on account creation for the default wallet account, as status-go will set this.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This change updates the Android icon assets for all builds (debug, PR, and release). This change attempts to support the Android adaptive icons and the monochrome/themeable icons for upcoming Android releases.
The issue occurred because we updated the theme value after setting the root
(not before), which caused the root to be initialized with the old theme value.
* Open metrics modal when changing metrics in settings
* Move privacy policy & terms of use components under `status-im.common`
* Add a link to the Privacy Policy in the metrics modal
* Update privacy policy and terms of use content
* Remove extra function wrapper
This commit:
- hides keypairs with empty origin in selection while creating an account
- hides remove account button for accounts with empty origin
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
We make the wallet closer to being offline-first, that is, once data is loaded,
going offline won’t cause unnecessary data re-fetches which currently cause all
balances and data to stay loading forever or eventually balances end up zeroed.
Areas that may be impacted: read-only data displayed in the wallet and editing
accounts.
Fixes https://github.com/status-im/status-mobile/issues/21066
This change changes the initial onboarding screen to require users to manually accept the terms-of-use and privacy-statement before continuing to onboard into the app.
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
* chore: add english translation for "Beta"
* tweak: add beta tags to communities and chat home screen titles
* fix: use smaller size for beta tags on chat and communities home screens
* chore(wallet): feature flag adding watch only accounts
* e2e: disabled test for watch-only accounts
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
This change will now allow for customizing the port number when running the metro server. The environment variable `RCT_METRO_PORT` can now be set when executing commands like `make run-ios`, `make run ios-device`, and `make run-android`. Though, it should be noted that `make clean` may need to be ran before attempting to set or change `RCT_METRO_PORT` since the react-native app will have statically built code that references the value of RCT_METRO_PORT from compile time and not runtime.
* 📈 Capture onboarding funnel
* ⏩ Faster lookup
* ✅ Capture how many people enabled metrics
- It technically captures disabled too
- But we'll never know if someone disabled
- Because that info won't be transmitted
* ✏️ Fix tests
* 🧯 Fix lint
Creating this PR for regression testing the comparability of feature sync
between different versions(mainly current PR build vs v2.29) after adding
backend fallback pairing support. Because frontend haven't added the invocations
relate to fallback pairing API yet, so fallback pairing won't support with
current build.
relate status-go PR https://github.com/status-im/status-go/pull/5614
Testing notes expected: sync should work as before between different versions
like following: v2.29 <-> PR build PR build <-> recent desktop build
NOTE: It breaks with v1 of pairing, but that's ancient (last year I believe), so
safe to break.
This commit uses "usd" currency as default for the fiat price calculation for the tokens.
Every currency has a different format - decimal which we need to rely on a separate RPC to fetch currency format and do the calculation. So, this PR will change to use usd as the default for v2.30.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* fix(wallet): fix bridge transactions
Signed-off-by: Brian Sztamfater <brian@status.im>
* add support for approve transactions
Signed-off-by: Brian Sztamfater <brian@status.im>
---------
Signed-off-by: Brian Sztamfater <brian@status.im>
* feat: removed wallet connect feature flag
* fix: show pending requests when logging out and in
* fix: don't show requests across (test/main)nets
* format: added env newlines
* fix: network state reset on network type change
* fix: reject typed-data if wrong chain-id
* chore: added logs for future debugging
* fix: create password for small screen
* feat: use floating button page
Signed-off-by: yqrashawn <namy.19@gmail.com>
* fix: use keyboard will show for ios
Signed-off-by: yqrashawn <namy.19@gmail.com>
* fix: safe area bottom on devices without physical home button
Signed-off-by: yqrashawn <namy.19@gmail.com>
* feat(create-password): tips and checkbox stick with confirm button
* fix: floating button blur after rebase
* fix(floating-button): absolute content avoid keyboard view
---------
Signed-off-by: yqrashawn <namy.19@gmail.com>
In this commit:
- we set `ANDROID_ABI_SPLIT` to `true`
- we set `ANDROID_ABI_INCLUDE` to `arm64-v8a` for debug & PR android builds
- release builds would still contain `armeabi-v7a;arm64-v8a` and there is no change for E2E android builds
- we point to relevant changes in `status-jenkins-lib` which also introduces a size check for this `apk`.
The agreed threshold is 100 MB.
* 🥅 Filter connected dapps based on testnet mode
- Fixes#20794
* 🥅 Remove map, just filter
* 💿 Rebase
* ❌ Remove greedy fetch
* 🙅♀️ Properly reject proposals and requests
* 🎗️ Remove newline and move `set`
- `set` was applied at the wrong place here
* ✏️ Address review comments
* 👀 Read proposal to reject from state
* ◀️ Bring back network filtering
* 🧹 Cleanup
* ✏️ Move comment around
* 🎣 Use filter operable accounts helper
* ➕ Add back events deleted during rebase
* 🧰 Fix Issue 2, Testnet sessions not visible
* 🖊️ Fix lint
* 🔗 Make testnet filtering more explicit
* 🥢 Use union instead of two subsets call
* ✏️ Fix lint
* 🔇 Undo changes that creeped in an unrelated ns
* add v2 method
* rename v2 to get-suggested-route
* remove timestamp check on success
* handle async signal for suggestion
* fix stop get suggested routes
* address feedback
* rename get-suggest-route
* prefer lazy seq
* fix formatting
* update suggested routes success
* refactor get-in calls in start-get-suggested-routes
* move transformations to data store
* clean suggested routes immediately
* fix lint
* pass precision as ar
* change test name
* fix big number division error (issues 1,2)
* only trigger router fetch when there address (to/from)
* check response data for error response when routes received via signal
* update status-go
* fix: test failure
* update status go
* handle error message for generic errors
We do a few things to reduce the initial load and make the app more responsive
after login. The scenario we are covering is a user who joined communities with
a large number of members and/or which contain token-gated channels with many
members.
- Related to https://github.com/status-im/status-mobile/issues/20283
- Related to https://github.com/status-im/status-mobile/issues/20285
- Optimize how we convert a community from JS to CLJS. Community members and
chat members are no longer transformed to CLJS, they are kept as JS. Read more
details below.
- Delay processing lower-priority events by creating a third login phase. The
goal is to not put on the same queue we process communities less important
events, like fetching the count of unread notifications. Around 15 events
could be delayed without causing trouble (and this further prevent a big chain
of more events to be dispatched right after login).
- Tried to use re-frame's flush-dom metadata, but removed due to uncertainty,
check out the discussion:
https://github.com/status-im/status-mobile/pull/20729#discussion_r1683047969
Use re-frame’s support for the flush-dom metadata whenever a signal arrives.
According to the official documentation, this should tell re-frame to only
process the event after the UI has been updated. It’s hard to say if this
makes any difference, but the theory is sound.
- Reduce the amount of data returned to the subscription that renders a list of
communities. We were returning too much, like all members, chats, token
permissions, etc.
Other things I fixed or improved along the way:
- Because members are now stored as JS, I took the opportunity to fix how
members are sorted when they are listed.
- Removed a few unused subs.
- Configured oops to not throw during development (in production the behavior is
to never throw). This means oops is now safe to be used instead of interop
that can mysteriously fail in advanced compilation.
- Show compressed key instead of public key in member list for the account
currently logged in.
Technical details
The number one reason affecting the freeze after login was coming from
converting thousands of members inside communities and also because we were
doing it in an inefficient way using clojure.walk/stringify-keys. We shouldn't
also transform that much data on the client as the parent issue created by
flexsurfer correctly recommends. Ever since PR
https://github.com/status-im/status-mobile/pull/20414 was merged, status-go
doesn't return members in open channels, which greatly helps, for example, to
load the Status community. The problem still exists for communities with
token-gated channels with many members.
The current code in develop does something quite inefficient: it fetches the
communities, then transforms them recursively with js->clj and keywordizes keys,
then transforms again all the potentially thousands of member IDs back to
strings. This PR changes this. We now shallowly convert a community and ignore
members because they can grow too fast. From artificial benchmarks simulating
many members in token-gated channels, or communities with thousands of members,
the improvement is noticeable.
You will only really notice improvements if you have spectated or joined a
community with 1000+ members and/or a community with many token-gated channels,
each containing perhaps hundreds of members.
What's the ideal solution?
We should consider removing community members and channel members from the
community entity returned by status-go entirely. The members should be a
separate resource and paginated so that the client doesn't need to worry
about the number of members, for the most part.
This commit removes two toggles from legacy advanced settings
- "Testnet mode" - duplicate toggle as the user can switch to testnet from wallet settings
- "Enable Goerli as test network" - Goerli is depreciated and wallet services use Sepolia testnet as default.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* feat: only initialize wc if internet online
* feat: no internet toast for session establishment
* feat: no internet banner on session requests
* feat: reloading walletconnect on connection change
* fix: re-initialize only when previously failed to
* fix: removed legacy net-info ns
* ref: renamed :network-status to :network/status
* ref: moved network subs to own "category"
* fix: device network fx args
* fix: tests & showing persisted dapps when offline
* fix: addressed review comments
* fix: rebase issues
* fix: linting
* fix: usage of web3-wallet (#20864)
* fix: moved networks to contextx and renaming
* ref: moved building supported namespaces into fx
Equality checks in tests using = give a bad experience by default on test
failures containing nested data structures. We use the cljs.test directive
match? from matcher-combinators library to help compare nested structures. The
problem with match? is that its default matcher for maps (embeds) can be too
permissive, and this causes surprises.
Here we upgrade matcher-combinators to latest, where a new matcher called
nested-equals is available. This matcher won't allow extra keys in maps. This
matcher eliminates the need for manually adding nested equals matchers as we
have to do currently.
- Upgrades matcher-combinators from 3.8.8 to 3.9.1 (latest as of 2024-07-19)
What changes?
When asserting in tests, we now have the option to use match-strict? or match?.
Both directives are available by integrating with cljs.test. The code
implementing the new match-strict? directive was 100% copied from the library
matcher-combinators because we need to wrap the expected value ourselves with
matcher-combinators.matchers/nested-equals. It's ugly code, but it's how we can
integrate with cljs.test/assert-expr.
This commit:
- prevents the user from saving their wallet address as the saved address
- fixes button not capturing taps when the keyboard is open in saved address flows
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Fix a long standing problem where we can't run in parallel the make target
run-clojure and test-watch-for-repl, or in other words, we can't run tests via
the REPL while the app is running.
Details:
I found out that shadow-cljs fails to build because it does not expand the
environment variables SHADOW_OUTPUT_TO and SHADOW_NS_REGEXP if and only if the
run-clojure target was executed.
This is the top of the stacktrace, and it happens because it doesn't know where
to output the test build because the env var wasn't expanded:
[build] NullPointerException:
[build] shadow.build.node/configure (node.clj:59)
[build] shadow.build.node/configure (node.clj:45)
[build] shadow.build.targets.node-script/configure (node_script.clj:37)
The solution is to pass the option --config-merge to shadow-cljs and override
both :ns-regexp and :output-to because CLI args override options from env vars
in shadow-cljs.
Document some of our current testing practices in hopes of helping reduce
friction in PRs and communication in general. In theory, nothing in the text
should be a surprise because these are things we have been discussing over many
months (some things for almost 1.5 years) and are already present in the code.
- Update tests
- Omit from page while sending a token in home page
- Hide send and bridge option for not owned tokens
- Fix subscription to return accounts owning an asset
Sorts keys (non-recursively) in translations/en.json. The solution uses
the prettier plugin https://github.com/Gudahtt/prettier-plugin-sort-json.
We only format translations/en.json because it’s the only file we need to
manually change.
- Dependency added: prettier-plugin-sort-json version 4.0.0
- Dependency upgraded: prettier, from version 2.8.8 to 3.3.3.
Potentially a solution to https://github.com/status-im/status-mobile/issues/15706
- [x] Fixes swipe button on Android and iOS.
- [x] Performance: we now subscribe only to the minimum from each community.
This could be the reason the AC would lag as described in the parent
issue.
- [x] Performance: was able to use flex and removed swipe button height
calculation that was using `onLayout` and was causing a re-render.
- [x] Performance: reduced the initial number of items to render in the flatlist
from 10 to 7.
- [x] Performance: delay rendering the heavy list of notification components.
See in the video below how slow it is to open the AC with just 6
notifications and that the opening animation is never displayed. And then
check the improved version with the artificial delay provided by
`rn/delay-render`. By opening the AC first and animating, this gives the
user something to look for, and hopefully a few milliseconds more to think
the app is not stuck, which will be preciously used to render
notifications.
We refactor all views in the AC to:
- [x] Follow our newest standards with React hooks.
- [x] Removed prop-drilling by creating a separate React context to store the
current swipeable item (because we need to call `.close` on a `Gesture
Swipeable` instance whenever a new swipeable opens.
* Fix schema for networks in context-tags
* Fix wallet-activity component overflowing the activity tab
* Improve robustness of the activity tab fetching mechanism
* Handle `wallet-activity-filtering-entries-updated` signal
* Improve processing of data received for the activity tab
This commit add a confirmation for centralized metrics.
It is added in 3 places:
1) Onboarding -> Create new account
2) Onboarding -> Sync profile
3) On the accounts view if the user is upgrading
To test 1 & 2, you should just be able to do that on a newly installed
device.
To test 3, you will have to upgrade from a PR without this feature that
has at least an account. It should show the confirmation modal until you
either click on Not now or Share usage data.
The modal should also be added in settings, but I will do that as a
separate PR.
This commit removes the non-operable accounts in the "Addresses for permission" and "Airdrop address" selections while joining a community
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Tabs "Open" and "Gated" in Discover communities screen were never implemented in
the code, they are dummies. We now hide them under the flag
config/show-not-implemented-features?, which is disabled for users.
Fixes: https://github.com/status-im/status-mobile/issues/20682
To avoid regressions and be quicker, I opted to not remove the "All" tab even
though is the only one shown now, as that would require me to check non-trivial
code due to the fact that the tabs can be sticky as the user scrolls.
Revamps the legacy "Privacy and security" screen to meet the new designs.
Fixes https://github.com/status-im/status-mobile/issues/20618
- Removed setting "Set dApp access permissions" (won't be used anymore).
- Removed setting "Display collectibles" (won't be used anymore).
- Removed setting "Chat link previews setting" (they already had no effect).
- Removed "Reset password setting". This setting is already supported in Profile
> Password > Change password.
- Removed "Delete my profile". Profile deletion is already supported in the
login screen.
- Moved setting "Show your profile picture" to Profile > Privacy and security.
- Moved setting "Accept new chats from <XYZ>" to "Allow new contact requests" in
Profile > Messages. Now it's just a toggle.
- Moved Block screenshots (Android) or Hide Preview (iOS) which are both
accessible in Profile > Privacy and security.
- Created function utils.navigation/navigate-back, but I only used this in 2
namespaces to keep the PR under scope.
Areas that may be impacted: old legacy settings that are still relevant.
This commit:
- update the connection string validation method to use the method from status-go
- updates the error message if the user tries to scan a different key pair QR for importing a missing key pair
- updates the text for exporting an individual key pair
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
https://github.com/status-im/status-go/compare/6e056348...1ef2434b
This commit adds support for pushing centralized metrics to mixpanel.
It uses an interceptor and only picks a few selected events to push
through.
In order to test:
1) Create an account in the app
2) Go to Settings->Privacy
3) Enable metrics
You should now see the events on the mixpanel dashboard (login with your
status-im account for access).
Only some example events are tracked, they are just for testing
* chore: remove identifiers screens so users are navigated straight to enable notifications during onboarding
* removed navigated back button from enable notification screen
* fix top margin
* e2e: updated sign in flow
* make lint-fix
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
* Add variant unknown variant for collectibles
* Fix blank collectibles listed
* Improve `expanded-collectible` animation and add support for different gradient-colors
* Make :wallet/collectible-details-owner subscription depend on `wallet/accounts` instead of `:wallet`
* Make collectible tabs component more flexible
* Remove now unused subscriptions
* Improve UX navigation to collectible detail page
* Pass the current collectible gradient-color when a collectible is pressed
* Fix tests
This change attempts to only to override the default `pointer-events` behaviour for the `quo/keypair` component when the component uses the `selector` action. Now when the `quo/keypair` component is rendered with a selector, only the top-level view of the component will be pressable. And when the `quo/keypair` component is rendered without a selector it will allow for the children of the component to be pressable too.
Removes code integrating with the signal wakuv2.peerstats. The response from
this signal is rather large and it can sometimes happen in short bursts.
- Fixes https://github.com/status-im/status-mobile/issues/20176
We were using it to keep track of the number of peers in real-time. We now only
fetch the peer count in two instances (synchronously inside rn/use-mount):
- When the user opens the legacy screen Settings > Advanced > Peers stats.
- When the user opens the visibility status dropdown in Settings, because the
peers count will be used when the user chooses "Offline" (status inactive).
Note: we don't send anymore the peers count when the user shakes the phone. We
assume this value is already available in :peers-summary (which will be shared
by the user).
status-go still publishes the signal, we just ignore it to remove the
performance overhead of transforming to cljs and mutating the app-db (thus
interrupting the queue from more important stuff).
Steps to test:
- Verify user can see peers count in Settings > Advanced > Peers stats
- Verify changing the visibility status of user Alice in the Settings screen
leads to the desired effect to the other party seeing Alice's visibility
status.
This commit adds syncing saved addresses across paired devices whenever a new saved address is added or an existing one is edited or removed.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Fixes the scroll behavior in a community channel member list. The problem was
that the code wasn't enforcing the correct height.
Partially solves https://github.com/status-im/status-mobile/issues/20514
Steps to test: Long press on any community channel and press View channel
members and details. The user should be able to correctly scroll throughout the
entire list of members.
BigNumber instances are not comparable to other data types, except numbers and
strings (supported directly by the library). This commit makes = safe on
bignumbers (no exceptions should be thrown), even when comparing a bignumber
with a nil value.
There's another important benefit from having a custom comparator: performance,
because re-frame will be able to correctly compare data with bignumbers and thus
reuse cached subscriptions and also Reagent will be able to skip processing when
props are equal.
The IComparable interface was not changed. Similarly to core CLJS data types,
sorting heterogeneous collections throws (ignore nils).
```clojure
;; This throws with message: cannot compare 10 to foo
(sort ["foo" 10])
```
We could make sorting work with heterogeneous collections, but then we would
need to extend many core data types to play nice with BigNumber and that sounds
more like a hack, and it's also not a problem we have nowadays.
* Fix color of non-selected keypairs
* Fix pressable area in keypairs
* Make validation more robust
* Make confirm button always pressable
* Fix wrong sentence in errors
* Solve account creation by fixing a memoized callback
* Improve logging
* tweak: use support blur colors for action drawer icons
* tweak: support blur colors for drawer-top icon
* tweak: support blur colors for account list inside keypair component
* tweak: use blur colors for missing-keypair bottom sheet actions
* feat: remove feature-flag for key-pairs and accounts inside wallet settings
* fix: ensure key-pairs-and-accounts settings are visible
* tweak: display key-pair rename screen as full-screen modal
* tweak: animate key-pair scanning screen as modal
* fix: do not allow user to rename key-pair to an existing key-pair name
* fix: ensure we visualise the validation error for key-pair name that is too long
* fix: ensure we can see the recovery-phrase suggestions when testnet-mode is active
* tweak: show recovery-phrase errors when keyboard is hidden
* fix: ensure we do not re-hash password
* fix: ensure we call `on-close` function when successfully handling biometrics auth
* fix: ensure we clear error states when editing the recovery-phrase input
* fix: use blur styles for standard authentication password input
* chore: add labels for qr validation
* tweak: handle display import-qr error and allow for re-scanning
* tweak: update blur background for all bottom-sheets
* chore: add feature-flag for import-all key-pairs button for missing key-pairs
* tidy: remove unused variable
* fix: ensure layout for android is correct when entering seed-phrase in testnet-mode
* fix: ensure we return the updated db when updating the db with backup key-pair
* tweak: coerce nil to empty string
* tweak: change validation error message for short key-pair name
* tweak: hide the options icon for the default key-pair inside key-pairs and accounts settings
* chore(wallet): make recent tab fullscreen for empty view
* chore(wallet): hide advanced button on send page
* chore(wallet): hide estimated fees when no routes found
* chore(wallet): update emoji icon to edit
* chore(wallet): update key pair placeholder to use keypair example
* chore(shell): feature flag saved address option in scanner
After migrating from v1 to v2, some user names may be too long to fit in some
devices in the "Settings > Edit Profile > Name" setting. The solution was to
truncate in the UI the name to the max valid length in v2, which is 20
characters.
Other small improvements:
- Don't use entire Clojure maps as the :key in React. This is known to be slow
because it's expensive for Clojure to generally transform a data structure
into its string representation.
- Don't find the last item of a list using last and an equality between two
maps. This will force each iteration to call last, which in turn will iterate
over the entire list of items (we can think of the Clojure lazy seq as a
linked list). Instead, we now cache the index outside the loop and do a number
comparison.
- Don't pass entire props to style functions when not needed because
destructuring has a cost. I wouldn't personally worry about this 99% of the
time, but when there's only argument like in this PR where we were passing a
single blur? argument, it's preferable to not use a map.
Solves a problem encountered in unit tests, where instances of BigNumber (used
in the utils.money namespace) can't be compared with = or match?
If you try the following code you will always get false because they're
different instances in memory.
(= (money/bignumber 0) (money/bignumber 0))
We now extend BigNumber (from lib bignumber.js) so that their instances are
comparable (e.g. necessary to sort) and understand equality.
We also extend BigNumber to work with the match? directive. For example, this is
the output of comparing a nested map containing bignumbers (colored in the
terminal):
(match? {:a {:b {:c (money/bignumber 42)}}}
{:a {:b {:c (money/bignumber 43)}}})
FAIL in (equivalence-test) (at cljs$test$run_block (status-mobile/target/test/cljs-runtime/cljs.test.js:366:13)
expected: (match? {:a {:b {:c (money/bignumber 42)}}} {:a {:b {:c (money/bignumber 43)}}})
actual: {:a
{:b {:c (mismatch (expected "42") (actual "43"))}}}
This commit refactors the keypairs data in app-db to save them by indexed by key-uid which will help to fetch, update, and delete easily instead of using filter and some methods every time we need to perform those operations.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* Add background color to collectibles
* Fix header text animation in unsupported collectibles
* Fix header height and animation color
* Fix image not showing when it's `nil` or `""`
* Add missing border to expanded-collectible
* Fix extra `0` in create/edit account title input
* Validate name, color and emoji in account creation/edition screen
* Refactor sub
* Fix button disabled condition and placeholder
This is a byproduct of the investigation on issue
https://github.com/status-im/status-mobile/issues/20203, more specifically, to
double-check if v1 users have their display names shown correctly.
Closes https://github.com/status-im/status-mobile/issues/20203
This is the scenario used to reproduce the bugs this PR is solving:
1. Alice creates an account in v1 (branch release/1.20.x).
2. Alice had 1 friend to chat with, Carol.
3. Alice sends and receives at least one message from Carol.
4. Alice installs the new app (latest develop branch suffices).
5. Alice login and try to edit her profile, but her 3-word name is not displayed
in the Settings > Edit Profile screen, nor in the Settings > Edit profile >
Name input field.
6. Alice also opens her chat with Carol, but her name appears as a public key
instead of her 3-word name she identifies herself with.
The solution presented here is to just fallback to Alice's 3-word name (name
field in the profile/contact app-db instance).
Areas that may be impacted
- Edit profile name.
- Name displayed in chats from the perspective of the sender who migrated from
v1.
Steps to test
In order to test this PR, it's necessary to migrate from v1 to v2 using two
separate builds. The v1 build can be obtained in PR
https://github.com/status-im/status-mobile/pull/20123. v2 build can be any one
from develop from today, for example.
This commit:
- fixes addresses are displayed without truncation
- fixes network preference (advanced icon) shown for ENS
- fixes navigation on adding a new saved address
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Introduces a new macro deftest-event to facilitate writing tests for event
handlers. Motivation came from the _problem of having to always extract event
handlers as vars in order to test them_.
Although the implementation of deftest-sub and deftest-event are similar,
deftest-sub is critically important because it guarantees changes in one
subscription can be caught by tests from all other related subscriptions in the
graph (reference: PR https://github.com/status-im/status-mobile/pull/14472).
This is not the case for the new deftest-event macro. deftest-event is
essentially a way of make testing events less ceremonial by not requiring event
handlers to be extracted to vars. But there are a few other small benefits:
- The macro uses re-frame and "finds" the event handler by computing the
interceptor chain (except :do-fx), so in a way, the tests are covering a bit
more ground.
- Slightly easier way to find event tests in the repo since you can just find
references to deftest-event.
- Possibly slightly easier to maintain by devs because now event tests and sub
tests are written in a similar fashion.
- Less code diff. Whether an event has a test or not, there's no var to
add/remove.
- The dispatch function provided by the macro makes reading the tests easier
over time. For example, when we read subscription tests, the Act section of
the test is always the same (rf/sub [sub-name]). Similarly for events, the
Act section is always (dispatch [event-id arg1 arg2]).
- Makes the re-frame code look more idiomatic because it's more common to define
handlers as anonymous functions.
Downside: deftest-sub and deftest-event are relatively complicated macros.
Note: The test suite runs just as fast and clj-kondo can lint code within the
macro just as well.
Before:
```clojure
(deftest process-account-from-signal-test
(testing "process account from signal"
(let [cofx {:db {:wallet {:accounts {}}}}
effects (events/process-account-from-signal cofx [raw-account])
expected-effects {:db {:wallet {:accounts {address account}}}
:fx [[:dispatch [:wallet/get-wallet-token-for-account address]]
[:dispatch
[:wallet/request-new-collectibles-for-account-from-signal address]]
[:dispatch [:wallet/check-recent-history-for-account address]]]}]
(is (match? expected-effects effects)))))
```
After
```clojure
(h/deftest-event :wallet/process-account-from-signal
[event-id dispatch]
(let [expected-effects
{:db {:wallet {:accounts {address account}}}
:fx [[:dispatch [:wallet/get-wallet-token-for-account address]]
[:dispatch [:wallet/request-new-collectibles-for-account-from-signal address]]
[:dispatch [:wallet/check-recent-history-for-account address]]]}]
(reset! rf-db/app-db {:wallet {:accounts {}}})
(is (match? expected-effects (dispatch [event-id raw-account])))))
```
* Fix "Bridge to" screen not showing
* Fix "Unkown flow" alert in bridge flow
* Fix warnings in transaction confirmation page
* Fix missing images and strings while bridging in transaction confirmation page
* Fix stale data shown for an instant in the suggested routes component
* Add support for bridge flow started in the wallet home screen
* Fix fetch-activities event
* Add missing circle in wallet-activity component
* Move activity calculations to subscription and fix wrong data
* Fetch activities when visiting an account
Fixes the slow login when users have joined large communities, such as the
Status one. Related status-go PR
https://github.com/status-im/status-go/pull/5229.
What we mean by "slow" is that the user was getting stuck on the login screen
for almost 20s in some devices (even on iOS things were bad). And this entire
process was happening in status-go, hence most changes come from there.
By "login" we mean the process to authenticate and initialize vital data in
status-go. Setting up message filters can be slow with large communities, and
that's exactly this part we moved out of the login phase in status-go. This step
now happens implicitly when the client calls wakuext_startMessenger.
In a way, the solution makes sense because setting up filters isn't essential
for the user to access other parts of the app, such as the Wallet, Settings,
Profile, and Activity Center.
How can we magically eliminate the login delay? In reality, the time we used to
spent during login, blocking the user, still happens, but it happens in the
background and after the user is redirected to the home screen. This also means
that, until the filters are established, all chats are still in their "loading
skeleton state".
In terms of UX, this is probably fine as long as it doesn't take too long for
this setup to finish in status-go. In the future, we have room to further
optimize how filters are set up in status-go.
Fixes https://github.com/status-im/status-mobile/issues/20059
This commit:
- adds a feature to process backed-up wallet data on account recovery (without the necessity to re-login)
- refactors keypair data store functions
- refactors wallet event to support calling for single account/address
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit:
- adds a feature to add network preferences for saved addresses while saving
- updates the network preferences in "Share save address" to show the address and color of the saved address
- fixes the screen qualifier for the settings screen when navigating to wallet settings
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* fix: ensure missing key pairs scroll with list
* chore: add translations for labels
* chore: promisify validate-mnemonic native module function
* chore: add events for validating seed-phrases and making key-pairs fully operable with seed-phrase
* chore: define re-usable effects for validate-mnemonic and make-seed-phrase-keypair-fully-operable and import-keypair-by-seedphrase
* tweak: refactor error handling logic when importing key-pair by seed-phrase
* tweak: handle vectors and functions between events and effects
* tweak: refactor recover-phrase form to support custom title, children, and navigation icon
* tweak: add support for accessing input-ref in recovery-phrase form
* tweak: always mask seed-phrase when passing to render-controls
* feature: add initial screen for importing key-pair with seed phrase
* tweak: conditionally render keypair context tag inside recovery-phrase form
* tidy: rename on-input-ref to ref
* tidy: remove unused property
* tidy: refactor to use case expression
* tidy: format
* 🔳 QR on success not being called
- IDK why, trying things out
* 🙃 Stupid of me
- My handler was not being called because I wrote the code in a
different QR scanner
* ✅ Approval screen taking shape
* 🧹 Lint fix
* 🎛️ Wallet connect session screen shows up
- Hard coded the first account
- The data item component doesn't support networks or accounts yet
- The quo category component cannot show a data-item yet
- Connected accept and decline button
* 🧰 Fix review issues
* 🔨 Fix lint
* 🔧 Rename event and move dispatch
* 🔧 Fix lint
* 🎏 Add ff for wc scanner
- Bring back missing event
* 🔳 QR on success not being called
- IDK why, trying things out
* 🙃 Stupid of me
- My handler was not being called because I wrote the code in a
different QR scanner
* ✅ Approval screen taking shape
* 🧹 Lint fix
* 🎛️ Wallet connect session screen shows up
- Hard coded the first account
- The data item component doesn't support networks or accounts yet
- The quo category component cannot show a data-item yet
- Connected accept and decline button
* 🧰 Fix review issues
* 🔨 Fix lint
* 🔧 Rename event and move dispatch
* 🔧 Fix lint
Adds a new linter to verify all test names are consistent with one common
convention we already follow, for the most part, which is:
> Test vars (test names) should be suffixed with -test.
There's no strong reason for following this convention, although it's quite
common in Clojure, but in any case, these are the reasons I can think of and
remember:
- Naming consistency. Sometimes tests start with "test-", others end with "test"
and others don't prefix/suffix at all.
- The suffix removes potential conflicts with core Clojure functions.
- The suffix mostly eliminates potential conflicts with other vars in the test
namespace. Example: you can declare a function delete and have a test named
delete-test.
- For someone using Emacs imenu feature, it helps differentiate which vars are
tests and which are just local functions supporting the tests.
This commit updates the navigation event `:open-modal` in Wallet Settings to `:navigate-to-within-stack` for slide-in/slide-out screen transitions.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit:
- Adds feature flag for saved addresses
- Displays the list of saved addresses in wallet settings
- Shows address options on tap of any saved address
- Adds the ability to remove saved address
- Refactors saved addresses data structure in app-db
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* Connected dApps screen with empty state and list of dApps and the ability to disconnect dapps
* Fix
* Smaller style fix
---------
Co-authored-by: Lungu Cristian <lungucristian95@gmail.com>
* add NSAppleMusicUsageDescription permission to play audio messages to the right plist file
* add NSAppleMusicUsageDescription update public string message
---------
Co-authored-by: Parvesh Monu <parvesh.dhullmonu@gmail.com>
With go 1.20 its necessary to pass `lresolv` flag when building c-archives and `netgo` for networking on MacOS.
This was the primary reason why integration tests were failing.
ref
-> https://github.com/golang/go/issues/58416
-> https://github.com/golang/go/issues/58159
This commit adds those flags to the derivation which builds status-go-library for integration tests and fixes the missing symbol crash.
https://github.com/status-im/status-go/compare/92ef58d4...c7397e18
Previously used to stage upgrades of `eth.prod`.
Now `eth.prod` fleet is in maintenance mode and no upgrades are expected.
And yes, I'm removing tests that reference old Waku v1 fleets because
I don't see a point in them.
Signed-off-by: Jakub Sokołowski <jakub@status.im>
Fixes a warning thrown by re-frame in the event
:wallet/blockchain-status-changed.
Here's a simplified example that generates the same warning.
```clojure
(rf/reg-event-fx :user/fx-warning
(fn []
{:fx nil}))
;; Prints warning re-frame: ":fx" effect expects a seq, but was given null
(rf/dispatch [:user/fx-warning])
```
- Debounce peer stats signals by 1s because they may happen 30 times during
login and the payload conversion using js->clj is not cheap.
- Change the order of case macro checks: put more frequent signals at the top.
- Better format code
* fix: no routes found error when disabling chains and current amount exceeds new max amount
* fix: disable button on routes loading
* add no-routes-found component
---------
Co-authored-by: Brian Sztamfater <brian@status.im>
* fix: ensure the keypairs use blur for their theme
* fix: allow for container-style to be passed to standard-title component
* chore: add translations for for missing-keypair labels
* tweak: add support for missing-keypair type for drawer-top component
* tweak: add initial implementation of missing-keypair list-item component
* tweak: add initial implementation of missing-keypairs list component
* feature: add initial implementation of displaying missing key-pairs
* tweak: update missing-keypair list-item to support blur, light, and dark mode
* chore: add missing-keypair list-item preview
* chore: add missing-keypairs preview
* chore: decode :operable key in account to be keyword
* tweak: remove unneeded keyword decoding
* tweak: update drawer-top component to use keypair and stored field
* tidy: revert change for checking for not default-keypair in actions menu
* Add subscription to get preferred networks given an address
* Fix preselected networks in receive screen
* Improve subscription
* Fix preselected networks in share screen
* Update test to include oeth
While investigating why login is slow
https://github.com/status-im/status-mobile/issues/20059 and when testing with
accounts with communities, I noticed we are logging huge payloads because they
include data URLs. This makes debugging the app harder.
Therefore, we will now log the full event payload only at the trace level, and
at the debug level we only log the event type.
This problem was first described by ulisesmac.
This commit enables proguard minification and adds exceptions in proguard rules for the following classes :
- org.bouncycastle
- im.status.ethereum.BuildConfig
- com.reactnativenavigation
This commit also upgrades okhttp gradle dependency to 4.11.0
This should shave off a few MBs in the android bundle.
Change the implementation of component previews to support receiving either
state/set-state from use-state or a Reagent atom, thus allowing us to gradually
change preview namespaces to use hooks instead of having to refactor all at once
in a gigantic PR.
All types of preview fields were tested, including multi-select.
Only the components counter.step and selectors.react previews were adapted
to use-state.
## Summary
This commit fixes broken `make test-watch-for-repl` on MacOS.
We make sure that default target is passed for this make command because the `node-pre-gyp` requires `python 3.1`
This commit also adds the missing `yarn.lock` file which was missed in this PR https://github.com/status-im/status-mobile/pull/20026
This commit also modifies the `_test_clojure` command a bit to swap out its dependence on `status-go-library` since we do that on `yarn install` anyways.
status: ready
fixes: #20041
feat: implement wallet send flow edge case when selected token is not supported on receiver's preferred networks
Signed-off-by: Brian Sztamfater <brian@status.im>
* fix: resolve warning about using subscription inside a lazy seq
* fix: avoid schema error when we do not have a port for the media server
* chore: add feature-flag for network-settings inside wallet-settings
* chore: add testnet mode label
* chore: add testnet labels for bottom-sheets
* chore: add label for changing testnet mode
* feature: add initial network-settings screen to wallet-settings
* test: add test for sub
* tidy: rename function to hide-bottom-sheet
* tweak: add info-box for testnet mode
* tidy: testnet-mode bottom-sheet
* tidy: use reduce-kv instead of map & into
* tidy: use noun naming convention for function creating options for settings
* tweak: add support for displaying testnet-mode status on each wallet network
* chore: add translation for labels referencing testnet-mode and sepolia
## Summary
As reported by @ajayesivan and @seanstrom
`Xcode 15.2` worked in their local environments and I then tried to use that version and found no issues with it.
This commit adds `Xcode 15.2` to versions list in Xcode Wrapper `nix` derivation.
## Testing notes
not needed.
## Platforms
- iOS
status: ready
Upgrade re-frame to latest, from v1.3.0 (released on
2022-08-27) to latest v1.4.3 (released on 2024-01-25).
Important changes:
- [Added] re-frame.alpha namespace, for testing proposed features (see flows
(https://github.com/day8/re-frame/discussions/795) and polymorphic
subscriptions https://github.com/day8/re-frame/issues/680#issuecomment-1676487563).
- [Added] dispatch-sync now emits a :sync trace to indicate when it has
finished.
- Re-frame upgraded its dependency on Reagent to latest v1.2.0.
- There are two breaking changes in v1.4.0, but they don't affect us because we
don't use interceptors path and unwrap.
Due to some dark magic by Xcode `make run-ios` breaks with :
```
An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=60):
Unable to boot the Simulator.
launchd failed to respond.
Underlying error (domain=com.apple.SimLaunchHostService.RequestError, code=4):
Failed to start launchd_sim: could not bind to session, launchd_sim may have
crashed or quit responding
make: *** [run-ios] Error 60
```
Sometimes rebooting the laptop worked but a more reliable solution was to clean up simulator caches.
This commit adds the a make command : `make ios-simulator-cache-clean` which cleans up the Simulator caches.
And now `make run-ios` starts working again.
This commit also modifies `make clean` to clean android & iOS
`make clean` should not break for you.
Not needed since this change is local development environment related.
- iOS
- macOS
status: ready
Reverts the preloading mechanism from PR
https://github.com/status-im/status-mobile/pull/19927, which introduced a
problem I couldn't find any satisfactory solution. The namespaces user and
dev.user were being preloaded by shadow-cljs, but the problem is that preloading
will fail if those namespaces don't exist in your file system.
I couldn't find any solution to conditionally preload namespaces via shadow-cljs
and ClojureScript unfortunately doesn't support conditional requires like
Clojure.
At least we got to keep the code to not lint them and the whole idea to start to
commit dev-only code inside src/dev/.
Preload the user namespace (src/user.cljs and src/dev/user.cljs) for the mobile
target and for dev-only purposes. The files are git-ignored.
Just a reminder that you'll be responsible for making sure your user namespace
is correct. If it's broken in any way (e.g. calling non-existent code) the app
will crash at initialization (dev-only environment obviously).
Why? When the app initializes, it loads namespaces that were required at least
once. If you create a user namespace, it won't be automatically required for
you. And if you, like some Clojure devs, like to use the user namespace as
your safe heaven for experimentation and dev-only utilities, you'll need to
remember to evaluate the namespace at least once.
This is tedious and many times I forgot to do so and the app crashed because the
compiler didn't know where the symbols were coming from.
This commit rewrites utils.re-frame/delay-render to use hooks. The new
implementation renders significantly better than what we have today, at least on
Android.
Why not hiccup instead of a function call to delay-render? The Settings screen
is rendered slightly faster if I use delay-render as a function call instead of
hiccup. My only guess is that this is just less work to be done by Reagent,
since the wrapper function is not creating a wrapper component with its own
lifecycle.
The full analysis can be found here, but it's copied for future reference:
--------------------------------------------------------------------------------
Based on my analysis of individual frames being rendered and having investigated
3 different scenarios:
1. Scenario 1: No delay whatsoever, i.e. not using `delay-render`.
2. Scenario 2: Using `delay-render` like in `develop`, that is, a form-2
component with a local Reagent atom.
3. Scenario 3: Using `delay-render` as in this PR, using hooks.
All 3 scenarios open the Settings screen with all rendered views in the same
amount of time. In terms of raw performance, they are completely identical. The
absolute value doesn't matter, but in my recordings, on average, 10 frames of
video after the first press on the user's profile image.
So how can it be that on Android the new solution is visibly smoother? It's all
about latency and our brains are very picky about it.
Scenario 1 - Not using delay-render: the user notices a longer delay after
pressing on the profile image because all components in the Settings screen are
mounted in one go. This gives the impression to the user of being slower. In
slower Android devices, we've seen a user even press twice because the Settings
screen was taking longer to open. On newer Android devices this is not much of a
problem. There's another problem in `Scenario 1`, on Android, with too many
elements and/or too many heavy elements being mounted, the opening animation is
sometimes completely cut off or very clunky (a similar problem can happen while
opening the Activity Center).
Scenario 2 - Use delay-render with a form-2 component: The Settings items are
always rendered after the opening animation completes. Our brains perceive this
as a slight delay because we can see the empty gray background for 1-3 frames.
This is quite noticeable on my physical Android device, even with a prod build.
Scenario 3 - Use delay-render as a hook: the optimal solution from the user's
perspective, Settings items sometimes can be rendered before the animation
completes. I say sometimes because other times the items are rendered only 1
frame before or right when the animation completes, which would be almost the
same as Scenario 2.
What the hooks solution gave us is a little bit of the Scenario 1 and
Scenario 2 in one package, and because the Settings items can be sometimes
rendered before the opening animation completes, our brains see that as being
faster.
In future performance investigations, we might want to focus on manipulating
latency more aggressively to see where that leads us.
fixes#19802
Contract Tests are failing with missing symbols runtime error on `MacOS` after `golang` version was upgraded to 1.20
A simple hack fix such a case is to use `go 1.19` only to build the status-go library that is used specifically for these integration tests.
Its ugly but it works and unblocks devs from running tests locally.
- execute `make test-contract` on MacOS and it should not fail.
not needed since this impacts only the integration tests.
- macOS
status: ready
Some devs reported invalid schemas in the develop branch during app
initialization. We knew this could happen when Malli was first
introduced, but we wanted to play safe in the beginning due to the
overall inexperience of the team with Malli.
This commit removes all guardrails on instrumented vars, i.e. during app
initialization the app will crash on any invalid schema. A reminder that
instrumentation only take effect when js/goog.DEBUG is true.
## Summary
any `yarn` command calls `node-pre-gyp rebuild` which prints out this warning message :
```
make[1]: Entering directory '/Users/siddarthkumar/code/experiments/status-mobile/build'
CXX(target) Release/obj.target/status_nodejs_addon/modules/react-native-status/nodejs/status.o
../modules/react-native-status/nodejs/status.cpp:1153:11: warning: ignoring return value of function
declared with 'warn_unused_result' attribute [-Wunused-result]
func->Call(isolate->GetCurrentContext(), v8::Null(isolate), argc, argv);
^~~~ ~~~~~~~~~~~~~
1 warning generated.
```
This happens due to return value of `func->Call` here :
https://github.com/status-im/status-mobile/blob/52a6f5c17d3055a98a403505a354cde135b1966f/modules/react-native-status/nodejs/status.cpp#L1153
not being used.
Which is not a huge red flag but produces a warning which is not nice when looking at logs and can be sometimes misleading for other devs.
This commit fixes that warning by assigning return value of that function and checking if its empty or not.
## Testing notes
not needed since this impacts only the integration tests.
## Platforms
- macOS
status: ready
* chore: add "key pairs and accounts" label
* chore: feature flag wallet-settings
* tidy: extact navigate-back function into static defn
* wip: add initial keypairs and accounts list view to wallet settings
* tweak: wire-up initial action menu for key-pairs
* tidy: extract key-pair container styles into style namespace
* tweak: fix dark background for key-pair and account settings
* tidy: refactor on-press handler for key-pair options
* fix: move feature-flag usage to settings screen instead of settings items definition
* tidy: remove unneeded key props
* tidy: clean up de-structuring and passing of props
* tidy: use keep with when expressions instead of filter and map expressions
* tidy: rename the wallet-settings feature flag
* tweak: rename and add feature-flags for mobile wallet settings
* tweak: use scrollview for feature-flags and add spacing between feature-flag groups
* tweak: adjust the way feature-flags are displayed in groups
* tidy: remove unneeded prop
* tidy: use bottom-inset for padding key-pair and accounts list
* tidy: change `filterv` to `filter`
* tidy: use subscription for building account-props
* tidy: use subscription to build the entire keypair-account
* tweak: use key-pair type to determine default key-pair
* tidy: rename component to settings-category-view
* tidy: use assoc instead of merge
* tidy: extract function from subscription
* test: add tests for formatting key-pairs and accounts for wallet settings
* tweak: use `match?` instead of `=`
* tidy: use `swap!` without anonymous functions
This PR upgrades clj-kondo (our Clojure linter) from v2023-09-07 to
v2024-03-13, so ~6 months of development updates.
You can check out the changes starting at
https://github.com/clj-kondo/clj-kondo/blob/master/CHANGELOG.md#20231020.
Nothing terribly useful to us this time, but as usual, clj-kondo can catch
more problems and more reliably than before.
This commit improves in-app feature flags to persist what is currently only
stored in a Reagent atom by using RN Async Storage
https://reactnative.dev/docs/asyncstorage. This should make them more convenient
to use, which is a good thing overall for developers.
Additionally, there's now a top-right button in screen Settings > Feature Flags
that will reset the flags to the initial values obtained from environment
variables.
These in-app feature flags are exclusively available in debug builds in
Settings > Feature Flags, and only visible when flag ENABLE_QUO_PREVIEW is
enabled. There's no impact whatsoever in prod builds. A reminder that they are
not meant to be used by users (yet).
It's worth noting that RN has deprecated Async Storage and now recommends other
community solutions, but for a dev-only feature, I think it's fine.
Detailed explanation:
The schema failure is due to utils.image-server/get-initials-avatar-uri being
called with a nil profile customization color right after the user confirms
logout.
Right after logging out, the subscription :profile/profile-with-image is
recomputed. One of its signal inputs is :profile/profile. Right after logout,
the output of sub :profile/profile is always nil (this is correct, nobody is
logged in). This means that the sub :profile/profile-with-image will try to
calculate the multiaccount URI by passing a nil profile. This is wasteful
computation and is also the cause of the schema for
utils.image-server/get-initials-avatar-uri to fail, because it expects the
profile's customization-color to be present.
* tweak: refactor image-uri helpers
* fix: add `:primary` as customization color for profile images
primary is being used as the default color for accounts that were migrated without customization color to a default color
fixes#19770
Devs are often unaware of the supported Xcode version and often run into weird build issues with either higher or lower Xcode versions.
We currently only support Xcode 15.1
This change ensures we convey that change when devs execute `make run-ios`
This commit also attempts to ensure `xcodebuild` command is wrapped with `XcodeWrapper`.
- iOS
- macOS
status: ready
On brand new ubuntu setup `make run-android` fails with :
```
Task :app:mergeExtDexDebug
FAILURE: Build failed with an exception.
What went wrong:
Execution failed for task ':react-native-reanimated:configureCMakeDebug[arm64-v8a]'.
[CXX1300] CMake '3.22.1' was not found in SDK, PATH, or by cmake.dir property.
BUILD FAILED in 2m 30s
673 actionable tasks: 673 executed
error: cannot unlink '/tmp/tmp-status-mobile-a094d218d/
nix-build-status-mobile-build-debug-android.drv-0/tmp.moQHI1tJWE/caches/8.4': Directory not empty
removed '/tmp/tmp-status-mobile-a094d218d/tmp.RpThXxcRZR'
make: *** [Makefile:278: run-android] Error 1
```
we do have `cmake` present in Android Shell and yet the build process is not able to find it.
This commit makes sure that we explicitly provide that reference.
* tweak: add support for displaying channel qr codes with quo/share-qr-code component
* chore: add channel qr-code example to quo preview components
* tweak: integrate common/qr-code component for sharing community channel qr-code
* tweak: add support for showing community channel avatar in share-qr-code header
* tweak: hide wallet tabs for channel qr-code
* tweak: integrate share handler for community channel qr-code
* fix: prevent accidentally rendering the community channel qr-code with nil while closing the share-qr modal
* tidy: extract navigate-back dispatch function
* tidy: use styles namespace
* tidy: use case statement to determine which qr-code components have a header
* tweak: check for share-qr-types that support headers
* tidy: extract navigate-back into static function
* fix: prevent community qr-code from glitching when closing modal
* fix: ensure :communities/share-community-url-with-data is defined
* fix: ensure we show the share-sheet when pressing the community share-action
* fix: ensure we use the correct share-sheet title when sharing a community
* e2e: updated inviting contacts to community flow
* tweak: remove extra url message when sharing community url on android
* tweak: remove extra url message when sharing community channel url on android
* tidy: remove redundant event handler for sharing community url
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
This commit enables `Fabric` and `Hermes` for `iOS` and in my initial tests the app seemed to behave well.
We can't do this for Android yet because the blur view implementation is not ported to `Fabric` properly.
needed for https://github.com/status-im/status-mobile/issues/18138
In this commit we nuke the unmaintained library `react-native-mail` and move over the logic to our native modules.
This also helps to fix `make nix-update-gradle` which would fail because of that library.
- Android
- iOS
status: ready
* 💚 Enable wallet on header navigation
- Add settings screen
- Add save address settings screen
- Need to add empty state next
* 🥡 Added empty state for saved-addresses
- Fixed the standard title quo component
- It's flex behaviour was buggy, and it's not being used anywhere
* 🧂PR fixes and lint
- Use callback everywhere
* 🗞️ Move wallet settings to wallet namespace
This PR completely removes support for editing shared addresses while a user's
request to join is pending approval.
The reason for the removal is that, in status-go, the control node that will
process the message
protobuf.ApplicationMetadataMessage_COMMUNITY_EDIT_SHARED_ADDRESSES verifies
the user is already a member of the community, but a user waiting for approval
to join is not yet a member. Removing this check doesn't sound like a good idea
and we want to avoid bugs/complications for the next release. The feature isn't
working anyway, so the purpose of this PR is also to cleanup code that doesn't
work and won't be re-done anytime soon.
We log the entire signal data when it arrives from status-go in the native
layer, where our Clojure logging mechanism is unavailable. Sometimes, the
developer may not want that much noise during development, e.g. when managing
integration or contract tests.
This commit removes the native calls to log signals and adds a timbre
(log/debug ...) call in the event handler :signals/signal-received. We know
timbre will elide log calls at compile time given the minimum log level set,
therefore, we don't need to worry about performance because we will log signals
at the debug level only.
## Summary
This commit upgrades `react-native-permissions` library to latest version 4.1.5
needed for : https://github.com/status-im/status-mobile/issues/18138
## Review & Test notes
Please test permissions related flows on onboarding, selecting images, notifications and any other areas you can think of.
## Platforms
- iOS
- Android
status: ready
This commit fixes the display of the correct keypair name (where the account is generated from) in the About tab.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
Currently paths looks wrong like this:
```
.../ios/ios/logs/StatusIm-StatusIm.log
```
Which is wrong because it means CI does not save the file.
Signed-off-by: Jakub Sokołowski <jakub@status.im>
## Summary
This commit swaps the fork of @react-native-community/blur with a patch and upgrades the library to latest version of 4.4.0
needed for : https://github.com/status-im/status-mobile/issues/18138
## Review & Test notes
Verify if blur stuff still works.
## Platforms
- iOS
- Android
status: ready
* tweak: hide the identity verification tab inside the activity center
* tweak: hide not-implemented features by default in dev
* fix: remove nil tabs from when rendering quo tabs
## Summary
This commit also points to status-go branch where we have upgraded go to 1.20
Related status-go PR -> https://github.com/status-im/status-go/pull/5027
### Testing notes
Please test everything, specially the store node stuff.
#### Platforms
- Android
- iOS
status: ready
## Summary
This commit swaps the fork of react-native-mail with a patch.
needed for : https://github.com/status-im/status-mobile/issues/18138
## Review & Test notes
Verify if mailing logs still works.
## Platforms
- iOS
- Android
status: ready
This commit swaps the fork of @react-native-camera-roll/camera-roll with a patch and upgrades this library to the latest version.
needed for : https://github.com/status-im/status-mobile/issues/18138
Verify if camera album related features still work.
- iOS
status: ready
* tweak: allow for env variable to configure undo-time-limit when deleting a message in chat
* tweak: add env variable undo timeout for deleting messages for everyone
* tweak: extend timeout duration for undo toast when deleting a message for a user
* tweak: extend timeout duration for undo toast when deleting a message for everyone
Sometimes an integration test was throwing "TypeError: Cannot read properties of
null (reading 'call')" because a value was nil in the app-db, but the code was
treating it as if it was always a map and could be called as a function.
The original code wasn't respecting Clojure's nil punning good practices. In
Clojure, it's often recommended to not use dynamic data as functions, because if
they're nil, in CLJS we'll get an exception and as usual in CLJS, the stacktrace
won't be very readable.
We should prefer contains? or get, which will work just fine with nil values,
and only use data as a function if it's static, e.g. a map defined in a def.
* tweak: implement the share button inside the profile settings page
* chore: define event and effect handler for opening share sheet
* tidy: refactor share buttons to use open-share event
* tidy: refactor open-share effect to use react-native-share bindings
* tidy: remove unused code for old bindings to react share sheet
* tidy: move effects.share/open definition to navigation effects
* tweak: ensure navigation effects are loaded
* tidy: use open-share dispatch in ui
* tidy: use open-share dispatch instead of calling open function directly
* tidy: refactor react-native.share/open to only receive options and return promise
* tidy: refactor open-share effect to receive map of content and handlers
* tidy: replace strings with keywords
* tweak: always handle failure case when opening share-sheet
* tweak: rename :content to :options
* fix: conditionally call on-error
* tweak: add extra information when logging error from attempting to share-sheet
Desktop QA tests also use Pytest packages and their versions are
different, so we can't install them globally, it needs to be done per
build using `WORKSPACE_TMP` as destination.
Signed-off-by: Jakub Sokołowski <jakub@status.im>
## Summary
A patch is added to `gomobile` on status-go side to fix building with Xcode 15.
related status go PR -> https://github.com/status-im/status-go/pull/5035
## Platforms
- Android
- iOS
status: ready
parent issue: https://github.com/status-im/status-mobile/issues/18310
This commit converts the following `Java` files to `Kotlin` :
- modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusModule.java
- modules/react-native-status/android/src/main/java/im/status/ethereum/module/StatusPackage.java
- modules/react-native-status/android/src/main/java/im/status/ethereum/module/Utils.java
This commit converts Java code to `Kotlin` which involves a helper function that is used to execute `statusgo` methods.
It may impact everything or nothing.
- Android
* Refactor :wallet/tokens-filtered sub to filter only when `query` is provided
* Make token input logo pressable and make components more flexible
* Change asset-list's rn/scroll-view -> gesture/scroll-view to make it scrollable on bottom-sheets
* Add bottom-sheet to edit the token to send
fixes#19449
In this commit we change the way patches are applied.
We no longer have to write patches in a patch phase like we used to, we can now place individual changes in a patch file inside the `patches` directory and they will be automatically applied.
Because of this change we can get rid of forks and instead have those changes in patch files.
To generate a patch file this make command can be used `make patch-file`
This will open an interactive shell which will allow you to specify which file you want to patch and then wait till you make those changes and generate a patch for it.
```
make patch-file
Configuring Nix shell for target 'default'...
Enter the path of the file to patch: ./node_modules/is-glob/index.js
File to patch: ./node_modules/is-glob/index.js
Temporary directory created: /tmp/tmp-status-mobile-40bc588fa/tmp.xrXarXoTPZ
Original file copied to temporary directory.
Please make the necessary changes to the file: ./node_modules/is-glob/index.js
Press any key when you are done with the changes...
Generating patch file...
Patch file created at /Users/siddarthkumar/code/status-im/PR/status-mobile/patches/index.js.patch
Info: Please execute 'make run-clojure' to test if the patch file works as expected.
```
- Android
- iOS
* tweak: truncate text inside contact request notifications to be a max of two lines
* tweak: truncate text inside the activity-center contact-requests to be a max of two lines
This commit:
(UI changes)
- adds the feature to filter assets (tokens and collectibles) and balances based on networks
- fixes network color for eth not shown on the multichain address (e.g. Account Options bottom sheet)
- fixes blur type in the confirm button in the network preferences sheet
- fixes the User ability to unselect all networks in the network preferences sheet
- fixes account address and color not shown in network-preferences sheet on Shell > Share Multichain address
- added STT token image
(Non-UI changes)
- Refactors the functions used for balance calculations and network details
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* tweak: re-structure layout of quo/author component to use flex-baseline for alignment
* tweak: use top on container to balance layout while using top to offset primary-name
* tidy: remove margin-bottom: 0
* tweak: add comments and fix layout glitch
* tweak: augment bottom-sheet component to be aware of keyboard height
* tweak: augment quo input component to allow for styling of the input, the input container, and container
* tweak: augment contact request input to grow until max screen size is reached for the bottom-sheet
* tweak: handle blurring the contact request input when keyboard is dismissed on android
* tidy: refactor with the use-keyboard hook
* tweak: use on-layout for measuring sheet max-height
* tweak: remove use of input-style and flex-direction column
* tidy: remove unused requires
* tidy: use container-style prop
* tidy: fix formatting
* fix: default layout-height to window-height
* 🖇️ Connect getSavedAddresses
- The save button will not show if the address is already saved
* ⚒️ Fix PR reviews
* 🗑️ Remove code from wallet events ns
* updated community rules to display the actual rules
* updated scroll behaviours on community rules inside the bottom sheet
* added standard rules for communities without rules
* fix android scroll issues
iOS nightly builds were failing with :
```
07:54:15 The following build commands failed:
07:54:15 PhaseScriptExecution Run\ Script /Users/jenkins/Library/Developer/Xcode/DerivedData/
StatusIm-hasrsefeolwghadhqaakilqvfzrk/Build/Intermediates.noindex/ArchiveIntermediates/StatusIm/
IntermediateBuildFilesPath/StatusIm.build/Release-iphoneos/StatusIm.build/
Script-E3914A731DF919ED00EBB515.sh (in target 'StatusIm' from project 'StatusIm')
07:54:15 (1 failure)
07:54:15 [05:24:14]: Exit status: 65
.
.
.
07:54:15 [05:24:14]: ▸ /bin/sh -c /Users/jenkins/Library/Developer/Xcode/DerivedData/
StatusIm-hasrsefeolwghadhqaakilqvfzrk/Build/Intermediates.noindex/ArchiveIntermediates/StatusIm/
IntermediateBuildFilesPath/StatusIm.build/Release-iphoneos/StatusIm.build/
Script-E3914A731DF919ED00EBB515.sh
07:54:15 [05:24:14]: ▸ /Users/jenkins/Library/Developer/Xcode/DerivedData/
StatusIm-hasrsefeolwghadhqaakilqvfzrk/Build/Intermediates.noindex/ArchiveIntermediates/StatusIm/
IntermediateBuildFilesPath/StatusIm.build/Release-iphoneos/StatusIm.build/
Script-E3914A731DF919ED00EBB515.sh: line 2: ./logs/set_xcode_version.log: No such file or directory
07:54:15 [05:24:14]: ▸ Command PhaseScriptExecution failed with a nonzero exit code
```
In this commit the path to the logfile `set_xcode_version.log` has been fixed.
* feat: added undo action to mute chat toast
* fix: removed trailing spaces from toast text
* test: integration test for mute-chat undo
* fix: added space before newline to toast messages text
* feat: add undo to community mute toast
* fix: integration tests
* fix: integration tests
---------
Co-authored-by: Volodymyr <52490791+VolodLytvynenko@users.noreply.github.com>
## Summary
This PR removes all of the unused `npm` libraries and their corresponding `gradle`/`cocoapods` dependencies.
The list of npm dependencies removed are :
- `@babel/preset-typescript`
- `create-react-class`
- `react-native-haptic-feedback`
- `react-native-image-viewing`
- `react-native-languages`
- `react-native-randombytes`
- `react-syntax-highlighter`
- `rn-emoji-keyboard`
- `tdigest`
This saves us some bytes in the bundle size.
## Platforms
- Android
- iOS
## Summary
PR made to add logs to help determine why integration test hangs on logout.
## Testing notes
No need for testing since we only ever add logs in test code here.
related to: #19256
* fix: allow name-container inside message content to shrink so secondary-name can be truncated
* fix: responsively truncate contact profile secondary-name
* fix: ensure home chat-list-items use full available width in layout
* fix: adjust layout of home chat-list-item shrinking with notification counter
* fix: adjust layout of home chat-list-item when displaying notification counter
* tidy: simplify alignment
* tweak: adjust alignment of quo/author component for different text sizes
* tidy: extract styles and reformat notification-layout
* Fix key extractions in re-frame/reg-sub
* Add `:width` to share-qr-code
By adding this prop, `on-layout` can be skipped and the component can be properly rendered faster.
* Use `share-qr-code`'s `:width` prop in share profile shell
* Fix share qr code for wallet addresses
* Fix the height of the component being cropped.
* Fix the bottom dots not being accurately highlighted.
* Fix the blink when the component is mounted
The killing of metro terminal upset a few people and this PR fixes that.
## Summary
Modify build step to check if metro is running already.
If so then we do not attempt to start metro again.
If not then we start metro after building android / iOS.
## Review notes
* case 1
- `make run-clojure`
- `make run-metro`
- `make run-android` or `make run-ios` should work the way it did before.
* case 2
- `make run-clojure`
- `make run-android` or `make run-ios` should also work.
## Platforms
- Android
- iOS
fixes#18311
This PR upgrades `nixpkgs` to latest release version of 23-11
ref -> https://github.com/NixOS/nixpkgs/releases/tag/23.11
- `Gradle` from `8.0.1` -> `8.4`
- `Git` from `2.40.1` -> `2.42.0`
- `Curl` from `8.0.1` -> `8.4.0`
- `OpenSSL` from `3.0.8` -> `3.0.13`
- `NodeJS` from `18.16.0` -> `18.19.1`
- `Python` from `3.10.11` -> `3.10.13`
- `Clojure` from `1.11.1.1273` -> `1.11.1.1413`
- and some more stuff
- `xcbeautify` , this was added in 23-11 ->https://github.com/NixOS/nixpkgs/pull/289446
- `idb-companion`, this was also added in 23-11 -> https://github.com/NixOS/nixpkgs/pull/296440
* Fix linear-gradient breaking when `customization-color` is unknown
* Fix exception when scanning an address due to non-existing navigation route
* Dispatches universal QR code scanner on share address modal
This commit enables Test Networks in Dev, E2E and PR Builds by default and disables in Release/Nightly Builds.
This enables in create account or restore account flow. If you upgrade the app from the old build with an existing profile, it will use the last saved (test networks enabled) state of that profile.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* Remove 'Community admins will review your request' text from community overview screen
* Use the button label 'Request to join' for all communities
* e2e: updated test
---------
Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
* feat: replaced old emoji component with new one
* feat: replaced old sticker component with the new one
* ref: pass only url to sticker
* fix: renamed ns and passing only needed props
* fix: destructuring instead of select-keys & assoc
* fix: formatting
* fix: ensure contact-request notifications are displayed as notifications
* fix: provide context-theme for notification sub-components
* fix: adjust font weight for notification text
* fix: adjust alignment of user-avatar inside a notification with a header and body
* tidy: rename override-theme to theme inside notifications
* fix: update notifications component to use `user` prop instead of `avatar`
* tweak: adapt notification to avatar to vertically center when only displaying header or title
* fix: use title font-size for contact-request-accepted notification
* fix: allow for custom avatar component prop in quo notification component
* fix: ensure we use the correct font-weight for contact-request-accepted notification
* tidy: fix formatting
fixes#19081
## Summary
This PR aims to improve android build step for debug variants by ensuring we do not rebuild the android derivation for any change made to `clojurescript` code.
We also do the following things :
- enable `JVM` parallel garbage collector.
- get rid of `dexOptions` which was deprecated in `gradle 8`.
- add additional `parallel` flag to `gradle` to speed up builds.
## Review notes
- `make run-clojure`
- `make run-android`
- ctrl + C on android terminal and edit any `cljs` file
- `make run-android` ( should build almost instantly )
fixes#18291
## Summary
Changes worth mentioning are :
- More hacks/patches
- Force app to use `Java 17` everywhere to compile `kotlin,java`
- `gems` were upgraded after a long time
- `aapt2` was bumped to `8.1.1`
- `metro` is now at `0.80.4`
- `xcbeautify` was bumped to `1.4.0`
- `@react-native-community/clipboard` lib was replaced with `@react-native-clipboard/clipboard`
- `react-native-dialogs` lib was upgraded to `1.1.2`
- `react-native-gesture-handler` lib was upgraded to `2.14.1`
- `react-native-navigation` was upgraded to `7.37.2`
## Platforms
- Android
- iOS
* Fix schema error
* Implement feature to edit shared addresses
* fix: show tokens when sharing all future addresses toggled
* fix: eligibility not checked when toggling all addresses
* Revert "fix: show tokens when sharing all future addresses toggled"
This reverts commit 8443a3432e.
* fix: don't fetch balances on mount if toggled share all
---------
Co-authored-by: Cristian Lungu <lungucristian95@gmail.com>
* fix: change nav buttons to :photo when scrolled to top
Signed-off-by: Cristian Lungu <lungucristian95@gmail.com>
* fix: renamed to use-messages-scrolled-to-threshold
Signed-off-by: Cristian Lungu <lungucristian95@gmail.com>
* fix: nav buttons are shown without flicker on mount
Signed-off-by: Cristian Lungu <lungucristian95@gmail.com>
---------
Signed-off-by: Cristian Lungu <lungucristian95@gmail.com>
* 🚧 Save address UI reached teenage years
* 🚧 Save point
* 📑 Use bottom sheet effect properly
* 📝 Can't get title input to work
* 🎨 Design in place
* 🗺️ Add address box and trigger for network prefs
* 💅 Pixel perfect UI and hide save address button
* ⏫ Upgrade to screen tech
* 🤚 Undo changes made to color picker during rebase
* 🧰 Fix screens I broke during rebase
* ❄️ Fix json indent
* ⚒️ Implement PR feedback
* ⛏️ Remove unrelated translations
* 🖼️ Remove container to fix margin issue
- Use rn/use-callback instead of defined functions
* 😶🌫️ Hide save address button
* 🔨 Fix lint
* ❌ Remove bottom sheet screen updates
* ❌ Remove empty lines between elements
* chore: add english translation for contact-request-review
* feature: integrate contact-request-review button
* tweak: render the locked-input label when provided
* tweak: allow locked-input component to grow in height
* chore: add english translation for "ignore"
* feature: add subscription for retrieving a pending contact-request by contact-id
* feature: integrate initial contact request review flow
* tweak: display send-message button on contact profile when contact-request-state is mutual
* tidy: refactor button-wrapper view to be button container-styles
* feature: add toast for accepting contact request
* Add memoized versions to convert keys
* Add placeholder for SVG collectibles due to errors and warnings
* Add events to request collectibles per account
* Update subs to list all accounts collectibles evenly
* Update collectibles tab to pull new data when end is reached
* Use memoized version of key transformation
This commit adds the feature to handle blockchain status signals from the status-go and shows a toast if the provider for any of the blockchains is down.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* chore: add send-contact-request to i18n translations
* feature: add send-contact-request button on contact profile
* chore: prop drill full-name and profile-picture for the context-tag inside drawer-top component
* chore: add english translation for contact-request-message-prompt text
* feature: integrate contact-request sheet
* tidy: subscribe to contact data inside contact-request view
* tidy: wrap callback with use-callback
* tweak: hide contact-request button if contact-request is already sent
This commit removes the POKT (Grove) URL for Sepolia and Goerli as POKT dropped support.
Now, we will use Infura RPC for Sepolia and Goerli as default.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
* tweak: allow for optional message to be sent when making a contact request
* chore: migrate contact-request event handler from `rf/defn` to `rf/reg-event-fx`
* test: add tests for sending a contact request
* chore: make it easier to test on-success and on-error behaviour after sending a contact request
* tidy: use reframe fx for declaring json-rpc/call
* tidy: remove unused success event handler for send a contact request
This commit brings numerous improvements to integration tests. The next step
will be to apply the same improvements to contract tests.
Fixes https://github.com/status-im/status-mobile/issues/18676
Improvements:
- Setting up the application and logged account per test is now done with an
async test fixture, which is a very idiomatic way to solve this problem. No
need anymore to write macros to wrap day8.re-frame.test/wait-for. The macros
in test-helpers.integration will be removed once we apply the same
improvements to contract tests.
- Integration test timeouts can be controlled per test, with a configurable,
global default (60s).
- Now the integration test suite will fail-fast by default, i.e. a test failure
short-circuits the entire suite immediately. This option can be overridden on
a test-by-test basis. This improvement is very useful when investigating
failures because the error will be shown on the spot, with no need to search
backwards across lots of logs.
- Noisy messages from re-frame can be silenced with a test fixture. We can
silence even more in the future if we remove the hardcoded printf call from
C++ on every signal and control it with Clojure. We can disable most logs as
well with the more direct (status-im.common.log/setup "ERROR") at the top of
tests.integration-test.core. We can make verbosity even more convenient to
control, but I think this should be designed outside this PR.
- Removed dependency on lib day8.re-frame/test for integration tests (see
detailed explanation below).
- Each call to (our) wait-for can customize the timeout to process re-frame
event IDs passed to it.
- Syntax is now flat, instead of being nested on every call to wait-for. You
can now compose other async operations anywhere in a test.
Notes:
- promesa.core/do is essential in the integration test suite, as it makes sync &
async operations play nice with each other without the developer having to
promisify anything manually.
- There are lots of logs related to async storage ("unexpected token u in JSON at
position..."). This isn't fixed yet.
Are we not going to use day8.re-frame.test?
We don't need this library in integration tests and we won't need it in contract
tests. Whether it will be useful after we remove it from integration and
contract tests is yet to be seen (probably not).
A few reasons:
- The async model of promises is well understood and battle tested. The one
devised in the lib is poorly understood and rigid.
- There's basically no way to correctly integrate other async operations in the
test, unless they can be fully controlled via re-frame events. For instance,
how would you control timeouts? How would you retry in a test? How would
forcefully delay an operation by a few seconds? These things are useful (to me
at least) when developing integration/contract tests.
- Every call to day8.re-frame.test/wait-for forces you to nest code one more
level. Code readability suffers from that choice.
- Have you ever looked up the implementation of wait-for? It's quite convoluted.
One could say the source code is not that important, but many times I had to
look it up because I couldn't understand the async model they built with their
macro approach. The de facto primitive in JS for asynchronicity is promises,
and we fully leverage it in this PR.
- The lib has an interesting macro run-test-sync, but we have no usage for it. I
used it in status-mobile for a while. At one point, all event unit tests for
the Activity Center used it (e.g. commit
08fb0de7b0), but I replaced them with the
simpler pure function style.
* chore: add community color subscription
* fix: use configured chat color for chat ui and fallback to community color
* test: ensure community-color subscription returns the community color
* tidy: use resolve-color function instead of custom-color function
* revise: rename community-color to customization-color and default non-community channel color to turquoise
fixes#19012
### Summary
The legacy wallet code was removed here -> https://github.com/status-im/status-mobile/pull/18749
as part of that purge we also cleaned up re-frame subscriptions for wallet push notifications.
Since the new wallet is under active development we would not need this toggle in settings just yet.
This commit fixes the app crashing on settings UI.
## Platforms
- Android
- iOS
fixes#18915
In this PR https://github.com/status-im/status-mobile/pull/18900 we added a `logs` folder in the root directory and it was discovered that we also have an `ios/logs` folder which the CI uses to generates logs during build time.
Its more consistent if we move those logs to the log folder in the root of the repo.
This commit fixes that and updates leftover usages.
chore: create profile-picture schema with profile-picture-fn field
fix: update context-tag schema to allow for profile-picture-fn
tidy: move profile-picture schema into the common schema namespaces
tidy: revise docs for user-avatar-internal component to mainly warn about `profile-picture-fn` usage
tidy: rename `profile-picture` schema to `profile-picture-source`
tidy: use profile-picture-source schema in user-avatar schema
* Use page-top in bridge screen
* Use page-top in bridge-to screen
* Use page-top in add-address-to-watch screen
* Use page-top in backup-recovery-phrase screen
* Use page-top in check-your-backup screen
* Add support for title right options to page-top
* Use page-top in check-your-backup screen
* Use page-top in send-to screen
* Use page-top in select-asset screen
* Use page-top in :wallet-share-address screen
* Deprecate text-combinations
fixes#16310
We used to reply on `react-native cli` and would pass a `--device` flag to deploy the debug variant of `iOS` app on connected `iPhone`.
`react-native cli` under the hood uses `ios-deploy` library to achieve this functionality.
This showed many weird issues, specifically in locating connected devices and failures at build step with ambiguous error messages.
This commit fixes it by using our custom script `run-ios-devices.sh` which does not rely on `ios-deploy`.
We use `libimobiledevice` to identify `UDID` of a connected `iPhone`.
We use `xcrun devicectl device install app` and `xcrun devicectl device process launch` to install and launch the app.
This works well with `Xcode 15` and `iOS 17.x`.
We can now remove `ios-deploy` from `iOS` shell and `nix` overlay.
We also set up a logs folder and add a Readme.
## Review notes
- connect your iPhone to your Laptop via a cable
- `make run-clojure`
- `make run-ios-device`
(note: no need to pass device name now)
## Platforms
- iOS
## Summary
Improve iOS Simulator selection via `make run-ios` command.
Currently : `make run-ios SIMULATOR="iPhone SE (3rd generation)"` would fail because of our scripts inability to deal with this kind of a pattern.
This commit fixes that and makes this script more robust by storing output of `xcrun simctl list devices` in a json file `ios_simulators_list.json` and then using `jq` to properly get `UDIDs` of those simulators.
This script will now also prompt you to download a simulator image if you do not already have it.
The file `ios_simulators_list.json` will also help in future debugging when we want to check a quick summary of iOS simulator status of devs in the future.
We also append `-verbose` to `xcodebuild` for debug `iOS` builds, this helps debugging.
## Review notes
try such options -> `make run-ios SIMULATOR="iPhone SE (3rd generation)"`
## Platform
- iOS
`make run-android` would fail for connected Android devices because the android device was not able to talk to metro bundler.
This was discovered by @J-Son89
This was easily fixed by reverse tcping port 8081.
## Review notes
connect Android device by USB or Wifi
- `make run-clojure`
- `make run-android`
status app must run without any errors on the connected Android device.
we also replace during install on emulator.
otherwise on old emulators `make run-android` fails with :
```
adb: failed to install ./result/app-debug.apk: Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install im.status.ethereum.debug without first uninstalling.]
```
fixes#18888
## Summary
`make run-android` was sometimes flaky because we used to send metro to background via `nohup` and then bring it back to foreground after we read metro logs.
Now we do not send metro to background. We first wait for a successful build.
we then install the app on the simulator. After this is done we give command to sleep until metro server has started, Once metro server has started we open the installed app.
In this workflow the command to open the installed app goes in background and metro stays in foreground.
The new workflow should now be less flaky.
## Review notes
`make run-clojure`
`make run-android` OR `make run-ios` should just work
#### Platforms
- Android
- iOS
Resolved the scrolling issue pertaining to community rules. Additionally, will ensure compatibility with iOS devices lacking safe-area-view in the follow-up.
Fixes
- 'Confirm changes' button unexpected enabled state
- The Confirm button remains enabled even after deselecting all addresses when the user has watch-only wallet accounts.
- Disable the Confirm button when the user deselects the accounts with the token required to join.
- Use community color for address checkbox
* QR scanner
* More options for QR
* Router fixes
* Updates for `on-qr-code-scanned`
* Update for communities
* Updates
* Scan profile path
* More fixes
* Last fixes for scanning
* Fixes
* Fixes
* Fixes
* Test fixes
* Fixes
* Updated Utils.m
* Test fix
This commit fixes the broken wallet account emoji when syncing devices by adding a sanitization method for the wallet account emoji. The desktop can handle both variants (raw emoji and img tag); this PR adds the same for mobile.
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
fixes#18836
## Summary
While introducing https://github.com/status-im/status-mobile/pull/18784 I missed out on adding an install step to `run-ios.sh` script.
`make run-ios` would work fine for simulators that already have the app installed but would fail for new emulators.
@flexsurfer discovered this problem.
This commit fixes that by adding an install step to the script.
## Review notes
- `make run-clojure`
- `make run-ios`
should just work.
## Platforms
- iOS
fixes#18831
We update the nix derivation to build android by passing `hermesEnabled` flag which checks the environment variable and if the environment variable is not set we default `hermesEnabled` to `true`.
This ensures that `hermes` is disabled for debug builds and enabled for release builds.
In this commit we also
- rename `nix/mobile/android/release.nix` → `nix/mobile/android/build.nix` since that nix file no longer generates release only builds.
- cleanup 2 other env vars and use the `gradle` project format
- replace `BUILD_NUMBER` with `verisonCode` for consistency
- replace `androidGradleOpts ` with `buildUrl `
- bump `status-jenkins-lib` to v1.8.7
After upgrading `react-native` to `0.72.5` we frequently started seeing the _red screen of death_ on both `Android` and `iOS` simulators right after the app was built and installed.
This used to happen because our workflow required us to do the following :
- `make run-clojure`
- `make run-metro`
- `make run-ios` OR `make run-android`
The problem with this approach was after `metro` was started the `iOS`, `Android` build step would change the files that `metro` couldn't handle and hence metro would go out of sync.
The quick fix back then was to restart `metro` terminal and to open the app again from the simulator.
This was however not a good DX.
This commit fixes that.
We no longer rely on `react-native` cli to generate and deploy debug builds on simulators. We take control of the process via our own script. The new workflow introduced in this commit will first build the app, then install the app on the simulators and then start metro terminal. When `metro` is successfully running the script will then open the app.
The new workflow now is :
- `make run-clojure`
- `make run-ios` OR `make run-android`
https://github.com/status-im/status-go/compare/c15f9e73...1ea2bd99
This PR reduces the amount of rendering in community overview.
It limits the amount of data is passed to components to the necessary,
and it creates functions on component initialization so that they won't
cause a re-render.
Performance of the header are very noticeably better on my local
environment, though on nightly builds is less noticeable.
It also removes data from `communities/communities id` as that cause a
re-render of any component subscribed to it.
https://github.com/status-im/status-go/compare/c15f9e73...b7b7660a
There were a few issues with the permission screen:
1) Wrong permission was displayed when able to join
2) If not able to join, we were showing both admin/member permissions
3) Trailing zeros in token amount
We are moving location of symlinks for build derivations for `gcroots`
from `/nix/var/nix/gcroots/per-user` to `.nix-gcroots` in the repo to
avoid errors like this caused by profile migration in `2.14` release:
```
error: creating directory '/nix/var/nix/gcroots/per-user/joe': Permission denied
```
For more details see: https://github.com/NixOS/nix/issues/8564
To upgrade without using `make nix-purge` use `make nix-upgrade`.
Related infra change:
https://github.com/status-im/infra-ci/commit/37c6ce47
Signed-off-by: Jakub Sokołowski <jakub@status.im>
* 🚟 Add schema batch 2
* ⏬ Add maybe and optionals
* 🧑⚖️ Make theme a required prop
* 🍙 Fix misplaced square brackets that broke spec
* 🎨 Assume default theme and fix tests
- Fixes#18734
* ⬆️ Update schema and rebase
* 🧪 Update tests
* 🆙 Update progress bar value to be string or int
* 🔩 Tighten schema
* register and basic imports for collectible tag component
* implement variations and design for collectible tag component
* Refined based on review feedback and implemented schema enhancements
Show "relevant tokens" in account selection step. Related status-go PR
https://github.com/status-im/status-go/pull/4631.
- Balances are fetched on the account selection screen. Assuming most users
won't care about selecting addresses, this eliminates unnecessary calls to get
balances, at the expense of refetching them every time the component is
mounted. I think for now this is acceptable.
- Relevant tokens is a terminology used in Figma, but more specifically, it
means "balances for all assets that have at least one Token Criteria
associated, and for a given address". Or, as I tried to give it a more
distinct name, "permissioned balances".
Areas that may be impacted: None because all affected code is behind a disabled
feature flag.
Fixes https://github.com/status-im/status-mobile/issues/18126
The purpose of this commit is to allow running `maestro` automations to enhance productivity by **automating** mundane tasks.
Other flows like
- send contact request
- sync devices
- join a community
etc will be a part of follow ups.
In this commit we provide a `make` command to run a very common task like creating account & login :
`make auto-login`
We also allow another `make` command to run any other custom flow :
`make auto-custom FLOW="maestro/create-account-or-login.yaml"`
A `maestro` folder has been added with 3 `yaml` files which are very easy to understand
ref : https://maestro.mobile.dev/api-reference/commands
We recently disabled `hermes` for debug builds here -> https://github.com/status-im/status-mobile/pull/18675
A side effect of that is when we run `make nix-update-gradle` the `hermes` pom gets removed from `deps.list`
This pom is necessary for release builds.
Currently that pom exists in `deps.list` but someone may accidentally remove it when running `make nix-update-gradle`
In this commit we remove the conditional implementation of `hermes` or `jsc` in `build.gradle`
This ensures that the `hermes` pom we need during release builds is not removed from `deps.list`.
I also ran `make nix-update-gradle` just to be sure.
I compared the apk in this commit to other PRs and the size increased by 2MB.
A small price to pay so that the team can run Malli locally without crashing their debug app frequently.
I've added a FIXME comment in the code for when we want to cut back on bundle size later.
* Fix exception thrown re-frame don't have the subs' value ready
* Make Token malli schema more lenient
* Make `get-standard-crypto-format` able to work with `nil` values
* Refactor token screen to move subscriptions inside render function
* Make token input reactive to on-swap
* Remove `crypto-currency?` atom to properly react to state changes
* Fix component tests
fixes#18493
We enabled `hermes` for android in the `react-native` upgrade to `0.72.5`
Although things seemed fine but developers were seeing frequent crashes in their local environment.
After some investigation the crashes were traced to max native call stack depth in `hermes` engine.
Disabling `hermes` for local debug builds helps fix that issue.
This commit disables `hermes` by default with the help of a exporting an environment variable in the `make run-android` command.
It is annoying that this also modifies `android/gradle.properties` so we keep `hermesEnabled` as `false` there as well.
We also enable `hermes` when generating release builds so that we can take advantage of `hermes` engine in release builds.
We also add a log to print whether `hermes` is enabled or not. I think its helpful to have this so that we know whether `hermes` is enabled or not.
Token requirements that are not role permissions (currently channel permissions)
should not be displayed to the user while they see permissions to join.
Admin, Master, Owner or minted token permissions are not membership permissions,
but they still should be displayed so the user understand the role they will
assume after joining.
Co-authored-by: Icaro Motta <icaro.ldm@gmail.com>
- Hack fix
- Scroll on press breaks something with FlatList
- Which causes some items to not render
- Could be related to scroll view inside scroll view
- But fixing this bug by compromising the UX a tiny bit
* feat: added react-native-biometrics dependency
* chore: added malli schema to auth
* fix: malli schema
* feat: using react-native-biometrics
* fix: removed biometry not-enrolled error supression
* feat: added check for enabled biometric
* fix: biometrics error handling on ios
* chore: remove touch-id library
* chore: cleanup
* removed proj.list dep
* fix: gradle get_projects regex edge-case
Handles cases when the gradle project has a description, which shows up when running `gradle projects` as (`react-native-biometrics` - react-native-biometrics), breaking `make nix-update-gradle`. Here we're just adjusting the regex to ignore everything in the line after the closing (`).
* build: ran "make nix-update-gradle"
* chore: comment typo
* chore: replaced old lib in test mocks
* fix: addressed review comments
* fix: using event for standard-auth biometrics
* ref: using ex-cause for biometric error codes
* fix: removed promesa changes
* fix: auth slide biometric success not triggered
* feat: get revealed accounts for joined community
Signed-off-by: yqrashawn <namy.19@gmail.com>
* Show token requirements only when membership permissions are present.
- Add membership-permissions? to community state.
* feat: show highest permission role in overview and req to join
Signed-off-by: yqrashawn <namy.19@gmail.com>
* feat: get highest perm role in addr for perms
Signed-off-by: yqrashawn <namy.19@gmail.com>
* feat: ui for address for perm drawer
* test: unit test and spec for handle-community
Signed-off-by: yqrashawn <namy.19@gmail.com>
* fix: for #18581
* refactor: based on PR feedback
- move <-rpc to data store
- `role->translation-key`
- highest-permission-role-text -> highest-role-text
- filter out nils for handle community test
Signed-off-by: yqrashawn <namy.19@gmail.com>
---------
Signed-off-by: yqrashawn <namy.19@gmail.com>
Co-authored-by: Ajay Sivan <ajayesivan@gmail.com>
## Summary
I introduced `xcbeautify` inside `make run-ios` command which would sometimes skip spitting crucial logs to the terminal.
In cases where the `react-native-cli` would prompt me of a port being used by another metro server, those prompts would also never reach me since they were piped into `xcbeautify` essentially giving me the impression that `make run-ios` is still doing something when it was actually hung.
This is how `react-native-community/cli` looks for `xcbeautify` ->
https://github.com/react-native-community/cli/blob/main/packages/cli-platform-apple/src/commands/buildCommand/buildProject.ts#L139
This commit fixes the problem by exporting an env variable making `react-native-cli` aware that we have `xcbeautify` installed and this way we now get the full log output we were used to.
This commit adds
- RPC call for start wallet which will signal the client to refresh data (tokens, prices, ...etc) every 10 minutes
- Refreshes tokens and prices every 10 minutes on receiving the "wallet-tick-reload" signal
---------
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
This commit:
- Adds a filter to remove tokens with no name or symbol to prevent displaying tokens with no data
- Adds a fallback value (zero) for token fiat value calculation and to prevent crash on token price calculation
---------
Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
| Please embed Image/Video here of the before and after. | Please embed Image/Video here of the before and after. | Please embed Image/Video here of the before and after. |
status: ready <!-- Can be ready or wip -->
<!-- Uncomment this section for status-go upgrade/dogfooding pull requests
- Specify potentially impacted user flows in _Areas that may be impacted*.
- Ensure that _Steps to test_ is filled in.
### Risk
Described potential risks and worst case scenarios.
Tick **one**:
- [ ] Low risk: 2 devs MUST perform testing as specified above and attach their results as comments to this PR **before** merging.
- [ ] High risk: QA team MUST perform additional testing in the specified affected areas **before** merging.
Check out our [coding guidelines](doc/new-guidelines.md).
- **Community Management**
Metcalfe's law states that the value of a network is proportional to the square of the number of connected users of the system - without community Status is meaningless. We're looking to create a positive, fun environment to explore new ideas, experiment and grow the Status community. Building a community takes a lot of work but the people you'll meet and the long-lasting relationships you form will be well worth it, check out our [Mission and Community Principles](https://status.im/about)
Metcalfe's law states that the value of a network is proportional to the square of the number of connected users of the system - without community Status is meaningless. We're looking to create a positive, fun environment to explore new ideas, experiment and grow the Status community. Building a community takes a lot of work but the people you'll meet and the long-lasting relationships you form will be well worth it, check out our [Mission and Community Principles](https://status.app/manifesto)
- **Specification / Documentation**
John Dewey once said, "Education is not preparation for life; education is life *itself* ". Developers and Designers need guidance and it all starts from documentation and specifications. Our software is only as good as its documentation, check out our [docs](doc/) and see how you can improve what we have.
@@ -53,10 +53,10 @@ Status is a visual interface to make permanent changes on the Blockchain, it han
- **Evangelism**
Help us spread the word! Tell a friend *right now*, in fact, tell **everyone** - yell from a mountain if you have to, every person counts! If you've got a great story to tell or have some interesting way you've spread the word about Status let us know about it in our [chat](https://join.status.im/chat/public/status)
## Give me Binaries!
You can get our Beta builds for both Android and iOS on our [website](https://status.im), through our [nightly builds](https://status.im/nightly/), or by [building it yourself](https://status.im/technical/build_status/).
You can get our Beta builds for both Android and iOS on our [website](https://status.app), through our [nightly builds](https://status.im/nightly/), or by [building it yourself](doc/starting-guide.md).
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.