Compare commits

..
Author SHA1 Message Date
Andrea Maria Piana 4e8bb68f38 Bump version to 1.12.2 2021-03-26 08:22:10 +01:00
Samuel Hawksby-Robinson 43fc6498c2 Updated status-go version from branch to tag 2021-03-25 16:24:37 +00:00
Samuel Hawksby-Robinson 0b5dd66a1a Updated status-go version 2021-03-25 16:09:28 +00:00
Samuel Hawksby-Robinson a71dc8406e Removed region from on-ramping we don't want it (#11920)
* Removed region from on-ramping we don't want it

* Updated status-go version

* revert change make ios made to keycard version

* Updated status-go version

* Updated status-go version

* Updated status-go version
2021-03-25 16:07:04 +00:00
Andrea Maria Piana cd7b7ec9b7 Bump version to 1.12.1 2021-03-15 18:50:22 +01:00
Andrea Maria Piana 8be6bbba46 Upgrade status-go 2021-03-15 15:55:41 +01:00
andrey 1771c3cf59 [#11843] "Enable all" is disabled after relogin for 3 or 4 chat link previews after relogin
Signed-off-by: andrey <motor4ik@gmail.com>
(cherry picked from commit 51178ab1b2)
2021-03-08 15:22:36 +01:00
andrey 6fa6f65c8e [#11822] Own status updates are shown on other user profiles 2021-03-08 08:52:31 +01:00
Andrea Maria Piana 3d802115b9 Dont push notification if chat is not in cofx
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-08 08:52:13 +01:00
Roman Volosovskyi 1632880302 [#11842] Fix login after restoring existing account 2021-03-05 15:01:48 +02:00
Roman Volosovskyi b3f34d1ea9 [#11823] Fix balances fetching on recovering kk multiacc 2021-03-04 18:45:12 +02:00
andrey 0491038b09 1.12.0 2021-03-03 14:03:39 +01:00
jinhojang6 ac6a4af207 Update translations
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-03 13:59:59 +01:00
andrey 106e9112e0 [#11395] Inapp Keycard upsell MVP
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-03 12:20:17 +01:00
andrey c625e95d5e [#11815] GNT to GLM Migration was not implemented
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-03 12:18:06 +01:00
Roman Volosovskyi 580ecfedc1 [wallet] RPC calls optimzations for new accounts 2021-03-03 10:55:18 +02:00
jakub 4cc99c6bb8 nix: fix name fo config value for unsigned build
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 18:26:42 +01:00
jakub 6a764869a0 doc/FDROID.md: add explanation of Android build
Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-02 16:58:02 +01:00
jakub aff335b305 gradle: Exclude Google libraries when GOOGLE_FREE=1
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 16:29:37 +01:00
andrey 93ed7c15bd [#11809] Upgrade react-native-device-info to 7.4.0
Also update gradle dependencies with transitive deps.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 16:29:20 +01:00
jakub c57974d9ff nix: upgrade go-maven-resolver to v1.1.0
This release adds support for resolving transitive dependencies.
https://github.com/status-im/go-maven-resolver/releases/tag/v1.1.0
https://github.com/status-im/go-maven-resolver/pull/5

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 16:29:19 +01:00
Churikova Tetiana a7f9a98f48 e2e: checking balance on mobile network
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-03-02 12:59:26 +01:00
jakub c703e45105 docs: update instructions in doc/FDROID.md
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 12:38:41 +01:00
jakub 8376fedb4b make: add release-fdroid and fdroid-nix-dir targets
With these targets added we can simplify the format of the F-Droid YAML
metadata file which defines how to run `status-react` builds.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 12:38:34 +01:00
jakub d0d8815d4a readme: add "Get it on ..." badges
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-03-02 12:38:34 +01:00
Shivek Khurana fa9fceb75d Fix the top margin on keystorage views
Fix lint

Signed-off-by: Shivek Khurana <shivek@status.im>
2021-03-02 16:16:41 +05:30
jakub 293fd5fae1 nix: add missing cljfmt dependencies to nix/deps/clojure
It seems like this worked before purely because the `cljfmt` library was
already in the `~/.m2` cache folder. This issue was noticed when I
cleaned up the `~/.m2` folder on one Jenkins slave host and the Lint stage
started randomly failing.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-01 16:42:38 +01:00
andrey 9b6b337453 [#11764] Data that was added before pairing devices is not synced anymore across synced devices
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-01 16:26:20 +01:00
jakub 37cf8ffe72 nix: update clojure dependencies
Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: andrey <motor4ik@gmail.com>
2021-03-01 13:23:35 +01:00
andrey 4f9e38930e Revert "[#11395] Inapp Keycard upsell MVP"
This reverts commit 99e99b0e
2021-03-01 12:12:09 +01:00
andrey 99e99b0e81 [#11395] Inapp Keycard upsell MVP 2021-03-01 12:07:46 +01:00
Churikova Tetiana 83630b28bb e2e: migration and message statuses
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-26 16:29:11 +01:00
Gheorghe Pinzaru c7009ff6f7 Add request/approve communites
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-26 15:38:19 +01:00
Brian Sztamfater c2f513f67e [#11743] Fix crash on network change
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-26 15:35:47 +01:00
Roman Volosovskyi 37284051dc PNs for transaction messages 2021-02-25 10:51:19 +02:00
guylouis c1315eca90 Update RELEASES.md with v1.11 notes
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-02-24 11:23:11 +01:00
guylouis 9f9370f72d Update RELEASE_CHECKLIST.md
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-02-24 11:22:31 +01:00
Churikova Tetiana 61da0db9c9 e2e: previews in lomks
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-23 21:40:03 +01:00
Michele Balistreri 325a860916 faster keycard login
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-02-23 20:15:24 +03:00
Volodymyr Kozieiev a383cfa39a Delivered messages have double-check icon in private chats
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2021-02-23 18:47:40 +02:00
Serhy d5e1d3fe65 New e2e test to set image from Galary and Photo
Signed-off-by: Serhy <sergii@status.im>
2021-02-23 15:15:42 +02:00
jakub f0d79f3af0 ci: adjust behavior of PUBLISH to be true for releases
Otherwise release builds never create the GitHub draft releases.
Not unless a user explicitly stats a build with `PUBLISH: true`.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-02-23 13:45:25 +01:00
Michele Balistreri 09ac3e6a9e use the currently selected account for signing messages/typed data
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2021-02-22 13:37:09 +03:00
Churikova Tetiana f3c85c1e7a e2e: several fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-19 14:47:45 +01:00
Andrea Franz 505171cf87 enable Keycard on iOS
Signed-off-by: Andrea Franz <andrea@gravityblast.com>
2021-02-19 10:26:16 +01:00
Churikova Tetiana f9c3747768 e2e:-5 critical e2e and fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-18 16:13:40 +01:00
andrey 9648f741b4 cleaning 3
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-17 16:16:54 +01:00
andrey e493a2b79c [#11395] Inapp Keycard upsell MVP
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-17 13:19:08 +01:00
Churikova Tetiana 8698e13fa1 e2e: nightly fixes and py upgrade
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-17 12:07:45 +01:00
Andrea Maria Piana 452e54fc19 Add buy crypto banner
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-17 10:25:45 +01:00
Churikova Tetiana 4f094c174d e2e: connecting status handling
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-16 16:45:52 +01:00
andrey 7c04bb9076 [#11716] Implement new Connectivity dialogues and remove 'Offline' snackbars
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-16 16:25:49 +01:00
Andrea Maria Piana 8d3fa3c3d7 Fix images being dropped in profile channels
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-16 10:02:47 +01:00
andrey 32393c9091 [#11704] Android 11 flatlist performance degradation
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-15 14:51:53 +01:00
Andrea Maria Piana 35f152c479 Add our.status.im and medium.com link unfurling
Fixes: #11739
Fixes: #11738

Adds unfurling for our.status.im and medium.com

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-15 13:50:51 +01:00
Andrea Maria Piana 37b36d38c7 update statusgo
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-15 10:36:16 +01:00
Churikova Tetiana 1a77891273 e2e: fix for duplicating chats
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-11 09:56:50 +01:00
Andrea Maria Piana 63893ff575 Handle eth_accounts exception
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-09 18:08:22 +01:00
Andrea Maria Piana 226aacdeac Only scale if width/height is positive
Fixes: #11728
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-09 16:45:35 +01:00
Roman Volosovskyi a37dbb57d6 [wallet] Merge blocks ranges 2021-02-09 16:48:00 +02:00
jinhojang6 4fdfa3e008 Update translations
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-09 14:02:40 +01:00
Churikova Tetiana 8d510be72e small nightly fix
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-09 11:16:19 +01:00
andrey 72d592a5a6 hide increase gas/cancel temporary for 1.10 2021-02-09 08:53:44 +01:00
Andrea Maria Piana 1075dfcb8b Release 1.11.0 2021-02-08 16:10:26 +01:00
Shivek Khurana 49d4b15761 Add tenor and giphy.com support
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-08 16:09:22 +01:00
Churikova Tetiana a7f9998d6c e2e: nightly fix
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-08 14:18:22 +01:00
Serhy b2be539374 When no chat on screen is expected
Signed-off-by: Serhy <sergii@status.im>
2021-02-05 19:47:18 +02:00
Roman Volosovskyi 3685f6a500 [#11117] Move PNs to status-go 2021-02-05 17:03:34 +02:00
Serhy 9a51a46869 Webview camera permission
Signed-off-by: Serhy <sergii@status.im>
2021-02-05 14:19:30 +02:00
Andrea Maria Piana 0867b972c3 Don't rely on contacst for one-to-one mentions, and remove cursor
[Fixes: #11670]
[Fixes: #11671]

This commit fixes 2 issues.

One issue was due to removing tribute to talk, which added in the
`contacts` map any user you open a chat with, and some code relied on
this behavior.

The second issue was likely due to a react native upgrade which might
have fixed a bug but caused a different issue, which resulted in the
text disappearing when cursor was set.

I have removed that (it was only used on android) and everything seems
to be working correctly, but not so sure about this one.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-02-04 17:54:00 +01:00
jakub d946d473c6 fastlane: use Apple Store Connect API for CI builds
Because our CI Apple account still has 2FA disabled in order for it to
be usable in Jenkin it is now failing with an error that seems unrelated
to 2FA.

The recommended way of doing Apple authentication for CI are App Store
Connect API JWTs. The API appears to support both pushing builds as well as
updating metadata and other tasks like refreshing of provisioning
profiles.

Fixes: https://github.com/status-im/status-react/issues/11713
Issue: https://github.com/fastlane/fastlane/issues/18098
Docs: https://docs.fastlane.tools/app-store-connect-api/

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-02-04 15:10:07 +01:00
Churikova Tetiana 7e8a68ec67 e2e: refactoring commands, wait for balance, find trans
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-04 13:54:06 +01:00
Shivek Khurana 39b0a6bb44 Restrict changes to translations file only
Signed-off-by: Shivek Khurana <shivek@status.im>
2021-02-03 17:00:28 +05:30
Roman Volosovskyi 00ad3e9e1f [#11674] Make sure token balances are fetched on mobile network 2021-02-03 12:45:05 +02:00
Churikova Tetiana 781360a1cf e2e: fix opensea
Signed-off-by: andrey <motor4ik@gmail.com>
2021-02-02 17:15:28 +01:00
andrey c76567c20f [#11703] No way to sign in to opensea 2021-02-02 17:15:18 +01:00
Churikova Tetiana 6d38386c11 e2e: update PyYAML and urllib3
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-02 16:57:13 +01:00
Churikova Tetiana 522d03b846 e2e: chat_management + wallet_management
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-02-02 12:00:17 +01:00
Churikova Tetiana b73fcba395 improve logging, get rid of 2 e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-28 17:09:40 +01:00
Andrea Maria Piana 741e9e834b Avoid concurrent access to contact
In some instances when fetching messages for a timeline the app would
crash as a map was accessed concurrently without locking.
This fixes the issue.

Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-28 14:49:14 +01:00
Churikova Tetiana ad006b018c test_recover + test_sign_in
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-28 13:59:59 +01:00
andrey 56c4ffc39f [#11690] Invisible digits in Request transaction dialog in 1-1 chat on Android
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-28 13:57:39 +01:00
Churikova Tetiana d31ed933a0 e2e: reduce amount, continue review
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-27 17:22:16 +01:00
andrey 6469ff912a [#11651] No spinner when pressing "Fetch more messages" in public chat + white toggles in Sync settings on Android
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-27 16:49:57 +01:00
Serhy ff961bbfe8 Fix e2e fails in develop
Signed-off-by: Serhy <sergii@status.im>
2021-01-27 12:25:05 +02:00
Andrea Maria Piana eba6b63258 Fix topic issue, remove ttt, add db export/import
There were a few issues with topic management:

- Topics/ranges were saved one-by-one, which cause an out of memory
error on some devices
- Topics that were not listened to were saved, and therefore requested
from the mailserver, which caused long syncing time

It also removes tribute to talk and add export/import methods

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-01-26 12:46:21 +01:00
Roman Volosovskyi 9bf4da1edd [wallet] Avoid unnecessary balance checks 2021-01-26 11:53:54 +02:00
Churikova Tetiana c2f8f012a8 e2e: global refactoring
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-25 18:44:24 +01:00
Roman Volosovskyi 6c4097f521 [wallet #11570] Handle non archival RPC node 2021-01-25 15:41:50 +02:00
andrey 35671226e4 remove outdated :initial-props
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-25 10:38:34 +01:00
andrey 08b9cfcf52 [#8284] Remove unnecessary permissions [Android]
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-21 16:23:54 +01:00
andrey 0087a66df8 bump re-frisk 2021-01-21 15:25:54 +01:00
Anton Danchenko 3042a4b696 upgrade xdist to latest version
Signed-off-by: Serhy <sergii@status.im>
2021-01-21 12:51:11 +02:00
andrey cb66886aab [#11665] Youtube-link preview is resized incorrectly in chat view for videos with short title
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-21 11:16:53 +01:00
andrey af2b053fa9 disable fast refresh on ios and bump re-frisk
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-20 11:44:24 +01:00
andrey fa4521d2e7 react native config latest version with pods, fixes react-native-config compiling issue by moving it to pods [#11657]
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-19 17:14:06 +01:00
jakub b33c086966 nix: set ANDROID_SDK_HOME to a tmp directory
This fixes issues with Gradle complaining about lack of `~/.android`.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-01-19 14:08:59 +01:00
andrey 4704cef3da handle error from infura
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-19 11:52:57 +01:00
andrey 329182fdbe [#11643] Display profile picture only of users I have added to contacts
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-18 10:14:41 +01:00
shivekkhurana 5c3133adb6 Key management screen in place
Key phrase screen in place

Added flow in a Rich comment, added storage screen, added Keycard upsell banner

Validate seed against selected multiaccount

Vvalidate seed against multiaccount

Connected migration flow to Keycard onboarding flow, unable to finish because an event called generate-and-load-key is not being emitted with the flow I made

Fixed state that was needed to start the recovery process, also removed seed-phrase from app-db when onboarding starts

Moved strings to translations in key storage views

Upsell banner bg theme, accordion data, choose-storage next bug, Hide keys managment option for Keycard accounts and from multiaccounts list screen.

Added test for subscription function

Tests for keystore move checkbox and seed phrase input

Fix translations/en.json after merge conflict, add test for seed-phrase input, seed-against-key-uid validation and state setup for redirect to Keycard screens

Update validate fn to mock mnemonic import and cascading changes

Fix linting errors

Fix seed key-uid mismatch popup, reduce styles and remove redundant views

Add dot menu in place of access-existing-keys button on login page

Make multiaccount redirect test more terse

Remove dangling comma from translations/en.json

Fix var that was missed during rebase

fx/merge and extra newline fixes

Removed nil? check, tests pass

Unknown error popup

Redirect Keycard banner to https://keycard.tech

Remove unused sub and fix linting

Fix issue#4 - Unable to enter new seeds

Hide back and disable hardware back on Keycard onboarding intro if the user is coming from migration flow. Fixes issue#1 raised by Diana.

Set state so show wallet balances show up auto magically. Fixes issue#3.

Update tests to capture recovering state

Center align sign in button since the left button was deleted.

Changes suggested by Andrey

Add top margin to Keycard intro only when user comes key storage

Hide manage key storage on ios

Signed-off-by: Shivek Khurana <shivek@status.im>
2021-01-14 22:35:48 +05:30
andrey f28f479256 react native config on ios
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-14 14:17:01 +01:00
Roman Volosovskyi daf7791d86 [wallet #11535] Show PNs right after enabling 2021-01-14 13:54:46 +02:00
Roman Volosovskyi 73ca49aad5 [#11599] Smaller kk dev menu items
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-14 10:11:20 +01:00
Churikova Tetiana 7cf42b292b Merge branch 'develop' of github.com:status-im/status-react into develop 2021-01-14 10:04:33 +01:00
Frank Tang 2687d7ab9a added github.com to white list of link preview
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-14 09:46:58 +01:00
andrey abac5247bf RN 63 and xcode12
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-14 09:41:38 +01:00
jakub 939ce8bef5 nix: Upgrade Android SDK, use nixpkgs master
This makes use of the refactoring of Android SDK done in:
https://github.com/NixOS/nixpkgs/pull/89775

Which allows us to drop the use of our own fork of `nixpkgs`.

Android Upgrades:
* Build Tools - `29.0.2` to `30.0.3`
* Platform Tools - `29.0.6` to `30.0.5`
* NDK Bundle - `21.0.6113669` to `21.3.6528147`

Other Upgrades:
* Git - `2.28.0` to `2.29.2`
* Go - `1.14.7` to `1.14.13`
* Clojure - `1.10.1.645` to `1.10.1.763`
* NodeJS - `12.18.3` to `12.20.1`
* Yarn - `1.22.4` to `1.22.10`
* OpenJDK - `8u265-ga` to `8u272-b10`
* PatchElf - `0.11` to `0.12`
* CoreUtils - `8.31` to `8.32`

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-01-13 15:35:59 +01:00
jakub eb1f1bf587 nix: fix building of status-go forks with different GH owner
Resolves: https://github.com/status-im/status-react/issues/11637

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2021-01-13 15:16:07 +01:00
andrey 46d430b69c [#11626] Group chat subtitle shows 'no members'
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-13 12:21:48 +01:00
Serhy e4d175ef93 Revert 11624
Signed-off-by: Serhy <sergii@status.im>
2021-01-13 12:24:32 +02:00
hesterbruikman 25c5106284 Correction
Removed: Auto scan for tokens of primary Ethereum account upon recovery
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-13 10:38:10 +01:00
andrey 3fd36c6904 [#11627] Add GRT erc20 token in our default list of supported tokens in the wallet
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-12 18:13:00 +01:00
Frank Tang fe6f75e1b7 fix: No "Delete" option for a group chat from the home screen if user has been removed from it
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-12 13:46:36 +01:00
snyk-bot 6410de803e fix: test/appium/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-PILLOW-1055461
- https://snyk.io/vuln/SNYK-PYTHON-PILLOW-1055462
2021-01-12 13:45:27 +01:00
dependabot[bot] 9d2e2e26ad Bump lxml from 4.6.1 to 4.6.2 in /test/appium
Bumps [lxml](https://github.com/lxml/lxml) from 4.6.1 to 4.6.2.
- [Release notes](https://github.com/lxml/lxml/releases)
- [Changelog](https://github.com/lxml/lxml/blob/master/CHANGES.txt)
- [Commits](https://github.com/lxml/lxml/compare/lxml-4.6.1...lxml-4.6.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-01-12 13:45:11 +01:00
snyk-bot 6c935057c5 fix: test/appium/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-PILLOW-1055461
- https://snyk.io/vuln/SNYK-PYTHON-PILLOW-1055462

Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2021-01-12 12:38:11 +01:00
Serhy d68f7679df Update saucelabs endpoint
Signed-off-by: Serhy <sergii@status.im>
2021-01-12 11:38:57 +02:00
andrey 346ff25843 [#11610] App crashes on Android with GiFDecoder error
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-12 10:35:37 +01:00
Andrea Maria Piana 2e7875cfef Fix wrong greater than sign on mailserver connection
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-01-12 10:03:14 +01:00
andrey d6f2792622 [#11606] Favorites - when changing the name of a favorite, the past name appears quickly when saving it
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-11 16:46:20 +01:00
andrey 2af23bcb2e intro wizard indicator fix
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-11 16:45:21 +01:00
jinhojang6 e0b01d2fed Update translations
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-11 10:32:49 +01:00
jakub 9889e80bbd ci: parametrize publishing, make BUILD_TYPE a choice
This changes the behavior of mobile combined builds to not publish
the results of `nightly` or `release` builds unless `PUBLISH`
parameter is set to `true`.

It also makes the `BUILD_TYPE` into a dropdown choice field with
pre-defined values, like `manual` or `e2e`.

Changes:
- Add parameter definitions for `BUILD_TYPE` and `PUBLISH`
- Move uploading of `latest.json` to `Publish` stage
- Make `Publish` stage optional based on the `PUBLISH` parameter

Requires: https://github.com/status-im/status-react-jenkins/pull/21

Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2021-01-08 12:54:17 +01:00
hesterbruikman e0e497d3d0 Adding 1.10 App/Play store release content (#11581)
* Adding 1.10 App/Play store release content

* Removes Cancel and Speed up tx

As discussed, the feature is not yet reliable for public release. On occasion the nonce cannot be overwritten, resulting in 2 pending transactions.
2021-01-07 09:43:45 +01:00
hesterbruikman abc63af4a8 Create RELEASE_CHECKLIST.md
Moving file to repo to replace hackmd notes doc

Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-04 09:29:00 +01:00
Frank Tang b5b16f1278 [Fixes: #10978] Endless loading public chat name
Signed-off-by: andrey <motor4ik@gmail.com>
2021-01-04 09:26:55 +01:00
Roman Volosovskyi 767bd46bff Allow non alphanumeric branch names in scripts/update-status-go.sh 2020-12-31 12:50:26 +02:00
Roman Volosovskyi 8e288aea56 [#11379] Add a watch only account from an ENS name 2020-12-30 18:18:24 +02:00
Churikova Tetiana 4f4f6cf29e fixed testrail reports and e2e nightly
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-29 18:48:04 +01:00
Andrea Maria Piana d8235d9e17 Add milestoned to actions 2020-12-29 09:54:29 +01:00
Andrea Maria Piana 5d02472f89 Add next column to zenhub 2020-12-29 09:30:04 +01:00
Frank Tang f306b084da [Fixes: #11586] Every element in a seq should have a unique :key
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-29 09:12:50 +01:00
Andrea Maria Piana 6099262c98 [Fixes: #11579] Add only certain fields to multiaccount on login
`multiaccounts` has some fields that should not be overriden
(`save-password`), so we expliciltly `assoc` only certain fields.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-28 17:09:22 +01:00
Andrea Maria Piana 37ccc6f825 Hide option to increase gas on keycard
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-28 15:19:24 +01:00
Andrea Maria Piana 33e58dbca9 Whitelist link previews client side
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-28 09:37:02 +01:00
Andrea Maria Piana d8f1944b27 Hide community banner
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-28 09:36:22 +01:00
Gheorghe Pinzaru 6342163152 Add react-native-fast-image for external assets
Use fast image in link previews

Mock fast image in tests

Update nix android deps

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-25 15:03:59 +03:00
Gheorghe Pinzaru 8948dcb736 Fix android text overflow
Fixes #11575

Move the overflow handler to separate view

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-24 16:58:51 +03:00
hesterbruikman 52823d7f59 Create releases.md (#11463)
* Create releases.md

File that captures release notes for App store ad Play store. Informs users of relevant additions, changes, fixes.

* Update and rename releases.md to RELEASES.md

As suggested, removing checklist to keep in a separate file and using capitals for the title
2020-12-24 13:43:29 +01:00
jinhojang6 eff60c69d5 Update translations
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-24 08:24:48 +01:00
Andrea Maria Piana b30149d9f2 Bump version to 1.10.0 2020-12-24 08:23:44 +01:00
Andrea Maria Piana 2ca39daa59 Communities
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-23 17:23:11 +01:00
Gheorghe Pinzaru 35c2c226df Remove redundant overflow hidden on messages
Fixes #11439

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-23 14:27:30 +03:00
Andrea Maria Piana 5b801b95fa [Fixes: #11557] Resend contact picture when changed
Fixes: #11557

Resend contact picture when it is changed.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-23 09:43:51 +01:00
Andrea Maria Piana b5a6f1b78f Add nix purge command and change the behavior of nix clean
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-23 09:08:46 +01:00
Gheorghe Pinzaru 2571e44de0 Referrals add screen with join public-chat
Update strings

Check if transaction has receipt on login

Notification on accept

Add large icon

Unify notifications for referral

Fix duplicate path for acquisition

Fix accept notification and visibility

Small fixes

Do not show notifications when not rewardable

Add home item

Show referral on lets go button

Fix list item on home

Hide messages on accept

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-22 15:33:02 +03:00
Churikova Tetiana 7f22912f1e e2e: bookmarks
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-21 16:38:58 +01:00
Roman Volosovskyi aac7a97e13 [#11502] Handle tx fetching failure 2020-12-21 17:05:00 +02:00
Michele Balistreri eaf463395a shorter pairing codes for Keycard
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2020-12-21 17:07:25 +03:00
Gheorghe Pinzaru 8342972059 Android tabbar replace elevation with border
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-21 15:02:18 +03:00
Churikova Tetiana 98a8359db3 e2e: new tests
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-18 10:05:40 +01:00
Andrea Maria Piana 9fe7ddaf0b [Fixes: #11545] Don't update browser if nil
Fixes: #11545
Fixes: #11544

The two issues were caused by the same bug, essentially if
`navigation-state-changed` event was fired (it's debounced) when the tab
had been closed, the browser would be updated with a `nil` id, causing
all sort of issues as it had not history etc.

This commit ensures that no changes are made if the browser is nil.

Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-18 10:05:00 +01:00
Gheorghe Pinzaru 5643c4d537 Add profile pictures
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-17 14:12:07 +01:00
Gheorghe Pinzaru 09822e142b Add async storage wrapper
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-12-16 14:08:13 +03:00
Gheorghe Pinzaru 86d7b79175 Add buy crypto banner UI
Store in local storage banner preference

Add i18n
2020-12-16 14:08:05 +03:00
Andrea Maria Piana 4e5ba2c533 Fix watching accounts for transaction in chat messages
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-15 16:40:26 +01:00
Volodymyr Kozieiev b197d54e47 Switched to status-go where reaction resends under the hood if sending failed
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-12-15 16:59:13 +02:00
Churikova Tetiana 1b9bd8b017 e2e: fixed browser tests
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-14 18:53:39 +01:00
Roman Volosovskyi 879f441b7d [#11499] Fix multiple notifications for a single erc20 transfer 2020-12-14 13:34:20 +02:00
Frank Tang 8e882dda21 [Fixes: #11074] only validate whether group name is blank
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-14 10:58:40 +01:00
Churikova Tetiana 905aa26705 e2e: browser1.0
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-11 18:09:31 +01:00
andrey 3241d3273e [#11469] Browser bookmarks
Signed-off-by: andrey <motor4ik@gmail.com>
2020-12-11 16:55:42 +01:00
Churikova Tetiana efc4f6c750 e2e: fix fetching from offline
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-10 17:09:24 +01:00
Roman Volosovskyi c33e2be76b [wallet] Watch txs history while app is in the background (Android only) 2020-12-10 18:02:49 +02:00
Andrea Maria Piana 8748280279 [Fixes: #10777] Always convert value to string
When calling `SendTransaction` sometimes the value would be a string
(most cases), sometimes the value would instead big a `BigInt`, which
would be serialized to an integer, and status-go would be unable to
parse it as it expects values to be a string.
This commit makes sure that values are always serialized as string
before sending them over.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-10 08:26:38 +01:00
Andrea Maria Piana 1b4dcb7103 [Fixes: #11520] Rotate mailservers on error conditions
If a mailserver request is failing we disconnect at the 3rd attempt.

Though once we are disconnected, we connect again to the same mailserver
based on ping time.

This commit changes the behavior so that mailservers are penalized if
they are returning errors.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-10 08:26:00 +01:00
Churikova Tetiana 5259de7423 e2e:nightly fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-09 18:01:36 +01:00
Serhy e167773258 Update tests and get balance method
Signed-off-by: Serhy <sergii@status.im>
2020-12-08 18:47:56 +02:00
snyk-bot 57c0e835e2 fix: test/appium/requirements.txt to reduce vulnerabilities
The following vulnerabilities are fixed by pinning transitive dependencies:
- https://snyk.io/vuln/SNYK-PYTHON-URLLIB3-1014645

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-08 15:56:04 +01:00
Roman Volosovskyi 7055c46a60 [#11507] Fix e2e tests 2020-12-07 15:37:16 +02:00
Andrea Maria Piana 2f1e5c819e [Fixes: #11518] Fix dependabot directory
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-07 12:14:16 +01:00
Andrea Maria Piana 2df5eccff0 [Fixes: #9851] Allow setting ens & transaction verify url, and fix
pending transaction

This commit fixes an issue where pending transactions would be marked as
confirmed in commands, due to the fact that we would default to pending
if no transaction was in the database.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-07 11:19:12 +01:00
Serhy a70b07e83d Interact with ropsten web3 to send assets
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-04 21:16:58 +01:00
Churikova Tetiana 8a97331779 e2e: testrail report
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-04 21:10:01 +01:00
Andrea Maria Piana fdf91cff80 [Fixes: #8280] Remove unused transport security entries
Removes not used security transport entries from ios

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-04 12:42:01 +01:00
Andrea Maria Piana f04042c643 [Fixes: #10801] Send chat messages in order
Chat messages are now sent in order using a different endpoint
`sendChatMessages`.
Text should always be displayed after images.

This is not implementing a Caption field, that would require either a
protocol change or leverage the `text` in the message.
It applies for both normal chats and timelines.

Move also all inputs under `chat/inputs` so we avoid re-renders as
`chats` has changed.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-03 18:29:40 +01:00
Churikova Tetiana fd5be21207 e2e: TODO resolve
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-03 14:10:42 +01:00
jakub c62abf10c1 nix: add docs about NodeJS modules, small refactor
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-12-02 20:47:23 +01:00
jakub 458ef05740 bump jenkins library to 1.2.8 to add keychain password
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-12-02 19:34:10 +01:00
andrey 609a7120b6 flatlist render changes
Signed-off-by: andrey <motor4ik@gmail.com>
2020-12-02 16:04:15 +01:00
jakub b62ff59f16 ci: make GitHub build links use CDN for downloads
Should speed up downloads for some geographical locations.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-12-02 15:53:17 +01:00
Serhy c381fc2e2f E2e for mentions is chat
Signed-off-by: Serhy <sergii@status.im>
2020-12-02 16:04:55 +02:00
andrey d2493c0725 [#11470] Statuses issues
Signed-off-by: andrey <motor4ik@gmail.com>
2020-12-02 10:39:07 +01:00
Andrea Maria Piana b9f896f4e3 Don't allow multiple pop ups to be shown
This commit makes sure that we don't display multiple pop ups when
mailserver connection has failed.
It also fixes the navigation to avoid being stuck on Profile tab.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-02 09:50:23 +01:00
Jonathan Rainville 7e069ed342 fix: linting and variable name 2020-12-02 09:49:47 +01:00
Jonathan Rainville b2cdc59670 fix: fix mailserver popup showing after canceling it
Fixes #10065
After clicking cancel, the popup is `dismissed`, so it will not appear again
Selecting a new mail server sets `dismissed` as false, so the error can appear again
2020-12-02 09:49:46 +01:00
Andrea Maria Piana a6e08f0d8e fix typo on branch name 2020-12-02 09:12:42 +01:00
Andrea Maria Piana 0e6d191e58 Point to master for easier testing 2020-12-02 08:55:47 +01:00
Andrea Maria Piana 852838f777 add assigned 2020-12-02 08:42:24 +01:00
jakub 32efcb06a0 nix: make status-go version regex even more lax
In release `1.7.0` we had an issue with `status-go` version `v0.62.3.hotfix.3`
not matching [Semantic Versionig](https://semver.org/#spec-item-11) so a fix was
introduced in https://github.com/status-im/status-react/pull/11331 that made the regex a bit more lax.

Again in `1.9.0` we had the same issue and the release not appears as `develop`
instead of the actual `status-go` version, which this time was `0.63.8+hotfix.2`.
Notice the `+` instead of `-` or `.` before `hotfix.2`.

I've added `+` to allowed characters after the 3 digit standard version format.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-12-01 20:18:03 +01:00
Churikova Tetiana 179e389e37 align e2e 11478
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-12-01 16:15:00 +01:00
Andrea Maria Piana a4716cc494 [Fixes: #9181] Reset edit mailserver on add pressed
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-12-01 14:44:34 +01:00
Roman Volosovskyi 92aaa194a8 [wallet] Pull to refresh tx history 2020-11-30 16:13:55 +02:00
Andrea Maria Piana 64840f74a7 [Fixes: #11351] Pass topics when querying the mailserver
Currently we are still using a bloom filter when querying mailserver.
This commit changes the behavior so that topics are used instead.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-30 12:08:08 +01:00
Andrea Maria Piana bd281e6c9f Upgrade workflows 2020-11-30 12:01:24 +01:00
Andrea Maria Piana e8350414f3 Use our own fork for actions 2020-11-30 10:31:24 +01:00
Andrea Maria Piana ae900a4cd9 Add action for creating branches 2020-11-30 10:14:38 +01:00
Andrea Maria Piana 46cd4aa893 Create zenhub-pr.yml
Create action for zenhub-pr
2020-11-30 10:12:02 +01:00
jakub f0d9f2ac54 nix: add a way to deal with new gradle version to docs
Also adjusted the `generate.sh` script and split stuff into separate function
to make it easier to run specific stages of the generation process.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-11-27 14:56:42 +01:00
Churikova Tetiana f47c816ce0 fix e2e and align to new 11465
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-26 18:34:22 +01:00
andrey 88889930ae :accessibility-label :message-image
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-26 17:57:22 +01:00
andrey e2717ade98 [#11438] Add "sent" message confirmations 2020-11-26 17:57:10 +01:00
andrey f9095a492e [#11214] Add option for user to increase the gas payment for a pending transaction
[#11215] Add option for user to cancel a pending transaction.

Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-26 14:51:18 +01:00
Churikova Tetiana 1f7e40cede updated libs + e2e fix
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-25 18:58:29 +01:00
Roman Volosovskyi 7bfaa9255c [wallet history] Stop watching each new block 2020-11-25 16:44:16 +02:00
Serhy 166bdbf798 Update mailserver locator
Signed-off-by: Serhy <sergii@status.im>
2020-11-23 14:17:11 +02:00
shivekkhurana ecc41bebe0 Moved text-input props to their own functions, renamed get-suggestions to get-user-suggestions
Signed-off-by: shivekkhurana <shivek@status.im>
2020-11-23 16:33:08 +05:30
shivekkhurana 4cb058f1ca Add notes on testing, translations, merging and starting Refrisk
Signed-off-by: shivekkhurana <shivek@status.im>
2020-11-23 11:23:31 +05:30
shivekkhurana a55dd51064 Rename mailserver to history nodes on settings screen, changed en.json to reflect changes.
Signed-off-by: shivekkhurana <shivek@status.im>
2020-11-20 16:43:36 +05:30
Andrea Maria Piana d260ea9e03 [Fixes: #11452] Don't allow more than x pictures if taken from camera
This commit fixes an issue with taking pictures from camera, where
the check for image count was not checked.

Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-20 10:15:03 +01:00
Andrea Maria Piana 36f90fc567 Dont send unprocessed images
When selecting an image from camera roll we would immediately setting
the filepath with the raw image, process and later once it was processed
we would replace the file path.
On slow devices, the user might press send while the image is still
processing, causing the raw image to be sent, which might be discarded
as too large and never sent.

This commit changes the behavior so that we only set the uri once the
image is processed, it might add some delay, but the image should be
correctly sent.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-19 16:17:11 +01:00
Andrea Franz 22c6635d93 show tx data in keycard web3 request screen
Signed-off-by: Andrea Franz <andrea@gravityblast.com>
2020-11-19 11:28:25 +01:00
Andrea Maria Piana ae2d9b996c Limit max batch of images
There's an issue reported on slow devices when sending a batch of
images.

All the requests are send concurrently, and the sending of messages is
processed concurrently in the background.
On slow devices or connection with slow upload speed this may result in
expired envelopes, as the POW calculation or the upload takes too long,
and either they never leave the device, or worse they reach the
mailserver but won't be stored because already expired on arrival.

This commit allows setting the max-images-batch config value, setting it
to 1 for release and keeping it to 5 for other builds.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-19 09:13:06 +01:00
Andrea Maria Piana 7c9bb5b21c Fix bug when coming back from background
Fixes: #11441
Fixes: #11416

The issue was due to a nil pointer exception with the
localNotificationService.
Upon upgrade it would be disabled and therefore it would not be
available.
This was due to the fact that initialization comes from the database and
not from status-react, so on upgrade it would not be available.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-19 08:17:53 +01:00
Andrea Maria Piana 80ac4a8dc2 Remove status-core from codeowners
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-19 07:12:05 +01:00
andrey e30962ca75 [#11446] Can't sell item on opensea
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-18 17:27:20 +01:00
Churikova Tetiana 2bcc832cca fix ru date short values
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-17 17:35:31 +01:00
jakub 0b8c673094 ci: fix iOS signing, use same keychain name
Using different temporary keychains does not work if we do not set
`default_keychain=true`, because `codesign` then can't find the cert:
```
error: No signing certificate "iOS Distribution" found: No "iOS Distribution" signing certificate matching team ID
```
But if we set `default_keychain=true` then we cause a race condition
when the keychain is deleted by a parallel job while another is using it
as its default.

For this reason we have to use a static keychain name and keep it
between builds.

I tried disabling `default_keychain=true` in #11378 but it worked only
because the default user keychain already had the cert.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-17 10:16:32 +01:00
jinhojang6 dbabcc223e Update translations
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-16 17:09:07 +01:00
andrey 9f7ad853f0 [#11411] App is crashed on account creation after navigating to access key and back
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-16 17:04:02 +01:00
Churikova Tetiana 28d3cf03d9 fix 6305 e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-16 15:49:14 +01:00
andrey 7b46c445a7 [#11383] Status Updates : Add reactions and copy to clipboard
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-16 14:15:15 +01:00
andrey cf911aa246 [#11236] Deeplink to public chat on onboarding
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-16 14:12:14 +01:00
Volodymyr Kozieiev a91bdfb047 Don't make inability to unfurl url a user's problem
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-11-16 13:57:40 +02:00
andrey 61105e15f6 fix ens content resolution
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-16 12:31:00 +01:00
Gheorghe Pinzaru 13c81a34b3 Add pinch to zoom deps
Add image interactions

Add image preview to timeline

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-11-14 21:56:46 +03:00
shivekkhurana fbb606b859 Escape address so newlines and spaces don't interfere
Signed-off-by: shivekkhurana <shivek@status.im>
2020-11-13 20:11:48 +05:30
shivekkhurana 30753f8766 Make right item occupy entire space instead of left one. Make left grow if nothing on right.
Signed-off-by: shivekkhurana <shivek@status.im>
2020-11-13 20:09:53 +05:30
Churikova Tetiana 6b4f2901ae reduce number of parallel sessions
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-13 15:29:35 +01:00
Gheorghe Pinzaru 40e2839793 Exclude google deps based on env
Export all vars from .env

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-11-13 11:05:28 +03:00
Churikova Tetiana d14f232abf status e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-12 18:43:49 +01:00
Churikova Tetiana 8310749696 fix e2e nightly
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-11 16:42:22 +01:00
Roman Volosovskyi fac4f0c871 [#10798] Fix unviewed counter on receiving response 2020-11-11 15:04:17 +02:00
Roman Volosovskyi ae3936eff2 [#11240] Clarify assets Status wallet supports 2020-11-10 22:17:56 +02:00
Churikova Tetiana 920000c3e8 e2e: failures
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-10 18:10:04 +01:00
andrey b3a3a753d2 fix timeline non contacts
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-10 15:45:07 +01:00
andrey e5ada29ed8 [#11384] Status Updates : Open profile when tapping on username or avatar
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-10 13:44:46 +01:00
Roman Volosovskyi 35381a55c0 [#10239] Remove "Fetch last 24 hours" option 2020-11-10 13:33:53 +02:00
Serhy 473c5135b2 Update number of parallel sessions to align with Sauce
Signed-off-by: Serhy <sergii@status.im>
2020-11-09 21:32:20 +02:00
Michele Balistreri 4384d979e7 update Keycard SDK, remove workaround
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2020-11-09 20:10:58 +01:00
andrey b1ea04900e [#11398] Error at attempt to sign typed message in simpledapp.eth
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-09 17:43:35 +01:00
Churikova Tetiana 627e1d0e14 e2e align new wallet cards
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-09 16:44:51 +01:00
Churikova Tetiana f7d7c282cd nightly e2e fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-09 16:40:22 +01:00
tbenr 07e36096cc new-account-cards
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-09 16:38:00 +01:00
Gheorghe Pinzaru 6311077cec Don't crash if token is missing referrals
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-11-09 13:41:53 +03:00
andrey 6d104d60e2 [#11382] Status Updates: Add URL unfurling
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-09 11:27:53 +01:00
Gheorghe Pinzaru 72591f576d Update to Quo Readme
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-11-09 10:28:41 +03:00
Roman Volosovskyi 6eb840c8b2 [#10362] Allow receiving old messages after rejoining a pubchat 2020-11-06 17:37:18 +02:00
andrey f1d070ed82 [#11333] personal_sign method does not work in status
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-06 15:51:19 +01:00
Churikova Tetiana 9e466976dc align e2e timeline
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-06 14:24:31 +01:00
andrey ee61244770 timeline
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-06 14:23:02 +01:00
jakub 34c6292af4 fastlane: disable default_keychain to avoid race condition
If we run parallel job and a job sets a temporary keychain into a
default than another job can assume that is the user default.

The result is that one of the jobs will attempt to set a non-existent
temporary keychain into the default keychain.

This happens when we call `Fastlane::Actions::DeleteKeychainAction`:
https://github.com/fastlane/fastlane/blob/2.164.0/fastlane/lib/fastlane/actions/delete_keychain.rb#L21

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-11-05 16:09:32 +01:00
shivekkhurana 0d82dab5c5 Fix scroll issue
Signed-off-by: shivekkhurana <khuranashivek@gmail.com>
2020-11-05 20:26:42 +05:30
Michele Balistreri 206ce8849f closes #11373
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-05 14:20:04 +01:00
Andrea Maria Piana 7cef533a8a [Fixes: #11349] Split large messages in batches
When sending messages in quick succession, it might be that multiple
messages are batched together in datasync, resulting in a single large
payload.

This commit changes the behavior so that we can pass a max-message-size
and we split the message in batches before sending.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-05 12:49:53 +01:00
Roman Volosovskyi e7807202c9 [#11354] Add error alerts on denying access 2020-11-04 17:11:47 +02:00
Roman Volosovskyi d17f7c67b9 [#10957] Fix slow assets list 2020-11-04 14:05:35 +02:00
Roman Volosovskyi 82aca6bd76 [#10771] Fix loading of tx history before 10000000th block 2020-11-04 11:26:31 +02:00
Churikova Tetiana c7b3efe6ad new e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-03 17:57:36 +01:00
Serhy d8713fe3c7 Fix more e2e
Signed-off-by: andrey <motor4ik@gmail.com>
2020-11-03 16:30:25 +01:00
Serhy 6f86f73ac6 Update e2e 2020-11-03 16:30:16 +01:00
andrey b7948b9869 navigate to home when press chat tab on chat screen 2020-11-03 16:30:16 +01:00
Andrea Maria Piana d380186051 Upgrade status-go to 0.63.0
No functional changes, just removing code that is unused

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-03 11:20:35 +01:00
Andrea Maria Piana a91fa39547 [Fixes: #11355] Fix crash on logout
On shutdown the app was calling `PeersCount`, but sometimes the server
would be unavailable, resulting in a call to a nil pointer.

Upgrades status-go version with the fix.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-11-03 10:01:03 +01:00
jakub 3b780f4ff2 fastlane: Create temporary Keychain for iOS signing
This is a new approach to signing the iOS app by using a temporary
Keychain created only for that specific build and unlocked in advance.

By doing it this way we can avoid issues with `errSecInternalComponent`
appearing when there is no UI to open a Keychain password prompt when
running build in CI. I've described this problem in details in:
https://github.com/fastlane/fastlane/issues/15185

Thanks to `codesign:` partition ID being added to key partition list by
Fastlane `match` when importing a Keychain this approach now works:
https://github.com/fastlane/fastlane/pull/17456

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-11-03 00:03:38 +01:00
Churikova Tetiana d8eb33e330 e2e fixes+new check
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-11-02 20:20:21 +01:00
Volodymyr Kozieiev 0b5be54fea Allow group creation without contacts
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-11-02 20:10:22 +02:00
Volodymyr Kozieiev f99b2aa401 Link preview generation
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-11-02 15:28:31 +02:00
Roman Volosovskyi 27ad8f07c3 Trim url before opening in browser 2020-11-02 13:09:06 +02:00
Gheorghe Pinzaru 7402718e68 Use custom color for disabled state of controls
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-11-02 10:34:59 +03:00
Churikova Tetiana 3ac8f0c5fd e2e refactoring
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-30 15:51:15 +01:00
Gheorghe Pinzaru cf4bef8268 Add pick multiple images
Add inner border to image message

Add max batch size of 5

Disable camera roll more images

Use interop instead of aget

Add border as a separate layer

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-30 12:46:00 +03:00
Gheorghe Pinzaru fe5b5ab4bc use ens for rinkeby contract
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-29 15:42:56 +03:00
Gheorghe Pinzaru 050f20cfae Add local notifications for transactions
Pods

Add headless js service

Handle Local Notifications react

CopyPaste driven implementation of java notification

pn demo

Show iOs push in foreground

Show icon in notification

Enable notifications on login

Get chain from status-go

Add UI for switching notifications

go go!

Fixup

Handle notification onPress

Android UI

Handle press iOs

Handle android press and validate

go update

Fix route params in universal link handler

Set show badge explicitly to false

Fix e2e

bump status go

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-29 15:40:58 +03:00
Churikova Tetiana 10dcee3e05 nightly fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-28 22:36:06 +01:00
Churikova Tetiana ce20eddb99 profile e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-28 17:19:37 +01:00
andrey eae66c967e my status
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-28 14:42:59 +01:00
jakub 973bdb61b3 nix: make status-go matching regex more lax
We had an issue where the `1.7.0` release was using the `v0.62.3.hotfix.3`
version of `status-go` which didn't match the regex we use to verify
if the specified version is a valid version according to [Semantic Versioning](https://semver.org/).

You can check the current regex here: https://regex101.com/r/OeTQCv/3

I also added a trace message to show when we mark a build as `develop`.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-26 13:02:50 +01:00
andrey 663f5f41a0 [#11323] Turn off "Block screenshots" by default in nightly and PRs build
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-26 12:03:21 +01:00
Roman Volosovskyi ba3ca2c818 Remove chitchat duplication in general list 2020-10-23 19:48:58 +03:00
Churikova Tetiana 95aa500119 collectible e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-23 16:20:23 +02:00
Serhy 2cf4be4b34 Add test to send Max tokens from wallet
Signed-off-by: Serhy <sergii@status.im>
2020-10-23 11:30:14 +03:00
Roman Volosovskyi 5232432ec5 [#7788] Clear mailserver details after deletion 2020-10-23 11:06:04 +03:00
Roman Volosovskyi dca26b3350 [#11317] Prevent joining to pubchats with upper case letter in topic 2020-10-22 17:12:17 +03:00
jakub 466d279e2a nix: Increase stalled-download-timeout to 1 hour
Might help with issues described in: https://github.com/status-im/infra-ci/issues/17.

Details: https://github.com/NixOS/nixpkgs/issues/65015#issuecomment-662675716

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-22 12:43:01 +02:00
jakub 250b4d4646 upgrade fastlane 2.154.0 to 2.164.0
It's been a while and a fix for an issue I've reported a long time ago
has been merged in https://github.com/fastlane/fastlane/pull/17456. With
this fix we should see less iOS signing issues appearing as `errSecInternalComponent`.

This should also enable me to try a fix I proposed in
https://github.com/fastlane/fastlane/issues/15185 which consists of
creating a temporary unlocked keychain for each build.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-22 12:42:52 +02:00
Roman Volosovskyi 320d81432f Fix exception on my-profile screen (#11313 leftover) 2020-10-22 12:23:57 +03:00
Roman Volosovskyi 70526f9429 Markdown updates
On status-go side:
- new `strong-emph` node was added for strong emphasised text with triple
  "*" and "_"
- `del` node got proper marshalling and can be recognised (works with single
  and double "~")

On status react side:
- styles for `strong-emph` nodes
- styles for `del` (strikethrough) nodes
- unsuccessful attempt to use monospaced fonts for code/codeblock (we have a font
  which is used as monospaced but doesn't support that property actually)
2020-10-21 22:23:46 +03:00
Roman Volosovskyi 9691626992 [#11189] Backward compatible ENS registrar 2020-10-21 14:28:11 +03:00
Churikova Tetiana e52f6b8753 e2e for mentions, gr chats, fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-20 18:20:37 +02:00
jinhojang6 04cd74e57d Update translation
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-19 16:12:45 +02:00
Andrea Maria Piana b826a34f27 Fix coming back from offline
Fixes: #11305

The issue was due to the fact that the first condition was wrapped in a
when in fx merge, causing it to be ignored.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-19 16:07:29 +02:00
jakub 81cfc83ed3 nix: add info about NDK bundle download issues
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-19 12:07:00 +02:00
andrey ff3f171646 1.8.0 2020-10-16 15:56:29 +02:00
andrey 3ae85cacd5 [#11041] Hardly visible username on replies in dark mode
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-16 15:54:16 +02:00
Gheorghe Pinzaru 36f9436e12 Fix group chat invitation actions based on state
Fix decline button color and Check if user was removed from group invite

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-16 15:39:33 +03:00
Andrea Maria Piana 8c42e717c1 Change settings on toggle
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-16 12:13:32 +02:00
shivekkhurana cf0cd283a6 Add new UI for mailserver selection, Add feature to disable mailserver usage 2020-10-16 12:13:15 +02:00
Gheorghe Pinzaru 316c6038d7 Fix webview toggle crash ios
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-15 13:57:49 +02:00
Andrea Maria Piana f5034a4dfa [Fixes: #11290] Increase group size to 20
Increases the maximum size of a group chat to 20.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-15 13:53:01 +02:00
Roman Volosovskyi cf58a84838 [#11192] Prevent replacing of mention with pubkey inside markdown 2020-10-14 22:20:48 +03:00
Churikova Tetiana dcd2655860 nightly fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-14 14:24:37 +02:00
Serhy 9e0b8e76cf Update refresh webview test
Signed-off-by: Serhy <sergii@status.im>
2020-10-14 13:03:24 +03:00
jinhojang6 40a26f4e10 Upate translation
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-14 10:53:13 +02:00
jinhojang6 094cf61915 Update Spanish Playstore title and description
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-13 14:14:08 +02:00
Roman Volosovskyi c238b6bca5 upgrade react-native-webview 2020-10-09 17:13:18 +03:00
jakub 908b5f723c nix: add support for INFURA_TOKEN var for Android build
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-08 17:55:24 +02:00
jakub 085ae22be1 disable pipefail for update-status-go.sh
This caused a silent failure due to usage of grep matching.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-08 14:49:02 +02:00
Gheorghe Pinzaru 0368895edf Allow to enabled debug
Optimistic update

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-08 13:57:37 +03:00
andrey 905699b686 [#11283] Blank view when open yearn.finance in Status WebView
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-08 12:16:30 +02:00
andrey b198084b78 [#11263] Entering "0x" in the Recipient throws an error
[#11262] Wallet "Done" and "Add to favorites" only appears when the input box is focused

Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-07 19:43:54 +02:00
Churikova Tetiana 2e7c377343 one more fix
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-07 19:42:58 +02:00
Churikova Tetiana 9f36bd44b2 fix e2e with scan tokens 2020-10-07 18:07:42 +02:00
Churikova Tetiana 4e9b1001df fix accessibility 2020-10-07 15:10:13 +02:00
andrey e602f0493d do not show zeros for token balances, and fetch all tokens only when creating new account 2020-10-07 11:44:01 +02:00
Andrea Maria Piana 85991d2272 Set infura token and update snx/synth contract
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-07 10:01:39 +02:00
Churikova Tetiana f3ed1e370a new e2e+fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-10-06 16:50:07 +02:00
jakub bdbc48764e add F-Droid update README file
Signed-off-by: Jakub Sokołowski <jakub@status.im>
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-06 11:23:17 +02:00
Andrea Maria Piana c74a5a5215 [Fix: #11228] Dont drop messages if smaller than 4096
There was an issue with counting characters in status-go that meant that
unicode characters were double counted.

That issue is now fixed. It's still not going to be 100% accurate as
in some languages characters are displayed together if they come one
after the other, but this PR should make it much safer.
To overcome this we could cap the UI input to something a bit lower
(3000 characters for example) and that should give us some room.

This commit includes a migration of the database fixing an issue with
long filenames on desktop.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-06 11:18:08 +02:00
jakub c4cac2cef7 fix availability of INFURA_TOKEN for Android build
The env variable `INFURA_TOKEN` is used at build time of JS bundle, not
the final APK file. We never passed the `secretsFile` to the
derivation for JS bundle so it never saw the `INFURA_TOKEN`.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-05 16:36:05 +02:00
Andrea Maria Piana 966f6de31a Fix infura token
Setting a top-level closure-defines does not have any effect,
it needs to be for some reason inside each environment.

Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-10-05 16:22:14 +02:00
jakub 93ed3eb7ff ci: add public download url to build description
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-01 17:32:10 +02:00
jakub bc12c90d2e update-status-go: fix case where two matching refs exist
Before it was possible to break the format of `status-go-version.json`:
```
 > git ls-remote https://github.com/status-im/status-go v0.62.3.hotfix.3
59e6602405bfbcf8446d26aca9b8087e84529f8e    refs/heads/release/v0.62.3.hotfix.3
59e6602405bfbcf8446d26aca9b8087e84529f8e    refs/tags/v0.62.3.hotfix.3
```
Which would result in `commit-sha1` key being set to two commits insted of one.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-10-01 14:40:30 +02:00
Gheorghe Pinzaru 00ec94b73c Bump navigation libs
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-01 10:18:12 +03:00
Gheorghe Pinzaru 5458c7b2db Allow recovering to see referral flow
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-10-01 10:17:23 +03:00
Gheorghe Pinzaru 92fae99cf7 Hide referrals nightly 2020-10-01 10:16:36 +03:00
andrey 9cd1e08aaa upgrade shadow
Signed-off-by: andrey <motor4ik@gmail.com>
2020-10-01 08:53:10 +02:00
Roman Volosovskyi 6cf3a6a98e [#11212] Mention suggestions based on names parts 2020-09-30 14:02:49 +03:00
jakub c866082cde ci: use more buckets for different builds
* `status-im-releases` for release builds
* `status-im-nightlies` for nightlies

I want to reserve the `status-im` bucket for use with the site.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-09-28 20:10:14 +02:00
Roman Volosovskyi 22ca98b0f8 [#11216] Fix moving cursor after pressing mention suggestion on samsung device 2020-09-28 17:59:03 +03:00
Roman Volosovskyi b5f7a62b14 Fix some UI warnings 2020-09-25 15:13:51 +03:00
andrey abe6e97728 override custom tokens
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-25 14:03:44 +02:00
Churikova Tetiana 6940adf1cb disable collectible e2e
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-25 11:58:20 +02:00
andrey e55cb6b47b [#11218] Hard code fix for SUPR NFT support
Drop collectibles details support
2020-09-25 11:58:09 +02:00
andrey ccd034e7a6 add images
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-25 11:42:17 +02:00
andrey f2da0cbbdb [#11222] Add aUSDC token and optimize search for Aave (LEND) (aka Ethlend) 2020-09-24 16:05:07 +02:00
andrey 1c6da59611 1.7.0 2020-09-23 18:17:46 +02:00
andrey d9bac4a493 [#10667] Upgrade eth-phishing-detect library
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-23 18:17:06 +02:00
jinhojang6 ebf3016644 Update translation
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-23 18:06:42 +02:00
Roman Volosovskyi 345ae359aa [#11179] Nicknames in mention suggestions 2020-09-23 18:34:03 +03:00
Churikova Tetiana b8298dce44 e2e fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-23 14:56:31 +02:00
Gheorghe Pinzaru 1969f9dfe0 Parse childrens in reply text
Fixes #11161

Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-23 07:43:44 +02:00
andrey 8eed842c62 [#11136] Warning to users sending ERC20 directly to smart contract
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 17:24:36 +02:00
andrey b32367a9b2 [#11185] Add UNI, COMP, AAVE, BAL, AKRO tokens
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 16:46:27 +02:00
andrey 7fb243f9f1 [#10060] Wrong ERC20 decimal rounding in "Set max"
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 16:02:56 +02:00
andrey 6b08194a19 [#11194] Change #status-spanish to #status-espanol
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 14:34:13 +02:00
Roman Volosovskyi 55278828e6 Update mention suggestions on selection change 2020-09-22 14:40:00 +03:00
andrey 99755d08e9 fix labels 2020-09-22 12:10:56 +02:00
andrey e95025333f fix android
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 10:23:35 +02:00
andrey ff790d4152 wallet favourites 2020-09-22 10:23:26 +02:00
Churikova Tetiana 6454df4734 e2e wallet fixes
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-22 10:22:12 +02:00
andrey 25dbf1fd61 [#9484] Reintroduce back collapsing of long messages in chats
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-21 18:05:25 +02:00
Roman Volosovskyi 0448edb509 Highlighted mentions in input 2020-09-21 13:10:54 +03:00
Churikova Tetiana 44e3076022 nightly e2e fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-18 17:30:03 +02:00
Roman Volosovskyi 1009b71908 [#11160] Hide blocked users from mention suggestions 2020-09-17 22:32:58 +03:00
Roman Volosovskyi 80faac0ca7 [#11152] Resolve self mentions in group chat 2020-09-17 17:19:24 +03:00
Roman Volosovskyi b43f9e0dfd [#11173] Open profile on tapping self mention 2020-09-17 17:17:25 +03:00
Gheorghe Pinzaru 20b5ad9ebb Always use waku
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-09-17 15:19:32 +02:00
Andrea Maria Piana e2071dc968 [Fixes: #11170] Move some pn settings to advanced
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-09-17 15:07:53 +02:00
Serhy 1b1f3c4c9f e2e fix
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-16 18:08:30 +02:00
andrey 889d4c16a4 [#11163] No margin between "Block this user" button and main tabs panel on user profile view on iOS 2020-09-16 18:08:17 +02:00
Serhy ae0504cbfa Update test to copy formatted text messages
Signed-off-by: Serhy <sergii@status.im>
2020-09-16 18:28:46 +03:00
Volodymyr Kozieiev a95520067f Added ui for asking webview page permissions
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-09-16 12:17:45 +03:00
Churikova Tetiana 56aec16793 nicknames e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-15 18:04:52 +02:00
andrey 0594548617 [#11150] Chat icons are black in dark mode
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-15 14:30:54 +02:00
Gheorghe Pinzaru f7ec945c56 Force transparent color for timestamp android
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-09-15 10:00:57 +03:00
jinhojang6 13e46c2fb0 Update translation
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-14 17:45:08 +02:00
andrey 301f1c8cf2 fix tokens validation
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-14 16:06:52 +02:00
andrey 1e5288a016 fix local nicknames 2020-09-14 12:22:46 +02:00
andrey 59e226bab2 fix local names , mute chat translation, replace null crash
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-14 11:58:45 +02:00
Churikova Tetiana 32cb09c9c6 fix some false failures
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-11 16:29:04 +02:00
Roman Volosovskyi 16fecc2ac6 Mentions suggestions 2020-09-10 22:07:56 +03:00
Andrey Shovkoplyas 0675d0d8d7 ios pn
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2020-09-10 14:12:18 +02:00
Roman Volosovskyi f9df0f367f Get rid of form-2 subs in defview 2020-09-10 13:58:02 +03:00
Roman Volosovskyi 5aa33fc9c0 [mentions] Fix mention appearance in reply and quoted message 2020-09-10 12:51:34 +03:00
Churikova Tetiana 754b826629 accept agreement remove + group invite e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-10 11:35:36 +02:00
Roman Volosovskyi 72daf93a75 [mentions] Open profile tab instead of user profile view on pressing own mention 2020-09-08 16:23:23 +03:00
andrey 89ad4f59d0 [#10179] Create invite link for group chat
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-07 13:32:24 +02:00
andrey 4304a5dd97 [#11046] Add local contact names
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-07 11:42:35 +02:00
Churikova Tetiana fea916590a marks and new checks in e2e
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-04 17:58:34 +02:00
jinhojang6 1a98219690 Update translations
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-04 17:56:51 +02:00
Serhy 3181a7dc20 E2e tests for audio message
Signed-off-by: Serhy <sergii@status.im>
2020-09-04 18:29:39 +03:00
Churikova Tetiana fed52fe309 new e2e and GH report changes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-09-02 20:21:30 +02:00
jakub eac77f84c2 nix: upgrade nixpkgs
Significant updates:
- Git: `2.25.1` to `2.28.0`
- Make: `4.2.1` to `4.3`
- Glibc: `2.30` to `2.31`
- PatchElf: `0.9` to `0.11`
- GoLang: `1.14.0` to `1.14.7`
- NodeJS: `v12.16.2` to `v12.18.3`
- Clojure: `1.10.1.507` to `1.10.1.645`
- OpenJDK: `8u242-b08` to `8u265-ga`
- GoMobile: `20200329` to `20200622`

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2020-09-02 18:06:23 +02:00
Nathan Handler 080584dc2e Add Orchid ERC-20 Token (OXT)
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-02 14:44:12 +02:00
andrey be25ecd4ea [#10974] ENS resolving for IPNS names.
Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-02 14:39:41 +02:00
Александар Симић 2be70cca9a Aligning react versions
When starting the project the following would be spat out:

NPM dependency "react" has installed version "16.11.0"

"16.13.0" was required by jar:file:/Users/alex/.m2/repository
/reagent/reagent/0.10.0/reagent-0.10.0.jar!/deps.cljs

I've bumped up the version in package.json to to match the one being
pulled in by reagent.

Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-02 12:44:26 +02:00
Александар Симић b2a79b3e89 Update nREPL to the latest stable
With the update of Emacs CIDER 0.26.1, it expects to have the latest
cider-nrepl dependency to be at 0.25.3 otherwise it throws an error
when connecting to the project's REPL.

Signed-off-by: andrey <motor4ik@gmail.com>
2020-09-02 11:27:52 +02:00
Gheorghe Pinzaru fdf8d11913 Use monospace font for address and public-key
Swap monospace header

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-08-31 15:51:39 +03:00
Churikova Tetiana 399be0686c e2e enabled
Signed-off-by: andrey <motor4ik@gmail.com>
2020-08-31 10:52:47 +02:00
andrey 0cb554f5c6 [#11113] Can't send image without description in 1-1 and group chats 2020-08-31 10:52:28 +02:00
jinhojang6 2901f4c7cf Update translations
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-08-31 09:36:41 +02:00
Volodymyr Kozieiev 0ab227eef8 Restrict message size on input
Signed-off-by: Volodymyr Kozieiev <vkjr.sp@gmail.com>
2020-08-27 12:53:04 +03:00
Gheorghe Pinzaru 17c408bd06 Use different acquisition gateway based on chain
Do not persist empty tx

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-08-26 14:15:10 +03:00
Churikova Tetiana 716c968a23 new e2e + accessibility
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-08-25 16:44:05 +02:00
Gheorghe Pinzaru 8adc32a5c9 Simplify tabbar animation
Fixes #11086

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-08-25 10:17:45 +03:00
Roman Volosovskyi 2934de9b8c [mentions] Replace all mentions with public keys before sending message 2020-08-24 21:29:12 +03:00
Gheorghe Pinzaru 001789f761 Update translation strings for referrals
Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-08-24 11:28:21 +03:00
Gheorghe Pinzaru 8d8057036a Hide placeholder timestamp with opacity
Fixes #11084

Signed-off-by: Gheorghe Pinzaru <feross95@gmail.com>
2020-08-24 11:27:37 +03:00
Churikova Tetiana 151ef4a952 e2e false failures fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2020-08-20 14:02:00 +02:00
764 changed files with 41614 additions and 22721 deletions
+2 -2
View File
@@ -31,7 +31,7 @@ reagent.dom/dom-node
reagent.dom/force-update-all
status-im.multiaccounts.create.core/get-new-key-code
status-im.ethereum.decode/string
status-im.network.ui.views/mainnet?
status-im.ui.screens.network.views/mainnet?
status-im.data-store.chats/event->string
status-im.mailserver.constants/seven-days
status-im.mailserver.constants/connection-timeout
@@ -65,7 +65,7 @@ mocks.js-dependencies/emoji-picker
mocks.js-dependencies/i18n
mocks.js-dependencies/qr-code
mocks.js-dependencies/svg
mocks.js-dependencies/vector-icons
mocks.js-dependencies/icons
mocks.js-dependencies/webview
mocks.js-dependencies/desktop-linking
mocks.js-dependencies/desktop-shortcuts
+1
View File
@@ -1,5 +1,6 @@
{:lint-as {status-im.utils.views/defview clojure.core/defn
status-im.utils.views/letsubs clojure.core/let
reagent.core/with-let clojkure.core/let
status-im.utils.fx/defn clj-kondo.lint-as/def-catch-all
quo.react/with-deps-check clojure.core/fn
quo.previews.preview/list-comp clojure.core/for
+1 -1
View File
@@ -13,7 +13,7 @@ update_configs:
update_type: "security"
# Keep /mobile/js_files/yarn.lock up to date, batching pull requests weekly
- package_manager: "javascript"
directory: "/mobile/js_files"
directory: "/"
update_schedule: "weekly"
allowed_updates:
- match:
+5
View File
@@ -24,3 +24,8 @@ QR_READ_TEST_MENU=1
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=1
ENABLE_QUO_PREVIEW=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr
COMMUNITIES_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
+6
View File
@@ -23,3 +23,9 @@ KEYCARD_TEST_MENU=1
QR_READ_TEST_MENU=1
ENABLE_ROOT_ALERT=0
ENABLE_REFERRAL_INVITE=1
MAX_IMAGES_BATCH=5
APN_TOPIC=im.status.ethereum.pr
VERIFY_TRANSACTION_CHAIN_ID=3
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
+7
View File
@@ -22,3 +22,10 @@ KEYCARD_TEST_MENU=0
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=1
DISABLE_WALLET_ON_MOBILE_NETWORK=1
APN_TOPIC=im.status.ethereum.pr
BLANK_PREVIEW=0
MAX_IMAGES_BATCH=5
GOOGLE_FREE=0
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
+6 -1
View File
@@ -17,4 +17,9 @@ RPC_NETWORKS_ONLY=0
PARTITIONED_TOPIC=0
CONTRACT_NODES=1
ENABLE_ROOT_ALERT=1
ENABLE_REFERRAL_INVITE=1
ENABLE_REFERRAL_INVITE=0
MAX_IMAGES_BATCH=5
BLANK_PREVIEW=0
COMMUNITIES_ENABLED=1
DATABASE_MANAGEMENT_ENABLED=1
COMMUNITIES_MANAGEMENT_ENABLED=1
+1
View File
@@ -16,4 +16,5 @@ SNOOPY=0
RPC_NETWORKS_ONLY=1
PARTITIONED_TOPIC=0
ENABLE_ROOT_ALERT=1
MAX_IMAGES_BATCH=1
ENABLE_REFERRAL_INVITE=0
+1 -1
View File
@@ -94,4 +94,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(<VERSION>\\)? *\\(site=[a-z,_]*
suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy
[version]
^0.105.0
^0.122.0
+1 -11
View File
@@ -5,8 +5,6 @@
# the repo. Unless a later match takes precedence,
# @global-owner1 and @global-owner2 will be requested for
# review when someone opens a pull request.
* @status-im/status-core
/ci @jakubgs
/fastlane @jakubgs
/scripts @jakubgs
@@ -24,12 +22,4 @@
/components @status-im/status-core-ui
desktop/ @vkjr
modules/react-native-desktop*/ @vkjr
modules/react-native-desktop*/ @vkjr
/doc @oskarth @yenda @jeluard
/deployment @vkjr
/test/appium/ @antdanchenko @churik
/test/appium/ @churik
+17
View File
@@ -0,0 +1,17 @@
name: Zenhub integration assigned
on:
issues:
types:
- assigned
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: status-im/zenhub-automations@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ZENHUB_API_KEY: ${{ secrets.ZENHUB_TOKEN }}
INPROG_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyODI1Mg
NEXT_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyNzk2MQ
REVIEW_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzIyNjk0MTA
+15
View File
@@ -0,0 +1,15 @@
name: Zenhub integration branch
on:
create:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: status-im/zenhub-automations@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ZENHUB_API_KEY: ${{ secrets.ZENHUB_TOKEN }}
INPROG_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyODI1Mg
NEXT_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyNzk2MQ
REVIEW_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzIyNjk0MTA
+17
View File
@@ -0,0 +1,17 @@
name: Zenhub integration milestoned
on:
issues:
types:
- milestoned
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: status-im/zenhub-automations@master
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ZENHUB_API_KEY: ${{ secrets.ZENHUB_TOKEN }}
INPROG_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyODI1Mg
NEXT_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyNzk2MQ
REVIEW_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzIyNjk0MTA
+20
View File
@@ -0,0 +1,20 @@
name: Zenhub integration PR
on:
pull_request:
branches: [ develop ]
types:
- ready_for_review
- opened
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: status-im/zenhub-automations@master
if: github.event.pull_request.draft == false
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
ZENHUB_API_KEY: ${{ secrets.ZENHUB_TOKEN }}
INPROG_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyODI1Mg
NEXT_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzMyNzk2MQ
REVIEW_COLUMN: Z2lkOi8vcmFwdG9yL1BpcGVsaW5lLzIyNjk0MTA
+4
View File
@@ -165,3 +165,7 @@ trace.edn
/app/
project.clj
##appium
test/appium/report/
result.xml
+26 -10
View File
@@ -127,10 +127,17 @@ _tmpdir-rm: SHELL := /bin/sh
_tmpdir-rm: ##@prepare Remove TMPDIR
rm -fr "$(TMPDIR)"
# Remove directories and ignored files
clean: SHELL := /bin/sh
clean: _fix-node-perms _tmpdir-rm ##@prepare Remove all output folders
git clean -dXf
# Remove directories, ignored and non-ignored files
purge: SHELL := /bin/sh
purge: _fix-node-perms _tmpdir-rm ##@prepare Remove all output folders
git clean -dxf
watchman-clean: export TARGET := watchman
watchman-clean: ##@prepare Delete repo directory from watchman
watchman watch-del $${STATUS_REACT_HOME}
@@ -149,12 +156,15 @@ keystore: export KEYSTORE_PATH ?= $(HOME)/.gradle/status-im.keystore
keystore: ##@prepare Generate a Keystore for signing Android APKs
@./scripts/generate-keystore.sh
fdroid-nix-dir: ##@prepare Create /nix directory for F-Droid Vagrant builders
mkdir -m 0755 /nix
chown vagrant /nix
#----------------
# Release builds
#----------------
release: release-android release-ios ##@build build release for Android and iOS
release: release-android release-ios ##@build Build release for Android and iOS
release-android: export TARGET := default
release-android: export BUILD_ENV ?= prod
release-android: export BUILD_TYPE ?= nightly
release-android: export BUILD_NUMBER ?= $(TMP_BUILD_NUMBER)
@@ -162,12 +172,21 @@ release-android: export KEYSTORE_PATH ?= $(HOME)/.gradle/status-im.keystore
release-android: export ANDROID_APK_SIGNED ?= true
release-android: export ANDROID_ABI_SPLIT ?= false
release-android: export ANDROID_ABI_INCLUDE ?= armeabi-v7a;arm64-v8a;x86
release-android: keystore ##@build build release for Android
release-android: keystore ##@build Build release for Android
scripts/release-android.sh
release-fdroid: export BUILD_ENV = prod
release-fdroid: export BUILD_TYPE = release
release-fdroid: export ANDROID_APK_SIGNED = false
release-fdroid: export ANDROID_ABI_SPLIT = false
release-fdroid: export ANDROID_ABI_INCLUDE = armeabi-v7a;arm64-v8a;x86;x86_64
release-fdroid: ##@build Build release for F-Droid
echo "GOOGLE_FREE=1" >> .env.release
scripts/release-android.sh
release-ios: export TARGET := ios
release-ios: export BUILD_ENV ?= prod
release-ios: watchman-clean ##@build build release for iOS release
release-ios: watchman-clean ##@build Build release for iOS release
@git clean -dxf -f target/ios && \
$(MAKE) jsbundle-ios && \
xcodebuild -workspace ios/StatusIm.xcworkspace -scheme StatusIm -configuration Release -destination 'generic/platform=iOS' -UseModernBuildSystem=N clean archive
@@ -234,15 +253,12 @@ endif
lint: export TARGET := clojure
lint: ##@test Run code style checks
yarn clj-kondo --confg .clj-kondo/config.edn --lint src && \
clojure -Sdeps '{:deps {cljfmt {:mvn/version "0.6.7"}}}' \
-m cljfmt.main check $$(git diff --diff-filter=d --cached --name-only src && echo src) \
--indents indentation.edn
TARGETS=$$(git diff --diff-filter=d --cached --name-only src && echo src) && \
clojure -Scp "$$CLASS_PATH" -m cljfmt.main check --indents indentation.edn $$TARGETS
lint-fix: export TARGET := clojure
lint-fix: ##@test Run code style checks and fix issues
clojure -Sdeps '{:deps {cljfmt {:mvn/version "0.6.7"}}}' \
-m cljfmt.main fix src \
--indents indentation.edn
clojure -Scp "$$CLASS_PATH" -m cljfmt.main fix src --indents indentation.edn
test: export TARGET := clojure
test: ##@test Run tests once in NodeJS
+4 -1
View File
@@ -1,6 +1,9 @@
# Status - a Mobile Ethereum Operating System
[<img src="https://play.google.com/intl/en_us/badges/images/generic/en-play-badge.png" alt="Get it on Google Play" height="80"/>](https://play.google.com/store/apps/details?id=im.status.ethereum)
[<img src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" alt="Get it on F-Droid" height="80"/>](https://f-droid.org/packages/im.status.ethereum/)
[<img src="doc/github_badge.png" alt="Get it on Github" height="80"/>](https://github.com/status-im/status-react/releases)
Join us in creating a browser, messenger, and gateway to a decentralized world. Status is a free (libre) open source mobile client targeting Android & iOS built entirely on [Ethereum](https://ethereum.org/) technologies. That's right, no middle men and `go-ethereum` running directly on your device.
[![Getting started with Status](https://i.imgur.com/C0aZZEL.jpg)](https://www.youtube.com/watch?v=oDCSEmS9c3o "Getting started with Status")
+975
View File
@@ -0,0 +1,975 @@
## 1.11
### iOS
#### Excerpt
V1.11 also makes some improvements to the overall Status experience. Improved compatibility with DApps creates a more seamless experience with your favorite DeFi, NFT, and other decentralized applications. Improvements to Status Nodes and fixes to Android notifications have been made for better performance with private, group chats and public chats.
Update in the App Store or Google Play if you do not have auto updates enabled.
For the full changelog, see Github https://github.com/status-im/status-react/milestone/49?closed=1
#### Added
- Add Giphy url support in chat
- The Graph (GRT) erc-20 token added to the default list
#### Changed
- Improved compatibility with DApps
- Sync with Status Nodes improvements
#### Fixed
- Fixes to Android notifications
- UI fixes
- Sluggish performance on private group chats bug
### Android
#### Excerpt
V1.11 also makes some improvements to the overall Status experience. Improved compatibility with DApps creates a more seamless experience with your favorite DeFi, NFT, and other decentralized applications. Improvements to Status Nodes and fixes to Android notifications have been made for better performance with private, group chats and public chats.
Update in the App Store or Google Play if you do not have auto updates enabled.
For the full changelog, see Github https://github.com/status-im/status-react/milestone/49?closed=1
#### Added
- Migrate existing account to Keycard
- Add Giphy url support in chat
- The Graph (GRT) erc-20 token added to the default list
#### Changed
- Improved compatibility with DApps
- Sync with Status Nodes improvements
#### Fixed
- Fixes to Android notifications
- UI fixes
- Sluggish performance on private group chats bug
## 1.10
### iOS
#### Excerpt
Status version 1.10 is here and it is a perfect way to kick off 2021! Another feature rich update that makes the overall messaging, browsing, and transacting experience a whole lot better. Save your most frequently used DApps as favorites for one tap access to DeFi, NFTs, and more. Set a profile image to express yourself in chat. Speed up and cancel pending transactions and pull down to check for new transactions.
#### Added
- Pull to refresh on individual account view
- Save dapps as favorite
- Switch between dapps in multiple tabs
- Banner to find dapps to buy crypto
- Sent message confirmation icon
#### Changed
- Manage dapp permissions without leaving the browser
- Keycard pairing code updated to readible 5 symbol code
- Profile and settings back to most right position in tab bar
#### Fixed
- Visibility of tab bar in dark mode
- Watching accounts for transaction in chat messages (update status)
- Multiple notifications for a single erc20 transfer
- Change group chat name when '/' character is included
- Show transaction in chat for small amounts
- Correction to transaction status in chat
- Rotate mailservers on error return
- Remove unused transport security entries
- Send chat messages in order so that text is always below image
- Performance of list rendering
- Alignment and image flickering issues in status updates
- Disallow multiple pop ups to be shown at the same time
- Add multiple custom history nodes without relogin
### Android
#### Excerpt
Status version 1.10 is here and it is a perfect way to kick off 2021! Another feature rich update that makes the overall messaging, browsing, and transacting experience a whole lot better. Bookmark your most frequently used DApps for one tap access to DeFi, NFTs, and more. Set a profile image to express yourself in chat. Speed up and cancel pending transactions and pull down to check for new transactions.
#### Added
- Pull to refresh on individual account view
- Save dapps as favorite
- Switch between dapps in multiple tabs
- Banner to find dapps to buy crypto
- Sent message confirmations
#### Changed
- Install with deeplink to public chat (Join to fetch messages)
- Manage dapp permissions without leaving the browser
- Keycard pairing code updated to readible 5 symbol code
- Profile and settings back to most right position in tab bar
#### Fixed
- Visibility of tab bar in dark mode
- Watching accounts for transaction in chat messages (update status)
- Multiple notifications for a single erc20 transfer
- Change group chat name when '/' character is included
- Show transaction in chat for small amounts
- Correction to transaction status in chat
- Rotate mailservers on error return
- Remove unused transport security entries
- Send chat messages in order so that text is always below image
- Performance of list rendering
- Alignment and image flickering issues in status updates
- Disallow multiple pop ups to be shown at the same time
- Add multiple custom history nodes without relogin
## 1.9
### iOS
#### Excerpt
With release 1.9, Status gives you the tools to better connect and engage with your friends and communities. You'll find a whole new tab for Status updates. Share what's on your mind and follow what your contacts are up to.
Status updates, and any chat, are now more colorful with opt in link previews.
#### Full
#### Added
* Profile status updates
* Add unfurling of URLs in chats (YouTube)
* Onboarding into public chats
#### Changed
* Add backwards compatibility for ENS Usernames
* Account cards design to accomodate high value accounts
* Rename Status account to Ethereum account for first account on onboarding
* Remove manual fetch 24h in bottom sheet
* Pinch to zoom on images
#### Fixed
* Personal sign method
* Slow asset list
* Loading of older transactions (< April)
* Loading of message history after rejoining a public chat
* Unread message counter update when other user replies to own message
* App crash on navigation from and to generate keys in onboarding
### Android
#### Excerpt
With release 1.9, Status gives you the tools to better connect and engage with your friends and communities. You'll find a whole new tab for Status updates. Share what's on your mind and follow what your contacts are up to.
Status updates, and any chat, are now more colorful with opt in link previews.
#### Full
#### Added
* Profile status updates
* Add unfurling of URLs in chats (YouTube)
* In-app local notifications for transactions(Beta)
* Onboarding into public chats
#### Changed
* Add backwards compatibility for ENS Usernames
* Account cards design to accomodate high value accounts
* Rename Status account to Ethereum account for first account on onboarding
* Remove manual fetch 24h in bottom sheet
* Pinch to zoom on images
#### Fixed
* Personal sign method
* Slow asset list
* Loading of older transactions (< April)
* Loading of message history after rejoining a public chat
* Unread message counter update when other user replies to own message
* App crash on navigation from and to generate keys in onboarding
## 1.8
see https://notes.status.im/release-1.8-notes#
### Android + iOS
#### Excerpt
#### Full
##### V1.8 Release - More people, more private & bug fixes
This release includes updates that further improve private communication and your control over it. Group chats can now include up to 20 members (previously 10). With this increase, group chat preserves it's confidentiality, e2e encryption, and perfect forward secrecy that come with 1:1 private chats; Now usable with larger groups, without negatively impacting the network. Truly private group chats.
Additionally, you can now opt out of 'History nodes' under Sync settings. With this option you control if you are ok sharing your IP address with a server in order to collect messages send while you were offline. In case you didn't know, you can also [run your own history node](https://status.im/technical/run_status_node.html) to connect to.
Finally, when you receive a new ERC-20 token you can now add it to your wallet by tapping 'Scan tokens'.
#### Added
* Increased private group chat size to 20
* Allow users not to connect to history nodes
* Added scan button to fetch ERC-20 tokens
#### Fixed
* Fix browser issues with logging in on github.com
* Fix bug with mentions not resolved in messages with markdown
* Fix blank view when open yearn.finance
* Fix entering “0x” in recipient field
Update in the [App Store](https://apps.apple.com/us/app/status-private-communication/id1178893006) or [Google Play](https://play.google.com/store/apps/details?id=im.status.ethereum) if you do not have auto updates enabled.
The APK available is [here](https://status-im-files.ams3.cdn.digitaloceanspaces.com/StatusIm-Mobile-v1.8.0.apk).
For the full changelog, see our [Github](https://github.com/status-im/status-react/commits/release/1.8.x).
> [Verify APK link before publishing blog post]
>
## 1.7.2
This release fixes an issue with fetching ERC20 balance. It was due to a contract that has been migrated to a different address which cause the whole request to fail.
## 1.7.1
Full release commits: https://github.com/status-im/status-react/commits/release/1.7.1
### Android + iOS
#### Excerpt
Several users have reported an issue in upgrading from release 1.6.1 to release 1.7. This update fixes the issue.
#### Full
Several users have reported an issue in upgrading from release 1.6.1 to release 1.7. This update fixes the issue.
The issue occurs when the application is killed during a migration that is part of the update. Killing the app causes the migration to fail and leaves a persistent database error. This error prevents users from unlocking their profile; Showing an error on password entry. The fix provided above resolves this issue by restarting the migration. It also prevents the issue from occuring if you havent updated yet.
So far weve only received reports on this issue occurring on Android. Were monitoring closely to see if further action is required and will take action to prevent this issue from occuring in future updates. Many thanks to our ambassador tbenr and others who reported this issue.
#### Fixed
Retry failed migration
## 1.7
Full release commits: https://github.com/status-im/status-react/commits/release/1.7.x
### Android
#### Excerpt (446 characters including spaces)
Introducing the ability to mention and be mentioned (Beta). A host of other updates make it easier to recognize people and addresses. Status uses the infamous animal random names by default to provide pseudo-anonymity. You can now give 'Trusting Honeydew Panda' a nickname to recognize them. When sending transactions you can save and select favorite addresses. A safeguard will warn you when sending funds to a contract to prevent loss of funds.
#### Full
Introducing the ability to mention and be mentioned. Note that this feature is in Beta, your feedback is much appreciated. Aside from Mentions, this release includes a host of other updates that are all about making it easier for you to recognize people and addresses. Status uses the infamous animal random names by default to provide pseudo-anonymity. While your best friend might be the 'Trusting Honeydew Panda' you can now give them a nickname to recognize them. Sending transactions got easier with the new feature to save and select favorite addresses. A safeguard will warn you when sending funds to a contract to prevent loss of funds.
#### Added
* Mentions (Beta)
* Local nicknames
* Wallet address selection (favorites, contacts, recent)
* Private group chat invite links
* Warning when attempting to send a transaction to a contract
* New tokens: UNI, COMP, BAL, AKRO, OXT, aUSDC
* Collapse long messages for more readible threads
#### Changed
* Removed the ability to enable using Whisper instead of Waku
#### Fixed
* Upgrade phishing detection library
* Decimal rounding when using 'Set max'
* ENS resolving for IPNS names
* SUPR support for old and new token contract
### iOS
#### Excerpt (496 characters incl spaces)
Introducing privacy preserving notifications on iOS. Paired with the ability mention and be mentioned (Beta). A host of other updates make it easier to recognize people and addresses. Status uses the infamous animal random names by default to provide pseudo-anonymity. You can now give 'Trusting Honeydew Panda' a nickname to recognize them. When sending transactions you can save and select favorite addresses. A safeguard will warn you when sending funds to a contract to prevent loss of funds.
#### Full
Introducing privacy preserving, remote notifications on iOS. Paired with the ability mention and be mentioned. Note that this feature is in Beta, your feedback is much appreciated. Aside from Mentions, this release includes a host of other updates that are all about making it easier for you to recognize people and addresses. Status uses the infamous animal random names by default to provide pseudo-anonymity. While your best friend might be the 'Trusting Honeydew Panda' you can now give them a nickname to recognize them. Sending transactions got easier with the new feature to save and select favorite addresses. A safeguard will warn you when sending funds to a contract to prevent loss of funds.
#### Added
* (Remote) Notifications on iOS
* Mentions (Beta)
* Local nicknames
* Wallet address selection (favorites, contacts, recent)
* Private group chat invite links
* Warning when attempting to send a transaction to a contract
* New tokens: UNI, COMP, BAL, AKRO, OXT, aUSDC
* Collapse long messages for more readible threads
#### Changed
* Removed the ability to enable using Whisper instead of Waku
#### Fixed
* Upgrade phishing detection library
* Decimal rounding when using 'Set max'
* ENS resolving for IPNS names
* SUPR support for old and new token contract
## 1.6.1
### Android + iOS
#### Excerpt
Introducing a spam mitigation
#### Full
Introducing a spam mitigation
##### Fixed
- Restrict message size on input
- Drop messages based on character length
## 1.6
### Android
#### Excerpt
#### Full
This release includes a small, but important change to existing functionality: Onboard using a 'Referral URL'. You can confirm that you discovered the app through a partner of Status (Opt-in only). It also includes a fix to a persistant bug that resulted in messages not being marked as seen.
##### Changed
- Attribute a referrer when installing and onboarding to the app using a Referral URL
##### Fixed
- Mark 1:1 messages as seen (Badge kept reappearing when tapping 'Add as contact')
### iOS
#### Excerpt
#### Full
This release includes a fix to a persistant bug that resulted in messages not being marked as seen as well as an issue that caused the app to crash.
##### Fixed
- Mark 1:1 messages as seen (Badge kept reappearing when tapping 'Add as contact')
- Crash on iOS when device passcode is switched off and 'Save password' is enabled inside the app
## 1.5
### Excerpt (493 characters excl url)
Now including those features that make you feel connected while being miles apart. If there was a time you wondered if you could chat with friends and family, without giving up your privacy or security, wonder no more. Send images, audio messages, and show your love with emoji reactions ❤️; Not a word is sent to the cloud. #appdown is not a thing. E2E encryption is. If you have Internet you can send and receive messages. Securely. Privately. Always.
For the full changelog, see our Github
### Full
Now including those features that make you feel connected while being miles apart. If there was a time you wondered if you could chat with friends and family, without giving up your privacy or security, wonder no more. Send images, audio messages, and show your love with emoji reactions ❤️; Not a word is sent to the cloud. #appdown is not a thing. E2E encryption is. If you have Internet you can send and receive messages. Securely. Privately. Always.
Making new friends on open communities is now easier as well. We took the liberty of surfacing a few active public chats by category.
For the full changelog, see our Github
#### Added
* Send images in 1:1 and group chats
* React with emojis to any message
* Send voice messages in 1:1 and group chats
* Discover public chats by category
* Ability to delete an account
#### Changed
* Major interface improvements throughout, introducing our Quo component framework
* Auto-forwarding of the onboarding carousel
* Clarify and move 'Access existing keys' to import accounts
* Showing password entry and confirmation on the same screen
* Add contacts or invite friends from Contacts
* Searchbar includes search for ENS names
#### Fixed
## 1.4.1 - Round of improvements
### Excerpt
This intermediate release, 1.4.1, includes bug fixes as well as UX and accessibility improvements. Most visibly, a gorgeous set of new icons, accessible input fields and toggling password entry visibility. Next to that the release includes updates to Notifications on Android, like being able to open Status, as well as close the notification service, directly from the notification banner.
For the full changelog, see our [Github](https://github.com/status-im/status-react/commits/release/1.4.x)
### Full
While focused on building new features there are a few improvements we did not want to hold off on sharing. This intermediate release, 1.4.1, includes bug fixes as well as UX and accessibility improvements. Most visibly, a gorgeous set of new icons, accessible input fields and toggling password entry visibility. Next to that the release includes updates to Notifications on Android, like being able to open Status, as well as close the notification service, directly from the notification banner.
For the full changelog, see our [Github](https://github.com/status-im/status-react/commits/release/1.4.x).
#### Added
- Language support for Keycard use with Status (see our supported languages in [FAQ](https://status.im/faq/))
#### Changed
- Open the app and close the notification service from the notification banner
- More informative error messages for transaction overview contract and network fees
- Added a check for encoded characters in urls to increase browser security
- More accessible text input
- Replace icons with a more unified, carefully crafted set
- Update connectivity snackbar to explain messages can still be send and received when offline; only history does not sync
#### Fixed
- ENS name is no longer infinitely pending when transaction has failed
- Added explainer that restart of the app is required to Disable logs
- Changed notification icon styling to follow convention of other apps
- Fixed critical issue that caused occasional app crashes
- Now giving feedback when blocking users is in progress
- Apply dark mode/light mode changes to System panel
- Update balance of custom tokens to be visible upon adding the token
- Show chat view after chat search gives no results (chat list showed up empty)
- Bring back numpad to sign with Keycard after dismissing an error (e.g. having tapped an unpaired card)
- Keyboard changes (include decimals for amount input and auto-capitalization)
## 1.4 - Keycard, notifications DRAFT
In version 1.4, Status introduces a much anticipated integration with Keycard - the secure, contactless hardware wallet, also designed and developed by The Status Network. This integration enables Keycard holders to store their private keys offline on the Keycard device, add hardware-enforced authorizations to all of their transactions, and introduce two-factor authentication to log into their Status account.
Another highly anticipated feature is the introduction of notifications. These notifications are [ANDRE to add detail]....
The final addition to v1.4 is the introduction of browser support for EIP 1139 A JavaScript Ethereum Provider API for consistency across clients and applications.
Beyond that, version 1.4 includes some updates to the FAQ, extended translation support, and some fixes to ENS username displays, dark mode contrast, QR code scanner and more.
For the full changelog, see our [Github](https://github.com/status-im/status-react/commits/release/1.4.x).
#### Added
- Keycard integration on Android
- Browser support for eip-1193 (?)
- Notifications (Android)
- Content type for images in preparation of 'Images in chat' release
#### Changed
- Extended and consolidated FAQ
- Extended translation support
- Animation in header (Profile + Wallet)
#### Fixed
- ENS in chat only when transaction is confirmed
- Dark mode contrast (increased)
- Updated and expanded token icons
- Resolved error on scrolling account view
- Parse markdown in subheader chat list
- Banner to back up seed phrase tappable
- [Chat performance improvements](https://github.com/status-im/status-react/pull/10711)
- QR code scanning issue when scanning from join.status.im
## 1.3 - Dark Mode, Group Chat
In version 1.3, Status catches up to the most important design trend in recent history with the introduction of a dark mode.
Hyperbolic? Perhaps, but we've heard your requests and we made it happen. Your app's appearance will now default to match your system settings, but if you'd like, you can head to `Profile` > `Appearance` to override it. Dark mode sure is easy on the eyes.
Beyond that, we're bringing back private groups, another highly requested feature. Private groups allow you to add up to 9 friends to an invite-only chat. At the protocol level, group chats in Status function similarly to 1:1 chats. They're encrypted end-to-end and utilise perfect forward secrecy to protect your privacy.
In the future, we'd like to expand these to host more than 10 members. We'll embark on further testing to determine the upper limit that our current protocol can support.
Lastly, we've changed our webview implementation over to the react-native-community package, to remain in sync with the React Native community and benefit from upstream improvements.
As always, we've also included a few nice fixes in this release. For the full changelog, [see our Github](https://github.com/status-im/status-react/commits/release/1.3.x).
#### Added
- Dark mode
- Group chat
#### Changed
- Browser implementation now using react-native-community webview package
#### Fixed
- Updates to back navigation
- Persistant wallet value
- Update to all text input, increasing pressable areas
- Improved seed phrase text input on small screens
- Easier to find user's public key for sharing (https://github.com/status-im/status-react/pull/10207#event-3163431514)
- Shortened universal links (https://github.com/status-im/status-react/issues/10083)
## 1.2
### Short Version
The change log is small, but significant! We've enabled mailservers that use our forked version of Whisper, known as Waku. Waku servers reduces bandwidth consumption by the app and enable Status to serve more concurrent users.
A few bug fixes and optimizations are included, too.
### Blog Post
This release is one of the most important in Status' history. The change log is small, but significant. Today we're rolling out new mailservers that use our fork of the Whisper messaging protocol, known as Waku.
Waku mailservers prevent Status from using excessive mobile bandwidth. With Waku, Status can support 10 times as many users as with Whisper servers alone.
Regular Whisper mailservers use topic-based filters to surface only the chats that you want to see, but your device still receives all messages sent over the network. Filtration happens after the fact.
To save on resources, Waku mailservers simply tell other nodes in the network which topics your device would like to receive content for, filtering before the messages reach your device.
Heavy message traffic can be incredibly resource intensive, depending on how many topics you follow. For a heavy user, the difference can amount to several hundred kilobytes of data per minute.
There is a potential privacy tradeoff in making your followed topics apparent to other nodes—it is easier to know if a given IP address belongs to a certain chat.
In v1.2, we offer the legacy Whisper servers as an option under `Advanced` settings. You can disable Waku by toggling `Waku enabled`. Waku mailservers talk to existing mailservers without any disruption.
With further improvements to Waku in the pipeline, Status becomes accessible to even more users and can deliver peer-to-peer messaging without draining unnecessary data.
### Changelog
#### Changed
- Waku mailservers
- Updating wallet fiat prices even more frequently (awaiting clarification)
#### Fixed
- App crashing when webview is closed
- Messages not showing when received while on a different tab
- Token balances displayed as 0 after relogin
## 1.1
Biggest changes:
- Status now support importing private key and seed phrase inside multiaccount!
(https://github.com/status-im/status-react/pull/10100)
- all chat dialogs moved to bottom sheet
- added "Mark all as read" option
- unread badge is changed for public chat
More detailed:
ENS name improvements:
- https://github.com/status-im/status-react/pull/9952 - fixes ENS to new registry
- https://github.com/status-im/status-react/pull/9997 - Check for empty public key (for ENS names)
- https://github.com/status-im/status-react/pull/10007 - improve ENS display in Public chats
- https://github.com/status-im/status-react/pull/10022 - fix crash on long ENS names
General improvements:
- https://github.com/status-im/status-react/pull/10027 - deep link handling (rename get.status.im to join.status.im)
- https://github.com/status-im/status-react/pull/9940 - changed navigation on logout
- https://github.com/status-im/status-react/pull/9917 - added search to currencies and assets
- https://github.com/status-im/status-react/pull/9941 - improvement on snackbar by considering login time (less "Offline", "Connected" after login)
- https://github.com/status-im/status-react/pull/9898 - added qr code reader for scanning QR when add watch-only address
- https://github.com/status-im/status-react/pull/9882 - Respond to FaceID failure callback
- https://github.com/status-im/status-react/pull/9915 - Make bottom sheet height dynamical
- https://github.com/status-im/status-react/pull/9931 - 2 lines for user name on intro screen
Chat improvements:
- https://github.com/status-im/status-react/pull/10056 - added "Mark all as read" feature
- https://github.com/status-im/status-react/pull/9993, https://github.com/status-im/status-react/pull/9999 - better handling of ENS names / chat keys when starting new chat
- https://github.com/status-im/status-react/pull/10117 - reworked unread message indicator in public chats
- https://github.com/status-im/status-react/pull/9868 - all chat dialogs are moved to bottom sheets
Performance improvements:
- https://github.com/status-im/status-react/pull/9995 - Offload chat messages
- https://github.com/status-im/status-react/pull/10120 - Android app UI is slow after background
Issues fixed:
- https://github.com/status-im/status-react/issues/10002
- https://github.com/status-im/status-react/issues/8797
- https://github.com/status-im/status-react/issues/6839
- https://github.com/status-im/status-react/issues/9754
- https://github.com/status-im/status-react/issues/10044
- https://github.com/status-im/status-react/issues/10041
- https://github.com/status-im/status-react/issues/9886
## 1.0
### Blog Post
Status version 1 is live!
After nearly a year of quiet and focused development, we've restructured the core application, built out the promises of the white paper and prepared the app for a future in which the Status Network seeks to deliver on the promises of Ethereum at large.
While the core mobile application is no longer the sole focus of the Status Network, it is integral to our dream of a decentralized web. With Status, we're building not just a tool for private and secure communication, but a gateway into an emerging ecosystem of distributed applications that embodies what is possible with decentralized technologies today. We believe apps like Status represent the future of the web—enabling an internet that can uphold human rights, and providing a path towards more open and equitable systems.
Today, the underpinninngs of the core application are still tethered to the Ethereum stack. Whisper is still the communication layer of Status, and Status is still the only production use case of Whisper.
The scalability of Whisper is not significantly improved from what it was roughly three years ago, when we first embarked on this project. We face immense challenge in building on this stack every day.
But we also feel ready to share our progress with the world. Status version 1 launches with the Ethereum wallet, web3-enabled browser and peer-to-peer messenger that our community knows well. It includes new SNT utility features, like a sticker marketplace and a decentralized DApp directory (https://dap.ps). Other white paper features, such as the fiat-to-crypto Teller Network and incentivized messaging with Tribute to Talk, are well underway.
Most pressingly, we're working to remedy the limitations of Whisper. In a forthcoming release, we'll introduce Waku mailservers, which will reduce the amount of bandwidth Status consumes—an important point for accessibility—and extend the capabilities of our nodes so that Status can support more concurrent users.
[Link to user guide]
[Link to roadmap]
[Shoutout contributors & team]
Huge shout out to our contributors:
Enrico
Yalu (user GH name)
Acolytec3
-----
**Support comms**
- How to submit stickers for sticker marketplace ([google form](https://docs.google.com/forms/d/19itZB_V5bVW4cyV8a2ifDWHuQSr9V_dkVMCl6ARxOag/edit))
- How to share your feedback with us (#status, primarily)
- Learn more about Status - Glossary, [FAQs up-to-date](https://status.im/docs/FAQs.html), [user guide by Jonny](https://docs.google.com/presentation/d/11o53KGcuzKouDU5VBeTB01mLCm41hKKuraz-AaudsEg/edit#slide=id.p)
- How to release your ENS name ([here](https://hackmd.io/QrfTRP6sQ9aQzjFyb_IfRQ?both))
- How to set up your existing ENS name ([here](https://hackmd.io/QrfTRP6sQ9aQzjFyb_IfRQ?both))
-----
**v1.0 Change Log**
**Added**
• Support for multiple Ethereum wallets within one Status account
• Generate unlimited additional BIP 44 wallets in Status
• Add watch-only addresses as well
• Brand new onboarding and key encryption flow
• Choose your random name and public chat key during onboarding
• You also can recover a seed phrase from any mnemonic compatible wallet
• Improvements to wallet transaction flow UI
• Sticker market and two initial sticker packs
• Choice of wallet to use when interacting with Dapps
• [Proper markdown support](https://github.com/status-im/status-react/pull/9409#issue-338045622)
• ENS username setting option for use in chat
• Improved chat intro screen and public chat list
• Updated chat command flow, with additional privacy layer to be compatible with multiaccount
**Removed**
• Custom display names
• Custom profile photos, temporarily—photos will become a feature of ENS
• Push notifications—these will be improved and reintroduced for Android
• Group chat, temporarily—fixes to be prioritized for v1.1
• Google Firebase database and Realm.js DB—performance gains, and more in line with our principles (fewer third party services)
**Changed**
• Algorithm for deriving public chat key changed, performance. (andrey review: pubkey or 3 word name?, not sure if Algorithm for deriving pubkey can be changed)
• Storage of app state moved to Status-go—performance improvements in chat load times
• Browser privacy mode enabled by default, option removed (EIP1102)
• Updates to EIP1102 for compatibility (https://github.com/status-im/status-react/pull/9629)
• Protocol breaking changes: removed transit encoding in favor of protobuf, for better performance and interoperability with other languages
• Roughly 45% improvement in how quickly chats load
• Profile screen cleaned up
----
> Names and picture have changed as we use a different algorithm to generate it (linear > > feedback shift register instead of Mersienne Twister).
> There are breaking changing between protocol, as agreed before, so no compatibility at all. Previous version won't be able to receive/send messages to v1.
> We confirmed the performance improvement with the test-team, roughly 45% improvement in how quickly chats load (maybe greater).
>indeed, true, good move to make together.
> but I would suggest to also add in the release changelog that the algorithm for deriving a > pubkey -> 3 word name changed, just because a standard was changed
> this is also good to say because there is performance gains.
## 0.13.2
- V1 notification
- Bug fixes:
- Neverending loading indicator (#8550)
- Last message jumps after chat is opened (#8556)
- Sticker Market with two packs launched on mainnet
- Account explorer in preparation for multi-account
- Onboarding face lift (preparing for multiaccount/keycard)
## 0.13.0
This release comes with a long change log and one popularly requested new feature: custom, user-added ERC20 token support.
If you'd like to see a token that the Status wallet does not display by default, you can now add it yourself. From the wallet screen, open `Manage Assets` from the `...` menu and select `Add custom token`. Fill in the token's contract address, and the relevant information, and you will then be able to view this asset in your wallet.
We've also added and altered our privacy settings:
1) New `Preview privacy mode`: toggling this option in your profile will ensure that Status displays a blank screen when switching apps on your phone, to protect you from accidentally exposing your information while doing other things. Thanks to contributor [bitsikka](https://github.com/bitsikka) for this feature!
2) `Browser privacy mode` has been relocated from the profile to the browser, and reconfigured into a two option setting. Selecting `Require my permission` for this setting ensures that privacy mode is on, but still means that some DApps may be incompatible with Status.
![](https://notes.status.im/uploads/upload_c9ea844cdcdc1ce5a786373ac08521bc.png)
There are a few more important changes:
- `Fetch more messages` was introduced in 0.12.0 to fill gaps in your message history; it now backfills gaps of up to 30 days in public chats, increased from 24 hours.
- We've removed the swipe functionality from the chat screen. To remove a chat, you can now tap on it and hold, pulling up a bottom menu. Another shout out to [bitsikka](https://github.com/bitsikka) for this change!
- We've reintroduced bug reporting on both iOS and Android: shake your phone to pull up an email report, or enable `Development mode` from your profile screen to `Report a bug` from there.
Lastly, we've had some great contributions from the community for this release. They've added new features, refactored and even merged some changes to our developer tools.
Special thanks to [tbenr](https://github.com/tbenr), [bitsikka](https://github.com/bitsikka), [m0ar](https://github.com/m0ar) and [alexanmtz](https://github.com/alexanmtz) for your recent [commits](https://notes.status.im/CgruSsRzQVGhsagaLxXGqQ?view#0130-mobile-release)!
To get involved, you can find our current bounty issues on Gitcoin [LINK].
**Added**
- Custom, user-added ERC20 support
- New bug reporting options: shake device to send a report, with logs attached
- Bloom Protocol token - thanks to contributor [m0ar](https://github.com/m0ar)!
- Preview privacy mode to display blank Status screen when switching apps - thanks to contributor [bitsikka](https://github.com/bitsikka)!
- URLs for transactions open in Status (partial [EIP681](https://github.com/ethereum/EIPs/blob/master/EIPS/eip-681.md) support)
**Changed**
- Moved `Browser privacy Mode` toggle to the browser screen as new preference setting
- `Fetch more messages` button now retrieves up to 30 days of history in public chats
- Long press a chat for more options; no more swiping
- Fewer messages rendered before a chat is scrolled for better performance ([8191](https://github.com/status-im/status-react/pull/8191))
- Using checksummed addresses in wallet (EIP55) ([8121](https://github.com/status-im/status-react/issues/8121) and [4959](https://github.com/status-im/status-react/issues/4959))
- Scanning QR code from a DApp does not cause redirect
**Fixed**
- Browser crash when incorrect domain entered ([8239](https://github.com/status-im/status-react/issues/8239))
- ENS registration bug ([8249](https://github.com/status-im/status-react/issues/8249))
- Wallet balance updates correctly after Tx received ([8107](https://github.com/status-im/status-react/issues/8107))
- Support for EIP1577/`contenthash` field for ENS
- Numeric validation for `send`/`receive` chat commands ([1442](https://github.com/status-im/status-react/issues/1442))
- Allow to select chat item below plus button ([7859](https://github.com/status-im/status-react/issues/7859))
## 0.12.0
In this release, we're announcing the launch of Discover!
Discover is our new portal for exploring the decentralized web. It has long been our vision for Status to act as a gateway to the new web, just like Chrome or Safari do for web2.
Until this point, however, we've prioritized a curated list of DApps over an open-ended experience.
With the launch of Discover, our browser becomes just that—a browser, with special capabilities for web3.
Discover is its own web app and the new go-to for finding DApps. For now, we've ported over our existing list, with a few upgrades to the UI.
But in the near future, we're decentralizing Discover, enabling anyone to add a DApp and giving the community control over curation through an SNT voting mechanism. More on that [here](https://our.status.im/discover-preparing-for-launch/).
Discover can be accessed from any browser at https://dap.ps, so you can participate on desktop as well.
This release also comes with a noteworthy chat improvement. Previously, a gap in connection to the mail servers—which happens if Status is closed for more than 24 hours or otherwise loses connection—meant that some messages might be lost.
We now detect gaps where messages are missing and offer you the option to fetch the missing history. By tapping `Fetch messages` when it appears within a chat, you can backfill missing history. This is a big step forward for reliability in our peer-to-peer service.
**Added**
- `Fetch messages` option to get missing message history
- Discover is live on https://dap.ps
**Changed**
- `DApps` screen is now fully browser-centric with address bar, history and a link to Discover
**Fixed**
- Contact syncing between 0.11.0 and newer builds
- 503 error when accessing DApps
- More reliable history for token transactions
## 0.11.0
Download 0.11.0 and you'll notice one thing right away: we have a new navigation!
The home screen has been split into two tabs: Chats & DApps. From the chat view, you'll find the option to start or join a new chat has moved from the top right corner to bottom center.
The DApp list also looks slightly different. We've done away with info screens for each DApp. Once you navigate to a URL, you'll find that your browser history appears under a `Recent` section at the top.
This is phase one of bigger improvements to come, so we'd love to hear your feedback.
We've also made preparations for the impending [Chaos Unicorn Day](https://chaos-unicorn-day.org/) in this release.
Reminder: On April 1st, we'll experiment with eliminating all centralized, third party services from Status, including our own node clusters. To safeguard from the chaos, we've prepared [a guide for you](https://our.status.im/bulletproofing-against-chaos-unicorns-with-status-on-arm/).
**Added**
- New DApps added
- New extensions features integrated within Status
- Chaos mode and preparation for Chaos Unicorn Day
**Changed**
- New bottom navigation: chats & DApps are separated
- Improved UI performance (https://www.pivotaltracker.com/story/show/164245989)
**Fixed**
- Universal link to public chat bug (https://github.com/status-im/status-react/issues/7549)
- Beta warning popup (https://github.com/status-im/status-react/issues/7771)
- DApp offline error (https://github.com/status-im/status-react/issues/7188#issuecomment-474308724)
- Bug with QR code scanner for custom bootnodes (https://github.com/status-im/status-react/pull/7782)
- Error message when entering an incorrect custom mailserver (https://github.com/status-im/status-react/issues/7752)
## 0.10.1 - Hot Fix
**Added**
- Option for automatic mail server selection to optimize connection
**Fixed**
- Copy errors corrected
- "Fetching messages" indicator appears on home screen
## 0.10.0
A handful of exciting new features and fixes coming to you fresh in 0.10.0.
First, a word about our new version numbers. Until now, our build versions have followed a convention of minor increments: 0.9.31, 0.9.32, 0.9.33. To better reflect the scope of our releases, we've [decided to level up](https://discuss.status.im/t/new-status-versioning-scheme/1066) to 0.10.0 and increment by 0.1.0 for typical releases, and 0.0.N for bug fixes. Our routine is business as usual otherwise.
Onto the highlights from 0.10.0.
The option to block a user will come in handy for those who participate in popular public chats. If someone is spamming a chat or otherwise bugging you, simply tap on their icon and hit `Block contact` from their profile. You'll no longer see any of their messages.
From _your_ profile screen, you can undo this action via a new contact list feature. Open `Contacts` to find a list of users who are able to see your info—namely, photo and display name—and from there, `Blocked users` to see and unblock users as you wish.
To better find users you _do_ want to hear from, we've added a search bar to the home screen. This allows you to filter through chats and browser history items. Text search within a chat is still to come.
Back on your profile screen, you'll find another helpful new option to control message syncing. If on a mobile network, you can require Status to ask before syncing conversations, in order to protect against heavy data usage. You can also enable mobile network syncing by default, or turn these options off completely.
You'll also find a new DApp permissions section here. DApps that adhere to browser privacy mode [ask permission](https://our.status.im/0-9-33/) to access your Ethereum account. You can now revoke access for a given DApp using these settings.
And that concludes the most significant changes of this release! For more, check out the change log below.
**Added**
- Ability to block specific users from profile view
- Contacts and blocked users list
- Search bar for chats and browser history
- Option to turn off syncing for chat on cell connection
- DApp web3 permissions management
- New DApps and WBTC token
**Changed**
- Push notifications include sender name
- Contact updates pushed periodically to better maintain user data
- Public chats show first letter instead of #
- Minor tweaks to chat UI
**Fixed**
- Status now works on restricted [ports](https://github.com/status-im/status-react/pull/7382)
- Overlap on small screens during log-in
- False mailserver connection error [removed](https://github.com/status-im/status-react/issues/7531)
- Premature sending of contact requests on Profile > Send message
- DApps on same host (i.e. IPFS) no longer share user-granted permissions
Ready to update to 0.10.0?
iOS
Within TestFlight, make sure you see version 0.10.0 and tap INSTALL.
If you dont currently have Status installed, access via TestFlight here: https://testflight.apple.com/join/J8EuJmey.
Android
If you are not automatically asked to update, go to Status.im in the PlayStore and click Update.
For more information, please join us in Status.
We're more than happy to answer your questions and help you out.
---
Social copy:
Release 0.10.0 is here! A whole bunch of exciting features, blocking contacts, searching, & more. Check out the blog for more details and update Status. our.status.im/0-10-0/
## 0.9.33
We're back in action! After a pause for the holidays and a transition back that saw us release 4 small updates to v.0.9.32, we've got a brand new mobile version for you.
This release is a big one.
First, we've made significant improvements to log-in, yielding a 10x increase in log-in speed. Android users will also be pleased to find a "Save password until logout" toggle to match iOS. This will save you significant time on launch of the app.
Push notifications are improved by a number of fixes, including opening to the appropriate chat and no longer exposing your language settings to recipients using a different language than your own.
Because of these fixes, anyone using an older version of the app **_will not receive notifications_** from users on v.0.9.33. Furthermore, iOS users will not receive push notifications while the app is closed, nor if they are on certain iOS versions (11.X). This is a known and temporary issue.
Browser privacy mode is now enabled by default. This means that DApps will be required to ask permission before connecting to your wallet, and it may cause some DApps to break. If you find a DApp isn't working, you can go to your profile screen and toggle privacy mode off. In many cases, this should fix the issue.
We're hopeful that more and more DApp developers will be up to speed with this new convention soon.
Device pairing is no longer hidden under development mode. Visit the device section on your profile screen to "Pair this device" and sync messages and contacts from your phone to desktop. You can also name your devices to track which you've paired.
For the full list of changes, see below.
**Added**
- Device pairing and naming
- "Save password until logout" for Android
- New DApps including Aragon and Dragonereum
- BUFF token for ETHDenver
- Titles and favicons in browser
- Support for EIP1577, multihash interface for ENS names
**Changed**
- Privacy mode enabled by default
- Log-in time improved 10x
- Private group chats limited to 10 members
- Connectivity loading indicator no longer appears as "Fetching messages"
- Chat bubble width increased
- Ethereum provider consistent with EIP1193
- Upgraded styling for group chats
**Fixed**
- Metadata leakage of language settings in push notifications
- Push notifications failing to open chat
- Loading indicator in browser
- Results displaying properly in Etheroll
- Issues with extensions installation
- Wrong password handling
-------
_Notes to call out_
- Privacy mode by default instructions
- Breaking change: no PNs for old versions after next mobile release - https://github.com/status-im/status-react/pull/6893
- Setting up device pairing
## 0.9.32
Introducing beta support for Private group chats!
In this release youll find the ability to start private group chats with your friends. These group chats are e2e encrypted and utilize Signal's [double ratchet algorithm](https://en.wikipedia.org/wiki/Double_Ratchet_Algorithm) for guaranteed privacy. To start chatting go to the Home tab, tap "+", then Start group chat.
There is also beta support for device pairing between all devices. To begin syncing messages and contacts across devices, go to Profile, tap advanced and turn on development mode, now go to devices and tap pair this device.
Added
- Private group chats with increases security using Signal's double ratchet algorithm (In beta. Still being tested. Feedback welcome!)
- Device pairing and syncing with perfect forward secrecy (in dev mode)
- Added DApp Decentraland
Changed
- Support multi-extensions store
- Restyled wallet onboarding flow, main wallet screen, and sent-transaction screen
- Faster sign-in
Fixed
- Transaction history fixes
- Updating enabled tokens before navigating to wallet
[All changes](https://github.com/status-im/status-react/compare/release/0.9.31...release/0.9.32)
## 0.9.31
Version 0.9.31 brings Status up to speed with the latest privacy standard for Ethereum browsers, introduced by EIP1102.
You'll find a new privacy setting on your profile screen called "Browser privacy mode."
If you toggle this setting ON, DApps will be required to ask your permission before accessing your Status wallet. DApps that do not currently follow this standard may not work!
If you run into trouble, you can always toggle this setting OFF. With Browser privacy mode OFF, DApps can access your Status wallet without your permission.
We're encouraging DApp builders to adopt this new standard and make web3 safer for users as soon as possible. Check the Status blog for details on how to comply.
Added
- Browser privacy mode to toggle new web3 security setting on or off
- New DApps: Crypto Takeovers, Cryptographics, blockimmo and SNT Voting DApp
- ST to assets list
Changed
- Changing mailserver no longer requires a logout
- Send button is inactive when there isn't an active internet or mailserver connection
Fixed
- ENS addresses with unregistered chat IDs no longer resolve in chat
- CryptoKitties log-in issue
- Restored missing transaction error messages
- Granting profile access applies per DApp rather than per host
[All changes](https://github.com/status-im/status-react/compare/release/0.9.30...release/0.9.31)
## 0.9.30
Added
- ENS registration link on profile screen
- Kudos tokens for the Status #CryptoLife Hackathon
- Reply and quote a message in chat. Long tap a message and tap Reply.
- Chat now resolves all .eth address
- New Farsi and Latin American Spanish translations
- Every Dapp gets its own built in chat room. Tap the chat icon from the Dapp browser to start chatting
- Added Kickback Dapp
- New custom RPC networks for POA Network and xDAI Chain
Changed
- Anonymous names now shown in chats and profile
- Disabled "sign transaction" button when offline
- Renamed default international public chats to ensure universal links would work. For example “status 中文” was changed to “status-chinese”.
- Removed Instabug for bug reports. In-app help is now available in #status
Fixed
- Fixed an issue where messages are not saved to the database in some circumstances
- Fixed an error when fetching history on certain accounts
- Fixed logging in after logout when opening app from a notification
- Fixed profile QR code
- iPhone XS Max improvements
Known Issues
- POA and xDAI networks are only available for new accounts, not upgrades
- For more POA and xDAI network considerations see this issue post.
## 0.9.29
This releases improves message validation to prevent potential crashes or malformed messages. We recommend all users upgrade.
The fix makes these improvements:
- add validate method to StatusMessage protocol
- spec all message types for use in validate method
- use valid method after transit/decode step to reject invalid messages
## Older Versions
- [Google docs](https://docs.google.com/document/d/1Z0mFlJJkNbRgv6qm80ob5g4PEvsI8cTmbwZpcRPWPho/edit#)
+1 -1
View File
@@ -1 +1 @@
1.6.1
1.12.2
+13
View File
@@ -123,6 +123,11 @@ def jscFlavor = 'org.webkit:android-jsc:+'
*/
def enableHermes = project.ext.react.get("enableHermes", false);
/**
* Exclude google library so we can publish to external android stores
*/
def googleFree = project.env.get("GOOGLE_FREE", false)
def getVersionCode = { ->
new ByteArrayOutputStream().withStream { stdOut ->
if (project.hasProperty("versionCode")) {
@@ -322,6 +327,14 @@ dependencies {
implementation jscFlavor
}
if (googleFree) {
implementation(project(':react-native-device-info')) {
exclude group: 'com.google.firebase'
exclude group: 'com.google.android.gms'
exclude group: 'com.android.installreferrer'
}
}
// react-native-screens
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02'
+2 -5
View File
@@ -25,10 +25,6 @@
<uses-permission android:name="com.android.vending.BILLING" />
<!-- these permissions should be removed -->
<!-- React Native unnecessary permissions (https://github.com/facebook/react-native/issues/5886) -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" tools:node="remove"/>
<application
tools:replace="android:allowBackup"
android:allowBackup="false"
@@ -74,7 +70,8 @@
</intent-filter>
</activity>
<activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
<service android:name="im.status.ethereum.module.ForegroundService"></service>
<service android:name="im.status.ethereum.pushnotifications.ForegroundService"></service>
<service android:name="im.status.ethereum.module.LocalNotificationsService" />
<provider
android:name="androidx.core.content.FileProvider"
android:authorities="${applicationId}.provider"
@@ -18,6 +18,7 @@ import java.util.List;
import im.status.ethereum.keycard.RNStatusKeycardPackage;
import im.status.ethereum.module.StatusPackage;
import im.status.ethereum.pushnotifications.PushNotificationPackage;
public class MainApplication extends MultiDexApplication implements ReactApplication {
@@ -30,10 +31,12 @@ public class MainApplication extends MultiDexApplication implements ReactApplica
@Override
protected List<ReactPackage> getPackages() {
StatusPackage statusPackage = new StatusPackage(RootUtil.isDeviceRooted());
List<ReactPackage> packages = new PackageList(this).getPackages();
packages.add(statusPackage);
packages.add(new ReactNativeDialogsPackage());
packages.add(new RNStatusKeycardPackage());
packages.add(new PushNotificationPackage());
return packages;
}
+2 -2
View File
@@ -25,7 +25,7 @@ kotlinVersion=1.3.50
minSdkVersion=23
compileSdkVersion=29
targetSdkVersion=29
buildToolsVersion=29.0.2
buildToolsVersion=30.0.3
supportLibVersion=28.0.0
# This should match version from nix/mobile/android/maven-and-npm-deps/maven/default.nix
gradlePluginVersion=3.5.3
@@ -50,4 +50,4 @@ org.gradle.jvmargs=-Xmx8704M
versionCode=9999
# Flipper
FLIPPER_VERSION=0.35.0
FLIPPER_VERSION=0.54.0
+7 -5
View File
@@ -1,4 +1,4 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux' }
@@ -101,12 +101,14 @@ pipeline {
} else { /* if no universal is available pick first */
env.PKG_URL = urls.first()
}
if (utils.isNightlyBuild()) {
env.DIAWI_URL = android.uploadToDiawi()
}
jenkins.setBuildDesc(APK: env.PKG_URL)
/* e2e builds get tested in SauceLabs */
if (utils.isE2EBuild()) {
env.SAUCE_URL = android.uploadToSauceLabs()
}
if (utils.isNightlyBuild()) {
env.DIAWI_URL = android.uploadToDiawi()
}
}
}
}
@@ -114,7 +116,7 @@ pipeline {
}
stage('Cleanup') {
steps {
sh 'make clean'
sh 'make purge'
}
}
}
+45 -8
View File
@@ -1,4 +1,4 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux' }
@@ -16,6 +16,20 @@ pipeline {
))
}
/* WARNING: Defining parameters here with the ?: trick causes them to remember last value. */
parameters {
choice(
name: 'BUILD_TYPE',
description: 'Makefile target to build. Optional Parameter.',
choices: genChoices(params.BUILD_TYPE, ['manual', 'nightly', 'release', 'pr', 'e2e']),
)
booleanParam(
name: 'PUBLISH',
description: 'Trigger publishing of build results for nightly or release.',
defaultValue: getPublishDefault(params.PUBLISH),
)
}
stages {
stage('Prep') {
steps { script {
@@ -65,18 +79,20 @@ pipeline {
]
/* add URLs to the build description */
jenkins.setBuildDesc(urls)
/* Create JSON file with newest build URLs */
switch (btype) {
/* legacy naming, should have named it nightly.json */
case 'nightly': s3.updateBucketJSON(urls, 'latest.json'); break
}
} }
}
stage('Publish') {
when { expression { params.PUBLISH } }
steps { script {
switch (btype) {
case 'nightly': build(job: 'misc/status.im', wait: false); break
case 'release': github.publishReleaseMobile(); break
case 'nightly':
/* Create JSON file with newest build URLs */
s3.updateBucketJSON(urls, 'latest.json');
build(job: 'misc/status.im', wait: false);
break;
case 'release':
github.publishReleaseMobile();
break;
}
} }
}
@@ -93,3 +109,24 @@ pipeline {
}
}
}
/* Helper that generates list of available choices for a parameter
* but re-orders them based on the currently set value. First is default. */
def List genChoices(String previousChoice, List defaultChoices) {
if (previousChoice == null) {
return defaultChoices
}
choices = defaultChoices.minus(previousChoice)
choices.add(0, previousChoice)
return choices
}
/* Helper that makes PUBLISH default to 'false' unless:
* - The build is for a release branch
* - A user explicitly specified a value
* Since release builds create and re-create GitHub drafts every time. */
def Boolean getPublishDefault(Boolean previousValue) {
if (env.JOB_NAME.startsWith('status-react/release')) { return true }
if (previousValue != null) { return previousValue }
return false
}
+5 -4
View File
@@ -1,7 +1,7 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'macos-xcode-11.5' }
agent { label 'macos-xcode-12.3' }
parameters {
string(
@@ -99,8 +99,9 @@ pipeline {
steps {
script {
env.PKG_URL = s3.uploadArtifact(api)
jenkins.setBuildDesc(IPA: env.PKG_URL)
/* e2e builds get tested in SauceLabs */
if (btype == 'e2e') {
if (utils.isE2EBuild()) {
env.SAUCE_URL = ios.uploadToSauceLabs()
} else {
env.DIAWI_URL = ios.uploadToDiawi()
@@ -113,7 +114,7 @@ pipeline {
stage('Cleanup') {
steps {
sh 'make watchman-clean'
sh 'make clean'
sh 'make purge'
}
}
}
+1 -1
View File
@@ -1,4 +1,4 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label params.AGENT_LABEL }
+9 -3
View File
@@ -44,13 +44,19 @@ pipeline {
credentialsId: 'etherscan-api-key',
variable: 'ETHERSCAN_API_KEY'
),
string(
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
]) {
dir('test/appium/tests') {
sh """
python3 -m pytest -m testrail_id \
-m "not upgrade" \
-n24 --rerun_count=2 \
python3 -m pytest \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
-m testrail_id \
-m "not upgrade" \
--network=${params.NETWORK} \
--apk=${params.APK_NAME}
"""
+6 -1
View File
@@ -80,10 +80,15 @@ pipeline {
credentialsId: 'etherscan-api-key',
variable: 'ETHERSCAN_API_KEY'
),
string(
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
]) {
dir('test/appium/tests') {
sh """
python3 -m pytest -n24 \
python3 -m pytest \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
-m "${params.TEST_MARKERS}" \
+8 -2
View File
@@ -48,11 +48,17 @@ pipeline {
credentialsId: 'etherscan-api-key',
variable: 'ETHERSCAN_API_KEY'
),
string(
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
]) {
dir('test/appium/tests') {
sh """
python3 -m pytest -m upgrade \
-n24 --rerun_count=2 \
python3 -m pytest \
-m upgrade \
--numprocesses 15 \
--rerun_count=2 \
--testrail_report=True \
--network=${params.NETWORK} \
--apk=${params.APK_NAME} \
+1 -1
View File
@@ -1,4 +1,4 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'macos' }
+1 -1
View File
@@ -1,4 +1,4 @@
library 'status-react-jenkins@v1.2.3'
library 'status-react-jenkins@v1.2.11'
pipeline {
agent { label 'linux' }
+105
View File
@@ -0,0 +1,105 @@
# Description
This document describes how to update Status APK builds for the [F-Droid](https://f-droid.org/) Android application catalogue.
# Intro
In simplest terms F-Droid requires a YAML file that defines the steps necessary to create a universal unsigned APK build. This is achieved by submitting a new app versions into the `metadata/im.status.ethereum.yml` file in the [fdroiddata](https://gitlab.com/fdroid/fdroiddata) repository.
The app builds defined this way run on servers that generate the unsigned APKs using the [fdroidserver](https://gitlab.com/fdroid/fdroidserver) software. The [server setup](https://f-droid.org/en/docs/Build_Server_Setup/) is quite involved but is not necessary unless you want to run your own instance. Normally the applications defines in `fdroiddata` are built by servers maintained by [the F-Droid volunteers](https://f-droid.org/en/contribute/).
First release of Status app was merged in [fdroid/fdroiddata#7179](https://gitlab.com/fdroid/fdroiddata/-/merge_requests/7179).
# Adding New Versions
You can find our configuration file at [`metadata/im.status.ethereum.yml`](https://gitlab.com/fdroid/fdroiddata/-/blob/master/metadata/im.status.ethereum.yml)
The file defines all the necessary metadata like `SourceCode`, `Website`, or `License`, but the most important key is `Builds`, which looks like this:
```yml
Builds:
- versionName: 1.12.0
versionCode: 2021022512
commit: cfb825a11b61d312af8cb5d36686af540c31f481
sudo: make fdroid-nix-dir
init: nix/scripts/setup.sh
output: result/app-release-unsigned.apk
scanignore: android/build.gradle
scandelete: ios
build: make release-fdroid BUILD_NUMBER=$$VERCODE$$
```
It contains a list of objects defining each release of the application. In order to add a new release simply copy a previous release object and adjust the following values:
* `versionName` - String version like `1.12.0`.
* `versionCode` - Android `versionCode`. We use a timestamp generated by [a script](../scripts/version/gen_build_no.sh).
* `commit` - Specific commit SHA1 from which the given release was built.
The `versionCode` should be the same as the one in build that was uploaded to Play Store.
It can be found in the build logs or by using:
```
> apkanalyzer manifest version-code StatusIm-Mobile-v1.12.0.apk
2021022512
```
At the bottom of the file you should also update the following keys:
* `CurrentVersion` - Same as the new `versionName` added
* `CurrentVersionCode` - Same as the `versionCode` added
Then submit a merge request to the [fdroid/fdroiddata](https://gitlab.com/fdroid/fdroiddata) repository.
# Checking Builds
The simplest way to test if the app builds via F-Droid is to use the Docker image:
https://gitlab.com/fdroid/docker-executable-fdroidserver
Which is available under `registry.gitlab.com/fdroid/docker-executable-fdroidserver:latest`.
Because we use Nix to build the mobile app we need to slightly modify the image with this `Dockerfile`:
```Dockerfile
FROM registry.gitlab.com/fdroid/docker-executable-fdroidserver:latest
ARG BUILDER_UID=1000
ENV BUILDER_USER=vagrant
RUN useradd -u $BUILDER_UID $BUILDER_USER
RUN mkdir -m 0755 /nix /home/$BUILDER_USER \
&& chown -R $BUILDER_USER /nix /home/$BUILDER_USER
```
Build it using:
```
docker build --build-arg=BUILDER_UID=$UID -t statusteam/docker-executable-fdroidserver:latest .
```
Then clone the [fdroiddata](https://gitlab.com/fdroid/fdroiddata) and [fdroidserver](https://gitlab.com/fdroid/fdroidserver) repos and use it to test the build of a specific Status Android app version: `1.12.0`
```
git clone https://gitlab.com/fdroid/fdroidserver
git clone https://gitlab.com/fdroid/fdroiddata
docker run --rm \
-u $UID:$GID -e USER=vagrant \
-v $PWD/fdroiddata:/repo \
-v $PWD/fdroidserver:/fdroidserver \
statusteam/docker-executable-fdroidserver:latest \
build im.status.ethereum:1.12.0
```
We have to create a user and specify the UID because Nix cannot run as `root` and that is the default user for the F-Droid Docker image. By adding our own user and setting the UID we also make it possible to mount folders like `fdroiddata` and `fdroidserver`.
You can specify a `--vebose` flag for `build` command for additional information.
You can provide `--storage-opt size=30G` flag if Docker complains about running out of space.
You should also run `lint im.status.ethereum` to verify the YAML format is correct.
# Details
The original research was done in [#8512](https://github.com/status-im/status-react/issues/8512).
Normally F-Droid server wants to run Gradle itself, but we do not specify the `gradle` key in order to run `make release-fdroid` ourselves in `build` step. We also add `android/build.gradle` to `scanignore` to avoid F-Droid trying to use Gradle directly.
Once the PR is merged it may take a few days for the F-Droid server farm to build and deploy the new version to their site and app. You can look up the current state of builds [here](https://f-droid.org/wiki/index.php?title=Special:RecentChanges&days=7&from=&hidebots=0&hideanons=1&hideliu=1&limit=500) and look for your App ID and a `deploy` change after it.
# F-Droid Build
F-Droid requires submitted applications to be free of non Open Source software. For this reason we need to exclude certain Google libraries at build time.
This is achieved by setting `GOOGLE_FREE=1` in the `.env.release` file. This affects two things:
1. [Clojure code conditional](../src/status_im/acquisition/core.cljs) which stops use of `get-referrer`.
2. [Gradle build configuration](../android/app/build.gradle) by excluding Google libraries.
Both are affected by the `.env` file and both are required.
+21
View File
@@ -0,0 +1,21 @@
#### Before submission
- [ ] Feature or improvements release? (Feature release needs more lead time and assets for comms)
- [ ] Sign off by QA
- [ ] App store listing content reviewed and updated ([copy](https://docs.google.com/spreadsheets/d/1fLDr3BD1dcg0dolvLiozXoZU27IQirjBzn0h4_QS2u0/edit#gid=0), [images](https://www.dropbox.com/sh/6baklctvxy3nuoo/AACG9kYIVdt2qREW76rP8SP-a?dl=0) )
- [ ] Play store content reviewed and updated
- [ ] Release notes written and added (500 character limit for updates (Android), no Android references for App store)
- [ ] Comms timeframe agreed on (Mon/Tue ping when both submissions are in)
- [ ] Privacy policy reviewed and updated
- [ ] App translations for key features merged and tested
- [ ] Countries to be excluded
- [ ] Changes to our FAQ made
#### Before publishing
- [ ] Translations for comms available
- [ ] Promotional content ready
- [ ] Update Draft with release on https://github.com/status-im/status-react/releases
- [ ] Add release to DO store and [update site](https://notes.status.im/s/status-release-upload#) (Jakub - requires credentials to upload)
#### At time of publishing
- [ ] validate draft release on github release page https://github.com/status-im/status-react/releases
- [ ] update https://github.com/status-im/status-react/blob/develop/RELEASES.md with release notes
View File
View File
+69 -20
View File
@@ -1,4 +1,11 @@
# Business Logic Modules
# Codebase Strucuture and Guidelines
## Starting the app
The app is bundled and run in a Nix environment. Information regarding how to run it locally can be found [here](https://status.im/technical/build_status/).
## Business Logic Modules
Each business logic module is managed in a module directory.
@@ -31,7 +38,7 @@ Rationale and how to get there:
Currently a lot of business logic is lost in utils and screens namespaces and should be moved to dedicated top level directories.
This should make core logic of the app more accessible and organized
## core.cljs
### core.cljs
Core namespace must only contain functions that can be called outside of the module (i.e. in events or other modules):
@@ -45,9 +52,8 @@ Core namespace must only contain functions that can be called outside of the mod
{:db (module.db/set-current-account db)})
```
## db.cljs
### db.cljs
- must contain specs for the app-db subpart the module modifies
- must contain getter and setter functions used by fx producing functions and subscriptions
- db logic called by other modules
@@ -55,26 +61,69 @@ Rationale:
These guidelines make db.cljs namespaces the place to go when making changes to the db layout and minimize breaking changes when adding/refactoring features
# Subscriptions
## re-frame
### Subscriptions
- all subscriptions must be defined in the single `status-im.subs` namespace
- subscriptions must subscribe only on other subscriptions, and never on app-db itself
- `reg-root-key-sub` should be used for the root keys subscriptions
# Events
### Events
- all events must be defined in the single `status-im.events` namespace which can be considered as an index of everything going on in the app
- events must always be declared with `register-handler-fx`, no `register-handler-db`
- events must never use the `trim-v` interceptor
- events must only contain a function call defined in a module
```clojure
(handlers/register-handler-fx
:notifications/handle-push-notification-open
(fn [cofx [_ event]]
(notifications/handle-push-notification-open event cofx)))
```
- events must use synthetic namespaces:
- all events must be defined in the `core.cljs` namespaces
- events must always be declared with `fx/defn` macro
- `:module.ui/` for user triggered events
- `:module.callback/` for callback events, which are events bringing back the result of an fx to the event loop, the name of the event should end with `-success` or `-error` most of the time. Other possibilities can be `-granted`, `-denied` for instance.
- `:module/` for internal events, examples are time based events marked `-timed-out`, external changes marked `-changed` or reception of external events marked `-received`.
## Testing flow
- All PRs automatically go to "REVIEW" column on [Pipeline for QA](https://github.com/status-im/status-react/projects/7) project on Github. This is our main board for QA / devs interaction
- After the PR gets at least 1 approval, it should be moved to "E2E Tests" column. Some PRs may need approvals from more than one person.
- Critical path tests are automatically run for all PRs in "E2E Tests" column.
- If E2E tests pass:
- If PR doesn't need manual QA (it is small change or change doesn't relate to app) - after passing e2e tests it can be merged (don't use the Github UI to merge, check section on merging PRs).
- If manual QA needed - add label 'request manual qa'. The QA team will process it (make sure the summary and test instructions are clear). QA team will review results and test PR on different platforms and assign one of the three labels:
- No issues - label 'TESTED-OK' and then you can merge it.
- If issues - label 'TESTED-ISSUES' and comment from QA with bugs.
- After fix and/or discussion the process is repeated.
- If manual QA is not needed but all tests don't pass, you can ping @churik or @Serhy to confirm that failed E2E tests are not unrelated.
## Enabling debug logs
Calls to `log/debug` will not be printed to the console by default. It can be enabled under "Advanced settings" in the app:
![Enable Debug Logs](./log-settings.png)
## Translations
The app relies on system locale to select a language from the [list of supported languages](https://github.com/status-im/status-react/blob/bda73867471cf2bb8a68b1cc27c9f94b92d9a58b/src/status_im/i18n_resources.cljs#L9). It falls back to English in cash the system locale is not supported.
We use Lokalise App to manage [translations](https://translate.status.im/). In case you need to add/remove a key to translations, you only need to change `en.json`. Missing keys fallback to `en.json`. The actual translations will be added by Lokalise.
## re-frisk
re-frisk is a state visualization tool written by our very own Andrey (@flexsurfer). To start re-frisk, execute the following command:
```bash
$ yarn shadow-cljs run re-frisk-remote.core/start
```
or you can also use make:
```bash
$ make run-re-frisk
```
A server will be started at http://localhost:4567. It might show "not connected" at first. Don't worry and just start using the app. The events and state will populate.
## Merging approved PRs
We don't Github's UI to merge. Instead `./scripts/merge-pr.sh` is used to sign and merge PR to `develop`. You first need to enable [GPG signing on you commits](https://github.com/status-im/status-react/blob/develop/STARTING_GUIDE.md#configure-gpg-keys-for-signing-commits).
Once your commits are verfied and PR approved, you can run the script like so:
```bash
$ git checkout develop
$ git fetch
$ git reset --hard origin/develop
$ ./scripts/merge-pr.sh 11370
```
Replace 11370 with your PR id.
## Release process
TODO(shivekkhurana): Compile release notes
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

+57 -21
View File
@@ -11,18 +11,6 @@
# There are a few env variables defined in the .env file in
# this directory (fastlane/.env)
# unlocks keychain if KEYCHAIN_PASSWORD variable is present
# (to be used on CI machines)
def unlock_keychain_if_needed
return unless ENV['KEYCHAIN_PASSWORD']
unlock_keychain(
path: 'login.keychain',
password: ENV['KEYCHAIN_PASSWORD'],
set_default: true
)
end
def curl_upload(url, file, auth, conn_timeout = 5, timeout = 60, retries = 3)
rval = sh(
'curl',
@@ -81,6 +69,45 @@ def upload_to_saucelabs(file)
end
end
# Creates and unlocks a keychain into which Fastlane match imports signing keys and certs.
class Keychain
attr_accessor :name, :pass
def initialize(name)
# Local devs will not have KEYCHAIN_PASSWORD set, and will be prompted for password.
return "login.keychain-db" unless ENV['KEYCHAIN_PASSWORD']
# We user the same keychain every time because we need to set a default.
@name = "#{name}.keychain-db"
@pass = ENV['KEYCHAIN_PASSWORD']
Fastlane::Actions::CreateKeychainAction.run(
name: @name,
password: @pass,
unlock: true,
# Fastlane can't find the signing cert without setting a default.
default_keychain: true,
# Deleting the keychain would cause race condition for parallel jobs.
require_create: false,
# Lock it up after 25 minutes just in case we don't delete it.
lock_when_sleeps: true,
lock_after_timeout: true,
timeout: 1500
)
end
end
# App Store Connect API is an official public API used to manage Apps.
# This includes metadata, pricing and availability, provisioning, and more.
# It provides a JSON API and auth using API Keys to generate a JSON Web Token (JWT).
def asc_api_key()
app_store_connect_api_key(
key_id: ENV['FASTLANE_ASC_API_KEY_ID'],
issuer_id: ENV['FASTLANE_ASC_API_ISSUER_ID'],
key_filepath: ENV['FASTLANE_ASC_API_KEY_FILE_PATH'],
duration: 1500, # seconds, session length
in_house: false,
)
end
# builds an ios app with ad-hoc configuration and put it
# to "status-ios" output folder
# `readonly`:
@@ -95,12 +122,16 @@ def build_ios_adhoc(readonly: false, pr_build: false)
scheme = pr_build ? 'StatusImPR' : 'StatusIm'
app_id = pr_build ? 'im.status.ethereum.pr' : 'im.status.ethereum'
kc = Keychain.new('fastlane')
match(
type: 'adhoc',
force_for_new_devices: true,
readonly: readonly,
api_key: asc_api_key(),
app_identifier: app_id,
keychain_name: 'login.keychain'
force_for_new_devices: true,
keychain_name: kc.name,
keychain_password: kc.pass
)
build_ios_app(
@@ -128,11 +159,15 @@ def build_ios_e2e
showsdks_output = sh('xcodebuild', '-showsdks')
simulator_sdk = showsdks_output.scan(/iphonesimulator\d\d?\.\d\d?/).first
kc = Keychain.new('fastlane')
match(
type: 'adhoc',
force_for_new_devices: true,
readonly: true,
keychain_name: 'login.keychain'
api_key: asc_api_key(),
force_for_new_devices: true,
keychain_name: kc.name,
keychain_password: kc.pass
)
build_ios_app(
@@ -181,7 +216,6 @@ platform :ios do
desc 'It creates an .ipa that can be used by a list of devices, registeded in the App Store Connect.'
desc 'This .ipa is ready to be distibuted through diawi.com'
lane :adhoc do
unlock_keychain_if_needed
build_ios_adhoc(readonly: true)
end
@@ -189,31 +223,32 @@ platform :ios do
desc 'This lane is used for SauceLabs end-to-end testing.'
desc 'It creates an .app that can be used inside of a iPhone simulator.'
lane :e2e do
unlock_keychain_if_needed
build_ios_e2e
end
desc '`fastlane ios pr` - makes a new pr build'
desc 'This lane builds a new adhoc build and leaves an .ipa that is ad-hoc signed (can be uploaded to diawi)'
lane :pr do
unlock_keychain_if_needed
build_ios_adhoc(pr_build: true)
end
desc '`fastlane ios nightly` - makes a new nightly'
desc 'This lane builds a new nightly and leaves an .ipa that is ad-hoc signed (can be uploaded to diawi)'
lane :nightly do
unlock_keychain_if_needed
build_ios_adhoc()
end
desc '`fastlane ios release` builds a release & uploads it to TestFlight'
lane :release do
kc = Keychain.new('fastlane')
match(
type: 'appstore',
readonly: true,
api_key: asc_api_key(),
app_identifier: 'im.status.ethereum',
keychain_name: 'login.keychain'
keychain_name: kc.name,
keychain_password: kc.pass
)
build_ios_app(
@@ -230,6 +265,7 @@ platform :ios do
"ITSAppUsesNonExemptEncryption": false
}
)
upload_to_testflight(
ipa: 'status-ios/StatusIm.ipa',
skip_waiting_for_build_processing: true
+21 -19
View File
@@ -6,22 +6,22 @@ GEM
public_suffix (>= 2.0.2, < 5.0)
atomos (0.1.3)
aws-eventstream (1.1.0)
aws-partitions (1.350.0)
aws-sdk-core (3.104.3)
aws-partitions (1.383.0)
aws-sdk-core (3.109.1)
aws-eventstream (~> 1, >= 1.0.2)
aws-partitions (~> 1, >= 1.239.0)
aws-sigv4 (~> 1.1)
jmespath (~> 1.0)
aws-sdk-kms (1.36.0)
aws-sdk-core (~> 3, >= 3.99.0)
aws-sdk-kms (1.39.0)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sigv4 (~> 1.1)
aws-sdk-s3 (1.75.0)
aws-sdk-core (~> 3, >= 3.104.1)
aws-sdk-s3 (1.83.1)
aws-sdk-core (~> 3, >= 3.109.0)
aws-sdk-kms (~> 1)
aws-sigv4 (~> 1.1)
aws-sigv4 (1.2.1)
aws-sigv4 (1.2.2)
aws-eventstream (~> 1, >= 1.0.2)
babosa (1.0.3)
babosa (1.0.4)
claide (1.0.3)
colored (1.2)
colored2 (3.1.2)
@@ -35,16 +35,17 @@ GEM
unf (>= 0.0.5, < 1.0.0)
dotenv (2.7.6)
emoji_regex (3.0.0)
excon (0.76.0)
faraday (1.0.1)
excon (0.78.0)
faraday (1.1.0)
multipart-post (>= 1.2, < 3)
faraday-cookie_jar (0.0.6)
faraday (>= 0.7.4)
ruby2_keywords
faraday-cookie_jar (0.0.7)
faraday (>= 0.8.0)
http-cookie (~> 1.0.0)
faraday_middleware (1.0.0)
faraday (~> 1.0)
fastimage (2.2.0)
fastlane (2.154.0)
fastlane (2.164.0)
CFPropertyList (>= 2.3, < 4.0.0)
addressable (>= 2.3, < 3.0.0)
aws-sdk-s3 (~> 1.0)
@@ -95,17 +96,17 @@ GEM
google-cloud-core (1.5.0)
google-cloud-env (~> 1.0)
google-cloud-errors (~> 1.0)
google-cloud-env (1.3.3)
google-cloud-env (1.4.0)
faraday (>= 0.17.3, < 2.0)
google-cloud-errors (1.0.1)
google-cloud-storage (1.27.0)
google-cloud-storage (1.29.1)
addressable (~> 2.5)
digest-crc (~> 0.4)
google-api-client (~> 0.33)
google-cloud-core (~> 1.2)
googleauth (~> 0.9)
mini_mime (~> 1.0)
googleauth (0.13.1)
googleauth (0.14.0)
faraday (>= 0.17.3, < 2.0)
jwt (>= 1.4, < 3.0)
memoist (~> 0.16)
@@ -119,7 +120,7 @@ GEM
httpclient (2.8.3)
jmespath (1.4.0)
json (2.3.1)
jwt (2.2.1)
jwt (2.2.2)
memoist (0.16.2)
mime-types (3.3.1)
mime-types-data (~> 3.2015)
@@ -133,7 +134,7 @@ GEM
netrc (0.11.0)
os (1.1.1)
plist (3.5.0)
public_suffix (4.0.5)
public_suffix (4.0.6)
rake (13.0.1)
representable (3.0.4)
declarative (< 0.1.0)
@@ -146,6 +147,7 @@ GEM
netrc (~> 0.8)
retriable (3.1.2)
rouge (2.0.7)
ruby2_keywords (0.0.2)
rubyzip (2.3.0)
security (0.1.3)
signet (0.14.0)
@@ -170,7 +172,7 @@ GEM
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
word_wrap (1.0.0)
xcodeproj (1.17.1)
xcodeproj (1.19.0)
CFPropertyList (>= 2.3.3, < 4.0)
atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
+43 -33
View File
@@ -35,10 +35,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1rwd13lqambjpq94qhccw3ixn6bvwnqcnd3v1rdlmpcvqq2rw49c";
sha256 = "1as2xr2yjsylrjys084bm2q90la0nw7rm1cgwx57wcds58i9zrwb";
type = "gem";
};
version = "1.350.0";
version = "1.383.0";
};
aws-sdk-core = {
dependencies = ["aws-eventstream" "aws-partitions" "aws-sigv4" "jmespath"];
@@ -46,10 +46,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1xfv8nfz8n700z29di51mcyyrnmbpq7flff4hx9mm92avnly1ysy";
sha256 = "0xmppcxq7jm8lffqibkhq257hfwfbv82zm2y1fbhwm3icgxzwlfx";
type = "gem";
};
version = "3.104.3";
version = "3.109.1";
};
aws-sdk-kms = {
dependencies = ["aws-sdk-core" "aws-sigv4"];
@@ -57,10 +57,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0rpwpj4f4q9wdrbgiqngzwfdaaqyz0iif8sv16z6z0mm6y3cb06q";
sha256 = "0ly1m631qm2ciif7sysbzrgczjvz95ga3g6w6vrzvfdv31jjnl9a";
type = "gem";
};
version = "1.36.0";
version = "1.39.0";
};
aws-sdk-s3 = {
dependencies = ["aws-sdk-core" "aws-sdk-kms" "aws-sigv4"];
@@ -68,10 +68,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "068xx6wp86wkmikdzg4wqxmg570hc3ydp8211j02g13djjr3k28n";
sha256 = "021yqghdb1i980vn249hv44jajr0v3hq4ik4r6fqh9kwp04fsbqv";
type = "gem";
};
version = "1.75.0";
version = "1.83.1";
};
aws-sigv4 = {
dependencies = ["aws-eventstream"];
@@ -79,20 +79,20 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0aknh3q37rq3ixxa84x2p26g8a15zmiig2rm1pmailsb9vqhfh3j";
sha256 = "1ll9382c1x2hp750cilh01h1cycgyhdr4cmmgx23k94hyyb8chv5";
type = "gem";
};
version = "1.2.1";
version = "1.2.2";
};
babosa = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "10nn9bw63i4awpzn5vrx6kmpx1sg7z8r3fhw9r8bvg9pz2wh489g";
sha256 = "16dwqn33kmxkqkv51cwiikdkbrdjfsymlnc0rgbjwilmym8a9phq";
type = "gem";
};
version = "1.0.3";
version = "1.0.4";
};
CFPropertyList = {
groups = ["default"];
@@ -212,21 +212,21 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05is0kb650j8wrdi4rgkdls662chnhdg2p64pgq3zkd3d7l2a9zw";
sha256 = "1hi89v53pm2abfv9j8lgqdd7hgkr7fr0gwrczr940iwbb3xv7rrs";
type = "gem";
};
version = "0.76.0";
version = "0.78.0";
};
faraday = {
dependencies = ["multipart-post"];
dependencies = ["multipart-post" "ruby2_keywords"];
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0wwks9652xwgjm7yszcq5xr960pjypc07ivwzbjzpvy9zh2fw6iq";
sha256 = "16dapwi5pivrl25r4lkr1mxjrzkznj4wlcb08fzkmxnj4g5c6y35";
type = "gem";
};
version = "1.0.1";
version = "1.1.0";
};
faraday-cookie_jar = {
dependencies = ["faraday" "http-cookie"];
@@ -234,10 +234,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "1di4gx6446a6zdkrpj679m5k515i53wvb4yxcsqvy8d8zacxiiv6";
sha256 = "00hligx26w9wdnpgsrf0qdnqld4rdccy8ym6027h5m735mpvxjzk";
type = "gem";
};
version = "0.0.6";
version = "0.0.7";
};
faraday_middleware = {
dependencies = ["faraday"];
@@ -266,10 +266,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "05y7qn8f1d3q355vf1fvbwz0sf73bwiwbcpzidd1szh49400h65b";
sha256 = "1mr143fx505iwgci6v9bl4pd6v305wrc4q1s329sjmy67jfbm47w";
type = "gem";
};
version = "2.154.0";
version = "2.164.0";
};
fastlane-plugin-clean_testflight_testers = {
groups = ["default"];
@@ -330,10 +330,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0frifczbhs5k699avaxnaypijfmjd2zb1rbdmcb30vdx8sskypa9";
sha256 = "0bjgxyvagy6hjj8yg7fqq24rwdjxb6hx7fdd1bmn4mwd846lci2i";
type = "gem";
};
version = "1.3.3";
version = "1.4.0";
};
google-cloud-errors = {
groups = ["default"];
@@ -351,10 +351,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "06pmgk210frapxjjshy9iax6jb5ps8fbylcy0c9ypwji6cwxk990";
sha256 = "1d8yc807dbd4pcwrrg2pdl30hghcnjid55qrjl2shffhzgiyl54h";
type = "gem";
};
version = "1.27.0";
version = "1.29.1";
};
googleauth = {
dependencies = ["faraday" "jwt" "memoist" "multi_json" "os" "signet"];
@@ -362,10 +362,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0ldhllhv8mlbalp8a3zb1hsj5p2i8f0vf88r71vm083gq7820iwn";
sha256 = "0cm60nbmwzf83fzy06f3iyn5a6sw91siw8x9bdvpwwmjsmivana6";
type = "gem";
};
version = "0.13.1";
version = "0.14.0";
};
highline = {
groups = ["default"];
@@ -433,10 +433,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "01zg1vp3lyl3flyjdkrcc93ghf833qgfgh2p1biqfhkzz11r129c";
sha256 = "14ynyq1q483spj20ffl4xayfqx1a8qr761mqjfxczf8lwlap392n";
type = "gem";
};
version = "2.2.1";
version = "2.2.2";
};
memoist = {
groups = ["default"];
@@ -564,10 +564,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0vywld400fzi17cszwrchrzcqys4qm6sshbv73wy5mwcixmrgg7g";
sha256 = "1xqcgkl7bwws1qrlnmxgh8g4g9m10vg60bhlw40fplninb3ng6d9";
type = "gem";
};
version = "4.0.5";
version = "4.0.6";
};
rake = {
groups = ["default"];
@@ -621,6 +621,16 @@
};
version = "2.0.7";
};
ruby2_keywords = {
groups = ["default"];
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "17pcc0wgvh3ikrkr7bm3nx0qhyiqwidd13ij0fa50k7gsbnr2p0l";
type = "gem";
};
version = "0.0.2";
};
rubyzip = {
groups = ["default"];
platforms = [];
@@ -782,10 +792,10 @@
platforms = [];
source = {
remotes = ["https://rubygems.org"];
sha256 = "0mv5rsbgwq4vzri31w2f1474arrsr5j69rdhklrci6jnjps8dmx9";
sha256 = "1411j6sfnz0cx4fiw52f0yqx4bgcn8cmpgi3i5rwmmahayyjz2fn";
type = "gem";
};
version = "1.17.1";
version = "1.19.0";
};
xcpretty = {
dependencies = ["rouge"];
@@ -1,12 +1,12 @@
Status é uma ferramenta de comunicação segura e privada. Converse com os seus amigos, armazene ativos e explore o futuro da web sem que os seus dados sejam explorados.
Status es una herramienta de comunicación segura y privada. Chatea con amigos, almacena activos y explora el futuro de la web sin ser explotado por tu información personal.
Com a Status, apenas você controlas as suas informações.
Solo tú controlas tu información, con Status.
CONVERSA
A Status remove terceiros centralizados das suas mensagens. Não é apenas o seu conteúdo que está protegido, mas também os seus metadados - para uma privacidade máxima.
CHAT
Status quita de en medio terceros centralizados a tus mensajes. No sólo tu contenido es protegido, sino también tu metadata: por máxima privacidad.
TRANSACIONA
Armazene ativos digitais na sua carteira Status. Envie e solicite tokens aos seus amigos, ou transacione com aplicações descentralizadas.
TRANSFIERE
Almacena activos digitales en tu monedero Status (ERC20 and ERC721). Envía y recibe monedas de tus amigos, o transfiere activos con aplicaciónes descentralizadas.
EXPLORA
Acesse à aplicações baseadas na Ethereum na web3. Joge jogos, troce ativos digitais e muito mais.
Accede a aplicaciones basadas en Ethereum de la Web3. Juega, intercambia bienes digitales y más.
@@ -1 +1 @@
Converse e faça transações de uma forma segura
Chatea y transfiere de forma segura
+1 -1
View File
@@ -1 +1 @@
Status - Comunição Privada
Status - Comunicación Privada
-7
View File
@@ -1,7 +0,0 @@
`cd fiddle`
`yarn install`
`clj prepare.clj`
`clj -A:dev`
-17
View File
@@ -1,17 +0,0 @@
{:deps {org.clojure/clojurescript {:mvn/version "1.10.520"}
com.bhauman/figwheel-main {:mvn/version "0.2.0"}
org.clojure/core.async {:mvn/version "0.4.474"}
reagent {:mvn/version "0.8.1" :exclusions [cljsjs/react cljsjs/react-dom]}
re-frame {:git/url "https://github.com/status-im/re-frame"
:sha "b0d3b0f016f217c6a397a54e5eba9486471fb172"
:deps/manifest :deps}
com.andrewmcveigh/cljs-time {:mvn/version "0.5.2"}
status-im/timbre {:mvn/version "4.10.0-2-status"}
com.taoensso/encore {:mvn/version "2.94.0"}
hickory {:mvn/version "0.7.1"}
cljs-bean {:mvn/version "1.3.0"}}
:paths ["src" "../src" "resources" "target" "../resources"]
:aliases {:dev {:extra-deps {re-frisk {:mvn/version "0.5.4.1"}}
:main-opts ["-m" "figwheel.main" "-b" "dev" "-r"]}}}
-10
View File
@@ -1,10 +0,0 @@
{:main fiddle.core
:output-to "resources/public/js/main.js"
:preloads [re-frisk.preload]
:infer-externs true
:npm-deps false
:foreign-libs [{:file "dist/index_bundle.js"
:provides ["react" "react-dom" "react-native-web"]
:global-exports {react React
react-dom ReactDOM
react-native-web ReactNativeWeb}}]}
-38
View File
File diff suppressed because one or more lines are too long
-9
View File
@@ -1,9 +0,0 @@
{
"dependencies": {
"react": "^16.9.0",
"react-dom": "^16.9.0",
"react-native-web": "^0.11.6",
"webpack": "^4.39.2",
"webpack-cli": "^3.3.6"
}
}
-18
View File
@@ -1,18 +0,0 @@
(ns prepare
(:require [clojure.string :as str]
[clojure.java.io :as io]))
;;TODO copy dirs to have images
;(io/copy (io/file "../resources/images") (io/file "./resources/public/images"))
(let [fls (file-seq (java.io.File. "../android/app/src/main/res/drawable-mdpi"))]
(spit "./resources/public/icons.edn"
(pr-str
(remove nil?
(map
(fn [fl]
(let [n (first (str/split (.getName fl) #".png"))]
(when (.isFile fl)
(io/copy (io/file (.getPath fl)) (io/file (str "./resources/public/" (str/replace n #"_" "-"))))
(str/replace n #"_" "-"))))
fls)))))
View File
-25
View File
@@ -1,25 +0,0 @@
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta content="ie=edge" http-equiv="x-ua-compatible" />
<title>Fiddle</title>
<meta content="width=device-width, initial-scale=1" name="viewport" />
<style>
@import url('https://rsms.me/inter/inter.css');
html, body {
height: 100%;
margin: 0;
}
</style>
</head>
<body>
<div id="app" class="app"></div>
<script src="js/main.js" type="text/javascript"></script>
<script type="text/javascript">
fiddle.core.init();
</script>
</body>
</html>
-17
View File
@@ -1,17 +0,0 @@
(ns ^:figwheel-hooks fiddle.core
(:require [reagent.core :as reagent]
[re-frame.core :as re-frame]
[fiddle.views.main :as main]
fiddle.subs
fiddle.events))
(defn mount-root []
(reagent/render [main/main] (js/document.getElementById "app")))
(defn ^:export init []
(re-frame/dispatch-sync [:initialize-db])
(re-frame/dispatch [:load-icons])
(mount-root))
(defn ^:after-load on-reload []
(mount-root))
-33
View File
@@ -1,33 +0,0 @@
(ns fiddle.events
(:require [re-frame.core :as re-frame]
[cljs.reader :as reader]))
(re-frame/reg-event-fx
:initialize-db
(fn [_ _]
{:db {:view-id :colors}}))
(re-frame/reg-fx
:load-icons-fx
(fn []
(let [cl (js/XMLHttpRequest.)]
(.open cl "GET" "./icons.edn")
(set! (.-onreadystatechange cl) #(when (= (.-status cl) 200)
(re-frame/dispatch [:set :icons (reader/read-string (.-responseText cl))])))
(.send cl))))
(re-frame/reg-event-fx
:load-icons
(fn [_ _]
{:load-icons-fx nil}))
(re-frame/reg-event-fx
:set
(fn [{:keys [db]} [_ k v]]
{:db (assoc db k v)}))
(re-frame/reg-event-fx
:set-in
(fn [{:keys [db]} [_ path v]]
{:db (assoc-in db path v)}))
-13
View File
@@ -1,13 +0,0 @@
(ns fiddle.frame
(:require [status-im.ui.components.react :as react]
[re-frame.core :as re-frame]))
(def width 375)
(def height 568) ;667
(re-frame/reg-sub :dimensions/window-width (fn [_] width))
(re-frame/reg-sub :dimensions/window (fn [_] {:width width :height height}))
(defn frame [content]
[react/view {:style {:width width :height height :border-color :black :border-width 1}}
content])
-16
View File
@@ -1,16 +0,0 @@
(ns fiddle.snippets)
(defmacro code-snippet [code & [white?]]
(let [show? (gensym 'show)]
`[(fn []
(let [~show? (reagent/atom false)]
(fn []
[react/view
(when @~show?
[react/text {:style {:font-family "monospace" :background-color :black :color "#44d058"
:max-width 400 }}
(with-out-str (cljs.pprint/pprint '~code))])
[react/view {:align-items :flex-end :background-color (when-not ~white? colors/gray-lighter)}
[react/touchable-highlight {:on-press #(swap! ~show? not)}
[react/text {:style {:font-size 14 :color :blue :padding 3}} (if @~show? "Hide" "Code")]]]
~code])))]))
-6
View File
@@ -1,6 +0,0 @@
(ns fiddle.subs
(:require [re-frame.core :as re-frame]))
(re-frame/reg-sub :view-id (fn [db] (get db :view-id)))
(re-frame/reg-sub :icons (fn [db] (get db :icons)))
-38
View File
@@ -1,38 +0,0 @@
(ns fiddle.views.colors
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.colors :as colors]))
(defn color [name color color-name usage & [bg?]]
[react/view {:margin 10 :padding 10 :border-radius 8 :background-color (when bg? colors/blue)}
[react/text {:style {:typography :main-medium :color (when bg? colors/white)}} name]
[react/view {:margin-vertical 24 :width 156 :height 156 :border-radius 80 :background-color color
:border-width 1 :border-color colors/gray}]
[react/text {:style {:color (when bg? colors/white)}} color-name]
[react/text {:style {:color (when bg? colors/white)}} color]
[react/text {:style {:margin-top 6 :color (if bg? colors/white-transparent colors/gray) :font-size 12}} usage]])
(defn colors-arr [title colors]
[react/view
[react/text title]
[react/view {:flex-direction :row :flex-wrap :wrap :flex 1 :margin-vertical 24}
(for [color colors]
[react/view {:margin-left 10 :width 40 :height 40 :border-radius 20 :background-color color}])]])
(defn colors []
[react/scroll-view
[react/view {:flex-direction :row :flex-wrap :wrap :flex 1}
[color "Accent Blue" colors/blue "blue" "Links, buttons"]
[color "Light Blue" colors/blue-light "blue-light" "Button background"]
[color "White" colors/white "white" "Background, icons"]
[color "Dark Grey" colors/gray "gray" "Secondary text"]
[color "Light Grey" colors/gray-lighter "gray-lighter" "Background, inputs, dividers"]
[color "Black" colors/black "black" "Icons"]
[color "Red" colors/red "red" "Errors"]
[color "Green" colors/green "green" "Success"]
[color "40% of Dark Grey" colors/gray-transparent-40 "gray-transparent-40" "Chevrons in lists (>) "]
[color "10% of Black" colors/black-transparent "black-transparent" ""]
[color "70% of White" colors/white-transparent-70 "white-transparent-70" "Secondary text on blue background" true]
[color "40% of White" colors/white-transparent "white-transparent" "Chevrons in lists (>) on the\nblue background\nText in Wallet\n\n" true]
[color "10% of White" colors/white-transparent-10 "white-transparent-10" "Backgrounds behind icons" true]]
[colors-arr "Chat colors" colors/chat-colors]
[colors-arr "Account colors" colors/account-colors]])
-16
View File
@@ -1,16 +0,0 @@
(ns fiddle.views.icons
(:require-macros [status-im.utils.views :as views])
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.icons.vector-icons :as vector-icons]
[status-im.ui.components.colors :as colors]))
(views/defview icons []
(views/letsubs [icons [:icons]]
(if icons
[react/view {:flex-direction :row :flex-wrap :wrap :flex 1 :background-color colors/gray-transparent-40}
(for [icon icons]
[react/view {:padding 20}
[react/text {:srtle {:margin-bottom 5}} icon]
[vector-icons/icon icon]])]
[react/view
[react/text "To see all icons please run `clj prepare.clj` command in terminal"]])))
-214
View File
@@ -1,214 +0,0 @@
(ns fiddle.views.list-items
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.colors :as colors]
[status-im.ui.components.list-item.views :as list-item]
[fiddle.frame :as frame]
[status-im.ui.components.badge :as badge]
cljs.pprint
[reagent.core :as reagent]
[status-im.ui.components.button :as button])
(:require-macros [fiddle.snippets :as snippets]))
(defn item [name content]
[react/view
[react/text {:style {:color colors/gray :margin-bottom 10 :margin-top 40}} name]
[react/view {:background-color :white :width frame/width}
content]])
(defn list-header []
[react/view
{:background-color colors/gray-lighter
:flex 1
:padding 20
:flex-direction :row
:flex-wrap :wrap}
[react/view {:width 375}
[react/view {:background-color :white}
(snippets/code-snippet [list-item/list-item {:type :section-header :title "Header title"}])]]])
(defn list-items []
[react/view
{:background-color colors/gray-lighter
:flex 1
:padding 20
:flex-direction :row
:flex-wrap :wrap}
[react/view {:margin-right 10}
[item "Default with Image"
(snippets/code-snippet
[list-item/list-item
{:title "George"
:on-press #()
:icon [react/view
{:width 40
:height 40
:border-radius 20
:background-color colors/green}]}])]
[item "Default with Image, icon"
(snippets/code-snippet
[list-item/list-item
{:title "George"
:on-press #()
:icon [react/view
{:width 40
:height 40
:border-radius 20
:background-color colors/green}]
:accessories [:main-icons/more]}])]
[item "With radio button (TODO!)"
(snippets/code-snippet
[list-item/list-item
{:title "George"
:on-press #()
:icon [react/view
{:width 40
:height 40
:border-radius 20
:background-color colors/green}]}])]]
[react/view {:margin-right 10}
[item "Default wIth icon in circle"
(snippets/code-snippet
[list-item/list-item
{:title "Clear History"
:theme :action
:icon :main-icons/close
:on-press #()}])]
[item "Default wIth icon in circle, chevron"
(snippets/code-snippet
[list-item/list-item
{:title "Get a ENS username?"
:icon :main-icons/address
:on-press #()
:accessories [:chevron]}])]
[item "Default wIth icon in circle, chevron and accessory"
(snippets/code-snippet
[list-item/list-item
{:title "Contacts"
:icon :main-icons/in-contacts
:on-press #()
:accessories [[react/text {:style {:color colors/gray}} "4"]
:chevron]}])]
[item "Default wIth icon in circle, chevron and badge"
(snippets/code-snippet
[list-item/list-item
{:title "Privacy and Security"
:icon :main-icons/profile
:on-press #()
:accessories [[badge/badge "333"] :chevron]}])]
[item "Default wIth icon in circle, switch"
(snippets/code-snippet
[list-item/list-item
{:title "Notifications"
:icon :main-icons/notification
:on-press #()
:accessories
[[react/switch {}]]}])]
[item "Default wIth icon in circle, red"
(snippets/code-snippet
[list-item/list-item
{:title "Delete and Leave"
:theme :action-red
:icon :main-icons/delete
:on-press #()}])]]
[react/view {:margin-right 10}
[item "Two lines with icon in circle, chevron"
(snippets/code-snippet
[list-item/list-item
{:title "alex.stateofus.eth"
:subtitle "ENS name"
:icon :main-icons/address
:accessories [:chevron]
:on-press #()}])]
[item "Two lines with icon in circle"
(snippets/code-snippet
[list-item/list-item
{:title "alex.stateofus.eth"
:subtitle "ENS name"
:icon :main-icons/address
:on-press #()}])]
[item "Two lines with icon in circle, blue title"
(snippets/code-snippet
[list-item/list-item
{:title "Add or Create a Profile"
:subtitle "Requires signout"
:theme :action
:icon :main-icons/address
:on-press #()}])]
[item "Two lines with dapp icon,title and subtitle"
(snippets/code-snippet
[list-item/list-item
{:title "CryptoKitties"
:subtitle "https://cryptokitties.co"
:icon [react/view {:width 40
:height 40
:border-radius 20
:background-color colors/green}]
:on-press #()}])]]
[react/view {:margin-right 10}
[item "Default Small"
(snippets/code-snippet
[list-item/list-item
{:title "Everybody"
:type :small
:on-press #()}])]
[item "Default Small button"
(snippets/code-snippet
[list-item/list-item
{:title "Change Passcode"
:type :small
:theme :action
:on-press #()}])]
[item "Default Small red button"
(snippets/code-snippet
[list-item/list-item
{:title "Delete all Contacts"
:type :small
:theme :action-red
:on-press #()}])]
[item "Default Small with chevron"
(snippets/code-snippet
[list-item/list-item
{:title "Recovery Phrase"
:type :small
:on-press #()
:accessories [:chevron]}])]
[item "Default Small with chevron and accessory"
(snippets/code-snippet
[list-item/list-item
{:title "Main Currency"
:type :small
:on-press #()
:accessories [[react/text {:style {:color colors/gray}} "USD"]
:chevron]}])]
[item "Default Small with chevron, badge"
(snippets/code-snippet
[list-item/list-item
{:title "Recovery Phrase"
:type :small
:on-press #()
:accessories [[badge/badge "2"] :chevron]}])]]
[react/view {:margin-right 10}
[item "Long title"
(snippets/code-snippet
[list-item/list-item
{:title "loooooooooong loooooooooooooong looooooong title"
:subtitle "ENS name"
:icon :main-icons/address
:accessories [:chevron]
:on-press #()}])]
[item "Long subtitle"
(snippets/code-snippet
[list-item/list-item
{:title "alex.stateofus.eth"
:subtitle "loooooooooooooooong loooooong looooooong subtitle"
:icon :main-icons/address
:accessories [:chevron]
:on-press #()}])]
[item "Title-prefix + long title"
(snippets/code-snippet
[list-item/list-item
{:title-prefix "From"
:title-prefix-width 45
:title "title-prefix and loooooong title really loooonglooo00oooong"
:type :small
:on-press #()}])]]])
-52
View File
@@ -1,52 +0,0 @@
(ns fiddle.views.main
(:require-macros [status-im.utils.views :as views])
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.button :as button]
[fiddle.views.colors :as colors]
[fiddle.views.screens :as screens]
[fiddle.views.typography :as typography]
[fiddle.views.icons :as icons]
[fiddle.views.list-items :as list-items]
[fiddle.views.ui :as ui]
[fiddle.views.toolbar :as toolbar]
[fiddle.views.topbar :as topbar]
[re-frame.core :as re-frame]))
(defn btn [id label view-id]
[react/view {:margin-bottom 5}
[button/button
{:label label
:disabled? (= id view-id)
:type :secondary
:on-press #(re-frame/dispatch [:set :view-id id])}]])
(views/defview main []
(views/letsubs [view-id [:view-id]]
[react/view {:flex 1 :flex-direction :row :padding 10}
[react/view {:padding-right 20}
[btn :colors "Colors" view-id]
[btn :icons "Icons" view-id]
[btn :typography "Typography" view-id]
[btn :list-header "List Header" view-id]
[btn :list-items "List Items" view-id]
[btn :top-bar "Top Bar" view-id]
[btn :ui "UI elements" view-id]
[btn :tooltip "Tooltips" view-id]
[btn :bottom "Bottom Sheet" view-id]
[btn :popover "Popover" view-id]
[btn :input "Text input" view-id]
[btn :tabbar "Tab Bar" view-id]
[btn :toolbar "Toolbar" view-id]
[btn :snack "Snackbar" view-id]
[btn :screens "Screens" view-id]]
(case view-id
:colors [colors/colors]
:icons [icons/icons]
:screens [screens/screens]
:typography [typography/typography]
:list-items [list-items/list-items]
:toolbar [toolbar/toolbar-view]
:top-bar [topbar/topbar-view]
:list-header [list-items/list-header]
:ui [ui/ui]
[react/text "TODO"])]))
-11
View File
@@ -1,11 +0,0 @@
(ns fiddle.views.screens
(:require [re-frame.core :as re-frame]
[status-im.ui.components.react :as react]
[status-im.ui.screens.wallet.add-new.views :as add-new]
[fiddle.frame :as frame]))
(defn screens []
[react/view {:flex-direction :row}
[frame/frame
[add-new/add-account]]])
-29
View File
@@ -1,29 +0,0 @@
(ns fiddle.views.toolbar
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.toolbar :as toolbar]
[status-im.ui.components.colors :as colors]
cljs.pprint
[reagent.core :as reagent]
[status-im.ui.components.button :as button])
(:require-macros [fiddle.snippets :as snippets]))
(defn toolbar-view []
[react/view
{:background-color colors/gray-lighter
:flex 1
:padding 20
:flex-direction :row
:flex-wrap :wrap}
[react/view {:width 375}
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:center {:type :secondary :label "Label"}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:left {:type :previous :label "Label"} :right {:type :next :label "Label"}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:left {:type :secondary :label "Label"} :right {:label "Label"}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:left {:type :previous :label "Label"}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:right {:type :next :label "Label"}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [toolbar/toolbar {:center {:label "Label"}}])]]])
-33
View File
@@ -1,33 +0,0 @@
(ns fiddle.views.topbar
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.topbar :as topbar]
[status-im.ui.components.colors :as colors]
cljs.pprint
[reagent.core :as reagent])
(:require-macros [fiddle.snippets :as snippets]))
(defn topbar-view []
[react/view
{:background-color colors/gray-lighter
:flex 1
:padding 20
:flex-direction :row
:flex-wrap :wrap}
[react/view {:width 375}
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Chat Invites"}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Chat Invites tile tile title tile tile title tile tile title tile tile title tile tile title tile tile title 3"}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Chat" :navigation :none :show-border? true}])
[react/view {:height 10}]]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Blocked Users" :accessories [{:label "Done" :handler #(js/alert "Done")}]}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Blocked Users" :accessories [{:label "Done" :handler #(js/alert "Done")}] :navigation {:label "Cancel" :handler #(js/alert "Cancel")}}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Chat Invites" :accessories [{:icon :more :handler #(js/alert "More")}]}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "Title" :accessories [{:icon :more :handler #(js/alert "More")} {:icon :share :handler #(js/alert "Share")}]}])]
[react/view {:background-color :white :margin 10}
(snippets/code-snippet [topbar/topbar {:title "test"}])]]])
-21
View File
@@ -1,21 +0,0 @@
(ns fiddle.views.typography
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.colors :as colors]
[status-im.ui.components.typography :as typography]))
(defn typo [name key]
[react/view {:flex-direction :row :align-items :center :margin-bottom 40}
[react/text {:style {:typography key :margin-right 20 :width 200}} name]
[react/text {:style {:margin-right 20 :width 200}} (str key)]
[react/text {:style {:color colors/gray}} (get typography/typography-styles key)]])
(defn typography []
[react/view {:flex-direction :row :flex 1}
[react/view {:padding 20}
[typo "Header" :header]
[typo "Title Bold" :title-bold]
[typo "Title" :title]
[typo "Main Medium" :main-medium]
[typo "Main" nil]
[typo "Caption" :caption]
[typo "TIMESTAMP" :timestamp]]])
-82
View File
@@ -1,82 +0,0 @@
(ns fiddle.views.ui
(:require [status-im.ui.components.react :as react]
[status-im.ui.components.button :as button]
[status-im.ui.components.colors :as colors]
[status-im.ui.components.badge :as badge]
[status-im.ui.components.checkbox.view :as checkbox]
[reagent.core :as reagent]
[status-im.ui.components.radio :as radio]
cljs.pprint)
(:require-macros [fiddle.snippets :as snippets]))
(def sw (reagent/atom true))
(def ch (reagent/atom true))
(def ch2 (reagent/atom false))
(defn ui []
[react/view {:flex-direction :row :flex-wrap :wrap :flex 1}
[react/view
[react/text {:style {:typography :main-medium}} "Main button"]
[react/view {:padding 40 :background-color :while :border-radius 20}
(snippets/code-snippet [button/button {:label "Label"}] true)
(snippets/code-snippet [button/button {:label "Label" :disabled? true}] true)]]
[react/view
[react/text {:style {:typography :main-medium}} "Secondary button"]
[react/view {:padding 40 :background-color :while :border-radius 20}
(snippets/code-snippet [button/button {:label "Label" :type :secondary}] true)
(snippets/code-snippet [button/button {:label "Label" :type :secondary :disabled? true}] true)]]
[react/view
[react/text {:style {:typography :main-medium}} "Next and previous buttons"]
[react/view {:padding 40 :background-color :while :border-radius 20 :flex-direction :row}
[react/view
(snippets/code-snippet [button/button {:label "Label" :type :next}] true)
(snippets/code-snippet [button/button {:label "Label" :type :previous}] true)]
[react/view
(snippets/code-snippet [button/button {:label "Label" :type :next :disabled? true}] true)
(snippets/code-snippet [button/button {:label "Label2" :type :previous :disabled? true}] true)]]]
[react/view
[react/text {:style {:typography :main-medium}} "Switch"]
[react/view {:padding 40 :background-color :while :border-radius 20}
(snippets/code-snippet
[react/switch
{:track-color #js {:true colors/blue :false nil}
:value @sw
:on-value-change #(swap! sw not)
:disabled false}]
true)
[react/view {:height 20}]
(snippets/code-snippet
[react/switch
{:track-color #js {:true colors/blue :false nil}
:value false
:disabled true}]
true)]]
[react/view
[react/text {:style {:typography :main-medium}} "Badge"]
[react/view {:padding 40 :background-color :while :border-radius 20 :flex-direction :row :flex-wrap :wrap}
[react/view {:margin 10}
(snippets/code-snippet [badge/badge "8"] true)]
[react/view {:margin 10}
[badge/badge "8" true]]
[react/view {:margin 10}
[badge/badge "128"]]
[react/view {:margin 10}
[badge/badge "338" true]]]]
[react/view
[react/text {:style {:typography :main-medium}} "Checkbox"]
[react/view {:padding 40 :background-color :while :border-radius 20}
(snippets/code-snippet
[checkbox/checkbox
{:checked? @ch :on-value-change #(swap! ch not)}]
true)
[react/view {:height 20}]
(snippets/code-snippet
[checkbox/checkbox
{:checked? @ch2 :on-value-change #(swap! ch2 not)}]
true)]]
[react/view
[react/text {:style {:typography :main-medium}} "Radio button"]
[react/view {:padding 40 :background-color :while :border-radius 20}
(snippets/code-snippet [radio/radio true] true)
[react/view {:height 20}]
(snippets/code-snippet [radio/radio false] true)]]])
-6
View File
@@ -1,6 +0,0 @@
import React from 'react';
import ReactDOM from 'react-dom';
window.deps = {'react-native-web' : require('react-native-web') };
window.React = React;
window.ReactDOM = ReactDOM;
window.ReactNativeWeb = window.deps['react-native-web'];
-20
View File
@@ -1,20 +0,0 @@
(ns status-im.i18n-resources
(:require-macros [status-im.i18n :as i18n])
(:require [status-im.utils.types :as types]
[clojure.string :as string]))
(def default-device-language
:en)
;; translations
(def translations-by-locale
(->> (i18n/translations [:en :es_419 :fa :ko :ms :pl :ru :zh_Hans_CN])
(map (fn [[k t]]
(let [k' (-> (name k)
(string/replace "_" "-")
keyword)]
[k' (types/json->clj t)])))
(into {})))
;; API compatibility
(defn load-language [lang])
@@ -1,43 +0,0 @@
(ns status-im.react-native.js-dependencies)
(def action-button (fn [] #js {:default #js {:Item #js {}}}))
(def config (fn [] #js {:default #js {}}))
(def camera (fn [] #js {:default #js {:constants #js {}}}))
(def dialogs (fn [] #js {}))
(def dismiss-keyboard (fn [] #js {}))
(def emoji-picker (fn [] #js {:default #js {}}))
(def fs (fn [] #js {}))
(def i18n #js {:locale "en"})
(def react-native-languages #js {:language "en", :addEventListener (fn []), :removeEventListener (fn [])})
(def image-crop-picker (fn [] #js {}))
(def image-resizer (fn [] #js {}))
(def qr-code (fn [] #js {}))
(def react-native
#js {:NativeModules #js {}
:Animated #js {:View #js {}
:FlatList #js {}
:Text #js {}}
:DeviceEventEmitter #js {:addListener (fn [])}
:Dimensions #js {:get (fn [])}})
(def vector-icons (fn [] #js {:default #js {}}))
(def webview (fn [] #js {:WebView #js {}}))
(def touchid (fn [] #js {}))
(def svg (fn [] #js {:default #js {}}))
(def status-keycard (fn [] #js {:default #js {}}))
(def snoopy (fn [] #js {:default #js {}}))
(def snoopy-filter (fn [] #js {:default #js {}}))
(def snoopy-bars (fn [] #js {:default #js {}}))
(def snoopy-buffer (fn [] #js {:default #js {}}))
(def fetch (fn [_ _] #js {}))
(def background-timer (fn [] #js {:setTimeout js/setTimeout
:setInterval js/setInterval
:clearTimeout js/clearTimeout
:clearInterval js/clearInterval}))
(def keychain (fn [] #js {:setGenericPassword (constantly (.resolve js/Promise true))}))
(def react-navigation #js {:NavigationActions #js {}})
(def react-native-mail (fn [] #js {:mail #js {}}))
(def react-native-navigation-twopane #js {})
@@ -1,33 +0,0 @@
(ns status-im.react-native.resources)
(def ui
{:lock "images/ui/lock.png"
:tribute-to-talk "images/ui/tribute-to-talk.png"
:hardwallet-card "images/ui/hardwallet-card.png"
:secret-keys "images/ui/secret-keys.png"
:keycard-lock "images/ui/keycard-lock.png"
:keycard "images/ui/keycard.png"
:keycard-logo "images/ui/keycard-logo.png"
:keycard-logo-blue "images/ui/keycard-logo-blue.png"
:keycard-logo-gray "images/ui/keycard-logo-gray.png"
:keycard-key "images/ui/keycard-key.png"
:keycard-empty "images/ui/keycard-empty.png"
:keycard-phone "images/ui/keycard-phone.png"
:keycard-connection "images/ui/keycard-connection.png"
:keycard-wrong "images/ui/keycard-wrong.png"
:not-keycard "images/ui/not-keycard.png"
:status-logo "images/ui/status-logo.png"
:hold-card-animation "images/ui/hold-card-animation.gif"
:warning-sign "images/ui/warning-sign.png"
:phone-nfc-on "images/ui/phone-nfc-on.png"
:phone-nfc-off "images/ui/phone-nfc-off.png"
:dapp-store "images/ui/dapp-store.png"
:ens-header "images/ui/ens-header.png"})
(def loaded-images (atom {}))
(defn get-image [k]
(if (contains? @loaded-images k)
(get @loaded-images k)
(get (swap! loaded-images assoc k
(get ui k)) k)))
@@ -1,328 +0,0 @@
(ns status-im.ui.components.react
(:require-macros [status-im.utils.views :as views])
(:require [goog.object :as object]
[reagent.core :as reagent]
[status-im.ui.components.styles :as styles]
[status-im.utils.utils :as utils]
[status-im.i18n :as i18n]
[status-im.ui.components.colors :as colors]
[status-im.ui.components.typography :as typography]
[status-im.utils.platform :as platform]
[react-native-web :as rnw]))
(defn adapt-class [class]
(when class
(reagent/adapt-react-class class)))
(defn get-web-class [name]
(fn []
(adapt-class (goog.object/get rnw name))))
(defn get-class [name] (get-web-class name))
(def device-event-emitter nil)
(defn dismiss-keyboard! [] ())
(def splash-screen nil)
;; React Components
(def app-registry nil)
(def app-state nil)
(def net-info nil)
(def view-class ((get-web-class "View")))
(defn view [& props]
(into []
(concat
[view-class]
(cond-> (into [] props)
(and (map? (first props)) (not (contains? (first props) :style)))
(assoc 0 {:style (first props)})))))
(def safe-area-view (get-web-class "SafeAreaView"))
(def progress-bar (get-web-class "ProgressBarAndroid"))
(def status-bar-class (get-web-class "StatusBar"))
(def scroll-view-class (get-web-class "ScrollView"))
(def keyboard-avoiding-view-class (get-web-class "KeyboardAvoidingView"))
(def text-class ((get-web-class "Text")))
(def text-input-class (get-web-class "TextInput"))
(def image-class (get-web-class "Image"))
(def picker-obj nil)
(def animated-flat-list-class #())
(defn picker-class [] )
(defn picker-item-class [] )
(defn valid-source? [source]
(or (not (map? source))
(not (contains? source :uri))
(and (contains? source :uri)
(:uri source))))
(defn image [{:keys [source] :as props}]
(when (valid-source? source)
(let [source (if (fn? source) (source) source)]
[(image-class) (assoc props :source source)])))
(def switch-class (get-web-class "Switch"))
(defn switch [props]
[(switch-class) props])
(def touchable-highlight ((get-web-class "TouchableOpacity")))
(def touchable-opacity-class (get-web-class "TouchableOpacity"))
(def activity-indicator-class (get-web-class "ActivityIndicator"))
(defn activity-indicator [props]
[(activity-indicator-class) props])
(def modal nil)
(def pan-responder nil)
(def animated (get-web-class "Animated"))
(defn animated-view-class []
(reagent/adapt-react-class (.-View (animated))))
(defn animated-view [props & content]
(vec (conj content props (animated-view-class))))
(def dimensions nil)
(def keyboard nil)
(def linking nil)
(def max-font-size-multiplier 1.25)
(defn prepare-text-props [props]
(-> props
(update :style typography/get-style)
(update-in [:style :font-family] #(or % "Inter"))
(assoc :max-font-size-multiplier max-font-size-multiplier)))
(defn prepare-nested-text-props [props]
(-> props
(update :style typography/get-nested-style)
(assoc :parseBasicMarkdown true)
(assoc :nested? true)))
;; Accessor methods for React Components
(defn text
"For nested text elements, use nested-text instead"
([text-element]
(text {} text-element))
([options text-element]
[text-class (prepare-text-props options) text-element]))
(defn nested-text
"Returns nested text elements with proper styling and typography
Do not use the nested? option, it is for internal usage of the function only"
[options & nested-text-elements]
(let [options-with-style (if (:nested? options)
(prepare-nested-text-props options)
(prepare-text-props options))]
(reduce (fn [acc text-element]
(conj acc
(if (string? text-element)
text-element
(let [[options & nested-text-elements] text-element]
(apply nested-text (prepare-nested-text-props options)
nested-text-elements)))))
[text-class (dissoc options-with-style :nested?)]
nested-text-elements)))
(defn text-input
[options text]
[(text-input-class)
(merge
{:underline-color-android :transparent
:max-font-size-multiplier max-font-size-multiplier
:placeholder-text-color colors/text-gray
:placeholder (i18n/label :t/type-a-message)
:value text}
(-> options
(update :style typography/get-style)
(update :style dissoc :line-height)))])
(defn i18n-text
[{:keys [style key]}]
[text {:style style} (i18n/label key)])
(defn icon
([n] (icon n styles/icon-default))
([n style]
[image {:source {:uri (keyword (str "icon_" (name n)))}
:resizeMode "contain"
:style style}]))
(defn touchable-opacity [props content]
[(touchable-opacity-class) props content])
#_(defn touchable-highlight [props content]
[(touchable-highlight-class)
(merge {:underlay-color :transparent} props)
content])
(defn touchable-without-feedback [props content]
nil)
(defn get-dimensions [name]
(js->clj (.get (dimensions) name) :keywordize-keys true))
(defn list-item [component]
(reagent/as-element component))
(defn value->picker-item [{:keys [value label]}]
[(picker-item-class) {:value (or value "") :label (or label value "")}])
(defn picker [{:keys [style on-change selected enabled data]}]
(into
[(picker-class) (merge (when style {:style style})
(when enabled {:enabled enabled})
(when on-change {:on-value-change on-change})
(when selected {:selected-value selected}))]
(map value->picker-item data)))
;; Image picker
(def image-picker-class nil)
(defn show-access-error [o]
(when (= "E_PERMISSION_MISSING" (object/get o "code"))
(utils/show-popup (i18n/label :t/error)
(i18n/label :t/photos-access-error))))
(defn show-image-picker
([images-fn]
(show-image-picker images-fn nil))
([images-fn media-type]
(let [image-picker (.-default (image-picker-class))]
(-> image-picker
(.openPicker (clj->js {:multiple false :mediaType (or media-type "any")}))
(.then images-fn)
(.catch show-access-error)))))
;; Clipboard
(def sharing
nil)
(defn copy-to-clipboard [text]
nil)
(defn get-from-clipboard [clbk]
nil)
;; HTTP Bridge
(def http-bridge nil)
;; KeyboardAvoidingView
(defn keyboard-avoiding-view [props & children]
(let [view-element (if platform/ios?
[(keyboard-avoiding-view-class) (merge {:behavior :padding} props)]
[view props])]
(vec (concat view-element children))))
(defn scroll-view [props & children]
(vec (conj children props (scroll-view-class))))
(views/defview with-activity-indicator
[{:keys [timeout style enabled? preview]} comp]
(views/letsubs
[loading (reagent/atom true)]
{:component-did-mount (fn []
(if (or (nil? timeout)
(> 100 timeout))
(reset! loading false)
(utils/set-timeout #(reset! loading false)
timeout)))}
(if (and (not enabled?) @loading)
(or preview
[view {:style (or style {:justify-content :center
:align-items :center})}
[activity-indicator {:animating true}]])
comp)))
(defn navigation-wrapper
"Wraps component so that it will be shown only when current-screen is one of views"
[{:keys [component views current-view hide?]
:or {hide? false}}]
(let [current-view? (if (set? views)
(views current-view)
(= views current-view))
style (if current-view?
{:flex 1
:zIndex 0}
{:opacity 0
:flex 0
:zIndex -1})
component' (if (fn? component) [component] component)]
(when (or (not hide?) (and hide? current-view?))
(if hide?
component'
[view style (if (fn? component) [component] component)]))))
(defn with-empty-preview [comp]
[with-activity-indicator
{:preview [view {}]}
comp])
;; Platform-specific View
(defmulti create-main-screen-view #(cond
platform/iphone-x? :iphone-x
platform/ios? :ios
platform/android? :android))
(defmethod create-main-screen-view :iphone-x [current-view]
(fn [props & children]
(let [props (merge props
{:background-color
(case current-view
(:wallet-send-transaction
:wallet-request-transaction
:wallet-send-assets
:wallet-request-assets
:choose-recipient
:recent-recipients
:select-account
:wallet-send-transaction-request
:contact-code
:wallet-settings-hook)
colors/blue
(:qr-viewer
:recipient-qr-code)
"#2f3031"
colors/white)})
bottom-background (when (#{:recent-recipients
:select-account
:wallet-send-assets
:wallet-request-assets} current-view)
[view {:background-color colors/white
:position :absolute
:bottom 0
:right 0
:left 0
:height 100
:z-index -1000}])
children (conj children bottom-background)]
(apply vector (safe-area-view) props children))))
(defmethod create-main-screen-view :default [_]
view)
(views/defview main-screen-modal-view [current-view & components]
(views/letsubs []
(let [main-screen-view (create-main-screen-view current-view)]
[main-screen-view styles/flex
[keyboard-avoiding-view
{:flex 1 :flex-direction :column}
(apply vector view styles/flex components)]])))
-6
View File
@@ -1,6 +0,0 @@
module.exports = {
entry: './src/js/index.js',
output: {
filename: 'index_bundle.js'
}
}
+9
View File
@@ -0,0 +1,9 @@
//
// Bridge.swift
// StatusIm
//
// Created by Andrea Franz on 02/12/2020.
// Copyright © 2020 Status. All rights reserved.
//
import Foundation
+15 -76
View File
@@ -1,83 +1,17 @@
platform :ios, '9.0'
platform :ios, '10.0'
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
def add_flipper_pods!(versions = {})
versions['Flipper'] ||= '~> 0.37.0'
versions['DoubleConversion'] ||= '1.1.7'
versions['Flipper-Folly'] ||= '~> 2.1'
versions['Flipper-Glog'] ||= '0.3.6'
versions['Flipper-PeerTalk'] ||= '~> 0.0.4'
versions['Flipper-RSocket'] ||= '~> 1.0'
pod 'FlipperKit', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitLayoutPlugin', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/SKIOSNetworkPlugin', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitUserDefaultsPlugin', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitReactPlugin', versions['Flipper'], :configuration => 'Debug'
# List all transitive dependencies for FlipperKit pods
# to avoid them being linked in Release builds
pod 'Flipper', versions['Flipper'], :configuration => 'Debug'
pod 'Flipper-DoubleConversion', versions['DoubleConversion'], :configuration => 'Debug'
pod 'Flipper-Folly', versions['Flipper-Folly'], :configuration => 'Debug'
pod 'Flipper-Glog', versions['Flipper-Glog'], :configuration => 'Debug'
pod 'Flipper-PeerTalk', versions['Flipper-PeerTalk'], :configuration => 'Debug'
pod 'Flipper-RSocket', versions['Flipper-RSocket'], :configuration => 'Debug'
pod 'FlipperKit/Core', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/CppBridge', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FBCxxFollyDynamicConvert', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FBDefines', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FKPortForwarding', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitHighlightOverlay', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitLayoutTextSearchable', versions['Flipper'], :configuration => 'Debug'
pod 'FlipperKit/FlipperKitNetworkPlugin', versions['Flipper'], :configuration => 'Debug'
end
# Post Install processing for Flipper
def flipper_post_install(installer)
installer.pods_project.targets.each do |target|
if target.name == 'YogaKit'
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '4.1'
end
end
end
end
abstract_target 'Status' do
# Pods for StatusQuo
pod 'FBLazyVector', :path => "../node_modules/react-native/Libraries/FBLazyVector"
pod 'FBReactNativeSpec', :path => "../node_modules/react-native/Libraries/FBReactNativeSpec"
pod 'RCTRequired', :path => "../node_modules/react-native/Libraries/RCTRequired"
pod 'RCTTypeSafety', :path => "../node_modules/react-native/Libraries/TypeSafety"
pod 'React', :path => '../node_modules/react-native/'
pod 'React-Core', :path => '../node_modules/react-native/'
pod 'React-CoreModules', :path => '../node_modules/react-native/React/CoreModules'
pod 'React-Core/DevSupport', :path => '../node_modules/react-native/'
pod 'React-RCTActionSheet', :path => '../node_modules/react-native/Libraries/ActionSheetIOS'
pod 'React-RCTAnimation', :path => '../node_modules/react-native/Libraries/NativeAnimation'
pod 'React-RCTBlob', :path => '../node_modules/react-native/Libraries/Blob'
pod 'React-RCTImage', :path => '../node_modules/react-native/Libraries/Image'
pod 'React-RCTLinking', :path => '../node_modules/react-native/Libraries/LinkingIOS'
pod 'React-RCTNetwork', :path => '../node_modules/react-native/Libraries/Network'
pod 'React-RCTSettings', :path => '../node_modules/react-native/Libraries/Settings'
pod 'React-RCTText', :path => '../node_modules/react-native/Libraries/Text'
pod 'React-RCTVibration', :path => '../node_modules/react-native/Libraries/Vibration'
pod 'React-Core/RCTWebSocket', :path => '../node_modules/react-native/'
config = use_native_modules!
pod 'React-cxxreact', :path => '../node_modules/react-native/ReactCommon/cxxreact'
pod 'React-jsi', :path => '../node_modules/react-native/ReactCommon/jsi'
pod 'React-jsiexecutor', :path => '../node_modules/react-native/ReactCommon/jsiexecutor'
pod 'React-jsinspector', :path => '../node_modules/react-native/ReactCommon/jsinspector'
pod 'ReactCommon/callinvoker', :path => "../node_modules/react-native/ReactCommon"
pod 'ReactCommon/turbomodule/core', :path => "../node_modules/react-native/ReactCommon"
pod 'Yoga', :path => '../node_modules/react-native/ReactCommon/yoga', :modular_headers => true
pod 'DoubleConversion', :podspec => '../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec'
pod 'glog', :podspec => '../node_modules/react-native/third-party-podspecs/glog.podspec'
pod 'Folly', :podspec => '../node_modules/react-native/third-party-podspecs/Folly.podspec'
use_react_native!(:path => config["reactNativePath"])
pod 'react-native-image-resizer', :path => '../node_modules/react-native-image-resizer'
pod 'react-native-config', :path => '../node_modules/react-native-config'
pod 'SQLCipher', '~>3.0'
pod 'SSZipArchive'
@@ -85,17 +19,21 @@ abstract_target 'Status' do
pod 'Permission-Microphone', :path => "#{permissions_path}/Microphone.podspec"
pod 'Permission-Camera', :path => "#{permissions_path}/Camera.podspec"
pod "react-native-status-keycard", path: "../node_modules/react-native-status-keycard"
pod "Keycard", git: "https://github.com/status-im/Keycard.swift.git"
pod 'secp256k1', git: "https://github.com/status-im/secp256k1.swift.git", submodules: true
target 'StatusIm' do
target 'StatusImTests' do
inherit! :complete
# Pods for testing
end
end
target 'StatusImPR' do
end
add_flipper_pods!
use_flipper!
post_install do |installer|
flipper_post_install(installer)
end
@@ -103,3 +41,4 @@ abstract_target 'Status' do
use_native_modules!
end
+341 -264
View File
@@ -1,248 +1,270 @@
PODS:
- boost-for-react-native (1.63.0)
- CocoaAsyncSocket (7.6.4)
- BVLinearGradient (2.5.6):
- React
- CocoaAsyncSocket (7.6.5)
- CocoaLibEvent (1.0.0)
- CryptoSwift (1.3.8)
- DoubleConversion (1.1.6)
- FBLazyVector (0.62.2)
- FBReactNativeSpec (0.62.2):
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.62.2)
- RCTTypeSafety (= 0.62.2)
- React-Core (= 0.62.2)
- React-jsi (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- Flipper (0.37.0):
- FBLazyVector (0.63.4)
- FBReactNativeSpec (0.63.4):
- Folly (= 2020.01.13.00)
- RCTRequired (= 0.63.4)
- RCTTypeSafety (= 0.63.4)
- React-Core (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- Flipper (0.54.0):
- Flipper-Folly (~> 2.2)
- Flipper-RSocket (~> 1.1)
- Flipper-DoubleConversion (1.1.7)
- Flipper-Folly (2.2.0):
- Flipper-Folly (2.3.0):
- boost-for-react-native
- CocoaLibEvent (~> 1.0)
- Flipper-DoubleConversion
- Flipper-Glog
- OpenSSL-Universal (= 1.0.2.19)
- OpenSSL-Universal (= 1.0.2.20)
- Flipper-Glog (0.3.6)
- Flipper-PeerTalk (0.0.4)
- Flipper-RSocket (1.1.0):
- Flipper-Folly (~> 2.2)
- FlipperKit (0.37.0):
- FlipperKit/Core (= 0.37.0)
- FlipperKit/Core (0.37.0):
- Flipper (~> 0.37.0)
- FlipperKit (0.54.0):
- FlipperKit/Core (= 0.54.0)
- FlipperKit/Core (0.54.0):
- Flipper (~> 0.54.0)
- FlipperKit/CppBridge
- FlipperKit/FBCxxFollyDynamicConvert
- FlipperKit/FBDefines
- FlipperKit/FKPortForwarding
- FlipperKit/CppBridge (0.37.0):
- Flipper (~> 0.37.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.37.0):
- FlipperKit/CppBridge (0.54.0):
- Flipper (~> 0.54.0)
- FlipperKit/FBCxxFollyDynamicConvert (0.54.0):
- Flipper-Folly (~> 2.2)
- FlipperKit/FBDefines (0.37.0)
- FlipperKit/FKPortForwarding (0.37.0):
- FlipperKit/FBDefines (0.54.0)
- FlipperKit/FKPortForwarding (0.54.0):
- CocoaAsyncSocket (~> 7.6)
- Flipper-PeerTalk (~> 0.0.4)
- FlipperKit/FlipperKitHighlightOverlay (0.37.0)
- FlipperKit/FlipperKitLayoutPlugin (0.37.0):
- FlipperKit/FlipperKitHighlightOverlay (0.54.0)
- FlipperKit/FlipperKitLayoutPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitHighlightOverlay
- FlipperKit/FlipperKitLayoutTextSearchable
- YogaKit (~> 1.18)
- FlipperKit/FlipperKitLayoutTextSearchable (0.37.0)
- FlipperKit/FlipperKitNetworkPlugin (0.37.0):
- FlipperKit/FlipperKitLayoutTextSearchable (0.54.0)
- FlipperKit/FlipperKitNetworkPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitReactPlugin (0.37.0):
- FlipperKit/FlipperKitReactPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitUserDefaultsPlugin (0.37.0):
- FlipperKit/FlipperKitUserDefaultsPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/SKIOSNetworkPlugin (0.37.0):
- FlipperKit/SKIOSNetworkPlugin (0.54.0):
- FlipperKit/Core
- FlipperKit/FlipperKitNetworkPlugin
- Folly (2018.10.22.00):
- Folly (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- Folly/Default (= 2018.10.22.00)
- Folly/Default (= 2020.01.13.00)
- glog
- Folly/Default (2018.10.22.00):
- Folly/Default (2020.01.13.00):
- boost-for-react-native
- DoubleConversion
- glog
- glog (0.3.5)
- OpenSSL-Universal (1.0.2.19):
- OpenSSL-Universal/Static (= 1.0.2.19)
- OpenSSL-Universal/Static (1.0.2.19)
- Keycard (3.0.4):
- CryptoSwift
- secp256k1
- libwebp (1.1.0):
- libwebp/demux (= 1.1.0)
- libwebp/mux (= 1.1.0)
- libwebp/webp (= 1.1.0)
- libwebp/demux (1.1.0):
- libwebp/webp
- libwebp/mux (1.1.0):
- libwebp/demux
- libwebp/webp (1.1.0)
- OpenSSL-Universal (1.0.2.20):
- OpenSSL-Universal/Static (= 1.0.2.20)
- OpenSSL-Universal/Static (1.0.2.20)
- Permission-Camera (2.1.5):
- RNPermissions
- Permission-Microphone (2.1.5):
- RNPermissions
- RCTRequired (0.62.2)
- RCTTypeSafety (0.62.2):
- FBLazyVector (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTRequired (= 0.62.2)
- React-Core (= 0.62.2)
- React (0.62.2):
- React-Core (= 0.62.2)
- React-Core/DevSupport (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-RCTActionSheet (= 0.62.2)
- React-RCTAnimation (= 0.62.2)
- React-RCTBlob (= 0.62.2)
- React-RCTImage (= 0.62.2)
- React-RCTLinking (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- React-RCTSettings (= 0.62.2)
- React-RCTText (= 0.62.2)
- React-RCTVibration (= 0.62.2)
- React-Core (0.62.2):
- Folly (= 2018.10.22.00)
- RCTRequired (0.63.4)
- RCTTypeSafety (0.63.4):
- FBLazyVector (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTRequired (= 0.63.4)
- React-Core (= 0.63.4)
- React (0.63.4):
- React-Core (= 0.63.4)
- React-Core/DevSupport (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-RCTActionSheet (= 0.63.4)
- React-RCTAnimation (= 0.63.4)
- React-RCTBlob (= 0.63.4)
- React-RCTImage (= 0.63.4)
- React-RCTLinking (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- React-RCTSettings (= 0.63.4)
- React-RCTText (= 0.63.4)
- React-RCTVibration (= 0.63.4)
- React-callinvoker (0.63.4)
- React-Core (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-Core/Default (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/CoreModulesHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/CoreModulesHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/Default (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/Default (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/DevSupport (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/DevSupport (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-jsinspector (= 0.62.2)
- React-Core/Default (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- React-jsinspector (= 0.63.4)
- Yoga
- React-Core/RCTActionSheetHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTActionSheetHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTAnimationHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTAnimationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTBlobHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTBlobHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTImageHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTImageHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTLinkingHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTLinkingHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTNetworkHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTNetworkHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTSettingsHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTSettingsHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTTextHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTTextHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTVibrationHeaders (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTVibrationHeaders (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-Core/RCTWebSocket (0.62.2):
- Folly (= 2018.10.22.00)
- React-Core/RCTWebSocket (0.63.4):
- Folly (= 2020.01.13.00)
- glog
- React-Core/Default (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsiexecutor (= 0.62.2)
- React-Core/Default (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsiexecutor (= 0.63.4)
- Yoga
- React-CoreModules (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/CoreModulesHeaders (= 0.62.2)
- React-RCTImage (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-cxxreact (0.62.2):
- React-CoreModules (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/CoreModulesHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTImage (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-cxxreact (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsinspector (= 0.62.2)
- React-jsi (0.62.2):
- React-callinvoker (= 0.63.4)
- React-jsinspector (= 0.63.4)
- React-jsi (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsi/Default (= 0.62.2)
- React-jsi/Default (0.62.2):
- React-jsi/Default (= 0.63.4)
- React-jsi/Default (0.63.4):
- boost-for-react-native (= 1.63.0)
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-jsiexecutor (0.62.2):
- React-jsiexecutor (0.63.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- React-jsinspector (0.62.2)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsinspector (0.63.4)
- react-native-background-timer (2.2.0):
- React
- react-native-camera-kit (8.0.4):
- React
- react-native-cameraroll (1.6.2):
- React
- react-native-config (1.4.2):
- react-native-config/App (= 1.4.2)
- react-native-config/App (1.4.2):
- React-Core
- react-native-image-resizer (1.2.3):
- React
- react-native-mail (4.0.0):
@@ -257,67 +279,71 @@ PODS:
- React
- react-native-splash-screen (3.2.0):
- React
- react-native-webview (10.3.1):
- react-native-status-keycard (2.5.30):
- Keycard
- React
- React-RCTActionSheet (0.62.2):
- React-Core/RCTActionSheetHeaders (= 0.62.2)
- React-RCTAnimation (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTAnimationHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTBlob (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- React-Core/RCTBlobHeaders (= 0.62.2)
- React-Core/RCTWebSocket (= 0.62.2)
- React-jsi (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTImage (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTImageHeaders (= 0.62.2)
- React-RCTNetwork (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTLinking (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- React-Core/RCTLinkingHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTNetwork (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTNetworkHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTSettings (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- RCTTypeSafety (= 0.62.2)
- React-Core/RCTSettingsHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- React-RCTText (0.62.2):
- React-Core/RCTTextHeaders (= 0.62.2)
- React-RCTVibration (0.62.2):
- FBReactNativeSpec (= 0.62.2)
- Folly (= 2018.10.22.00)
- React-Core/RCTVibrationHeaders (= 0.62.2)
- ReactCommon/turbomodule/core (= 0.62.2)
- ReactCommon/callinvoker (0.62.2):
- react-native-webview (10.9.2):
- React-Core
- React-RCTActionSheet (0.63.4):
- React-Core/RCTActionSheetHeaders (= 0.63.4)
- React-RCTAnimation (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTAnimationHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTBlob (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- React-Core/RCTBlobHeaders (= 0.63.4)
- React-Core/RCTWebSocket (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTImage (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTImageHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- React-RCTNetwork (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTLinking (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- React-Core/RCTLinkingHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTNetwork (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTNetworkHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTSettings (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- RCTTypeSafety (= 0.63.4)
- React-Core/RCTSettingsHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- React-RCTText (0.63.4):
- React-Core/RCTTextHeaders (= 0.63.4)
- React-RCTVibration (0.63.4):
- FBReactNativeSpec (= 0.63.4)
- Folly (= 2020.01.13.00)
- React-Core/RCTVibrationHeaders (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactCommon/turbomodule/core (= 0.63.4)
- ReactCommon/turbomodule/core (0.63.4):
- DoubleConversion
- Folly (= 2018.10.22.00)
- Folly (= 2020.01.13.00)
- glog
- React-cxxreact (= 0.62.2)
- ReactCommon/turbomodule/core (0.62.2):
- DoubleConversion
- Folly (= 2018.10.22.00)
- glog
- React-Core (= 0.62.2)
- React-cxxreact (= 0.62.2)
- React-jsi (= 0.62.2)
- ReactCommon/callinvoker (= 0.62.2)
- React-callinvoker (= 0.63.4)
- React-Core (= 0.63.4)
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- ReactNativeAudioToolkit (2.0.3):
- React
- ReactNativeDarkMode (0.2.2):
@@ -328,11 +354,13 @@ PODS:
- React
- RNCMaskedView (0.1.9):
- React
- RNCPushNotificationIOS (1.4.1):
- React
- RNDeviceInfo (5.6.1):
- React
- RNFS (2.16.6):
- React
- RNGestureHandler (1.6.1):
- RNGestureHandler (1.8.0):
- React
- RNImageCropPicker (0.31.1):
- React-Core
@@ -351,19 +379,26 @@ PODS:
- React
- RNReactNativeHapticFeedback (1.9.0):
- React
- RNReanimated (1.8.0):
- RNReanimated (1.13.0):
- React
- RNScreens (2.5.0):
- RNScreens (2.10.1):
- React
- RNSVG (9.13.6):
- React
- SDWebImage (5.10.2):
- SDWebImage/Core (= 5.10.2)
- SDWebImage/Core (5.10.2)
- SDWebImageWebPCoder (0.6.1):
- libwebp (~> 1.0)
- SDWebImage/Core (~> 5.7)
- secp256k1 (0.1.6)
- SQLCipher (3.4.2):
- SQLCipher/standard (= 3.4.2)
- SQLCipher/common (3.4.2)
- SQLCipher/standard (3.4.2):
- SQLCipher/common
- SSZipArchive (2.2.3)
- TOCropViewController (2.5.3)
- TOCropViewController (2.6.0)
- TouchID (4.4.1):
- React
- Yoga (1.14.0)
@@ -371,35 +406,38 @@ PODS:
- Yoga (~> 1.14)
DEPENDENCIES:
- BVLinearGradient (from `../node_modules/react-native-linear-gradient`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
- Flipper (~> 0.37.0)
- Flipper (~> 0.54.0)
- Flipper-DoubleConversion (= 1.1.7)
- Flipper-Folly (~> 2.1)
- Flipper-Folly (~> 2.2)
- Flipper-Glog (= 0.3.6)
- Flipper-PeerTalk (~> 0.0.4)
- Flipper-RSocket (~> 1.0)
- FlipperKit (~> 0.37.0)
- FlipperKit/Core (~> 0.37.0)
- FlipperKit/CppBridge (~> 0.37.0)
- FlipperKit/FBCxxFollyDynamicConvert (~> 0.37.0)
- FlipperKit/FBDefines (~> 0.37.0)
- FlipperKit/FKPortForwarding (~> 0.37.0)
- FlipperKit/FlipperKitHighlightOverlay (~> 0.37.0)
- FlipperKit/FlipperKitLayoutPlugin (~> 0.37.0)
- FlipperKit/FlipperKitLayoutTextSearchable (~> 0.37.0)
- FlipperKit/FlipperKitNetworkPlugin (~> 0.37.0)
- FlipperKit/FlipperKitReactPlugin (~> 0.37.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.37.0)
- FlipperKit/SKIOSNetworkPlugin (~> 0.37.0)
- Flipper-RSocket (~> 1.1)
- FlipperKit (~> 0.54.0)
- FlipperKit/Core (~> 0.54.0)
- FlipperKit/CppBridge (~> 0.54.0)
- FlipperKit/FBCxxFollyDynamicConvert (~> 0.54.0)
- FlipperKit/FBDefines (~> 0.54.0)
- FlipperKit/FKPortForwarding (~> 0.54.0)
- FlipperKit/FlipperKitHighlightOverlay (~> 0.54.0)
- FlipperKit/FlipperKitLayoutPlugin (~> 0.54.0)
- FlipperKit/FlipperKitLayoutTextSearchable (~> 0.54.0)
- FlipperKit/FlipperKitNetworkPlugin (~> 0.54.0)
- FlipperKit/FlipperKitReactPlugin (~> 0.54.0)
- FlipperKit/FlipperKitUserDefaultsPlugin (~> 0.54.0)
- FlipperKit/SKIOSNetworkPlugin (~> 0.54.0)
- Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`)
- glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`)
- Keycard (from `https://github.com/status-im/Keycard.swift.git`)
- Permission-Camera (from `../node_modules/react-native-permissions/ios/Camera.podspec`)
- Permission-Microphone (from `../node_modules/react-native-permissions/ios/Microphone.podspec`)
- RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`)
- RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`)
- React (from `../node_modules/react-native/`)
- React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`)
- React-Core (from `../node_modules/react-native/`)
- React-Core/DevSupport (from `../node_modules/react-native/`)
- React-Core/RCTWebSocket (from `../node_modules/react-native/`)
@@ -411,6 +449,7 @@ DEPENDENCIES:
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-camera-kit (from `../node_modules/react-native-camera-kit`)
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
- react-native-config (from `../node_modules/react-native-config`)
- react-native-image-resizer (from `../node_modules/react-native-image-resizer`)
- react-native-mail (from `../node_modules/react-native-mail`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
@@ -418,6 +457,7 @@ DEPENDENCIES:
- react-native-shake (from `../node_modules/react-native-shake`)
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
- react-native-splash-screen (from `../node_modules/react-native-splash-screen`)
- react-native-status-keycard (from `../node_modules/react-native-status-keycard`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
@@ -428,13 +468,13 @@ DEPENDENCIES:
- React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`)
- React-RCTText (from `../node_modules/react-native/Libraries/Text`)
- React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`)
- ReactCommon/callinvoker (from `../node_modules/react-native/ReactCommon`)
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
- "ReactNativeAudioToolkit (from `../node_modules/@react-native-community/audio-toolkit`)"
- ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`)
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
- "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)"
- RNDeviceInfo (from `../node_modules/react-native-device-info`)
- RNFS (from `../node_modules/react-native-fs`)
- RNGestureHandler (from `../node_modules/react-native-gesture-handler`)
@@ -446,6 +486,7 @@ DEPENDENCIES:
- RNReanimated (from `../node_modules/react-native-reanimated`)
- RNScreens (from `../node_modules/react-native-screens`)
- RNSVG (from `../node_modules/react-native-svg`)
- secp256k1 (from `https://github.com/status-im/secp256k1.swift.git`)
- SQLCipher (~> 3.0)
- SSZipArchive
- TouchID (from `../node_modules/react-native-touch-id`)
@@ -456,6 +497,7 @@ SPEC REPOS:
- boost-for-react-native
- CocoaAsyncSocket
- CocoaLibEvent
- CryptoSwift
- Flipper
- Flipper-DoubleConversion
- Flipper-Folly
@@ -470,6 +512,8 @@ SPEC REPOS:
- YogaKit
EXTERNAL SOURCES:
BVLinearGradient:
:path: "../node_modules/react-native-linear-gradient"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
@@ -480,6 +524,8 @@ EXTERNAL SOURCES:
:podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec"
glog:
:podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec"
Keycard:
:git: https://github.com/status-im/Keycard.swift.git
Permission-Camera:
:path: "../node_modules/react-native-permissions/ios/Camera.podspec"
Permission-Microphone:
@@ -490,6 +536,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/Libraries/TypeSafety"
React:
:path: "../node_modules/react-native/"
React-callinvoker:
:path: "../node_modules/react-native/ReactCommon/callinvoker"
React-Core:
:path: "../node_modules/react-native/"
React-CoreModules:
@@ -508,6 +556,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-camera-kit"
react-native-cameraroll:
:path: "../node_modules/@react-native-community/cameraroll"
react-native-config:
:path: "../node_modules/react-native-config"
react-native-image-resizer:
:path: "../node_modules/react-native-image-resizer"
react-native-mail:
@@ -522,6 +572,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/@react-native-community/slider"
react-native-splash-screen:
:path: "../node_modules/react-native-splash-screen"
react-native-status-keycard:
:path: "../node_modules/react-native-status-keycard"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-RCTActionSheet:
@@ -554,6 +606,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/@react-native-community/clipboard"
RNCMaskedView:
:path: "../node_modules/@react-native-community/masked-view"
RNCPushNotificationIOS:
:path: "../node_modules/@react-native-community/push-notification-ios"
RNDeviceInfo:
:path: "../node_modules/react-native-device-info"
RNFS:
@@ -576,42 +630,60 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-screens"
RNSVG:
:path: "../node_modules/react-native-svg"
secp256k1:
:git: https://github.com/status-im/secp256k1.swift.git
:submodules: true
TouchID:
:path: "../node_modules/react-native-touch-id"
Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga"
CHECKOUT OPTIONS:
Keycard:
:commit: 36e260cfafc2755a47f1e5f542858ceb0c6c37df
:git: https://github.com/status-im/Keycard.swift.git
secp256k1:
:commit: 46a1fa30d9b8babeae85ff519050f42394ab5fcc
:git: https://github.com/status-im/secp256k1.swift.git
:submodules: true
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
CocoaAsyncSocket: 694058e7c0ed05a9e217d1b3c7ded962f4180845
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99
CocoaLibEvent: 2fab71b8bd46dd33ddb959f7928ec5909f838e3f
DoubleConversion: 5805e889d232975c086db112ece9ed034df7a0b2
FBLazyVector: 4aab18c93cd9546e4bfed752b4084585eca8b245
FBReactNativeSpec: 5465d51ccfeecb7faa12f9ae0024f2044ce4044e
Flipper: 1670db365568191bd123a0c905b834e77ba9e3d3
CryptoSwift: 01b0f0cba1d5c212e5a335ff6c054fb75a204f00
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
Flipper: be611d4b742d8c87fbae2ca5f44603a02539e365
Flipper-DoubleConversion: 38631e41ef4f9b12861c67d17cb5518d06badc41
Flipper-Folly: c12092ea368353b58e992843a990a3225d4533c3
Flipper-Folly: e4493b013c02d9347d5e0cb4d128680239f6c78a
Flipper-Glog: 1dfd6abf1e922806c52ceb8701a3599a79a200a6
Flipper-PeerTalk: 116d8f857dc6ef55c7a5a75ea3ceaafe878aadc9
Flipper-RSocket: 64e7431a55835eb953b0bf984ef3b90ae9fdddd7
FlipperKit: afd4259ef9eadeeb2d30250b37d95cb3b6b97a69
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 682164e7ac67e41afd8f7b6a37a96d04caf61cc0
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
FlipperKit: ab353d41aea8aae2ea6daaf813e67496642f3d7d
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
glog: cee4319f395bad5865ef3f32466c2e0ae677432c
Keycard: dd96182888da0aacf4de821b641103143bbb26cc
libwebp: 946cb3063cea9236285f7e9a8505d806d30e07f3
OpenSSL-Universal: ff34003318d5e1163e9529b08470708e389ffcdd
Permission-Camera: afad27bf90337684d4a86f3825112d648c8c4d3b
Permission-Microphone: 0ffabc3fe1c75cfb260525ee3f529383c9f4368c
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
React-Core: b12bffb3f567fdf99510acb716ef1abd426e0e05
React-CoreModules: 4a9b87bbe669d6c3173c0132c3328e3b000783d0
React-cxxreact: e65f9c2ba0ac5be946f53548c1aaaee5873a8103
React-jsi: b6dc94a6a12ff98e8877287a0b7620d365201161
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e
RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b
React: b0a957a2c44da4113b0c4c9853d8387f8e64e615
React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe
React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b
React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60
React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3
React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31
React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4
react-native-camera-kit: 498a6d111a904834e0824e9073cfadef7303235f
react-native-cameraroll: ac69828fc43b9dbf92149714fd739577d38e4448
react-native-config: c98128a72bc2c3a1ca72caec0b021f0fa944aa29
react-native-image-resizer: 2f1577efa3bc762597681f530c8e8d05ce0ceeb3
react-native-mail: 7e37dfbe93ff0d4c7df346b738854dbed533e86f
react-native-netinfo: ddaca8bbb9e6e914b1a23787ccb879bc642931c9
@@ -619,40 +691,45 @@ SPEC CHECKSUMS:
react-native-shake: de052eaa3eadc4a326b8ddd7ac80c06e8d84528c
react-native-slider: 12bd76d3d568c9c5500825db54123d44b48e4ad4
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-webview: 40bbeb6d011226f34cb83f845aeb0fdf515cfc5f
React-RCTActionSheet: f41ea8a811aac770e0cc6e0ad6b270c644ea8b7c
React-RCTAnimation: 49ab98b1c1ff4445148b72a3d61554138565bad0
React-RCTBlob: a332773f0ebc413a0ce85942a55b064471587a71
React-RCTImage: e70be9b9c74fe4e42d0005f42cace7981c994ac3
React-RCTLinking: c1b9739a88d56ecbec23b7f63650e44672ab2ad2
React-RCTNetwork: 73138b6f45e5a2768ad93f3d57873c2a18d14b44
React-RCTSettings: 6e3738a87e21b39a8cb08d627e68c44acf1e325a
React-RCTText: fae545b10cfdb3d247c36c56f61a94cfd6dba41d
React-RCTVibration: 4356114dbcba4ce66991096e51a66e61eda51256
ReactCommon: ed4e11d27609d571e7eee8b65548efc191116eb3
react-native-status-keycard: a001766cf8f27de56406ac712a52a982f1f28744
react-native-webview: 4e96d493f9f90ba4f03b28933f30b2964df07e39
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0
React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2
React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae
React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a
React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c
React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d
ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b
ReactNativeAudioToolkit: de9610f323e855ac6574be8c99621f3d57c5df06
ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949
RNCAsyncStorage: d059c3ee71738c39834a627476322a5a8cd5bf36
RNCClipboard: 8148e21ac347c51fd6cd4b683389094c216bb543
RNCMaskedView: 71fc32d971f03b7f03d6ab6b86b730c4ee64f5b6
RNCPushNotificationIOS: c145c6253ea016e5efeff604f2720736b4a596f7
RNDeviceInfo: b6e650fbd234732c759544218657d549b4339038
RNFS: 2bd9eb49dc82fa9676382f0585b992c424cd59df
RNGestureHandler: 8f09cd560f8d533eb36da5a6c5a843af9f056b38
RNGestureHandler: 7a5833d0f788dbd107fbb913e09aa0c1ff333c39
RNImageCropPicker: 38865ab4af1b0b2146ad66061196bc0184946855
RNKeychain: 216f37338fcb9e5c3a2530f1e3295f737a690cb1
RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e
RNPermissions: ad71dd4f767ec254f2cd57592fbee02afee75467
RNReactNativeHapticFeedback: 2566b468cc8d0e7bb2f84b23adc0f4614594d071
RNReanimated: 955cf4068714003d2f1a6e2bae3fb1118f359aff
RNScreens: ac02d0e4529f08ced69f5580d416f968a6ec3a1d
RNReanimated: 89f5e0a04d1dd52fbf27e7e7030d8f80a646a3fc
RNScreens: b748efec66e095134c7166ca333b628cd7e6f3e2
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
SDWebImage: b969dcfc02c40a5da71eac0b03b8f1a0c794a86f
SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: 62d4947b08730e4cda640473b0066d209ff033c9
TOCropViewController: 20a14b6a7a098308bf369e7c8d700dc983a974e6
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
Yoga: 3ebccbdd559724312790e7742142d062476b698e
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: 5faa578ff5cb7a30abc18b9d620df288750a72fe
PODFILE CHECKSUM: 5d4b89aa09f8d53bc530d173622952e85d5d7662
COCOAPODS: 1.9.1
COCOAPODS: 1.10.1
+57 -62
View File
@@ -25,7 +25,6 @@
3AAD2AC324A3A60E0075D594 /* libRCTStatus.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 201067C41D4789F700FA83B6 /* libRCTStatus.a */; };
3AAD2AC524A3A60E0075D594 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */; };
3AAD2AC624A3A60E0075D594 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E586E1B0E544F64AA9F5BD1 /* libz.tbd */; };
3AAD2AC824A3A60E0075D594 /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; };
3AAD2ACA24A3A60E0075D594 /* launch-image-universal.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74B758FB20D7C00B003343C3 /* launch-image-universal.storyboard */; };
3AAD2ACB24A3A60E0075D594 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */; };
3AAD2ACC24A3A60E0075D594 /* Inter-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = CD4A2C27D6D5473184DC1F7E /* Inter-Bold.otf */; };
@@ -39,21 +38,23 @@
3AAD2AD424A3A60E0075D594 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = A4F2BBE8D4DD4140A6CCAC39 /* Inter-SemiBoldItalic.otf */; };
3ABC7AF8245FF85900612C45 /* InterStatus-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 9C76AF5A418D4D65A4CAD1D9 /* InterStatus-Regular.otf */; };
57C854A7993C47A3B1AECD32 /* Inter-MediumItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = C6B1215047604CD59A4C74D6 /* Inter-MediumItalic.otf */; };
68E19BBDF749E72ED1F9DEF5 /* libPods-Status-StatusIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 132CE3B093884B0FB239A0AB /* libPods-Status-StatusIm.a */; };
6C137817D5298C82BC79177C /* libPods-Status-StatusImPR.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D4CB5416994C913628B8754 /* libPods-Status-StatusImPR.a */; };
65F6941925780A4F00A45E76 /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F6941825780A4F00A45E76 /* Bridge.swift */; };
65F6941A25780A4F00A45E76 /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F6941825780A4F00A45E76 /* Bridge.swift */; };
65F6941B25780A4F00A45E76 /* Bridge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65F6941825780A4F00A45E76 /* Bridge.swift */; };
70ADBB5ECF934DCF8A0E4919 /* Inter-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1426DF592BA248FC81D955CB /* Inter-Regular.otf */; };
74B758FC20D7C00B003343C3 /* launch-image-universal.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74B758FB20D7C00B003343C3 /* launch-image-universal.storyboard */; };
8391E8E0E93C41A98AAA6631 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = A4F2BBE8D4DD4140A6CCAC39 /* Inter-SemiBoldItalic.otf */; };
899B05F2F45193B7098B604A /* libPods-Status-StatusIm-StatusImTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B00E6B2D94C4B463D8EFF8B8 /* libPods-Status-StatusIm-StatusImTests.a */; };
9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; };
8770D567D65A8F938D95C371 /* libPods-Status-StatusIm-StatusImTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = DB52D45D10528E6992A83A71 /* libPods-Status-StatusIm-StatusImTests.a */; };
B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FC1DE7195700D694FF /* Social.framework */; };
B24FC7FF1DE7195F00D694FF /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FE1DE7195F00D694FF /* MessageUI.framework */; };
B2F2D1BC1D9D531B00B7B453 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B2F2D1BB1D9D531B00B7B453 /* Images.xcassets */; };
BA68A2377A20496EA737000D /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E586E1B0E544F64AA9F5BD1 /* libz.tbd */; };
C8F62CB13C1F732A6ABDB977 /* libPods-Status-StatusImPR.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B9F8F780F889F228546DF60 /* libPods-Status-StatusImPR.a */; };
CE4E31B31D8695250033ED64 /* Statusgo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CE4E31B21D8695250033ED64 /* Statusgo.framework */; };
D1786306E0184916B11F4C37 /* Inter-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = B2A38FC3D3954DE7B2B171F8 /* Inter-Medium.otf */; };
D84616FB563A48EBB1678699 /* Inter-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = CD4A2C27D6D5473184DC1F7E /* Inter-Bold.otf */; };
D99C50E5E18942A39C8DDF61 /* Inter-BoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = B321D25F4493470980039457 /* Inter-BoldItalic.otf */; };
DBE02ADA80FE465743702EFB /* libPods-Status-StatusIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1EA4C352EDC255945D9357D4 /* libPods-Status-StatusIm.a */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -78,13 +79,6 @@
remoteGlobalIDString = 0974579A1D2A440A000D9368;
remoteInfo = RCTWKWebView;
};
9EF083601F3B538B00876A8F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */;
proxyType = 2;
remoteGlobalIDString = EB2648DF1C7BE17A00B8F155;
remoteInfo = ReactNativeConfig;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -115,16 +109,14 @@
00E356EE1AD99517003FC87E /* StatusImTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = StatusImTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* StatusImTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = StatusImTests.m; sourceTree = "<group>"; };
064351D2FD901F8B6C9AE2A5 /* Pods-StatusImTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusImTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-StatusImTests/Pods-StatusImTests.debug.xcconfig"; sourceTree = "<group>"; };
132CE3B093884B0FB239A0AB /* libPods-Status-StatusIm.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusIm.a"; sourceTree = BUILT_PRODUCTS_DIR; };
13B07F961A680F5B00A75B9A /* StatusIm.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = StatusIm.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = StatusIm/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = StatusIm/AppDelegate.m; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = StatusIm/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = StatusIm/main.m; sourceTree = "<group>"; };
1426DF592BA248FC81D955CB /* Inter-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Regular.otf"; path = "../resources/fonts/Inter-Regular.otf"; sourceTree = "<group>"; };
1EA4C352EDC255945D9357D4 /* libPods-Status-StatusIm.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusIm.a"; sourceTree = BUILT_PRODUCTS_DIR; };
3887F5B027AC2EC4E7B8BC02 /* Pods-Status-StatusIm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Status-StatusIm.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Status-StatusIm/Pods-Status-StatusIm.debug.xcconfig"; sourceTree = "<group>"; };
38A44830EC5708E89387F641 /* Pods-StatusIm.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm.release.xcconfig"; sourceTree = "<group>"; };
3A2626CE245C3F2200D5F94B /* Dummy.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Dummy.swift; sourceTree = "<group>"; };
3A6406FB24A3ADF90046ED37 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
3A8F8EA924A4D31600BF206D /* GameKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GameKit.framework; path = System/Library/Frameworks/GameKit.framework; sourceTree = SDKROOT; };
@@ -134,7 +126,12 @@
439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "wrapper.pb-project"; name = RCTStatus.xcodeproj; path = "../modules/react-native-status/ios/RCTStatus/RCTStatus.xcodeproj"; sourceTree = "<group>"; };
4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
4E586E1B0E544F64AA9F5BD1 /* libz.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; };
5D4CB5416994C913628B8754 /* libPods-Status-StatusImPR.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusImPR.a"; sourceTree = BUILT_PRODUCTS_DIR; };
5E9C2936B3890356C5BE1078 /* Pods-StatusIm-StatusImTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm-StatusImTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm-StatusImTests/Pods-StatusIm-StatusImTests.debug.xcconfig"; sourceTree = "<group>"; };
65F693BD2578002500A45E76 /* CoreNFC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreNFC.framework; path = System/Library/Frameworks/CoreNFC.framework; sourceTree = SDKROOT; };
65F693BF2578003600A45E76 /* CoreNFC.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreNFC.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.0.sdk/System/iOSSupport/System/Library/Frameworks/CoreNFC.framework; sourceTree = DEVELOPER_DIR; };
65F6941725780A4E00A45E76 /* StatusImTests-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "StatusImTests-Bridging-Header.h"; sourceTree = "<group>"; };
65F6941825780A4F00A45E76 /* Bridge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Bridge.swift; sourceTree = "<group>"; };
69291A6222A63434694EA2A6 /* Pods-Status-StatusImPR.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Status-StatusImPR.release.xcconfig"; path = "Pods/Target Support Files/Pods-Status-StatusImPR/Pods-Status-StatusImPR.release.xcconfig"; sourceTree = "<group>"; };
693A62DB37BC4CD5A30E5C96 /* Inter-SemiBold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-SemiBold.otf"; path = "../resources/fonts/Inter-SemiBold.otf"; sourceTree = "<group>"; };
74B758FB20D7C00B003343C3 /* launch-image-universal.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = "launch-image-universal.storyboard"; sourceTree = "<group>"; };
@@ -143,14 +140,9 @@
8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; };
922C4CA61F4D5F8B0033C753 /* StatusIm.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = StatusIm.entitlements; path = StatusIm/StatusIm.entitlements; sourceTree = "<group>"; };
977B1E37198B72A48870BFE5 /* Pods-Status-StatusIm-StatusImTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Status-StatusIm-StatusImTests.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Status-StatusIm-StatusImTests/Pods-Status-StatusIm-StatusImTests.debug.xcconfig"; sourceTree = "<group>"; };
9B9F8F780F889F228546DF60 /* libPods-Status-StatusImPR.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusImPR.a"; sourceTree = BUILT_PRODUCTS_DIR; };
9C76AF5A418D4D65A4CAD1D9 /* InterStatus-Regular.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "InterStatus-Regular.otf"; path = "../resources/fonts/InterStatus-Regular.otf"; sourceTree = "<group>"; };
9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = RCTWKWebView.xcodeproj; path = "../node_modules/react-native-wkwebview-reborn/ios/RCTWKWebView.xcodeproj"; sourceTree = "<group>"; };
9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = ReactNativeConfig.xcodeproj; path = "../node_modules/react-native-config/ios/ReactNativeConfig.xcodeproj"; sourceTree = "<group>"; };
A08FD367B3239F901A12B5F4 /* Pods-StatusIm-StatusImTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm-StatusImTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm-StatusImTests/Pods-StatusIm-StatusImTests.release.xcconfig"; sourceTree = "<group>"; };
A4F2BBE8D4DD4140A6CCAC39 /* Inter-SemiBoldItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-SemiBoldItalic.otf"; path = "../resources/fonts/Inter-SemiBoldItalic.otf"; sourceTree = "<group>"; };
ACA66A8F16CD2FE21F38738B /* Pods-StatusIm.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusIm.debug.xcconfig"; path = "Pods/Target Support Files/Pods-StatusIm/Pods-StatusIm.debug.xcconfig"; sourceTree = "<group>"; };
B00E6B2D94C4B463D8EFF8B8 /* libPods-Status-StatusIm-StatusImTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusIm-StatusImTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
B07176ACDAA1422E8F0A3D6B /* Inter-Italic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Italic.otf"; path = "../resources/fonts/Inter-Italic.otf"; sourceTree = "<group>"; };
B24FC7FC1DE7195700D694FF /* Social.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Social.framework; path = System/Library/Frameworks/Social.framework; sourceTree = SDKROOT; };
B24FC7FE1DE7195F00D694FF /* MessageUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageUI.framework; path = System/Library/Frameworks/MessageUI.framework; sourceTree = SDKROOT; };
@@ -160,7 +152,7 @@
C6B1215047604CD59A4C74D6 /* Inter-MediumItalic.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-MediumItalic.otf"; path = "../resources/fonts/Inter-MediumItalic.otf"; sourceTree = "<group>"; };
CD4A2C27D6D5473184DC1F7E /* Inter-Bold.otf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Inter-Bold.otf"; path = "../resources/fonts/Inter-Bold.otf"; sourceTree = "<group>"; };
CE4E31B21D8695250033ED64 /* Statusgo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Statusgo.framework; path = "../modules/react-native-status/ios/RCTStatus/Statusgo.framework"; sourceTree = "<group>"; };
D489EE8D5F52DA10AC715727 /* Pods-StatusImTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-StatusImTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-StatusImTests/Pods-StatusImTests.release.xcconfig"; sourceTree = "<group>"; };
DB52D45D10528E6992A83A71 /* libPods-Status-StatusIm-StatusImTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Status-StatusIm-StatusImTests.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -168,7 +160,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
899B05F2F45193B7098B604A /* libPods-Status-StatusIm-StatusImTests.a in Frameworks */,
8770D567D65A8F938D95C371 /* libPods-Status-StatusIm-StatusImTests.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -182,8 +174,7 @@
20AB9EC61D47CC0300E7FD9C /* libRCTStatus.a in Frameworks */,
25DC9C9DC25846BD8D084888 /* libc++.tbd in Frameworks */,
BA68A2377A20496EA737000D /* libz.tbd in Frameworks */,
9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */,
DBE02ADA80FE465743702EFB /* libPods-Status-StatusIm.a in Frameworks */,
68E19BBDF749E72ED1F9DEF5 /* libPods-Status-StatusIm.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -198,8 +189,7 @@
3AAD2AC324A3A60E0075D594 /* libRCTStatus.a in Frameworks */,
3AAD2AC524A3A60E0075D594 /* libc++.tbd in Frameworks */,
3AAD2AC624A3A60E0075D594 /* libz.tbd in Frameworks */,
3AAD2AC824A3A60E0075D594 /* libReactNativeConfig.a in Frameworks */,
C8F62CB13C1F732A6ABDB977 /* libPods-Status-StatusImPR.a in Frameworks */,
6C137817D5298C82BC79177C /* libPods-Status-StatusImPR.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -275,12 +265,6 @@
5C1C8762251D6EF495FB2384 /* Pods */ = {
isa = PBXGroup;
children = (
ACA66A8F16CD2FE21F38738B /* Pods-StatusIm.debug.xcconfig */,
38A44830EC5708E89387F641 /* Pods-StatusIm.release.xcconfig */,
064351D2FD901F8B6C9AE2A5 /* Pods-StatusImTests.debug.xcconfig */,
D489EE8D5F52DA10AC715727 /* Pods-StatusImTests.release.xcconfig */,
5E9C2936B3890356C5BE1078 /* Pods-StatusIm-StatusImTests.debug.xcconfig */,
A08FD367B3239F901A12B5F4 /* Pods-StatusIm-StatusImTests.release.xcconfig */,
3887F5B027AC2EC4E7B8BC02 /* Pods-Status-StatusIm.debug.xcconfig */,
784390E981501E6517651C4E /* Pods-Status-StatusIm.release.xcconfig */,
977B1E37198B72A48870BFE5 /* Pods-Status-StatusIm-StatusImTests.debug.xcconfig */,
@@ -294,7 +278,6 @@
832341AE1AAA6A7D00B99B32 /* Libraries */ = {
isa = PBXGroup;
children = (
9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */,
9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */,
439B6B4B407A4E2AACAFE5BE /* RCTStatus.xcodeproj */,
);
@@ -304,6 +287,7 @@
83CBB9F61A601CBA00E9B192 = {
isa = PBXGroup;
children = (
65F6941825780A4F00A45E76 /* Bridge.swift */,
3AAD2AB624A3A5F10075D594 /* StatusImPR */,
13B07FAE1A68108700A75B9A /* StatusIm */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
@@ -312,6 +296,7 @@
A97BA941B2FB44B4B66EE6D3 /* Frameworks */,
1E7837547A9A40E18AD63CF3 /* Resources */,
5C1C8762251D6EF495FB2384 /* Pods */,
65F6941725780A4E00A45E76 /* StatusImTests-Bridging-Header.h */,
);
indentWidth = 2;
sourceTree = "<group>";
@@ -336,17 +321,11 @@
name = Products;
sourceTree = "<group>";
};
9EF083391F3B538A00876A8F /* Products */ = {
isa = PBXGroup;
children = (
9EF083611F3B538B00876A8F /* libReactNativeConfig.a */,
);
name = Products;
sourceTree = "<group>";
};
A97BA941B2FB44B4B66EE6D3 /* Frameworks */ = {
isa = PBXGroup;
children = (
65F693BD2578002500A45E76 /* CoreNFC.framework */,
65F693BF2578003600A45E76 /* CoreNFC.framework */,
3A8F8EA924A4D31600BF206D /* GameKit.framework */,
4C16DE0B1F89508700AA10DB /* JavaScriptCore.framework */,
B24FC7FE1DE7195F00D694FF /* MessageUI.framework */,
@@ -354,9 +333,9 @@
CE4E31B21D8695250033ED64 /* Statusgo.framework */,
8B9A886A2CB448B1ABA0EB62 /* libc++.tbd */,
4E586E1B0E544F64AA9F5BD1 /* libz.tbd */,
1EA4C352EDC255945D9357D4 /* libPods-Status-StatusIm.a */,
B00E6B2D94C4B463D8EFF8B8 /* libPods-Status-StatusIm-StatusImTests.a */,
9B9F8F780F889F228546DF60 /* libPods-Status-StatusImPR.a */,
132CE3B093884B0FB239A0AB /* libPods-Status-StatusIm.a */,
DB52D45D10528E6992A83A71 /* libPods-Status-StatusIm-StatusImTests.a */,
5D4CB5416994C913628B8754 /* libPods-Status-StatusImPR.a */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -488,10 +467,6 @@
ProductGroup = 9EC0135D1E06FB1900155B5C /* Products */;
ProjectRef = 9EC0135C1E06FB1900155B5C /* RCTWKWebView.xcodeproj */;
},
{
ProductGroup = 9EF083391F3B538A00876A8F /* Products */;
ProjectRef = 9EF083381F3B538A00876A8F /* ReactNativeConfig.xcodeproj */;
},
);
projectRoot = "";
targets = (
@@ -517,13 +492,6 @@
remoteRef = 9EC013781E06FB1900155B5C /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
9EF083611F3B538B00876A8F /* libReactNativeConfig.a */ = {
isa = PBXReferenceProxy;
fileType = archive.ar;
path = libReactNativeConfig.a;
remoteRef = 9EF083601F3B538B00876A8F /* PBXContainerItemProxy */;
sourceTree = BUILT_PRODUCTS_DIR;
};
/* End PBXReferenceProxy section */
/* Begin PBXResourcesBuildPhase section */
@@ -564,7 +532,6 @@
3AAD2ACF24A3A60E0075D594 /* Inter-Italic.otf in Resources */,
3AAD2AD024A3A60E0075D594 /* Inter-Medium.otf in Resources */,
3AAD2AD124A3A60E0075D594 /* Inter-MediumItalic.otf in Resources */,
3A6406FF24A3ADF90046ED37 /* Info.plist in Resources */,
3AAD2AD224A3A60E0075D594 /* Inter-Regular.otf in Resources */,
3AAD2AD324A3A60E0075D594 /* Inter-SemiBold.otf in Resources */,
3AAD2AD424A3A60E0075D594 /* Inter-SemiBoldItalic.otf in Resources */,
@@ -596,11 +563,13 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusIm/Pods-Status-StatusIm-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
@@ -688,11 +657,13 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusImPR/Pods-Status-StatusImPR-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
@@ -730,11 +701,13 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Status-StatusIm-StatusImTests/Pods-Status-StatusIm-StatusImTests-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/React-Core/AccessibilityResources.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/AccessibilityResources.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
@@ -763,6 +736,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
65F6941A25780A4F00A45E76 /* Bridge.swift in Sources */,
00E356F31AD99517003FC87E /* StatusImTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -771,6 +745,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
65F6941925780A4F00A45E76 /* Bridge.swift in Sources */,
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
3A2626CF245C3F2200D5F94B /* Dummy.swift in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
@@ -781,6 +756,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
65F6941B25780A4F00A45E76 /* Bridge.swift in Sources */,
3AAD2ABC24A3A60E0075D594 /* AppDelegate.m in Sources */,
3AAD2ABD24A3A60E0075D594 /* Dummy.swift in Sources */,
3AAD2ABE24A3A60E0075D594 /* main.m in Sources */,
@@ -805,6 +781,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_ID_SUFFIX = .debug;
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Developer";
DEVELOPMENT_TEAM = DTX7Z4U3YA;
FRAMEWORK_SEARCH_PATHS = (
@@ -816,13 +793,16 @@
"$(inherited)",
);
INFOPLIST_FILE = StatusImTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.status.ethereum;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "StatusImTests-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StatusIm.app/StatusIm";
};
name = Debug;
@@ -834,6 +814,7 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
BUNDLE_ID_SUFFIX = "";
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "iPhone Distribution";
COPY_PHASE_STRIP = NO;
DEVELOPMENT_TEAM = DTX7Z4U3YA;
@@ -842,13 +823,15 @@
"$(inherited)",
);
INFOPLIST_FILE = StatusImTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 8.2;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
PRODUCT_BUNDLE_IDENTIFIER = im.status.ethereum;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "StatusImTests-Bridging-Header.h";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/StatusIm.app/StatusIm";
};
name = Release;
@@ -867,6 +850,9 @@
CUSTOM_PRODUCT_NAME = "Status Debug";
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = DTX7Z4U3YA;
EXCLUDED_ARCHS = "";
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)/../modules/react-native-status/ios/RCTStatus",
"$(inherited)",
@@ -915,7 +901,8 @@
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VALID_ARCHS = "arm64 armv7 armv7s";
VALID_ARCHS = "x86_64 armv7 armv7s arm64";
"VALID_ARCHS[sdk=iphonesimulator*]" = "armv7 armv7s x86_64 ";
};
name = Debug;
};
@@ -933,6 +920,7 @@
CUSTOM_PRODUCT_NAME = Status;
DEAD_CODE_STRIPPING = YES;
DEVELOPMENT_TEAM = DTX7Z4U3YA;
EXCLUDED_ARCHS = "";
FRAMEWORK_SEARCH_PATHS = (
"$(PROJECT_DIR)/../modules/react-native-status/ios/RCTStatus",
"$(inherited)",
@@ -1138,6 +1126,9 @@
ENABLE_BITCODE = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
ENABLE_TESTABILITY = YES;
EXCLUDED_ARCHS = "";
"EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64;
"EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64;
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_DYNAMIC_NO_PIC = NO;
GCC_NO_COMMON_BLOCKS = YES;
@@ -1168,15 +1159,17 @@
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
"$(SRCROOT)/../node_modules/react-native-splash-screen/ios/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
VALID_ARCHS = "armv7 armv7s arm64";
"VALID_ARCHS[sdk=iphonesimulator*]" = "armv7 armv7s x86_64";
};
name = Debug;
};
@@ -1217,6 +1210,7 @@
ENABLE_BITCODE = NO;
ENABLE_NS_ASSERTIONS = NO;
ENABLE_STRICT_OBJC_MSGSEND = YES;
EXCLUDED_ARCHS = "";
GCC_C_LANGUAGE_STANDARD = gnu99;
GCC_NO_COMMON_BLOCKS = YES;
GCC_PRECOMPILE_PREFIX_HEADER = NO;
@@ -1239,13 +1233,14 @@
"$(SRCROOT)/../node_modules/react-native-image-resizer/ios/RCTImageResizer",
"$(SRCROOT)/../node_modules/react-native-splash-screen/ios/**",
);
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = NO;
SDKROOT = iphoneos;
VALIDATE_PRODUCT = YES;
VALID_ARCHS = "armv7 armv7s arm64";
+2 -1
View File
@@ -9,8 +9,9 @@
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
#import <UserNotifications/UNUserNotificationCenter.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate, UNUserNotificationCenterDelegate>
@property (nonatomic, strong) UIWindow *window;
+48
View File
@@ -20,6 +20,9 @@
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#import <UserNotifications/UserNotifications.h>
#import <RNCPushNotificationIOS.h>
#if DEBUG
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
@@ -88,6 +91,9 @@ static void InitializeFlipper(UIApplication *application) {
[self.window makeKeyAndVisible];
[RNSplashScreen show];
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
return YES;
}
@@ -137,4 +143,46 @@ static void InitializeFlipper(UIApplication *application) {
}
}
// Required to register for notifications
- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
{
[RNCPushNotificationIOS didRegisterUserNotificationSettings:notificationSettings];
}
// Required for the register event.
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
[RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
// Required for the registrationError event.
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
[RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error];
}
// IOS 10+ Required for localNotification event
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)(void))completionHandler
{
[RNCPushNotificationIOS didReceiveNotificationResponse:response];
completionHandler();
}
// IOS 4-10 Required for the localNotification event.
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
[RNCPushNotificationIOS didReceiveLocalNotification:notification];
}
// Manage notifications while app is in the foreground
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
NSDictionary *userInfo = notification.request.content.userInfo;
NSString *notificationType = userInfo[@"notificationType"]; // check your notification type
if (![notificationType isEqual: @"local-notification"]) { // we silence all notifications which are not local
completionHandler(UNNotificationPresentationOptionNone);
return;
}
completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge);
}
@end
-42
View File
@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="7702" systemVersion="14D136" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES">
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="7701"/>
<capability name="Constraints with non-1.0 multipliers" minToolsVersion="5.1"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<view contentMode="scaleToFill" id="iN0-l3-epB">
<rect key="frame" x="0.0" y="0.0" width="480" height="480"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="8ie-xW-0ye">
<rect key="frame" x="20" y="439" width="441" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="StatusIm" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="kId-c2-rCX">
<rect key="frame" x="20" y="140" width="441" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
<constraints>
<constraint firstItem="kId-c2-rCX" firstAttribute="centerY" secondItem="iN0-l3-epB" secondAttribute="bottom" multiplier="1/3" constant="1" id="5cJ-9S-tgC"/>
<constraint firstAttribute="centerX" secondItem="kId-c2-rCX" secondAttribute="centerX" id="Koa-jz-hwk"/>
<constraint firstAttribute="bottom" secondItem="8ie-xW-0ye" secondAttribute="bottom" constant="20" id="Kzo-t9-V3l"/>
<constraint firstItem="8ie-xW-0ye" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="MfP-vx-nX0"/>
<constraint firstAttribute="centerX" secondItem="8ie-xW-0ye" secondAttribute="centerX" id="ZEH-qu-HZ9"/>
<constraint firstItem="kId-c2-rCX" firstAttribute="leading" secondItem="iN0-l3-epB" secondAttribute="leading" constant="20" symbolic="YES" id="fvb-Df-36g"/>
</constraints>
<nil key="simulatedStatusBarMetrics"/>
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
<point key="canvasLocation" x="548" y="455"/>
</view>
</objects>
</document>
+7 -5
View File
@@ -63,11 +63,6 @@
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>api.status.im</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
<key>localhost</key>
<dict>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
@@ -132,5 +127,12 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A00000080400010101</string>
<string>A00000080400010301</string>
</array>
<key>NFCReaderUsageDescription</key>
<string>Enable Keycard</string>
</dict>
</plist>
+58
View File
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
<!--View Controller-->
<scene sceneID="EHf-IW-A2E">
<objects>
<viewController id="01J-lp-oVM" sceneMemberID="viewController">
<view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
<rect key="frame" x="0.0" y="0.0" width="375" height="667"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="obG-Y5-kRd">
<rect key="frame" x="0.0" y="647" width="375" height="0.0"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="StatusIm" textAlignment="center" lineBreakMode="middleTruncation" baselineAdjustment="alignBaselines" minimumFontSize="18" translatesAutoresizingMaskIntoConstraints="NO" id="GJd-Yh-RWb">
<rect key="frame" x="0.0" y="202" width="375" height="43"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="36"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="MN2-I3-ftu">
<rect key="frame" x="0.0" y="626" width="375" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="bottom" secondItem="MN2-I3-ftu" secondAttribute="bottom" constant="20" id="OZV-Vh-mqD"/>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="GJd-Yh-RWb" secondAttribute="centerX" id="Q3B-4B-g5h"/>
<constraint firstItem="obG-Y5-kRd" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" symbolic="YES" id="SfN-ll-jLj"/>
<constraint firstAttribute="bottom" secondItem="obG-Y5-kRd" secondAttribute="bottom" constant="20" id="Y44-ml-fuU"/>
<constraint firstItem="MN2-I3-ftu" firstAttribute="centerX" secondItem="Bcu-3y-fUS" secondAttribute="centerX" id="akx-eg-2ui"/>
<constraint firstItem="MN2-I3-ftu" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" id="i1E-0Y-4RG"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" symbolic="YES" id="x7j-FC-K8j"/>
</constraints>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
<point key="canvasLocation" x="52.173913043478265" y="375"/>
</scene>
</scenes>
</document>
+5
View File
@@ -2,6 +2,11 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
<string>TAG</string>
</array>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.associated-domains</key>
+7
View File
@@ -133,5 +133,12 @@
</array>
<key>UIViewControllerBasedStatusBarAppearance</key>
<false/>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A00000080400010101</string>
<string>A00000080400010301</string>
</array>
<key>NFCReaderUsageDescription</key>
<string>Enable Keycard</string>
</dict>
</plist>
+5
View File
@@ -2,6 +2,11 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.developer.nfc.readersession.formats</key>
<array>
<string>NDEF</string>
<string>TAG</string>
</array>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.associated-domains</key>
+4
View File
@@ -0,0 +1,4 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//
+7
View File
@@ -20,5 +20,12 @@
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
<string>A00000080400010101</string>
<string>A00000080400010301</string>
</array>
<key>NFCReaderUsageDescription</key>
<string>Enable Keycard</string>
</dict>
</plist>
@@ -0,0 +1,20 @@
package im.status.ethereum.module;
import android.content.Intent;
import android.os.Bundle;
import com.facebook.react.HeadlessJsTaskService;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.jstasks.HeadlessJsTaskConfig;
import javax.annotation.Nullable;
public class LocalNotificationsService extends HeadlessJsTaskService {
@Override
protected @Nullable HeadlessJsTaskConfig getTaskConfig(Intent intent) {
Bundle extras = intent.getExtras();
if (extras != null) {
return new HeadlessJsTaskConfig("LocalNotifications", Arguments.fromBundle(extras), 60000, true);
}
return null;
}
}
@@ -7,8 +7,10 @@ import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Build;
import android.os.Environment;
import android.preference.PreferenceManager;
import androidx.core.content.FileProvider;
@@ -16,9 +18,15 @@ import androidx.core.content.FileProvider;
import android.util.Log;
import android.view.Window;
import android.view.WindowManager;
import android.webkit.WebView;
import android.webkit.CookieManager;
import android.webkit.CookieSyncManager;
import android.webkit.WebStorage;
import android.content.Context;
import android.view.View;
import android.widget.TextView;
import android.widget.EditText;
import android.view.inputmethod.InputMethodManager;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
@@ -30,6 +38,9 @@ import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import com.facebook.react.uimanager.UIManagerModule;
import com.facebook.react.uimanager.UIBlock;
import com.facebook.react.uimanager.NativeViewHierarchyManager;
import statusgo.SignalHandler;
import statusgo.Statusgo;
@@ -64,11 +75,11 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
private static final String TAG = "StatusModule";
private static final String logsZipFileName = "Status-debug-logs.zip";
private static final String gethLogFileName = "geth.log";
private static final String exportDBFileName = "export.db";
private static final String statusLogFileName = "Status.log";
private static StatusModule module;
private ReactApplicationContext reactContext;
private boolean rootedDevice;
private NewMessageSignalHandler newMessageSignalHandler;
private boolean background;
StatusModule(ReactApplicationContext reactContext, boolean rootedDevice) {
@@ -100,19 +111,6 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
Log.d(TAG, "******************* ON HOST DESTROY *************************");
}
@ReactMethod
public void enableNotifications() {
this.newMessageSignalHandler = new NewMessageSignalHandler(reactContext);
}
@ReactMethod
public void disableNotifications() {
if (newMessageSignalHandler != null) {
newMessageSignalHandler.stop();
newMessageSignalHandler = null;
}
}
private boolean checkAvailability() {
// We wait at least 10s for getCurrentActivity to return a value,
// otherwise we give up
@@ -141,23 +139,10 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
public void handleSignal(final String jsonEventString) {
try {
final JSONObject jsonEvent = new JSONObject(jsonEventString);
String eventType = jsonEvent.getString("type");
Log.d(TAG, "Signal event: " + jsonEventString);
// NOTE: the newMessageSignalHandler is only instanciated if the user
// enabled notifications in the app
if (this.background && newMessageSignalHandler != null) {
if (eventType.equals("messages.new")) {
newMessageSignalHandler.handleNewMessageSignal(jsonEvent);
}
}
WritableMap params = Arguments.createMap();
params.putString("jsonEvent", jsonEventString);
this.getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
}
Log.d(TAG, "Signal event");
WritableMap params = Arguments.createMap();
params.putString("jsonEvent", jsonEventString);
this.getReactApplicationContext().getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class).emit("gethEvent", params);
}
private File getLogsFile() {
@@ -170,6 +155,16 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
return logFile;
}
private File getExportDBFile() {
final Context context = this.getReactApplicationContext();
// Environment.getExternalStoragePublicDirectory doesn't work as expected on Android Q
// https://developer.android.com/reference/android/os/Environment#getExternalStoragePublicDirectory(java.lang.String)
final File pubDirectory = context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
final File filename = new File(pubDirectory, exportDBFileName);
return filename;
}
private File prepareLogsFile(final Context context) {
final File logFile = getLogsFile();
@@ -375,10 +370,39 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
}
@ReactMethod
public void exportUnencryptedDatabase(final String accountData, final String password) {
Log.d(TAG, "login");
final File newFile = getExportDBFile();
this.migrateKeyStoreDir(accountData, password);
String result = Statusgo.exportUnencryptedDatabase(accountData, password, newFile.getAbsolutePath());
if (result.startsWith("{\"error\":\"\"")) {
Log.d(TAG, "Login result: " + result);
} else {
Log.e(TAG, "Login failed: " + result);
}
}
@ReactMethod
public void importUnencryptedDatabase(final String accountData, final String password) {
Log.d(TAG, "importUnencryptedDatabase");
final File newFile = getExportDBFile();
this.migrateKeyStoreDir(accountData, password);
String result = Statusgo.importUnencryptedDatabase(accountData, password, newFile.getAbsolutePath());
if (result.startsWith("{\"error\":\"\"")) {
Log.d(TAG, "import result: " + result);
} else {
Log.e(TAG, "import failed: " + result);
}
}
@ReactMethod
public void logout() {
Log.d(TAG, "logout");
disableNotifications();
String result = Statusgo.logout();
if (result.startsWith("{\"error\":\"\"")) {
Log.d(TAG, "Logout result: " + result);
@@ -1042,6 +1066,22 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
}
@ReactMethod
public void toggleWebviewDebug(final boolean val) {
Log.d(TAG, "toggleWebviewDebug");
final Activity activity = getCurrentActivity();
if (activity == null) {
return;
}
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
WebView.setWebContentsDebuggingEnabled(val);
}
});
}
@ReactMethod
public void clearStorageAPIs() {
Log.d(TAG, "clearStorageAPIs");
@@ -1106,9 +1146,21 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
}
@ReactMethod
public void startWallet() {
public void startWallet(final boolean watchNewBlocks) {
Log.d(TAG, "StartWallet");
Statusgo.startWallet();
Statusgo.startWallet(watchNewBlocks);
}
@ReactMethod
public void stopLocalNotifications() {
Log.d(TAG, "stopLocalNotifications");
Statusgo.stopLocalNotifications();
}
@ReactMethod
public void startLocalNotifications() {
Log.d(TAG, "startLocalNotifications");
Statusgo.startLocalNotifications();
}
@ReactMethod
@@ -1298,7 +1350,6 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
StatusThreadPoolExecutor.getInstance().execute(r);
}
@ReactMethod
public void getNodesFromContract(final String rpcEndpoint, final String contractAddress, final Callback callback) {
Log.d(TAG, "getNodesFromContract");
@@ -1386,5 +1437,24 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
});
}
}
@ReactMethod
public void resetKeyboardInputCursor(final int reactTagToReset, final int selection) {
UIManagerModule uiManager = getReactApplicationContext().getNativeModule(UIManagerModule.class);
uiManager.addUIBlock(new UIBlock() {
@Override
public void execute(NativeViewHierarchyManager nativeViewHierarchyManager) {
InputMethodManager imm = (InputMethodManager) getReactApplicationContext().getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
View viewToReset = nativeViewHierarchyManager.resolveView(reactTagToReset);
imm.restartInput(viewToReset);
try {
EditText textView = (EditText) viewToReset;
textView.setSelection(selection);
} catch (Exception e) {}
}
}
});
}
}
@@ -1,4 +1,4 @@
package im.status.ethereum.module;
package im.status.ethereum.pushnotifications;
import android.content.Context;
import android.content.Intent;
@@ -13,6 +13,7 @@ import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import android.os.Build;
import im.status.ethereum.module.R;
public class ForegroundService extends Service {
private static final String CHANNEL_ID = "status-service";
@@ -1,4 +1,4 @@
package im.status.ethereum.module;
package im.status.ethereum.pushnotifications;
import android.content.Context;
import android.content.ContentResolver;
@@ -33,10 +33,12 @@ import androidx.core.app.NotificationManagerCompat;
import androidx.core.app.NotificationCompat;
import android.os.Build;
import android.os.Bundle;
import android.net.Uri;
import android.media.AudioAttributes;
import android.util.Log;
import im.status.ethereum.module.R;
public class NewMessageSignalHandler {
//NOTE: currently we only show notifications for 1-1 chats, in the future we
@@ -57,6 +59,8 @@ public class NewMessageSignalHandler {
private Context context;
private Intent serviceIntent;
private Boolean shouldRefreshNotifications;
private int ONE_TO_ONE_CHAT_TYPE = 1;
private int PRIVATE_GROUP_CHAT_TYPE = 3;
//NOTE: we use a dynamically created BroadcastReceiver here so that we can capture
//intents from notifications and act on them. For instance when tapping/dismissing
@@ -68,8 +72,9 @@ public class NewMessageSignalHandler {
if (intent.getAction() == ACTION_TAP_NOTIFICATION ||
intent.getAction() == ACTION_DELETE_NOTIFICATION) {
String chatId = intent.getExtras().getString("im.status.ethereum.chatId");
int chatType = intent.getExtras().getInt("im.status.ethereum.chatType");
if (intent.getAction() == ACTION_TAP_NOTIFICATION) {
context.startActivity(getOpenAppIntent(chatId));
context.startActivity(getOpenAppIntent(chatId, chatType));
}
removeChat(chatId);
// clean up the group notifications when there is no
@@ -122,9 +127,15 @@ public class NewMessageSignalHandler {
//NOTE: this method takes a chatId and returns an intent that will open the app in that chat
//Once we support other kind of notifications we will need to adapt it. The simplest method
//is probably to pass the universal link as param instead of the chatId.
public Intent getOpenAppIntent(String chatId) {
public Intent getOpenAppIntent(String chatId, int chatType) {
Intent intent = getOpenAppIntent();
intent.setData(Uri.parse("status-im://p/" + chatId));
String path = "";
if (chatType == ONE_TO_ONE_CHAT_TYPE) {
path = "p/";
} else if (chatType == PRIVATE_GROUP_CHAT_TYPE) {
path = "g/args?a2=";
}
intent.setData(Uri.parse("status-im://" + path + chatId));
return intent;
}
@@ -175,15 +186,17 @@ public class NewMessageSignalHandler {
this.chats.remove(chatId);
}
private PendingIntent createOnDismissedIntent(Context context, int notificationId, String chatId) {
private PendingIntent createOnDismissedIntent(Context context, int notificationId, String chatId, int chatType) {
Intent intent = new Intent(ACTION_DELETE_NOTIFICATION);
intent.putExtra("im.status.ethereum.chatId", chatId);
intent.putExtra("im.status.ethereum.chatType", chatType);
return PendingIntent.getBroadcast(context.getApplicationContext(), notificationId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}
private PendingIntent createOnTapIntent(Context context, int notificationId, String chatId) {
private PendingIntent createOnTapIntent(Context context, int notificationId, String chatId, int chatType) {
Intent intent = new Intent(ACTION_TAP_NOTIFICATION);
intent.putExtra("im.status.ethereum.chatId", chatId);
intent.putExtra("im.status.ethereum.chatType", chatType);
return PendingIntent.getBroadcast(context.getApplicationContext(), notificationId, intent, PendingIntent.FLAG_CANCEL_CURRENT);
}
@@ -203,8 +216,8 @@ public class NewMessageSignalHandler {
.setStyle(messagingStyle)
.setGroup(GROUP_STATUS_MESSAGES)
.setGroupSummary(true)
.setContentIntent(createOnTapIntent(context, notificationId, chat.getId()))
.setDeleteIntent(createOnDismissedIntent(context, notificationId, chat.getId()))
.setContentIntent(createOnTapIntent(context, notificationId, chat.getId(), chat.getType()))
.setDeleteIntent(createOnDismissedIntent(context, notificationId, chat.getId(), chat.getType()))
.setNumber(messages.size())
.setAutoCancel(true);
if (Build.VERSION.SDK_INT >= 21) {
@@ -224,31 +237,13 @@ public class NewMessageSignalHandler {
}
}
void handleNewMessageSignal(JSONObject newMessageSignal) {
try {
JSONArray chatsNewMessagesData = newMessageSignal.getJSONObject("event").getJSONArray("chats");
for (int i = 0; i < chatsNewMessagesData.length(); i++) {
try {
upsertChat(chatsNewMessagesData.getJSONObject(i));
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
}
}
JSONArray messagesNewMessagesData = newMessageSignal.getJSONObject("event").getJSONArray("messages");
for (int i = 0; i < messagesNewMessagesData.length(); i++) {
try {
upsertMessage(messagesNewMessagesData.getJSONObject(i));
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
}
}
void handleNewMessage (Bundle data) {
upsertChat(data);
upsertMessage(data);
if(shouldRefreshNotifications) {
refreshNotifications();
shouldRefreshNotifications = false;
}
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
if(shouldRefreshNotifications) {
refreshNotifications();
shouldRefreshNotifications = false;
}
}
@@ -268,69 +263,37 @@ public class NewMessageSignalHandler {
return person;
}
private void upsertChat(JSONObject chatData) {
try {
// NOTE: this is an exemple of chatData
// {"chatId":"contact-discovery-3622","filterId":"c0239d63f830e8b25f4bf7183c8d207f355a925b89514a17068cae4898e7f193",
// "symKeyId":"","oneToOne":true,"identity":"046599511623d7385b926ce709ac57d518dac10d451a81f75cd32c7fb4b1c...",
// "topic":"0xc446561b","discovery":false,"negotiated":false,"listen":true}
int oneToOne = chatData.getInt("chatType");
// NOTE: for now we only notify one to one chats
// TODO: also notifiy on mentions, keywords and group chats
// TODO: one would have to pass the ens name and keywords to notify on when instanciating the class as well
// as have a method to add new ones after the handler is instanciated
if (oneToOne == 1) {
//JSONArray messagesData = chatNewMessagesData.getJSONArray("messages");
private void upsertChat(Bundle data) {
String id = data.getString("chatId");
int type = Integer.parseInt(data.getString("chatType"));
StatusChat chat = chats.get(id);
// there is no proper id for oneToOne chat in chatData so we peek into first message sig
// TODO: won't work for sync becaus it could be our own message
String id = chatData.getString("id");
StatusChat chat = chats.get(id);
// if the chat was not already there, we create one
if (chat == null) {
chat = new StatusChat(id, type);
}
chats.put(id, chat);
}
// if the chat was not already there, we create one
if (chat == null) {
chat = new StatusChat(id, true);
}
private void upsertMessage(Bundle data) {
String chatId = data.getString("chatId");
StatusChat chat = chats.get(chatId);
if (chat == null) {
return;
}
chats.put(id, chat);
}
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
StatusMessage message = createMessage(data);
if (message != null) {
chat.appendMessage(message);
chats.put(chatId, chat);
shouldRefreshNotifications = true;
}
}
private void upsertMessage(JSONObject messageData) {
try {
String chatId = messageData.getString("localChatId");
StatusChat chat = chats.get(chatId);
if (chat == null) {
return;
}
StatusMessage message = createMessage(messageData);
if (message != null) {
chat.appendMessage(message);
chats.put(chatId, chat);
shouldRefreshNotifications = true;
}
}
catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
}
}
private StatusMessage createMessage(JSONObject messageData) {
try {
Person author = getPerson(messageData.getString("from"), messageData.getString("identicon"), messageData.getString("alias"));
return new StatusMessage(author, messageData.getLong("whisperTimestamp"), messageData.getString("text"));
} catch (JSONException e) {
Log.e(TAG, "JSON conversion failed: " + e.getMessage());
}
return null;
private StatusMessage createMessage(Bundle data) {
Person author = getPerson(data.getString("from"), data.getString("identicon"), data.getString("alias"));
return new StatusMessage(author, data.getLong("whisperTimestamp"), data.getString("text"));
}
}
@@ -338,11 +301,11 @@ class StatusChat {
private ArrayList<StatusMessage> messages;
private String id;
private String name;
private Boolean oneToOne;
private int type;
StatusChat(String id, Boolean oneToOne) {
StatusChat(String id, int type) {
this.id = id;
this.oneToOne = oneToOne;
this.type = type;
this.messages = new ArrayList<StatusMessage>();
this.name = name;
}
@@ -351,6 +314,10 @@ class StatusChat {
return id;
}
public int getType() {
return this.type;
}
public String getName() {
//TODO this should be improved as it would rename the chat
@@ -0,0 +1,136 @@
package im.status.ethereum.pushnotifications;
import android.app.Activity;
import android.app.Application;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.core.app.NotificationManagerCompat;
import java.security.SecureRandom;
import com.facebook.react.bridge.ActivityEventListener;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableMap;
import android.util.Log;
import im.status.ethereum.pushnotifications.PushNotificationJsDelivery;
public class PushNotification extends ReactContextBaseJavaModule implements ActivityEventListener {
public static final String LOG_TAG = "PushNotification";
private final SecureRandom mRandomNumberGenerator = new SecureRandom();
private PushNotificationHelper pushNotificationHelper;
private PushNotificationJsDelivery delivery;
private ReactApplicationContext reactContext;
private NewMessageSignalHandler newMessageSignalHandler;
public PushNotification(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
reactContext.addActivityEventListener(this);
Application applicationContext = (Application) reactContext.getApplicationContext();
pushNotificationHelper = new PushNotificationHelper(applicationContext);
delivery = new PushNotificationJsDelivery(reactContext);
}
@Override
public String getName() {
return "PushNotification";
}
// removed @Override temporarily just to get it working on different versions of RN
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data) {
onActivityResult(requestCode, resultCode, data);
}
// removed @Override temporarily just to get it working on different versions of RN
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Ignored, required to implement ActivityEventListener for RN 0.33
}
private Bundle getBundleFromIntent(Intent intent) {
Bundle bundle = null;
if (intent.hasExtra("notification")) {
bundle = intent.getBundleExtra("notification");
} else if (intent.hasExtra("google.message_id")) {
bundle = new Bundle();
bundle.putBundle("data", intent.getExtras());
}
if(null != bundle && !bundle.getBoolean("foreground", false) && !bundle.containsKey("userInteraction")) {
bundle.putBoolean("userInteraction", true);
}
return bundle;
}
@Override
public void onNewIntent(Intent intent) {
Bundle bundle = this.getBundleFromIntent(intent);
if (bundle != null) {
delivery.notifyNotification(bundle);
}
}
@ReactMethod
/**
* Creates a channel if it does not already exist. Returns whether the channel was created.
*/
public void createChannel(ReadableMap channelInfo, Callback callback) {
boolean created = pushNotificationHelper.createChannel(channelInfo);
if(callback != null) {
callback.invoke(created);
}
}
@ReactMethod
public void presentLocalNotification(ReadableMap details) {
Bundle bundle = Arguments.toBundle(details);
// If notification ID is not provided by the user, generate one at random
if (bundle.getString("id") == null) {
bundle.putString("id", String.valueOf(mRandomNumberGenerator.nextInt()));
}
String type = bundle.getString("type");
if (type != null && type.equals("message")) {
if (this.newMessageSignalHandler != null) {
newMessageSignalHandler.handleNewMessage(bundle);
}
} else {
pushNotificationHelper.sendToNotificationCentre(bundle);
}
}
@ReactMethod
public void enableNotifications() {
this.newMessageSignalHandler = new NewMessageSignalHandler(reactContext);
}
@ReactMethod
public void disableNotifications() {
if (newMessageSignalHandler != null) {
newMessageSignalHandler.stop();
newMessageSignalHandler = null;
}
}
}
@@ -0,0 +1,90 @@
package im.status.ethereum.pushnotifications;
import android.os.Build;
import android.app.Application;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.bridge.ReactContext;
import im.status.ethereum.pushnotifications.PushNotificationJsDelivery;
import static im.status.ethereum.pushnotifications.PushNotification.LOG_TAG;
public class PushNotificationActions extends BroadcastReceiver {
@Override
public void onReceive(final Context context, Intent intent) {
String intentActionPrefix = context.getPackageName() + ".ACTION_";
Log.i(LOG_TAG, "PushNotificationBootEventReceiver loading scheduled notifications");
if (null == intent.getAction() || !intent.getAction().startsWith(intentActionPrefix)) {
return;
}
final Bundle bundle = intent.getBundleExtra("notification");
// Dismiss the notification popup.
NotificationManager manager = (NotificationManager) context.getSystemService(context.NOTIFICATION_SERVICE);
int notificationID = Integer.parseInt(bundle.getString("id"));
boolean autoCancel = bundle.getBoolean("autoCancel", true);
if(autoCancel) {
if (bundle.containsKey("tag")) {
String tag = bundle.getString("tag");
manager.cancel(tag, notificationID);
} else {
manager.cancel(notificationID);
}
}
boolean invokeApp = bundle.getBoolean("invokeApp", true);
// Notify the action.
if(invokeApp) {
PushNotificationHelper helper = new PushNotificationHelper((Application) context.getApplicationContext());
helper.invokeApp(bundle);
} else {
// We need to run this on the main thread, as the React code assumes that is true.
// Namely, DevServerHelper constructs a Handler() without a Looper, which triggers:
// "Can't create handler inside thread that has not called Looper.prepare()"
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
public void run() {
// Construct and load our normal React JS code bundle
final ReactInstanceManager mReactInstanceManager = ((ReactApplication) context.getApplicationContext()).getReactNativeHost().getReactInstanceManager();
ReactContext context = mReactInstanceManager.getCurrentReactContext();
PushNotificationJsDelivery delivery = new PushNotificationJsDelivery(context);
// If it's constructed, send a notification
if (context != null) {
delivery.notifyNotificationAction(bundle);
} else {
// Otherwise wait for construction, then send the notification
mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() {
public void onReactContextInitialized(ReactContext context) {
PushNotificationJsDelivery delivery = new PushNotificationJsDelivery(context);
delivery.notifyNotificationAction(bundle);
mReactInstanceManager.removeReactInstanceEventListener(this);
}
});
if (!mReactInstanceManager.hasStartedCreatingInitialContext()) {
// Construct it in the background
mReactInstanceManager.createReactContextInBackground();
}
}
}
});
}
}
}
@@ -0,0 +1,549 @@
// https://github.com/zo0r/react-native-push-notification/blob/bedc8f646aab67d594f291449fbfa24e07b64fe8/android/src/main/java/com/dieam/reactnativepushnotification/modules/RNPushNotificationHelper.java Copy-Paste with removed firebase
package im.status.ethereum.pushnotifications;
import android.app.ActivityManager;
import android.app.ActivityManager.RunningAppProcessInfo;
import android.app.AlarmManager;
import android.app.Application;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.media.AudioAttributes;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.service.notification.StatusBarNotification;
import android.util.Log;
import androidx.annotation.RequiresApi;
import androidx.core.app.NotificationCompat;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.bridge.WritableArray;
import com.facebook.react.bridge.WritableMap;
import org.json.JSONArray;
import org.json.JSONException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Map;
import static im.status.ethereum.pushnotifications.PushNotification.LOG_TAG;
public class PushNotificationHelper {
private Context context;
private static final long DEFAULT_VIBRATION = 300L;
private static final String CHANNEL_ID = "status-im-notifications";
public PushNotificationHelper(Application context) {
this.context = context;
}
private NotificationManager notificationManager() {
return (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
}
public void invokeApp(Bundle bundle) {
String packageName = context.getPackageName();
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
String className = launchIntent.getComponent().getClassName();
try {
Class<?> activityClass = Class.forName(className);
Intent activityIntent = new Intent(context, activityClass);
if(bundle != null) {
activityIntent.putExtra("notification", bundle);
}
activityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(activityIntent);
} catch(Exception e) {
Log.e(LOG_TAG, "Class not found", e);
return;
}
}
public void sendToNotificationCentre(final Bundle bundle) {
PushNotificationPicturesAggregator aggregator = new PushNotificationPicturesAggregator(new PushNotificationPicturesAggregator.Callback() {
public void call(Bitmap largeIconImage, Bitmap bigPictureImage) {
sendToNotificationCentreWithPicture(bundle, largeIconImage, bigPictureImage);
}
});
aggregator.setLargeIconUrl(context, bundle.getString("largeIconUrl"));
aggregator.setBigPictureUrl(context, bundle.getString("bigPictureUrl"));
}
public void sendToNotificationCentreWithPicture(final Bundle bundle, Bitmap largeIconBitmap, Bitmap bigPictureBitmap) {
try {
Class intentClass = getMainActivityClass();
if (intentClass == null) {
Log.e(LOG_TAG, "No activity class found for the notification");
return;
}
if (bundle.getString("message") == null) {
// this happens when a 'data' notification is received - we do not synthesize a local notification in this case
Log.d(LOG_TAG, "Ignore this message if you sent data-only notification. Cannot send to notification centre because there is no 'message' field in: " + bundle);
return;
}
String notificationIdString = bundle.getString("id");
if (notificationIdString == null) {
Log.e(LOG_TAG, "No notification ID specified for the notification");
return;
}
Resources res = context.getResources();
String packageName = context.getPackageName();
String title = bundle.getString("title");
if (title == null) {
ApplicationInfo appInfo = context.getApplicationInfo();
title = context.getPackageManager().getApplicationLabel(appInfo).toString();
}
int priority = NotificationCompat.PRIORITY_HIGH;
final String priorityString = bundle.getString("priority");
if (priorityString != null) {
switch (priorityString.toLowerCase()) {
case "max":
priority = NotificationCompat.PRIORITY_MAX;
break;
case "high":
priority = NotificationCompat.PRIORITY_HIGH;
break;
case "low":
priority = NotificationCompat.PRIORITY_LOW;
break;
case "min":
priority = NotificationCompat.PRIORITY_MIN;
break;
case "default":
priority = NotificationCompat.PRIORITY_DEFAULT;
break;
default:
priority = NotificationCompat.PRIORITY_HIGH;
}
}
int visibility = NotificationCompat.VISIBILITY_PRIVATE;
final String visibilityString = bundle.getString("visibility");
if (visibilityString != null) {
switch (visibilityString.toLowerCase()) {
case "private":
visibility = NotificationCompat.VISIBILITY_PRIVATE;
break;
case "public":
visibility = NotificationCompat.VISIBILITY_PUBLIC;
break;
case "secret":
visibility = NotificationCompat.VISIBILITY_SECRET;
break;
default:
visibility = NotificationCompat.VISIBILITY_PRIVATE;
}
}
String channel_id = bundle.getString("channelId");
if(channel_id == null) {
channel_id = this.getNotificationDefaultChannelId();
}
NotificationCompat.Builder notification = new NotificationCompat.Builder(context, channel_id)
.setContentTitle(title)
.setTicker(bundle.getString("ticker"))
.setVisibility(visibility)
.setPriority(priority)
.setAutoCancel(bundle.getBoolean("autoCancel", true))
.setOnlyAlertOnce(bundle.getBoolean("onlyAlertOnce", false));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { // API 24 and higher
// Restore showing timestamp on Android 7+
// Source: https://developer.android.com/reference/android/app/Notification.Builder.html#setShowWhen(boolean)
boolean showWhen = bundle.getBoolean("showWhen", true);
notification.setShowWhen(showWhen);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // API 26 and higher
// Changing Default mode of notification
notification.setDefaults(Notification.DEFAULT_LIGHTS);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { // API 20 and higher
String group = bundle.getString("group");
if (group != null) {
notification.setGroup(group);
}
if (bundle.containsKey("groupSummary") || bundle.getBoolean("groupSummary")) {
notification.setGroupSummary(bundle.getBoolean("groupSummary"));
}
}
String numberString = bundle.getString("number");
if (numberString != null) {
notification.setNumber(Integer.parseInt(numberString));
}
// Small icon
int smallIconResId = 0;
String smallIcon = bundle.getString("smallIcon");
if (smallIcon != null && !smallIcon.isEmpty()) {
smallIconResId = res.getIdentifier(smallIcon, "mipmap", packageName);
} else if(smallIcon == null) {
smallIconResId = res.getIdentifier("ic_stat_notify_status", "drawable", packageName);
}
if (smallIconResId == 0) {
smallIconResId = res.getIdentifier("ic_launcher", "mipmap", packageName);
if (smallIconResId == 0) {
smallIconResId = android.R.drawable.ic_dialog_info;
}
}
notification.setSmallIcon(smallIconResId);
// Large icon
if(largeIconBitmap == null) {
int largeIconResId = 0;
String largeIcon = bundle.getString("largeIcon");
if (largeIcon != null && !largeIcon.isEmpty()) {
largeIconResId = res.getIdentifier(largeIcon, "mipmap", packageName);
} else if(largeIcon == null) {
largeIconResId = res.getIdentifier("ic_launcher", "mipmap", packageName);
}
// Before Lolipop there was no large icon for notifications.
if (largeIconResId != 0 && (largeIcon != null || Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)) {
largeIconBitmap = BitmapFactory.decodeResource(res, largeIconResId);
}
}
if (largeIconBitmap != null){
notification.setLargeIcon(largeIconBitmap);
}
String message = bundle.getString("message");
notification.setContentText(message);
String subText = bundle.getString("subText");
if (subText != null) {
notification.setSubText(subText);
}
String bigText = bundle.getString("bigText");
if (bigText == null) {
bigText = message;
}
NotificationCompat.Style style;
if(bigPictureBitmap != null) {
style = new NotificationCompat.BigPictureStyle()
.bigPicture(bigPictureBitmap)
.setBigContentTitle(title)
.setSummaryText(message);
} else {
style = new NotificationCompat.BigTextStyle().bigText(bigText);
}
notification.setStyle(style);
Intent intent = new Intent(context, intentClass);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
bundle.putBoolean("foreground", this.isApplicationInForeground());
bundle.putBoolean("userInteraction", true);
intent.putExtra("notification", bundle);
Uri soundUri = null;
if (!bundle.containsKey("playSound") || bundle.getBoolean("playSound")) {
String soundName = bundle.getString("soundName");
if (soundName == null) {
soundName = "default";
}
soundUri = getSoundUri(soundName);
notification.setSound(soundUri);
}
if (soundUri == null || Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notification.setSound(null);
}
if (bundle.containsKey("ongoing") || bundle.getBoolean("ongoing")) {
notification.setOngoing(bundle.getBoolean("ongoing"));
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
notification.setCategory(NotificationCompat.CATEGORY_CALL);
String color = bundle.getString("color");
int defaultColor = -1;
if (color != null) {
notification.setColor(Color.parseColor(color));
} else if (defaultColor != -1) {
notification.setColor(defaultColor);
}
}
int notificationID = Integer.parseInt(notificationIdString);
PendingIntent pendingIntent = PendingIntent.getActivity(context, notificationID, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
NotificationManager notificationManager = notificationManager();
long[] vibratePattern = new long[]{0};
if (!bundle.containsKey("vibrate") || bundle.getBoolean("vibrate")) {
long vibration = bundle.containsKey("vibration") ? (long) bundle.getDouble("vibration") : DEFAULT_VIBRATION;
if (vibration == 0)
vibration = DEFAULT_VIBRATION;
vibratePattern = new long[]{0, vibration};
notification.setVibrate(vibratePattern);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Define the shortcutId
String shortcutId = bundle.getString("shortcutId");
if (shortcutId != null) {
notification.setShortcutId(shortcutId);
}
Long timeoutAfter = (long) bundle.getDouble("timeoutAfter");
if (timeoutAfter != null && timeoutAfter >= 0) {
notification.setTimeoutAfter(timeoutAfter);
}
}
Long when = (long) bundle.getDouble("when");
if (when != null && when >= 0) {
notification.setWhen(when);
}
notification.setUsesChronometer(bundle.getBoolean("usesChronometer", false));
notification.setChannelId(channel_id);
notification.setContentIntent(pendingIntent);
JSONArray actionsArray = null;
try {
actionsArray = bundle.getString("actions") != null ? new JSONArray(bundle.getString("actions")) : null;
} catch (JSONException e) {
Log.e(LOG_TAG, "Exception while converting actions to JSON object.", e);
}
if (actionsArray != null) {
// No icon for now. The icon value of 0 shows no icon.
int icon = 0;
// Add button for each actions.
for (int i = 0; i < actionsArray.length(); i++) {
String action;
try {
action = actionsArray.getString(i);
} catch (JSONException e) {
Log.e(LOG_TAG, "Exception while getting action from actionsArray.", e);
continue;
}
Intent actionIntent = new Intent(context, PushNotificationActions.class);
actionIntent.setAction(packageName + ".ACTION_" + i);
actionIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
// Add "action" for later identifying which button gets pressed.
bundle.putString("action", action);
actionIntent.putExtra("notification", bundle);
actionIntent.setPackage(packageName);
PendingIntent pendingActionIntent = PendingIntent.getBroadcast(context, notificationID, actionIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
notification.addAction(new NotificationCompat.Action.Builder(icon, action, pendingActionIntent).build());
} else {
notification.addAction(icon, action, pendingActionIntent);
}
}
}
if (!(this.isApplicationInForeground() && bundle.getBoolean("ignoreInForeground"))) {
Notification info = notification.build();
info.defaults |= Notification.DEFAULT_LIGHTS;
if (bundle.containsKey("tag")) {
String tag = bundle.getString("tag");
notificationManager.notify(tag, notificationID, info);
} else {
notificationManager.notify(notificationID, info);
}
}
} catch (Exception e) {
Log.e(LOG_TAG, "failed to send push notification", e);
}
}
private boolean checkOrCreateChannel(NotificationManager manager, String channel_id, String channel_name, String channel_description, Uri soundUri, int importance, long[] vibratePattern, boolean showBadge) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
return false;
if (manager == null)
return false;
NotificationChannel channel = manager.getNotificationChannel(channel_id);
if (
channel == null && channel_name != null && channel_description != null ||
channel != null &&
(
channel_name != null && !channel.getName().equals(channel_name) ||
channel_description != null && !channel.getDescription().equals(channel_description)
)
) {
// If channel doesn't exist create a new one.
// If channel name or description is updated then update the existing channel.
channel = new NotificationChannel(channel_id, channel_name, importance);
channel.setDescription(channel_description);
channel.enableLights(true);
channel.enableVibration(vibratePattern != null);
channel.setVibrationPattern(vibratePattern);
channel.setShowBadge(showBadge);
if (soundUri != null) {
AudioAttributes audioAttributes = new AudioAttributes.Builder()
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setUsage(AudioAttributes.USAGE_NOTIFICATION)
.build();
channel.setSound(soundUri, audioAttributes);
} else {
channel.setSound(null, null);
}
manager.createNotificationChannel(channel);
return true;
}
return false;
}
public boolean createChannel(ReadableMap channelInfo) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O)
return false;
String channelId = channelInfo.getString("channelId");
String channelName = channelInfo.getString("channelName");
String channelDescription = channelInfo.hasKey("channelDescription") ? channelInfo.getString("channelDescription") : "";
String soundName = channelInfo.hasKey("soundName") ? channelInfo.getString("soundName") : "default";
int importance = channelInfo.hasKey("importance") ? channelInfo.getInt("importance") : 4;
boolean vibrate = channelInfo.hasKey("vibrate") && channelInfo.getBoolean("vibrate");
long[] vibratePattern = vibrate ? new long[] { DEFAULT_VIBRATION } : null;
boolean showBadge = channelInfo.hasKey("showBadge") && channelInfo.getBoolean("showBadge");
NotificationManager manager = notificationManager();
Uri soundUri = getSoundUri(soundName);
return checkOrCreateChannel(manager, channelId, channelName, channelDescription, soundUri, importance, vibratePattern, showBadge);
}
public String getNotificationDefaultChannelId() {
return this.CHANNEL_ID;
}
private Uri getSoundUri(String soundName) {
if (soundName == null || "default".equalsIgnoreCase(soundName)) {
return RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
} else {
// sound name can be full filename, or just the resource name.
// So the strings 'my_sound.mp3' AND 'my_sound' are accepted
// The reason is to make the iOS and android javascript interfaces compatible
int resId;
if (context.getResources().getIdentifier(soundName, "raw", context.getPackageName()) != 0) {
resId = context.getResources().getIdentifier(soundName, "raw", context.getPackageName());
} else {
soundName = soundName.substring(0, soundName.lastIndexOf('.'));
resId = context.getResources().getIdentifier(soundName, "raw", context.getPackageName());
}
return Uri.parse("android.resource://" + context.getPackageName() + "/" + resId);
}
}
public Class getMainActivityClass() {
String packageName = context.getPackageName();
Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(packageName);
String className = launchIntent.getComponent().getClassName();
try {
return Class.forName(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return null;
}
}
public boolean isApplicationInForeground() {
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningAppProcessInfo> processInfos = activityManager.getRunningAppProcesses();
if (processInfos != null) {
for (RunningAppProcessInfo processInfo : processInfos) {
if (processInfo.processName.equals(context.getPackageName())
&& processInfo.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND
&& processInfo.pkgList.length > 0) {
return true;
}
}
}
return false;
}
}
@@ -0,0 +1,86 @@
package im.status.ethereum.pushnotifications;
import android.os.Build;
import android.app.Application;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.facebook.react.bridge.ReactContext;
import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.WritableMap;
import com.facebook.react.modules.core.DeviceEventManagerModule;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Set;
import static im.status.ethereum.pushnotifications.PushNotification.LOG_TAG;
class PushNotificationJsDelivery {
private ReactContext reactContext;
PushNotificationJsDelivery(ReactContext context){
reactContext = context;
}
String convertJSON(Bundle bundle) {
try {
JSONObject json = convertJSONObject(bundle);
return json.toString();
} catch (JSONException e) {
return null;
}
}
// a Bundle is not a map, so we have to convert it explicitly
private JSONObject convertJSONObject(Bundle bundle) throws JSONException {
JSONObject json = new JSONObject();
Set<String> keys = bundle.keySet();
for (String key : keys) {
Object value = bundle.get(key);
if (value instanceof Bundle) {
json.put(key, convertJSONObject((Bundle)value));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
json.put(key, JSONObject.wrap(value));
} else {
json.put(key, value);
}
}
return json;
}
void notifyNotification(Bundle bundle) {
String bundleString = convertJSON(bundle);
WritableMap params = Arguments.createMap();
params.putString("dataJSON", bundleString);
sendEvent("remoteNotificationReceived", params);
}
void notifyNotificationAction(Bundle bundle) {
String bundleString = convertJSON(bundle);
WritableMap params = Arguments.createMap();
params.putString("dataJSON", bundleString);
sendEvent("notificationActionReceived", params);
}
void sendEvent(String eventName, Object params) {
if (reactContext.hasActiveCatalystInstance()) {
reactContext
.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
.emit(eventName, params);
}
}
}

Some files were not shown because too many files have changed in this diff Show More