Compare commits

..
Author SHA1 Message Date
Brian Sztamfater bd7da02c25 Implement Wallet Connect 2.0
Signed-off-by: Brian Sztamfater <brian@status.im>
2022-03-17 03:46:38 -03:00
jo-mut ece2605cb9 Refactored: edit community chats different screen segments
Signed-off-by: jo-mut <johnmutuku628@gmail.com>
2022-03-17 01:30:40 +03:00
jo-mut 407454859b Refactored: edit community chats different screen segments 2022-03-16 19:59:03 +03:00
andrey 12221ea067 [#13164] Warning 'Registration process has finished in invalid state' is shown for any ENS while typing it in profile
Signed-off-by: andrey <motor4ik@gmail.com>
2022-03-15 09:09:56 +01:00
Churikova Tetiana 2ae875f82a e2e: browser group 2022-03-14 17:20:06 +01:00
Audrius Molis 8e85d15a86 Only create git hook whet it is absent
Signed-off-by: Audrius Molis <masta@dr.com>
2022-03-14 11:57:14 +02:00
andrey 9e126a7399 tabs component
Signed-off-by: andrey <motor4ik@gmail.com>
2022-03-11 13:12:13 +01:00
andrey a0254c0fa8 button component 2022-03-11 13:07:22 +01:00
andrey 72a0df6332 text component 2022-03-11 13:07:21 +01:00
Audrius Molis 08da76c22a Disable chat input for chats with blocked users
Signed-off-by: Audrius Molis <masta@dr.com>
2022-03-10 20:44:48 +02:00
Parvesh Monu 66482863c1 fix screen opens twice on app reopening in ios (#13157) 2022-03-10 19:20:50 +05:30
Churikova Tetiana a3f4673177 e2e: nightly fixes 2022-03-09 17:38:29 +01:00
Churikova Tetiana 55915a9176 e2e: tx users 2022-03-07 22:17:39 +01:00
pavloburykh 891d1e6360 improvements of testing gap 2022-03-07 20:24:49 +02:00
Audrius Molis 1eb956d562 Add changelog from status-go on upgrade #13090
Signed-off-by: Audrius Molis <masta@dr.com>
Signed-off-by: Jakub Sokołowski <jakub@status.im>
2022-03-07 12:46:49 +01:00
Parvesh Monu cf606b921a remove deprecated react-native-dark-mode dependency (#13136) 2022-03-04 19:34:17 +05:30
Parvesh Monu e6f552e785 Fix ios simulator error when notifications enabled (#13145) 2022-03-03 15:54:33 +05:30
Churikova Tetiana 7f007f204f exclude tx 2022-03-01 18:00:51 +01:00
andrey a2497c81e7 [#13116] Load audio messages from http server
Signed-off-by: andrey <motor4ik@gmail.com>
2022-03-01 17:07:40 +01:00
Parvesh Monu 5fd7e35d99 add remote notifications preferences (#13129) 2022-03-01 01:29:40 +05:30
John M. Ngei a71ad6e1a8 stop showing notifications for muted chats
Signed-off-by: John M. Ngei <johnmutuku628@gmail.com>
2022-02-25 22:16:46 +03:00
Roman Volosovskyi e8e70143d2 [#13104] Fix deadlock on syncing all data 2022-02-23 21:17:44 +01:00
Churikova Tetiana 0769528dcd e2e: kk + nightly fixes 2022-02-23 16:56:39 +01:00
andrey aaf655abe4 [#13086] stateofus.eth ENS username is not connected with chat key after purchasing
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-23 13:24:51 +01:00
Churikova Tetiana c59089c7d3 e2e: wallet+send tx 2022-02-22 15:26:46 +01:00
Churikova Tetiana 37108c8ee3 e2e: fix communities 2022-02-17 17:55:37 +01:00
pavloburykh f220e0fed8 e2e: test gap in public chat 2022-02-17 15:46:29 +02:00
frank 606c3c05e7 Sync bookmarks
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2022-02-17 13:37:39 +00:00
diana 6cb48834ae e2e: automate backup of contacts 2022-02-17 13:52:33 +01:00
frank 7b7a86284b Sync clear history
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2022-02-17 12:44:55 +00:00
Churikova Tetiana cf734032f2 e2e: fix accesibility #13028
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-02-14 15:38:45 +01:00
Parvesh Monu 36c7d8e4ca Implementation of remote android notifications (#13028) 2022-02-14 17:27:33 +05:30
Marco Süß a8e4363e6b always use english for fallback text
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-14 09:04:35 +01:00
jinhojang6 bcf20c358c Update translations
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-14 09:02:34 +01:00
Churikova Tetiana d77701537a e2e: fix ens and tx tests 2022-02-11 18:05:06 +01:00
Michele Balistreriandandrey 52afbf46ee get images over HTTPS with self-signed certificate
Co-Authored-By: andrey <motor4ik@gmail.com>
Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2022-02-10 18:41:10 +01:00
Parvesh Monu 9850dd5160 fix ens resolve issue while following deep link (#13080) 2022-02-10 00:21:47 +05:30
Parvesh Monu e59a2663f7 fix activity center unique constraint error (#13088) 2022-02-09 19:00:32 +05:30
Roman Volosovskyi e1e709220e [#12193] Stop showing fetch more button for cleared history 2022-02-09 09:53:36 +02:00
Roman Volosovskyi d5c865d092 [#9480] Fix cutting of the last char in blockquote 2022-02-08 21:17:02 +02:00
Audrius Molis f0302e7cbf [status-im#12603] Show short hash near build number in About page
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-08 15:34:56 +01:00
Roman Volosovskyi 8f52b9b63c [#12816] Better meesage on insufficient balance to cover fee 2022-02-08 15:29:02 +02:00
Churikova Tetiana 82916de15c e2e: 2 onboarding groups
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-02-04 18:18:15 +01:00
andrey 8ed9accbeb [#13070] No wallet is shown when switching on BSC network
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-04 14:52:32 +01:00
andrey c1a338c2dd [#13068] No error "Profile not found" if entering invalid public key in New chat field
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-04 10:36:10 +01:00
Churikova Tetiana 3745a8e2fe e2e: fixed missing geth
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-02-02 16:26:15 +01:00
Roman Volosovskyi 9fb81c3894 [#12783] Improve order of mailserver requests 2022-02-02 11:21:21 +02:00
andrey 8e560d313d [#13007] Move ENS logic to status-go
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-01 13:26:05 +01:00
andrey c0e30b459f [#13006] Use token list from status-go
Signed-off-by: andrey <motor4ik@gmail.com>
2022-02-01 13:23:24 +01:00
Churikova Tetiana b63117845a e2e: fixes, umbrella issue update
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-01-31 18:50:42 +01:00
Parvesh Monu fd894dc339 fix gradle google free variable (#13064) 2022-01-31 16:12:46 +05:30
andrey dc8cbcde56 [#13059] 'Cannot read property' error on scanning invalid key
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-31 09:39:52 +01:00
Churikova Tetiana 4bf393ec3d e2e refactoring: group and public chat 2022-01-27 21:58:28 +01:00
jakub b1780a7128 docs: add list of nix deps update make targets
Important now that we're onboarding more new devs.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2022-01-27 21:42:05 +01:00
andrey 82f7fbf7e4 [#12071] Some ENS names starting with 0x are not picked up as universal links
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-26 17:10:09 +01:00
andrey a6eee856cf [#13046] No value in 'Gas amount limit' field in NFT dapps by default
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-26 17:07:56 +01:00
andrey 136a6313cd [#13047] Profile QR code overlaps share menu during sharing (IOS)
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-26 06:57:26 +01:00
Churikova Tetiana 6a8f7a07bf e2e: skip AttributeError
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-01-25 12:20:21 +01:00
Roman Volosovskyi c6eb964b7c [#13034] Replace 'etherscan' with 'block explorer' in translations 2022-01-25 10:45:10 +02:00
Roman Volosovskyi 93d4dc8cb5 [#13038] Add error message to email template on crash 2022-01-24 16:55:47 +02:00
Churikova Tetiana 7bbb882ffa e2e: shared steps for session 2022-01-24 12:40:02 +01:00
Parvesh Monu 012b3e396e Fix advanced notifications translation (#13027) 2022-01-21 19:58:20 +05:30
Roman Volosovskyi bf92c51ce4 [#12919] Allow adding emoji to group intro message if it exceeds limit 2022-01-19 17:36:32 +02:00
Roman Volosovskyi eefc2ede81 [#12989] Use higher base fee value for default tx fee calculation 2022-01-19 14:14:05 +02:00
andrey 111064f747 [#13016] "No collectibles available" at attempt to get any existing collectibles
Signed-off-by: Andrea Maria Piana <andrea.maria.piana@gmail.com>
2022-01-18 16:38:58 +00:00
Churikova Tetiana cfab672f63 e2e: more fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-01-17 20:24:25 +01:00
Parvesh Monu 69221695b3 fix alert dialog background color (#13010) 2022-01-18 00:45:40 +05:30
Roman Volosovskyi c44e5bbb67 [#12919] Allowing adding emoji in status input even if it exceeds limit 2022-01-17 19:01:07 +02:00
Parvesh Monu 826dd32c40 Add group members to mentionable list and format code (#12994) 2022-01-17 18:47:09 +05:30
Churikova Tetiana 04b7357646 e2e: fixes
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-01-14 17:55:39 +01:00
Michele Balistreri 2c38c74c16 * update react-native-webview
* more robust send-to-bridge

Signed-off-by: Michele Balistreri <michele@bitgamma.com>
2022-01-14 13:49:06 +03:00
andrey eb7a6ce45a [#12991] Error when trying to edit 'per-gas price limit' on 1inch.exchange
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-13 11:05:23 +01:00
jakub 525577ab17 ci: specify nix version via agent label
Will make it easier and safer to upgrade Nix on CI hosts.

Also added architecture since we are starting to mix those.

Signed-off-by: Jakub Sokołowski <jakub@status.im>
2022-01-12 18:21:28 +01:00
Jonathan Ferreira (Johny) 83a7d3fafc Add/Fix rebase overwritten event (#12960)
* Add/Fix rebase overwritten event

* Remove membership invitation only option

* Fix lint findings

* Replace if w/ when condition

* Remove left over code

* Add/Fix rebase overwritten event

* Remove left over code

* Add correct message to community info
2022-01-12 14:05:44 +00:00
Churikova Tetiana 4318bb6431 github: update release umbrella issue
Signed-off-by: Churikova Tetiana <churikova.tm@gmail.com>
2022-01-11 15:50:38 +01:00
andrey c466f96326 [#12535] Human Readable data display when signing using eth_signTypedData_v3
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-11 14:47:53 +01:00
andrey 130308fa8a [#12920] Unable to perform swap on 1inch.exchange if initial swap was cancelled by closing bottom sheet
Signed-off-by: andrey <motor4ik@gmail.com>
2022-01-11 14:47:22 +01:00
Churikova Tetiana a858918b80 Merge branch 'tests/pr-critical-high' into develop 2022-01-10 15:50:37 +01:00
Brian Sztamfater d5b8cde8e2 Add UBI token to the list of default tokens
Signed-off-by: Brian Sztamfater <brian@status.im>
2022-01-10 11:46:34 -03:00
Churikova Tetiana e5a30eaf1d e2e: critical or high in prs 2022-01-10 15:19:26 +01:00
Parvesh Monu b0fd58e9cb fix membership requests on synced devices (#12971) 2022-01-10 17:56:30 +05:30
227 changed files with 10441 additions and 5323 deletions
-1
View File
@@ -1,6 +1,5 @@
status-im.utils.build/warning-handler
status-im.utils.build/get-current-sha
status-im.ethereum.resolver/name
status-im.chat.constants/spacing-char
status-im.chat.constants/arg-wrapping-char
status-im.ios.core/init
+1
View File
@@ -36,3 +36,4 @@ COMMUNITIES_MANAGEMENT_ENABLED=1
METRICS_ENABLED=0
DELETE_MESSAGE_ENABLED=1
TWO_MINUTES_SYNCING=1
ENABLE_QUO_PREVIEW=1
+11 -10
View File
@@ -27,11 +27,11 @@ Upgrade (e2e):
### Process
#### 1) Kick-off
- [ ] 1. Translation PRs is merged before cutting branch (Jinho)
- [ ] 2. Prepare scope of visible changes based on commits history, started from previous release branch cut ([example]( https://notes.status.im/1.14-release-notes?view))
- [ ] 2. Prepare scope of visible changes based on commits history, started from previous release branch cut ([guide](https://notes.status.im/how-to-prepare-release-notes))
- [ ] 3. Update [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) with release notes (make PR based on previous step)
- [ ] 4. Create release branch using this [guide](https://github.com/status-im/status-react/blob/develop/doc/RELEASE_GUIDE.md), bump VERSION (merge created PR ([example](https://github.com/status-im/status-react/pull/12504) ) to develop) and get successful release builds (so, testing can be started)
- [ ] 5. Based on release scope, ask for comms (Jonny)
- [ ] 6. Make sure that assets (screenshots, video) in stores are up to date. If should be updated, ask @cammellos for help
- [ ] 6. Make sure that assets (screenshots, video) in stores are up-to-date, more info [here](https://notes.status.im/how-to-update-assets)
#### 2) Testing
[comment]: # (Section will be maintained by QA)
@@ -53,14 +53,15 @@ Upgrade (e2e):
#### 3) Submission
- [ ] 1. Release notes written and added (500 character limit for updates (Android) and PR for [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) is ready to be merged (from 1.3 step)
- [ ] 2. Submit beta version for Android (Open Testing in Play Store)
- [ ] 3. Submit iOS build to Apple review ([instruction](https://drive.google.com/file/d/10Cl7PBB7TFPkZiVbfzdFGpfMRP9bxXuq/view?usp=sharing), be careful - low quality of audio)
- [ ] 4. Play store content reviewed and updated
- [ ] 5. Privacy policy reviewed and updated (ask in channel)
- [ ] 6. Countries to be excluded (ask in channel)
- [ ] 7. Changes to our FAQ made (should be checked and if any changes needed, ask Jakub to made them)
- [ ] 8. Prepare PR for F-droid build ([instruction]( https://github.com/status-im/status-react/blob/develop/doc/FDROID.md))
- [ ] 1. Prepare PR for F-droid build ([instruction]( https://github.com/status-im/status-react/blob/develop/doc/FDROID.md))
- [ ] 2. Release notes written and added (500 character limit for updates (Android) and PR for [RELEASES.md](https://github.com/status-im/status-react/blob/develop/RELEASES.md) is ready to be merged (from 1.3 step)
- [ ] 3. Submit beta version for Android (Open Testing in Play Store)
- [ ] 4. Submit iOS build to Apple review ([instruction](https://drive.google.com/file/d/10Cl7PBB7TFPkZiVbfzdFGpfMRP9bxXuq/view?usp=sharing), be careful - low quality of audio)
- [ ] 5. Play store content reviewed and updated
- [ ] 6. Privacy policy reviewed and updated (ask in channel)
- [ ] 7. Countries to be excluded (ask in channel)
- [ ] 8. Changes to our FAQ made (should be checked and if any changes needed, ask Jakub to made them)
#### 4) Before publishing
- [ ] 1. Translations for comms available (marketing, ask in the channel)
+1 -1
View File
@@ -10,7 +10,7 @@ project-board:
automated-tests:
repo-full-name: 'status-im/status-react'
job-full-name: 'end-to-end-tests/status-app-prs'
job-full-name: 'status-react/e2e/status-app-prs'
kickoff-column-name: 'E2E Tests'
github-team:
+2 -1
View File
@@ -168,4 +168,5 @@ project.clj
##appium
test/appium/report/
result.xml
result.xml
test/appium/tests/users.py
+8 -2
View File
@@ -1,4 +1,4 @@
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm
.PHONY: nix-add-gcroots clean nix-clean run-metro test release _list _fix-node-perms _tmpdir-mk _tmpdir-rm _install-hooks
help: SHELL := /bin/sh
help: ##@other Show this help
@@ -124,6 +124,11 @@ _tmpdir-rm: SHELL := /bin/sh
_tmpdir-rm: ##@prepare Remove TMPDIR
rm -fr "$(TMPDIR)"
_install-hooks: SHELL := /bin/sh
_install-hooks: ##@prepare Create prepare-commit-msg git hook symlink
@ln -s -f ../../scripts/hooks/prepare-commit-msg .git/hooks
-include _install-hooks
# Remove directories and ignored files
clean: SHELL := /bin/sh
clean: _fix-node-perms _tmpdir-rm ##@prepare Remove all output folders
@@ -200,8 +205,9 @@ 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: export READER_FEATURES = google-free
release-fdroid: ##@build Build release for F-Droid
sed -i -e '$$aGOOGLE_FREE=1' .env.release
scripts/google-free.sh
scripts/release-android.sh
release-ios: export TARGET := ios
+1 -1
View File
@@ -1 +1 @@
1.18.0
1.18.0
+8 -1
View File
@@ -126,7 +126,7 @@ 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 googleFree = project.env.get("GOOGLE_FREE", 0) == '1'
def getCommitHash = { ->
if (project.hasProperty("commitHash")) {
@@ -341,6 +341,8 @@ dependencies {
exclude group: 'com.google.android.gms'
exclude group: 'com.android.installreferrer'
}
} else {
implementation 'com.google.firebase:firebase-messaging:23.0.0'
}
// react-native-screens
@@ -358,6 +360,7 @@ dependencies {
implementation 'com.github.status-im:function:0.0.1'
implementation 'com.facebook.fresco:fresco:2.2.0'
implementation 'com.facebook.fresco:animated-gif:2.2.0'
implementation "com.squareup.okhttp3:okhttp-tls:3.12.12"
}
def getLocalNDKDir = { ->
@@ -393,3 +396,7 @@ task hemroidBuild(type: Exec) {
preBuild.dependsOn hemroidBuild
apply from: file("../../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesAppBuildGradle(project)
if (!googleFree) {
apply plugin: "com.google.gms.google-services"
}
+119
View File
@@ -0,0 +1,119 @@
{
"project_info": {
"project_number": "854811651919",
"firebase_url": "https://status-react-app.firebaseio.com",
"project_id": "status-react-app",
"storage_bucket": "status-react-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:11ee7444ded8a00a",
"android_client_info": {
"package_name": "im.status.ethereum"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:15dbe4af1e06ca3e005f3a",
"android_client_info": {
"package_name": "im.status.ethereum.debug"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
},
{
"client_info": {
"mobilesdk_app_id": "1:854811651919:android:1d0d69fe8c1bb89b005f3a",
"android_client_info": {
"package_name": "im.status.ethereum.pr"
}
},
"oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAOF4W1j8GYeXzzVKRfNKlXywD6bx0rJtQ"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "854811651919-gua52csicclb5p9gr4eeu33ukk0aaphj.apps.googleusercontent.com",
"client_type": 3
},
{
"client_id": "854811651919-30s20e3l0me0ins0vc4185jbnj7ja49o.apps.googleusercontent.com",
"client_type": 2,
"ios_info": {
"bundle_id": "im.status.ethereum"
}
}
]
}
}
}
],
"configuration_version": "1"
}
+6
View File
@@ -81,6 +81,12 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_provider_paths" />
</provider>
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/notification_icon" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/notification_icon_color" />
</application>
</manifest>
@@ -15,12 +15,14 @@ import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.react.NavigationReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.modules.network.OkHttpClientProvider;
import java.util.List;
import im.status.ethereum.keycard.RNStatusKeycardPackage;
import im.status.ethereum.module.StatusPackage;
import im.status.ethereum.pushnotifications.PushNotificationPackage;
import im.status.ethereum.StatusOkHttpClientFactory;
public class MainApplication extends NavigationApplication {
@@ -56,7 +58,9 @@ public class MainApplication extends NavigationApplication {
@Override
public void onCreate() {
super.onCreate();
OkHttpClientProvider.setOkHttpClientFactory(new StatusOkHttpClientFactory());
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1");
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
}
@@ -0,0 +1,44 @@
package im.status.ethereum;
import android.util.Log;
import com.facebook.react.modules.network.OkHttpClientFactory;
import com.facebook.react.modules.network.OkHttpClientProvider;
import okhttp3.OkHttpClient;
import okhttp3.Interceptor;
import okhttp3.tls.HandshakeCertificates;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.lang.RuntimeException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import im.status.ethereum.module.StatusPackage;
class StatusOkHttpClientFactory implements OkHttpClientFactory {
public OkHttpClient createNewNetworkModuleClient() {
String certPem = StatusPackage.getImageTLSCert();
X509Certificate cert;
try {
CertificateFactory cf = CertificateFactory.getInstance("X.509");
cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(certPem.getBytes()));
} catch(Exception e) {
Log.e("StatusOkHttpClientFactory", "Could not parse certificate");
cert = null;
}
HandshakeCertificates clientCertificates = new HandshakeCertificates.Builder()
.addPlatformTrustedCertificates()
.addTrustedCertificate(cert)
.build();
return OkHttpClientProvider.createClientBuilder()
.sslSocketFactory(clientCertificates.sslSocketFactory(), clientCertificates.trustManager())
.build();
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 482 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 272 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 975 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 495 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 826 B

@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alert_text">#ffffff</color>
<color name="alert_background">#141414</color>
<color name="alert_text">#ffffff</color>
</resources>
+3 -1
View File
@@ -1,4 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="alert_text">#000000</color>
<color name="alert_background">#ffffff</color>
<color name="alert_text">#000000</color>
<color name="notification_icon_color">#4360DF</color>
</resources>
+2 -1
View File
@@ -23,8 +23,9 @@
<item name="android:windowLightStatusBar">false</item>
</style>
<style name="AlertDialogTheme" parent="Base.Theme.AppCompat.Light.Dialog.Alert">
<style name="AlertDialogTheme" parent="Theme.AppCompat.DayNight.Dialog.Alert">
<item name="android:textColor">@color/alert_text</item>
<item name="android:textColorPrimary">@color/alert_text</item>
<item name="android:background">@color/alert_background</item>
</style>
</resources>
+1
View File
@@ -22,6 +22,7 @@ buildscript {
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31"
classpath "com.android.tools.build:gradle:${project.ext.gradlePluginVersion}"
classpath "com.google.gms:google-services:4.3.10"
// WARNING: Do not place your application dependencies here!
// They belong in the individual module build.gradle files.
}
+1 -1
View File
@@ -1,7 +1,7 @@
library 'status-jenkins-lib@v1.3.3'
pipeline {
agent { label 'linux' }
agent { label 'linux && x86_64 && nix-2.3' }
options {
timestamps()
+1 -1
View File
@@ -101,7 +101,7 @@ pipeline {
steps { script {
e2eApk = utils.getEnv(apke2e, 'SAUCE_URL')
build(
job: 'end-to-end-tests/status-app-nightly',
job: 'status-react/e2e/status-app-nightly',
parameters: [string(name: 'APK_NAME', value: e2eApk)],
wait: false
)
+1 -1
View File
@@ -1,7 +1,7 @@
library 'status-jenkins-lib@v1.3.3'
pipeline {
agent { label 'macos && x86_64 && xcode-12.5' }
agent { label 'macos && x86_64 && nix-2.3 && xcode-12.5' }
parameters {
string(
+6
View File
@@ -48,8 +48,14 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test accounts secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
--numprocesses 15 \
+9 -2
View File
@@ -8,11 +8,12 @@ pipeline {
description: 'Name of the branch to checkout and build.',
defaultValue: 'develop',
)
/* Commented to use TEST_MARKERS values from job params
string(
name: 'TEST_MARKERS',
description: 'Marker expression for matching tests to run.',
defaultValue: '',
)
defaultValue: 'critical or high',
) */
string(
name: 'APK_NAME',
description: 'Filename of APK uploaded to SauceLabs, path, or URL.',
@@ -84,8 +85,14 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test account secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
--numprocesses 15 \
+6
View File
@@ -62,8 +62,14 @@ pipeline {
credentialsId: 'infura-e2e-token',
variable: 'WEB3_INFURA_PROJECT_ID'
),
file(
credentialsId: "mobile-tests-eth-accounts",
variable: 'TEST_ETH_ACCOUNTS_FILE'
),
]) {
dir('test/appium/tests') {
/* Provide Eth test accounts secrets. */
sh 'cp -f $TEST_ETH_ACCOUNTS_FILE users.py'
sh """
python3 -m pytest \
-m "upgrade" \
+7
View File
@@ -28,6 +28,13 @@ There are three steps necessary to start development, in this case for Android:
The first two will continue watching for changes and keep re-building the app. They need to be ready first.
The last one will exit once the app is up and ready.
# Updating Dependencies
* `make nix-update-pods` - iOS CocoaPods dependencies (updates `ios/Podfile` and `ios/Podfile.loc`)
* `make nix-update-gradle` - Android Gradle/Maven dependencies (updates `nix/deps/gradle/deps.json`)
* `make nix-update-clojure` - Clojure Maven dependencies (updates `nix/deps/clojure/deps.json`)
* `make nix-update-gems` - Fastlane Ruby dependencies (updates `fastlane/Gemfile.lock` and `fastlane/gemset.nix`)
# Manual Steps
There are a few manual steps you might want to do in order to start contributing.
+1
View File
@@ -1 +1,2 @@
import "node-libs-react-native/globals";
import "./app/index.js";
+32 -8
View File
@@ -2,7 +2,7 @@ PODS:
- boost-for-react-native (1.63.0)
- BVLinearGradient (2.5.6):
- React
- CryptoSwift (1.4.2)
- CryptoSwift (1.4.3)
- DoubleConversion (1.1.6)
- FBLazyVector (0.63.4)
- FBReactNativeSpec (0.63.4):
@@ -206,6 +206,10 @@ PODS:
- React-jsinspector (0.63.4)
- react-native-background-timer (2.2.0):
- React
- react-native-blob-util (0.13.18):
- React-Core
- react-native-blur (0.8.0):
- React
- react-native-camera-kit (8.0.4):
- React
- react-native-cameraroll (4.0.4):
@@ -220,6 +224,10 @@ PODS:
- React-Core
- react-native-netinfo (4.7.0):
- React
- react-native-notifications (4.1.3):
- React-Core
- react-native-randombytes (3.6.1):
- React-Core
- react-native-safe-area-context (2.0.0):
- React
- react-native-shake (3.4.0):
@@ -233,7 +241,7 @@ PODS:
- react-native-status-keycard (2.5.37):
- Keycard
- React
- react-native-webview (11.3.0):
- react-native-webview (11.16.0):
- React-Core
- React-RCTActionSheet (0.63.4):
- React-Core/RCTActionSheetHeaders (= 0.63.4)
@@ -388,8 +396,8 @@ PODS:
- SQLCipher/common (3.4.2)
- SQLCipher/standard (3.4.2):
- SQLCipher/common
- SSZipArchive (2.4.2)
- TOCropViewController (2.6.0)
- SSZipArchive (2.4.3)
- TOCropViewController (2.6.1)
- TouchID (4.4.1):
- React
- Yoga (1.14.0)
@@ -417,12 +425,16 @@ DEPENDENCIES:
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-blob-util (from `../node_modules/react-native-blob-util`)
- "react-native-blur (from `../node_modules/@react-native-community/blur`)"
- 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`)"
- react-native-notifications (from `../node_modules/react-native-notifications`)
- react-native-randombytes (from `../node_modules/react-native-randombytes`)
- react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`)
- react-native-shake (from `../node_modules/react-native-shake`)
- "react-native-slider (from `../node_modules/@react-native-community/slider`)"
@@ -517,6 +529,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
react-native-background-timer:
:path: "../node_modules/react-native-background-timer"
react-native-blob-util:
:path: "../node_modules/react-native-blob-util"
react-native-blur:
:path: "../node_modules/@react-native-community/blur"
react-native-camera-kit:
:path: "../node_modules/react-native-camera-kit"
react-native-cameraroll:
@@ -529,6 +545,10 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-mail"
react-native-netinfo:
:path: "../node_modules/@react-native-community/netinfo"
react-native-notifications:
:path: "../node_modules/react-native-notifications"
react-native-randombytes:
:path: "../node_modules/react-native-randombytes"
react-native-safe-area-context:
:path: "../node_modules/react-native-safe-area-context"
react-native-shake:
@@ -621,7 +641,7 @@ CHECKOUT OPTIONS:
SPEC CHECKSUMS:
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872
CryptoSwift: a532e74ed010f8c95f611d00b8bbae42e9fe7c17
CryptoSwift: a0799ee936271bd2253a006f1e4523df21845000
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
@@ -642,19 +662,23 @@ SPEC CHECKSUMS:
React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4
react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9
react-native-blur: cad4d93b364f91e7b7931b3fa935455487e5c33c
react-native-camera-kit: 498a6d111a904834e0824e9073cfadef7303235f
react-native-cameraroll: 88f4e62d9ecd0e1f253abe4f685474f2ea14bfa2
react-native-config: c98128a72bc2c3a1ca72caec0b021f0fa944aa29
react-native-image-resizer: 2f1577efa3bc762597681f530c8e8d05ce0ceeb3
react-native-mail: 8fdcd3aef007c33a6877a18eb4cf7447a1d4ce4a
react-native-netinfo: ddaca8bbb9e6e914b1a23787ccb879bc642931c9
react-native-notifications: 805108822ceff3440644d5701944f0cda35f5b4b
react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846
react-native-safe-area-context: 60f654e00b6cc416573f6d5dbfce3839958eb57a
react-native-shake: de052eaa3eadc4a326b8ddd7ac80c06e8d84528c
react-native-slider: 12bd76d3d568c9c5500825db54123d44b48e4ad4
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-status: 45dbf1302ce3c258b459dfab137cd1c2c68c295d
react-native-status-keycard: 961d01ca190889ddf220206822fd752f8f4f3f7a
react-native-webview: af9990b21a9aeafa8e8347746eb4116c0de086af
react-native-webview: 28a8636d97ee641f2ee8f20492d7a6c269c1d703
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
@@ -688,8 +712,8 @@ SPEC CHECKSUMS:
SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: e7b4f3d9e780c2acc1764cd88fbf2de28f26e5b2
TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
+72 -4
View File
@@ -19,10 +19,23 @@
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTHTTPRequestHandler.h>
#import <UserNotifications/UserNotifications.h>
#import <RNCPushNotificationIOS.h>
#import <SDWebImage/SDWebImageDownloaderConfig.h>
#import <SDWebImage/SDWebImageDownloaderOperation.h>
#import <Security/Security.h>
//TODO: properly import the framework
extern NSString* StatusgoImageServerTLSCert();
@interface StatusDownloaderOperation : SDWebImageDownloaderOperation
+ (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler;
@end
/*
#if DEBUG
#import <FlipperKit/FlipperClient.h>
@@ -45,7 +58,7 @@ static void InitializeFlipper(UIApplication *application) {
#endif
*/
@implementation AppDelegate
@implementation AppDelegate
{
UIView *_blankView;
}
@@ -84,6 +97,8 @@ static void InitializeFlipper(UIApplication *application) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
SDWebImageDownloaderConfig.defaultDownloaderConfig.operationClass = [StatusDownloaderOperation class];
return YES;
}
@@ -124,7 +139,7 @@ static void InitializeFlipper(UIApplication *application) {
[UIView animateWithDuration:0.5 animations:^{
_blankView.alpha = 1;
}];
}
}
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
@@ -169,14 +184,67 @@ didReceiveNotificationResponse:(UNNotificationResponse *)response
- (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
@implementation StatusDownloaderOperation
+ (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
NSURLSessionAuthChallengeDisposition disposition = NSURLSessionAuthChallengeCancelAuthenticationChallenge;
__block NSURLCredential *credential = nil;
NSString *pemCert = StatusgoImageServerTLSCert();
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"-----BEGIN CERTIFICATE-----\n" withString:@""];
pemCert = [pemCert stringByReplacingOccurrencesOfString:@"\n-----END CERTIFICATE-----" withString:@""];
NSData *derCert = [[NSData alloc] initWithBase64EncodedString:pemCert options:NSDataBase64DecodingIgnoreUnknownCharacters];
SecCertificateRef certRef = SecCertificateCreateWithData(NULL, (__bridge_retained CFDataRef) derCert);
CFArrayRef certArrayRef = CFArrayCreate(NULL, (void *)&certRef, 1, NULL);
SecTrustSetAnchorCertificates(challenge.protectionSpace.serverTrust, certArrayRef);
SecTrustResultType trustResult;
SecTrustEvaluate(challenge.protectionSpace.serverTrust, &trustResult);
if ((trustResult == kSecTrustResultProceed) || (trustResult == kSecTrustResultUnspecified)) {
disposition = NSURLSessionAuthChallengeUseCredential;
credential = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
}
if (completionHandler) {
completionHandler(disposition, credential);
}
}
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] &&
[challenge.protectionSpace.host isEqualToString:@"localhost"]) {
[StatusDownloaderOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
} else {
[super URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
}
}
@end
@implementation RCTHTTPRequestHandler (SelfSigned)
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential *credential))completionHandler {
if ([challenge.protectionSpace.authenticationMethod isEqualToString:NSURLAuthenticationMethodServerTrust] &&
[challenge.protectionSpace.host isEqualToString:@"localhost"]) {
[StatusDownloaderOperation URLSession:session task:task didReceiveChallenge:challenge completionHandler:completionHandler];
} else {
if (completionHandler) {
completionHandler(NSURLSessionAuthChallengePerformDefaultHandling, [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust]);
}
}
}
@end
+3
View File
@@ -13,4 +13,7 @@ module.exports = {
},
}),
},
resolver: {
extraNodeModules: require('node-libs-react-native'),
},
};
@@ -1011,6 +1011,25 @@ class StatusModule extends ReactContextBaseJavaModule implements LifecycleEventL
StatusThreadPoolExecutor.getInstance().execute(r);
}
@ReactMethod
public void recover(final String rpcParams, final Callback callback) {
Log.d(TAG, "recover");
if (!checkAvailability()) {
callback.invoke(false);
return;
}
Runnable r = new Runnable() {
@Override
public void run() {
String res = Statusgo.recover(rpcParams);
callback.invoke(res);
}
};
StatusThreadPoolExecutor.getInstance().execute(r);
}
@ReactMethod
public void signTypedData(final String data, final String account, final String password, final Callback callback) {
Log.d(TAG, "signTypedData");
@@ -10,10 +10,16 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import statusgo.Statusgo;
public class StatusPackage implements ReactPackage {
private boolean rootedDevice;
public static String getImageTLSCert() {
return Statusgo.imageServerTLSCert();
}
public StatusPackage(boolean rootedDevice) {
this.rootedDevice = rootedDevice;
}
@@ -124,6 +124,11 @@ public class PushNotification extends ReactContextBaseJavaModule implements Acti
}
}
@ReactMethod
public void clearAllMessageNotifications() {
pushNotificationHelper.clearAllMessageNotifications();
}
@ReactMethod
public void enableNotifications() {
this.started = true;
@@ -199,6 +199,10 @@ public class PushNotificationHelper {
cleanGroup(conversationId);
}
public void clearAllMessageNotifications() {
notificationManager.cancelAll();
}
public void sendToNotificationCentreWithPicture(final Bundle bundle, Bitmap largeIconBitmap, Bitmap bigPictureBitmap) {
try {
@@ -662,6 +662,18 @@ RCT_EXPORT_METHOD(signMessage:(NSString *)message
callback(@[result]);
}
////////////////////////////////////////////////////////////////////
#pragma mark - Recover
//////////////////////////////////////////////////////////////////// recover
RCT_EXPORT_METHOD(recover:(NSString *)message
callback:(RCTResponseSenderBlock)callback) {
#if DEBUG
NSLog(@"Recover() method called");
#endif
NSString *result = StatusgoRecover(message);
callback(@[result]);
}
////////////////////////////////////////////////////////////////////
#pragma mark - SignTypedData
//////////////////////////////////////////////////////////////////// signTypedData
+2992 -174
View File
File diff suppressed because it is too large Load Diff
+81
View File
@@ -60,6 +60,7 @@ androidx.savedstate:savedstate:1.0.0
androidx.slidingpanelayout:slidingpanelayout:1.0.0
androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
androidx.swiperefreshlayout:swiperefreshlayout:1.1.0
androidx.test:monitor:1.2.0
androidx.test:monitor:1.3.0-rc03
androidx.transition:transition:1.2.0
androidx.transition:transition:1.2.0-rc01
@@ -71,6 +72,9 @@ androidx.versionedparcelable:versionedparcelable:1.0.0
androidx.versionedparcelable:versionedparcelable:1.1.0
androidx.viewpager2:viewpager2:1.0.0
androidx.viewpager:viewpager:1.0.0
androidx.webkit:webkit:1.4.0
backport-util-concurrent:backport-util-concurrent:3.1
classworlds:classworlds:1.1-alpha-2
commons-codec:commons-codec:1.4
commons-codec:commons-codec:1.6
commons-codec:commons-codec:1.9
@@ -350,14 +354,26 @@ com.github.wix-playground:reflow-animator:1.0.6
com.github.yalantis:ucrop:2.2.6-native
com.googlecode.json-simple:json-simple:1.1
com.googlecode.juniversalchardet:juniversalchardet:1.0.3
com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework:2.1
com.google.android.datatransport:transport-api:2.2.1
com.google.android.datatransport:transport-api:3.0.0
com.google.android.datatransport:transport-backend-cct:2.3.3
com.google.android.datatransport:transport-backend-cct:3.0.0
com.google.android.datatransport:transport-runtime:2.2.5
com.google.android.datatransport:transport-runtime:3.0.0
com.google.android.gms:play-services-basement:17.0.0
com.google.android.gms:play-services-base:17.0.0
com.google.android.gms:play-services-cloud-messaging:16.0.0
com.google.android.gms:play-services-cloud-messaging:17.0.0
com.google.android.gms:play-services-iid:17.0.0
com.google.android.gms:play-services-stats:17.0.0
com.google.android.gms:play-services-tasks:17.0.0
com.google.android.gms:strict-version-matcher-plugin:1.2.2
com.google.android.material:material:1.2.0-alpha03
com.google.auto.service:auto-service:1.0-rc4
com.google.auto.value:auto-value-annotations:1.6.2
com.google.auto.value:auto-value:1.5.2
com.google.auto:auto-common:0.8
com.google.code.findbugs:jsr305:1.3.9
com.google.code.findbugs:jsr305:3.0.2
com.google.code.gson:gson:2.2.4
@@ -370,6 +386,28 @@ com.google.errorprone:error_prone_annotations:2.0.18
com.google.errorprone:error_prone_annotations:2.1.2
com.google.errorprone:error_prone_annotations:2.2.0
com.google.errorprone:error_prone_annotations:2.3.1
com.google.firebase:firebase-annotations:16.0.0
com.google.firebase:firebase-common:19.5.0
com.google.firebase:firebase-common:20.0.0
com.google.firebase:firebase-components:16.1.0
com.google.firebase:firebase-components:17.0.0
com.google.firebase:firebase-datatransport:17.0.10
com.google.firebase:firebase-datatransport:18.0.0
com.google.firebase:firebase-encoders-json:17.1.0
com.google.firebase:firebase-encoders-json:18.0.0
com.google.firebase:firebase-encoders:16.1.0
com.google.firebase:firebase-encoders:17.0.0
com.google.firebase:firebase-iid-interop:17.1.0
com.google.firebase:firebase-iid:21.1.0
com.google.firebase:firebase-installations-interop:16.0.1
com.google.firebase:firebase-installations-interop:17.0.0
com.google.firebase:firebase-installations:16.3.5
com.google.firebase:firebase-installations:17.0.0
com.google.firebase:firebase-measurement-connector:18.0.0
com.google.firebase:firebase-measurement-connector:19.0.0
com.google.firebase:firebase-messaging:21.1.0
com.google.firebase:firebase-messaging:23.0.0
com.google.gms:google-services:4.3.10
com.google.guava:failureaccess:1.0.1
com.google.guava:guava:17.0
com.google.guava:guava:22.0
@@ -380,6 +418,7 @@ com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava
com.google.j2objc:j2objc-annotations:1.1
com.google.jimfs:jimfs:1.1
com.google.protobuf:protobuf-java-util:3.4.0
com.google.protobuf:protobuf-java:2.6.1
com.google.protobuf:protobuf-java:3.0.0
com.google.protobuf:protobuf-java:3.4.0
com.google.zxing:core:3.3.0
@@ -389,6 +428,7 @@ com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
com.parse.bolts:bolts-applinks:1.4.0
com.parse.bolts:bolts-tasks:1.4.0
com.squareup.assertj:assertj-android:1.1.1
com.squareup.okhttp3:okhttp-tls:3.12.12
com.squareup.okhttp3:okhttp-urlconnection:3.12.12
com.squareup.okhttp3:okhttp:3.12.12
com.squareup.okio:okio:1.15.0
@@ -408,6 +448,8 @@ javax.inject:javax.inject:1
javax.xml.bind:jaxb-api:2.2.12-b140109.1041
junit:junit:4.12
me.zhanghai.android.materialprogressbar:library:1.4.2
nekohtml:nekohtml:1.9.6.2
nekohtml:xercesMinimal:1.9.6.2
net.bytebuddy:byte-buddy-agent:1.9.10
net.bytebuddy:byte-buddy-agent:1.10.18
net.bytebuddy:byte-buddy:1.9.10
@@ -428,6 +470,8 @@ org.antlr:antlr4-runtime:4.5.2-1
org.antlr:antlr4:4.5.3
org.antlr:antlr-runtime:3.5.2
org.antlr:antlr:3.5.2
org.apache.ant:ant-launcher:1.8.0
org.apache.ant:ant:1.8.0
org.apache.commons:commons-compress:1.8.1
org.apache.commons:commons-compress:1.12
org.apache.commons:commons-lang3:3.3.2
@@ -445,11 +489,26 @@ org.apache.httpcomponents:httpcore:4.4.10
org.apache.httpcomponents:httpmime:4.1
org.apache.httpcomponents:httpmime:4.5.2
org.apache.httpcomponents:httpmime:4.5.6
org.apache.maven.wagon:wagon-file:1.0-beta-6
org.apache.maven.wagon:wagon-http-lightweight:1.0-beta-6
org.apache.maven.wagon:wagon-http-shared:1.0-beta-6
org.apache.maven.wagon:wagon-provider-api:1.0-beta-6
org.apache.maven:maven-ant-tasks:2.1.3
org.apache.maven:maven-artifact-manager:2.2.1
org.apache.maven:maven-artifact:2.2.1
org.apache.maven:maven-error-diagnostics:2.2.1
org.apache.maven:maven-model:2.2.1
org.apache.maven:maven-plugin-registry:2.2.1
org.apache.maven:maven-profile:2.2.1
org.apache.maven:maven-project:2.2.1
org.apache.maven:maven-repository-metadata:2.2.1
org.apache.maven:maven-settings:2.2.1
org.apiguardian:apiguardian-api:1.1.0
org.assertj:assertj-core:3.8.0
org.bouncycastle:bcpkix-jdk15on:1.48
org.bouncycastle:bcpkix-jdk15on:1.56
org.bouncycastle:bcprov-jdk15on:1.48
org.bouncycastle:bcprov-jdk15on:1.52
org.bouncycastle:bcprov-jdk15on:1.56
org.bouncycastle:bcprov-jdk15on:1.60
org.bouncycastle:bcprov-jdk15on:1.65
@@ -457,6 +516,9 @@ org.checkerframework:checker-qual:2.5.2
org.codehaus.groovy:groovy-all:2.4.15
org.codehaus.mojo:animal-sniffer-annotations:1.14
org.codehaus.mojo:animal-sniffer-annotations:1.17
org.codehaus.plexus:plexus-container-default:1.0-alpha-9-stable-1
org.codehaus.plexus:plexus-interpolation:1.11
org.codehaus.plexus:plexus-utils:1.5.15
org.conscrypt:conscrypt-android:2.0.0
org.eclipse.jdt.core.compiler:ecj:4.4
org.eclipse.jdt.core.compiler:ecj:4.4.2
@@ -465,6 +527,7 @@ org.glassfish.jaxb:jaxb-core:2.2.11
org.glassfish.jaxb:jaxb-runtime:2.2.11
org.glassfish.jaxb:txw2:2.2.11
org.hamcrest:hamcrest-core:1.3
org.hamcrest:hamcrest-library:1.3
org.jacoco:org.jacoco.core:0.7.4.201502262128
org.jacoco:org.jacoco.report:0.7.4.201502262128
org.jdom:jdom2:2.0.6
@@ -518,10 +581,12 @@ org.jetbrains.kotlin:kotlin-stdlib-common:1.4.31
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.10
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.31
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.20
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.31
org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0
org.jetbrains.kotlin:kotlin-stdlib-jre8:1.2.0
@@ -549,30 +614,46 @@ org.opentest4j:opentest4j:1.2.0
org.ow2.asm:asm-analysis:5.0.3
org.ow2.asm:asm-analysis:5.1
org.ow2.asm:asm-analysis:6.0
org.ow2.asm:asm-analysis:7.0
org.ow2.asm:asm-analysis:7.2
org.ow2.asm:asm-commons:5.1
org.ow2.asm:asm-commons:6.0
org.ow2.asm:asm-commons:7.0
org.ow2.asm:asm-commons:7.2
org.ow2.asm:asm-debug-all:5.0.1
org.ow2.asm:asm-tree:5.0.3
org.ow2.asm:asm-tree:5.1
org.ow2.asm:asm-tree:6.0
org.ow2.asm:asm-tree:7.0
org.ow2.asm:asm-tree:7.2
org.ow2.asm:asm-util:5.1
org.ow2.asm:asm-util:6.0
org.ow2.asm:asm-util:7.0
org.ow2.asm:asm-util:7.2
org.ow2.asm:asm:5.0.3
org.ow2.asm:asm:5.1
org.ow2.asm:asm:6.0
org.ow2.asm:asm:7.0
org.ow2.asm:asm:7.2
org.robolectric:annotations:4.3
org.robolectric:annotations:4.4
org.robolectric:junit:4.3
org.robolectric:junit:4.4
org.robolectric:pluginapi:4.3
org.robolectric:pluginapi:4.4
org.robolectric:plugins-maven-dependency-resolver:4.3
org.robolectric:plugins-maven-dependency-resolver:4.4
org.robolectric:resources:4.3
org.robolectric:resources:4.4
org.robolectric:robolectric:4.3
org.robolectric:robolectric:4.4
org.robolectric:sandbox:4.3
org.robolectric:sandbox:4.4
org.robolectric:shadowapi:4.3
org.robolectric:shadowapi:4.4
org.robolectric:shadows-framework:4.3
org.robolectric:shadows-framework:4.4
org.robolectric:utils-reflector:4.3
org.robolectric:utils-reflector:4.4
org.robolectric:utils:4.3
org.robolectric:utils:4.4
+246 -25
View File
@@ -67,6 +67,7 @@ https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.0/sav
https://dl.google.com/dl/android/maven2/androidx/slidingpanelayout/slidingpanelayout/1.0.0/slidingpanelayout-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.0.0/swiperefreshlayout-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.1.0/swiperefreshlayout-1.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/test/monitor/1.2.0/monitor-1.2.0.pom
https://dl.google.com/dl/android/maven2/androidx/test/monitor/1.3.0-rc03/monitor-1.3.0-rc03.pom
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.0.0/transition-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.2.0-rc01/transition-1.2.0-rc01.pom
@@ -80,6 +81,7 @@ https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedpa
https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedparcelable/1.1.0/versionedparcelable-1.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/viewpager2/viewpager2/1.0.0/viewpager2-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/webkit/webkit/1.4.0/webkit-1.4.0.pom
https://dl.google.com/dl/android/maven2/android/arch/core/common/1.0.0/common-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.0.0/common-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.0/runtime-1.0.0.pom
@@ -102,6 +104,7 @@ https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/26.0.2/support-annotations-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/27.0.1/support-annotations-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/28.0.0/support-annotations-28.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/26.0.2/support-compat-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/27.0.1/support-compat-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/26.0.2/support-core-ui-26.0.2.pom
@@ -265,22 +268,52 @@ https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.1.4/sdk-
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.2.1/sdk-common-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.3.1/sdk-common-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.5.4/sdk-common-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-api/2.2.0/transport-api-2.2.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-api/2.2.1/transport-api-2.2.1.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-api/3.0.0/transport-api-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-backend-cct/2.3.3/transport-backend-cct-2.3.3.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-backend-cct/3.0.0/transport-backend-cct-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-runtime/2.2.0/transport-runtime-2.2.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-runtime/2.2.5/transport-runtime-2.2.5.pom
https://dl.google.com/dl/android/maven2/com/google/android/datatransport/transport-runtime/3.0.0/transport-runtime-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-cloud-messaging/16.0.0/play-services-cloud-messaging-16.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-cloud-messaging/17.0.0/play-services-cloud-messaging-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-iid/17.0.0/play-services-iid-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/gms/strict-version-matcher-plugin/1.2.2/strict-version-matcher-plugin-1.2.2.pom
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.0.0/material-1.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.2.0-alpha03/material-1.2.0-alpha03.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-annotations/16.0.0/firebase-annotations-16.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/19.5.0/firebase-common-19.5.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-common/20.0.0/firebase-common-20.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-components/16.1.0/firebase-components-16.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-datatransport/17.0.10/firebase-datatransport-17.0.10.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-datatransport/18.0.0/firebase-datatransport-18.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders-json/17.1.0/firebase-encoders-json-17.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders-json/18.0.0/firebase-encoders-json-18.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders/16.1.0/firebase-encoders-16.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-encoders/17.0.0/firebase-encoders-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid-interop/17.1.0/firebase-iid-interop-17.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-iid/21.1.0/firebase-iid-21.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations-interop/16.0.1/firebase-installations-interop-16.0.1.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations-interop/17.0.0/firebase-installations-interop-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations/16.3.5/firebase-installations-16.3.5.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-installations/17.0.0/firebase-installations-17.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-measurement-connector/19.0.0/firebase-measurement-connector-19.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-messaging/21.1.0/firebase-messaging-21.1.0.pom
https://dl.google.com/dl/android/maven2/com/google/firebase/firebase-messaging/23.0.0/firebase-messaging-23.0.0.pom
https://dl.google.com/dl/android/maven2/com/google/gms/google-services/4.3.10/google-services-4.3.10.pom
https://jitpack.io/com/github/status-im/function/0.0.1/function-0.0.1.pom
https://jitpack.io/com/github/status-im/status-keycard-java/android/3.0.4/android-3.0.4.pom
https://jitpack.io/com/github/status-im/status-keycard-java/lib/3.0.4/lib-3.0.4.pom
https://jitpack.io/com/github/wix-playground/ahbottomnavigation/3.3.0/ahbottomnavigation-3.3.0.pom
https://jitpack.io/com/github/wix-playground/reflow-animator/1.0.6/reflow-animator-1.0.6.pom
https://jitpack.io/com/github/yalantis/ucrop/2.2.6-native/ucrop-2.2.6-native.pom
https://plugins.gradle.org/m2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
https://plugins.gradle.org/m2/com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0.pom
https://plugins.gradle.org/m2/com/facebook/flipper/flipper/0.54.0/flipper-0.54.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/drawee/2.2.0/drawee-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/fbcore/2.2.0/fbcore-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/fresco/2.2.0/fresco-2.2.0.pom
@@ -290,15 +323,22 @@ https://plugins.gradle.org/m2/com/facebook/fresco/memory-type-java/2.2.0/memory-
https://plugins.gradle.org/m2/com/facebook/fresco/memory-type-native/2.2.0/memory-type-native-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/nativeimagefilters/2.2.0/nativeimagefilters-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/fresco/stetho/2.2.0/stetho-2.2.0.pom
https://plugins.gradle.org/m2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
https://repo.maven.apache.org/maven2/antlr/antlr/2.7.7/antlr-2.7.7.pom
https://repo.maven.apache.org/maven2/aopalliance/aopalliance/1.0/aopalliance-1.0.pom
https://repo.maven.apache.org/maven2/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.pom
https://repo.maven.apache.org/maven2/classworlds/classworlds/1.1-alpha-2/classworlds-1.1-alpha-2.pom
https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.2/commons-codec-1.2.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.4/commons-codec-1.4.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.6/commons-codec-1.6.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.9/commons-codec-1.9.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.10/commons-codec-1.10.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.15/commons-codec-1.15.pom
https://repo.maven.apache.org/maven2/commons-httpclient/commons-httpclient/3.1/commons-httpclient-3.1.pom
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.pom
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.pom
https://repo.maven.apache.org/maven2/commons-io/commons-io/2.11.0/commons-io-2.11.0.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.0.4/commons-logging-1.0.4.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.pom
https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.pom
https://repo.maven.apache.org/maven2/com/adobe/xmp/xmpcore/5.1.2/xmpcore-5.1.2.pom
@@ -362,7 +402,10 @@ https://repo.maven.apache.org/maven2/com/android/tools/sdk-common/24.3.1/sdk-com
https://repo.maven.apache.org/maven2/com/android/tools/sdk-common/24.5.0/sdk-common-24.5.0.pom
https://repo.maven.apache.org/maven2/com/drewnoakes/metadata-extractor/2.9.1/metadata-extractor-2.9.1.pom
https://repo.maven.apache.org/maven2/com/facebook/conceal/conceal/1.1.3/conceal-1.1.3.pom
https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
https://repo.maven.apache.org/maven2/com/facebook/fbjni/fbjni/0.0.2/fbjni-0.0.2.pom
https://repo.maven.apache.org/maven2/com/facebook/flipper/flipper-fresco-plugin/0.54.0/flipper-fresco-plugin-0.54.0.pom
https://repo.maven.apache.org/maven2/com/facebook/flipper/flipper/0.54.0/flipper-0.54.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-base/2.2.0/animated-base-2.2.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-drawable/2.2.0/animated-drawable-2.2.0.pom
https://repo.maven.apache.org/maven2/com/facebook/fresco/animated-gif/2.2.0/animated-gif-2.2.0.pom
@@ -390,6 +433,7 @@ https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.6.0/soload
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.8.2/soloader-0.8.2.pom
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.9.0/soloader-0.9.0.pom
https://repo.maven.apache.org/maven2/com/facebook/stetho/stetho/1.3.1/stetho-1.3.1.pom
https://repo.maven.apache.org/maven2/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/annotations/4.12.0/annotations-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/compiler/4.12.0/compiler-4.12.0.pom
https://repo.maven.apache.org/maven2/com/github/bumptech/glide/disklrucache/4.12.0/disklrucache-4.12.0.pom
@@ -400,12 +444,16 @@ https://repo.maven.apache.org/maven2/com/github/clans/fab/1.6.4/fab-1.6.4.pom
https://repo.maven.apache.org/maven2/com/github/gundy/semver4j/0.16.4/semver4j-0.16.4.pom
https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.pom
https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.pom
https://repo.maven.apache.org/maven2/com/google/android/apps/common/testing/accessibility/framework/accessibility-test-framework/2.1/accessibility-test-framework-2.1.pom
https://repo.maven.apache.org/maven2/com/google/auto/auto-common/0.8/auto-common-0.8.pom
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/3/auto-parent-3.pom
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/5/auto-parent-5.pom
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/6/auto-parent-6.pom
https://repo.maven.apache.org/maven2/com/google/auto/service/auto-service/1.0-rc4/auto-service-1.0-rc4.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.6.2/auto-value-annotations-1.6.2.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.8.2/auto-value-annotations-1.8.2.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.9/auto-value-annotations-1.9.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.6.2/auto-value-parent-1.6.2.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.8.2/auto-value-parent-1.8.2.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.9/auto-value-parent-1.9.pom
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2/auto-value-1.5.2.pom
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.pom
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.pom
@@ -421,17 +469,19 @@ https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.pom
https://repo.maven.apache.org/maven2/com/google/dagger/dagger/2.24/dagger-2.24.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.10.0/error_prone_annotations-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.11.0/error_prone_annotations-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.10.0/error_prone_parent-2.10.0.pom
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.11.0/error_prone_parent-2.11.0.pom
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
https://repo.maven.apache.org/maven2/com/google/google/5/google-5.pom
https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-parent-17.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom
@@ -448,12 +498,15 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-jre/guava-26.0-
https://repo.maven.apache.org/maven2/com/google/guava/guava/27.0.1-jre/guava-27.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/31.0.1-jre/guava-31.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
https://repo.maven.apache.org/maven2/com/google/inject/guice-parent/5.1.0/guice-parent-5.1.0.pom
https://repo.maven.apache.org/maven2/com/google/inject/guice/5.1.0/guice-5.1.0.pom
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.pom
https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs-parent/1.1/jimfs-parent-1.1.pom
https://repo.maven.apache.org/maven2/com/google/jimfs/jimfs/1.1/jimfs-1.1.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-bom/4.0.0-rc-2/protobuf-bom-4.0.0-rc-2.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java-util/3.4.0/protobuf-java-util-3.4.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/2.6.1/protobuf-java-2.6.1.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.0.0/protobuf-java-3.0.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/3.4.0/protobuf-java-3.4.0.pom
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.0.0-rc-2/protobuf-java-4.0.0-rc-2.pom
@@ -472,17 +525,17 @@ https://repo.maven.apache.org/maven2/com/parse/bolts/bolts-tasks/1.4.0/bolts-tas
https://repo.maven.apache.org/maven2/com/squareup/assertj/assertj-android/1.1.1/assertj-android-1.1.1.pom
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-tls/3.12.12/okhttp-tls-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3.12.12/okhttp-urlconnection-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.9.1/okhttp-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.12/okhttp-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.2/okhttp-5.0.0-alpha.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/5.0.0-alpha.5/okhttp-5.0.0-alpha.5.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.9.1/parent-3.9.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-3.12.12.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0/okio-3.0.0.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/2.0.1/all-2.0.1.pom
@@ -513,20 +566,28 @@ https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3.pom
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/4.0.2/gradle-download-task-4.0.2.pom
https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
https://repo.maven.apache.org/maven2/jakarta/activation/jakarta.activation-api/2.1.0-RC1/jakarta.activation-api-2.1.0-RC1.pom
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC2/jakarta.xml.bind-api-parent-4.0.0-RC2.pom
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC2/jakarta.xml.bind-api-4.0.0-RC2.pom
https://repo.maven.apache.org/maven2/jakarta/activation/jakarta.activation-api/2.1.0/jakarta.activation-api-2.1.0.pom
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/4.0.0-RC3/jakarta.xml.bind-api-parent-4.0.0-RC3.pom
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/4.0.0-RC3/jakarta.xml.bind-api-4.0.0-RC3.pom
https://repo.maven.apache.org/maven2/javax/activation/activation/1.1/activation-1.1.pom
https://repo.maven.apache.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.pom
https://repo.maven.apache.org/maven2/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.pom
https://repo.maven.apache.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.pom
https://repo.maven.apache.org/maven2/javax/el/javax.el-api/3.0.1-b06/javax.el-api-3.0.1-b06.pom
https://repo.maven.apache.org/maven2/javax/enterprise/cdi-api/1.2/cdi-api-1.2.pom
https://repo.maven.apache.org/maven2/javax/enterprise/cdi-api/2.0-PFD2/cdi-api-2.0-PFD2.pom
https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom
https://repo.maven.apache.org/maven2/javax/interceptor/javax.interceptor-api/1.2.2/javax.interceptor-api-1.2.2.pom
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api-parent/2.4.0-b180830.0359/jaxb-api-parent-2.4.0-b180830.0359.pom
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jaxb-api-2.2.12-b140109.1041.pom
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.4.0-b180830.0359/jaxb-api-2.4.0-b180830.0359.pom
https://repo.maven.apache.org/maven2/javax/xml/stream/stax-api/1.0-2/stax-api-1.0-2.pom
https://repo.maven.apache.org/maven2/junit/junit/3.8.1/junit-3.8.1.pom
https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.pom
https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom
https://repo.maven.apache.org/maven2/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom
https://repo.maven.apache.org/maven2/nekohtml/nekohtml/1.9.6.2/nekohtml-1.9.6.2.pom
https://repo.maven.apache.org/maven2/nekohtml/xercesMinimal/1.9.6.2/xercesMinimal-1.9.6.2.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.9.0/byte-buddy-agent-1.9.0.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.9.10/byte-buddy-agent-1.9.10.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18.pom
@@ -569,18 +630,27 @@ https://repo.maven.apache.org/maven2/org/antlr/antlr-master/3.5.2/antlr-master-3
https://repo.maven.apache.org/maven2/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.pom
https://repo.maven.apache.org/maven2/org/antlr/antlr/3.5.2/antlr-3.5.2.pom
https://repo.maven.apache.org/maven2/org/antlr/stringtemplate/3.2.1/stringtemplate-3.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/ant/ant-launcher/1.8.0/ant-launcher-1.8.0.pom
https://repo.maven.apache.org/maven2/org/apache/ant/ant-parent/1.8.0/ant-parent-1.8.0.pom
https://repo.maven.apache.org/maven2/org/apache/ant/ant/1.8.0/ant-1.8.0.pom
https://repo.maven.apache.org/maven2/org/apache/apache/1/apache-1.pom
https://repo.maven.apache.org/maven2/org/apache/apache/3/apache-3.pom
https://repo.maven.apache.org/maven2/org/apache/apache/4/apache-4.pom
https://repo.maven.apache.org/maven2/org/apache/apache/5/apache-5.pom
https://repo.maven.apache.org/maven2/org/apache/apache/9/apache-9.pom
https://repo.maven.apache.org/maven2/org/apache/apache/13/apache-13.pom
https://repo.maven.apache.org/maven2/org/apache/apache/15/apache-15.pom
https://repo.maven.apache.org/maven2/org/apache/apache/16/apache-16.pom
https://repo.maven.apache.org/maven2/org/apache/apache/18/apache-18.pom
https://repo.maven.apache.org/maven2/org/apache/apache/19/apache-19.pom
https://repo.maven.apache.org/maven2/org/apache/apache/21/apache-21.pom
https://repo.maven.apache.org/maven2/org/apache/apache/23/apache-23.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.8.1/commons-compress-1.8.1.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-compress/1.12/commons-compress-1.12.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.3.2/commons-lang3-3.3.2.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.9/commons-lang3-3.9.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-lang3/3.12.0/commons-lang3-3.12.0.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/5/commons-parent-5.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/11/commons-parent-11.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/22/commons-parent-22.pom
@@ -590,8 +660,13 @@ https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/33/common
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/34/commons-parent-34.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/35/commons-parent-35.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/39/commons-parent-39.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/42/commons-parent-42.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/47/commons-parent-47.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/48/commons-parent-48.pom
https://repo.maven.apache.org/maven2/org/apache/commons/commons-parent/52/commons-parent-52.pom
https://repo.maven.apache.org/maven2/org/apache/geronimo/genesis/genesis-default-flava/2.3/genesis-default-flava-2.3.pom
https://repo.maven.apache.org/maven2/org/apache/geronimo/genesis/genesis-java8-flava/2.3/genesis-java8-flava-2.3.pom
https://repo.maven.apache.org/maven2/org/apache/geronimo/genesis/genesis/2.3/genesis-2.3.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.1.1/httpclient-4.1.1.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.2.6/httpclient-4.2.6.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpclient/4.5.2/httpclient-4.5.2.pom
@@ -610,7 +685,7 @@ https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-co
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.5/httpcomponents-core-4.4.5.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.6/httpcomponents-core-4.4.6.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.10/httpcomponents-core-4.4.10.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.14/httpcomponents-core-4.4.14.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-core/4.4.15/httpcomponents-core-4.4.15.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-parent/10/httpcomponents-parent-10.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcomponents-parent/11/httpcomponents-parent-11.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.1/httpcore-4.1.pom
@@ -618,12 +693,64 @@ https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.2.5/ht
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.5/httpcore-4.4.5.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.6/httpcore-4.4.6.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.10/httpcore-4.4.10.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.14/httpcore-4.4.14.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpcore/4.4.15/httpcore-4.4.15.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.1/httpmime-4.1.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.5.2/httpmime-4.5.2.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.5.6/httpmime-4.5.6.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1.1/project-4.1.1.pom
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/7/project-7.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-ant-tasks/2.1.3/maven-ant-tasks-2.1.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact-manager/2.2.1/maven-artifact-manager-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/2.2.1/maven-artifact-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-artifact/3.8.4/maven-artifact-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-builder-support/3.8.4/maven-builder-support-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.8.4/maven-compat-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/3.8.4/maven-core-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-error-diagnostics/2.2.1/maven-error-diagnostics-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-model-builder/3.8.4/maven-model-builder-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/2.2.1/maven-model-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-model/3.8.4/maven-model-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/10/maven-parent-10.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/11/maven-parent-11.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/19/maven-parent-19.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-parent/34/maven-parent-34.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/3.8.4/maven-plugin-api-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-registry/2.2.1/maven-plugin-registry-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-profile/2.2.1/maven-profile-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-project-builder/3.0-alpha-2/maven-project-builder-3.0-alpha-2.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/2.2.1/maven-project-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-project/3.0-alpha-2/maven-project-3.0-alpha-2.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/2.2.1/maven-repository-metadata-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-repository-metadata/3.8.4/maven-repository-metadata-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-resolver-provider/3.8.4/maven-resolver-provider-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings-builder/3.8.4/maven-settings-builder-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/2.2.1/maven-settings-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven-settings/3.8.4/maven-settings-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven/2.2.1/maven-2.2.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven/3.0-alpha-2/maven-3.0-alpha-2.pom
https://repo.maven.apache.org/maven2/org/apache/maven/maven/3.8.4/maven-3.8.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-api/1.7.3/maven-resolver-api-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-impl/1.7.3/maven-resolver-impl-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-named-locks/1.7.3/maven-resolver-named-locks-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-spi/1.7.3/maven-resolver-spi-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver-util/1.7.3/maven-resolver-util-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/resolver/maven-resolver/1.7.3/maven-resolver-1.7.3.pom
https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-components/34/maven-shared-components-34.pom
https://repo.maven.apache.org/maven2/org/apache/maven/shared/maven-shared-utils/3.3.4/maven-shared-utils-3.3.4.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-file/1.0-beta-6/wagon-file-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-file/3.5.1/wagon-file-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/1.0-beta-6/wagon-http-lightweight-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-http-lightweight/3.5.1/wagon-http-lightweight-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-http-shared/1.0-beta-6/wagon-http-shared-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-http-shared/3.5.1/wagon-http-shared-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-beta-6/wagon-providers-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-providers/3.5.1/wagon-providers-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/1.0-beta-6/wagon-provider-api-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon-provider-api/3.5.1/wagon-provider-api-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/1.0-beta-6/wagon-1.0-beta-6.pom
https://repo.maven.apache.org/maven2/org/apache/maven/wagon/wagon/3.5.1/wagon-3.5.1.pom
https://repo.maven.apache.org/maven2/org/apache/xbean/xbean-reflect/4.20/xbean-reflect-4.20.pom
https://repo.maven.apache.org/maven2/org/apache/xbean/xbean/4.20/xbean-4.20.pom
https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.pom
https://repo.maven.apache.org/maven2/org/assertj/assertj-core/1.7.1/assertj-core-1.7.1.pom
https://repo.maven.apache.org/maven2/org/assertj/assertj-core/3.8.0/assertj-core-3.8.0.pom
@@ -632,22 +759,63 @@ https://repo.maven.apache.org/maven2/org/assertj/assertj-parent-pom/2.1.6/assert
https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.52/bcprov-jdk15on-1.52.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.pom
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.70/bcprov-jdk15on-1.70.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.19.0/checker-qual-3.19.0.pom
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.21.2/checker-qual-3.21.2.pom
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.17/animal-sniffer-annotations-1.17.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.20/animal-sniffer-annotations-1.20.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.21/animal-sniffer-annotations-1.21.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.14/animal-sniffer-parent-1.14.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.17/animal-sniffer-parent-1.17.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.20/animal-sniffer-parent-1.20.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-parent/1.21/animal-sniffer-parent-1.21.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/34/mojo-parent-34.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/40/mojo-parent-40.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/61/mojo-parent-61.pom
https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/65/mojo-parent-65.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-cipher/2.0/plexus-cipher-2.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-classworlds/2.4/plexus-classworlds-2.4.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-components/1.1.14/plexus-components-1.1.14.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.5.6/plexus-component-annotations-1.5.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/1.6/plexus-component-annotations-1.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/2.1.0/plexus-component-annotations-2.1.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-component-annotations/2.1.1/plexus-component-annotations-2.1.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.0.3/plexus-containers-1.0.3.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.5.6/plexus-containers-1.5.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/1.6/plexus-containers-1.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/2.1.0/plexus-containers-2.1.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-containers/2.1.1/plexus-containers-2.1.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/1.0-alpha-9-stable-1/plexus-container-default-1.0-alpha-9-stable-1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-container-default/2.1.1/plexus-container-default-2.1.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.11/plexus-interpolation-1.11.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-interpolation/1.26/plexus-interpolation-1.26.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-sec-dispatcher/2.0/plexus-sec-dispatcher-2.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.0.4/plexus-utils-1.0.4.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/1.5.15/plexus-utils-1.5.15.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/2.0.5/plexus-utils-2.0.5.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.18/plexus-utils-3.0.18.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus-utils/3.4.1/plexus-utils-3.4.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/1.0.4/plexus-1.0.4.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/2.0.2/plexus-2.0.2.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/2.0.6/plexus-2.0.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/3.3.2/plexus-3.3.2.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/4.0/plexus-4.0.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/5.1/plexus-5.1.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/6.5/plexus-6.5.pom
https://repo.maven.apache.org/maven2/org/codehaus/plexus/plexus/8/plexus-8.pom
https://repo.maven.apache.org/maven2/org/codehaus/woodstox/wstx-asl/3.2.6/wstx-asl-3.2.6.pom
https://repo.maven.apache.org/maven2/org/codehaus/woodstox/wstx-asl/4.0.6/wstx-asl-4.0.6.pom
https://repo.maven.apache.org/maven2/org/conscrypt/conscrypt-android/2.0.0/conscrypt-android-2.0.0.pom
https://repo.maven.apache.org/maven2/org/easymock/easymockclassextension/3.2/easymockclassextension-3.2.pom
https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/3.2/easymock-parent-3.2.pom
@@ -658,6 +826,10 @@ https://repo.maven.apache.org/maven2/org/eclipse/ee4j/project/1.0.7/project-1.0.
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.pom
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.4/ecj-4.4.pom
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.pom
https://repo.maven.apache.org/maven2/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.pom
https://repo.maven.apache.org/maven2/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.pom
https://repo.maven.apache.org/maven2/org/eclipse/sisu/sisu-inject/0.3.5/sisu-inject-0.3.5.pom
https://repo.maven.apache.org/maven2/org/eclipse/sisu/sisu-plexus/0.3.5/sisu-plexus-0.3.5.pom
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/2.2.11/jaxb-bom-2.2.11.pom
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/3.0.2/jaxb-bom-3.0.2.pom
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2.2.11.pom
@@ -667,6 +839,7 @@ https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/3.0.2/txw2-3.0.2.pom
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.pom
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-library/1.3/hamcrest-library-1.3.pom
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest/2.2/hamcrest-2.2.pom
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.4.201502262128/org.jacoco.build-0.7.4.201502262128.pom
@@ -674,6 +847,8 @@ https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.8.7/org.jacoc
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128.pom
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.7/org.jacoco.core-0.8.7.pom
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262128/org.jacoco.report-0.7.4.201502262128.pom
https://repo.maven.apache.org/maven2/org/jboss/weld/weld-parent/26/weld-parent-26.pom
https://repo.maven.apache.org/maven2/org/jboss/weld/weld-parent/36/weld-parent-36.pom
https://repo.maven.apache.org/maven2/org/jdom/jdom2/2.0.6/jdom2-2.0.6.pom
https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.pom
@@ -728,17 +903,19 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.50/kotlin-stdlib-common-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.10/kotlin-stdlib-common-1.4.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.21/kotlin-stdlib-common-1.4.21.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.5.31/kotlin-stdlib-common-1.5.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.6.10/kotlin-stdlib-common-1.6.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.10/kotlin-stdlib-jdk7-1.4.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.31/kotlin-stdlib-jdk7-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50/kotlin-stdlib-jdk8-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.10/kotlin-stdlib-jdk8-1.4.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.31/kotlin-stdlib-jdk8-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom
@@ -752,7 +929,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/k
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotlin-stdlib-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.10/kotlin-stdlib-1.4.10.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.21/kotlin-stdlib-1.4.21.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.30/kotlin-stdlib-1.4.30.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.31/kotlin-stdlib-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31.pom
@@ -762,6 +938,9 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.4.31/
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.4.31/kotlin-util-klib-1.4.31.pom
https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.0/junit-bom-5.7.0.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.1/junit-bom-5.7.1.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.2/junit-bom-5.7.2.pom
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.8.2/junit-bom-5.8.2.pom
https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.pom
https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.pom
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
@@ -779,10 +958,12 @@ https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.0/asm-analysis-7.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.2/asm-analysis-7.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/9.2/asm-analysis-9.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.0/asm-commons-7.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.2/asm-commons-7.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.2/asm-commons-9.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.pom
@@ -795,33 +976,73 @@ https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/6.0_BETA/asm-parent-
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.0/asm-tree-7.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.2/asm-tree-7.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.2/asm-tree-9.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/6.0/asm-util-6.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.0/asm-util-7.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.2/asm-util-7.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/6.0/asm-6.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.0/asm-7.0.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.2/asm-7.2.pom
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.2/asm-9.2.pom
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.5/ow2-1.5.pom
https://repo.maven.apache.org/maven2/org/robolectric/annotations/4.3/annotations-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/annotations/4.4/annotations-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/junit/4.3/junit-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/junit/4.4/junit-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/pluginapi/4.3/pluginapi-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/pluginapi/4.4/pluginapi-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/plugins-maven-dependency-resolver/4.3/plugins-maven-dependency-resolver-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/plugins-maven-dependency-resolver/4.4/plugins-maven-dependency-resolver-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/resources/4.3/resources-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/resources/4.4/resources-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/robolectric/4.3/robolectric-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/robolectric/4.4/robolectric-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/sandbox/4.3/sandbox-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/sandbox/4.4/sandbox-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/shadowapi/4.3/shadowapi-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/shadowapi/4.4/shadowapi-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/shadows-framework/4.3/shadows-framework-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/shadows-framework/4.4/shadows-framework-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils-reflector/4.3/utils-reflector-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils-reflector/4.4/utils-reflector-4.4.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils/4.3/utils-4.3.pom
https://repo.maven.apache.org/maven2/org/robolectric/utils/4.4/utils-4.4.pom
https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/2.0.0-alpha5/jcl-over-slf4j-2.0.0-alpha5.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/2.0.0-alpha5/slf4j-api-2.0.0-alpha5.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/2.0.0-alpha5/slf4j-jdk14-2.0.0-alpha5.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/2.0.0-alpha5/slf4j-parent-2.0.0-alpha5.pom
https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/2.0.0-alpha6/jcl-over-slf4j-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/jul-to-slf4j/2.0.0-alpha6/jul-to-slf4j-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/2.0.0-alpha6/slf4j-api-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/2.0.0-alpha6/slf4j-jdk14-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/2.0.0-alpha6/slf4j-parent-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-simple/2.0.0-alpha6/slf4j-simple-2.0.0-alpha6.pom
https://repo.maven.apache.org/maven2/org/sonatype/buildsupport/buildsupport/5/buildsupport-5.pom
https://repo.maven.apache.org/maven2/org/sonatype/buildsupport/buildsupport/12/buildsupport-12.pom
https://repo.maven.apache.org/maven2/org/sonatype/buildsupport/public-parent/5/public-parent-5.pom
https://repo.maven.apache.org/maven2/org/sonatype/buildsupport/public-parent/12/public-parent-12.pom
https://repo.maven.apache.org/maven2/org/sonatype/forge/forge-parent/3/forge-parent-3.pom
https://repo.maven.apache.org/maven2/org/sonatype/forge/forge-parent/6/forge-parent-6.pom
https://repo.maven.apache.org/maven2/org/sonatype/forge/forge-parent/10/forge-parent-10.pom
https://repo.maven.apache.org/maven2/org/sonatype/forge/forge-parent/38/forge-parent-38.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/inject/cglib/3.1.1/cglib-3.1.1.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/inject/guice-parent/2.9.4/guice-parent-2.9.4.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/inject/guice-parent/4.2.0/guice-parent-4.2.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/inject/wrappers/2.6.0/wrappers-2.6.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-guice/2.9.4/sisu-guice-2.9.4.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-guice/4.2.0/sisu-guice-4.2.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-inject-bean/2.6.0/sisu-inject-bean-2.6.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-inject-plexus/2.6.0/sisu-inject-plexus-2.6.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-inject/2.6.0/sisu-inject-2.6.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-parent/2.6.0/sisu-parent-2.6.0.pom
https://repo.maven.apache.org/maven2/org/sonatype/spice/model-builder/1.10/model-builder-1.10.pom
https://repo.maven.apache.org/maven2/org/sonatype/spice/spice-parent/10/spice-parent-10.pom
https://repo.maven.apache.org/maven2/org/sonatype/spice/spice-parent/17/spice-parent-17.pom
https://repo.maven.apache.org/maven2/stax/stax-api/1.0.1/stax-api-1.0.1.pom
https://repo.maven.apache.org/maven2/xerces/xercesImpl/2.8.1/xercesImpl-2.8.1.pom
https://repo.maven.apache.org/maven2/xml-apis/xml-apis/1.3.03/xml-apis-1.3.03.pom
+2
View File
@@ -1,5 +1,6 @@
app
react-native-background-timer
react-native-blob-util
react-native-camera-kit
react-native-community_async-storage
react-native-community_audio-toolkit
@@ -24,6 +25,7 @@ react-native-linear-gradient
react-native-mail
react-native-navigation
react-native-nfc-manager
react-native-notifications
react-native-permissions
react-native-reanimated
react-native-safe-area-context
+10 -4
View File
@@ -13,6 +13,7 @@
"dependencies": {
"@react-native-community/async-storage": "^1.11.0",
"@react-native-community/audio-toolkit": "git+https://github.com/tbenr/react-native-audio-toolkit.git#v2.0.3-status-v6",
"@react-native-community/blur": "^3.6.0",
"@react-native-community/cameraroll": "git+https://github.com/status-im/react-native-cameraroll.git#v4.0.4-status.0",
"@react-native-community/clipboard": "^1.2.2",
"@react-native-community/hooks": "^2.5.1",
@@ -20,6 +21,7 @@
"@react-native-community/netinfo": "^4.4.0",
"@react-native-community/push-notification-ios": "^1.4.1",
"@react-native-community/slider": "^3.0.0",
"@walletconnect/client": "^2.0.0-beta.23",
"bignumber.js": "git+https://github.com/status-im/bignumber.js.git#v4.0.2-status",
"buffer": "^5.4.2",
"chance": "^1.1.0",
@@ -27,33 +29,37 @@
"emojilib": "^2.4.0",
"eth-phishing-detect": "^1.1.13",
"functional-red-black-tree": "^1.0.1",
"hermes-engine": "0.5.2-rc1",
"hi-base32": "^0.5.0",
"i18n-js": "^3.3.0",
"node-libs-react-native": "^1.2.1",
"qrcode": "^1.4.1",
"react": "16.13.1",
"react-dom": "^16.4.2",
"react-native": "0.63.4",
"react-native-background-timer": "^2.1.1",
"react-native-blob-util": "^0.13.18",
"react-native-camera-kit": "^8.0.4",
"react-native-config": "git+https://github.com/status-im/react-native-config.git#v1.4.2-status",
"react-native-dark-mode": "^0.2.2",
"react-native-device-info": "^7.4.0",
"react-native-dialogs": "^1.0.4",
"react-native-draggable-flatlist": "^3.0.3",
"react-native-fast-image": "8.5.11",
"react-native-fast-image": "^8.5.11",
"react-native-fetch-polyfill": "^1.1.2",
"react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.8.0",
"react-native-haptic-feedback": "^1.9.0",
"react-native-image-crop-picker": "git+https://github.com/status-im/react-native-image-crop-picker.git#v0.36.2-status.0",
"react-native-image-resizer": "^1.2.3",
"react-native-image-viewing": "git+https://github.com/Ferossgp/react-native-image-viewing.git#v0.2.1",
"react-native-image-viewing": "git+https://github.com/status-im/react-native-image-viewing.git#v0.2.1.status",
"react-native-keychain": "git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status",
"react-native-languages": "^3.0.2",
"react-native-linear-gradient": "^2.5.6",
"react-native-mail": "^6.1.1",
"react-native-navigation": "^7.13.0",
"react-native-notifications": "^4.1.3",
"react-native-permissions": "^2.1.5",
"react-native-randombytes": "^3.6.1",
"react-native-reanimated": "^2.1.0",
"react-native-redash": "^16.0.11",
"react-native-safe-area-context": "^2.0.0",
@@ -63,7 +69,7 @@
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.37",
"react-native-svg": "^9.8.4",
"react-native-touch-id": "^4.4.1",
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v11.3.0-status",
"react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v11.16.0-status",
"rn-emoji-keyboard": "git+https://github.com/status-im/rn-emoji-keyboard.git#v0.4.2",
"tdigest": "^0.1.1",
"web3-utils": "^1.2.1"
+5
View File
@@ -22,5 +22,10 @@ module.exports = {
ios: null,
},
},
'@react-native-community/blur': {
platforms: {
android: null,
},
},
},
};
Binary file not shown.

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 637 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 539 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 338 B

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 467 B

After

Width:  |  Height:  |  Size: 323 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 338 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 467 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

+2
View File
@@ -107,6 +107,7 @@
}
else
{
if (window.statusAppDebug) { console.log("resolve " + callback.method + " :" + JSON.stringify(data.result.result)); }
callback.resolve(data.result.result);
}
}
@@ -239,6 +240,7 @@
return new Promise(function (resolve, reject) {
callbacks[messageId] = {beta: true,
method: method,
resolve: resolve,
reject: reject};
});
+10
View File
@@ -0,0 +1,10 @@
#!/usr/bin/env bash
set -e
# Used by Clojure to condition code and Gradle to make dependencies optional
sed -i -e '$aGOOGLE_FREE=1' .env.release
# remove react-native-notifications(uses google dependencies) and google-services.json for the fdroid-build
yarn remove react-native-notifications
rm android/app/google-services.json
+21
View File
@@ -0,0 +1,21 @@
#!/usr/bin/env bash
set -euo pipefail
if [[ -z $(git diff --cached --name-only -r | grep status-go-version.json) ]]; then
exit 0 # No status-go-version.json changes found.
fi
MERGE_BASE=$(git merge-base -a develop "$(git rev-parse --abbrev-ref HEAD)" develop)
GO_COMMIT_MERGE_BASE=$(git show "${MERGE_BASE}":status-go-version.json | jq -r '."commit-sha1"')
GO_COMMIT_CURRENT=$(jq -r '."commit-sha1"' status-go-version.json)
GITHUB_LINK_PREFIX="https://github.com/status-im/status-go/compare/"
# Link to the current StatusGo changelog being updated.
GITHUB_LINK="${GITHUB_LINK_PREFIX}${GO_COMMIT_MERGE_BASE}...${GO_COMMIT_CURRENT}"
COMMIT_MSG_FILE=$1
# Check if the commit message already contains the link (rebase) and update otherwise insert into line2
if ! grep -qF "${GITHUB_LINK_PREFIX}" "${COMMIT_MSG_FILE}" >/dev/null; then
sed -in "2i${GITHUB_LINK}\n" "${COMMIT_MSG_FILE}"
else
sed -in "s;^${GITHUB_LINK_PREFIX}.*$;${GITHUB_LINK};" "${COMMIT_MSG_FILE}"
fi
+6
View File
@@ -52,6 +52,12 @@ fi
if [[ -n "${INFURA_TOKEN}" ]]; then
append_env_export 'INFURA_TOKEN'
fi
# Used by Clojure at compile time for remove import of react-native-notifications for fdroid release
if [[ -n "${READER_FEATURES}" ]]; then
append_env_export 'READER_FEATURES'
fi
# If no secrets were passed there's no need to pass the 'secretsFile'.
if [[ -s "${SECRETS_FILE_PATH}" ]]; then
nixOpts+=("--argstr" "secretsFile" "${SECRETS_FILE_PATH}")
+2 -1
View File
@@ -64,7 +64,8 @@
:static-fns true
:fn-invoke-direct true
:optimizations :advanced
:js-options {:js-provider :closure}}}}
:js-options {:js-provider :closure}
:reader-features #{#shadow/env ["READER_FEATURES" :as :keyword :default :cljs]}}}}
;; the tests are ran with node, react-native dependencies are mocked
;; by using node --require override.js, which uses the node-library
;; produced by the target :mocks below and redefines node require
+19 -3
View File
@@ -67,7 +67,9 @@
:Properties #{}
:create (fn [])
:configureNext (fn [])}
:requireNativeComponent (fn [] {:propTypes ""})}))
:requireNativeComponent (fn [] {:propTypes ""})
:Appearance {:getColorScheme (fn [])
:addChangeListener (fn [])}}))
(set! js/ReactNative react-native)
@@ -100,7 +102,6 @@
(def safe-area-context (clj->js {:SafeAreaProvider {:_reactNativeIphoneXHelper {:getStatusBarHeight (fn [])}}
:SafeAreaInsetsContext {:Consumer (fn [])}
:SafeAreaView {}}))
(def react-native-dark-mode #js {"eventEmitter" {} "initialMode" {}})
(def back-handler #js {:addEventListener identity
:removeEventListener identity})
@@ -209,6 +210,19 @@
(def react-native-draggable-flatlist
#js {:default #js {}})
(def react-native-notifications
#js {:Notifications #js {}})
(def react-native-blur
(clj->js {:BlurView {}}))
(def wallet-connect-client #js {:default #js {}
:CLIENT_EVENTS #js {:session #js {:request nil
:created nil
:deleted nil
:proposal nil
:updated nil}}})
;; Update i18n_resources.cljs
(defn mock [module]
(case module
@@ -218,7 +232,6 @@
"react-native-gesture-handler" react-native-gesture-handler
"react-native-safe-area-context" safe-area-context
"react-native-config" config
"react-native-dark-mode" react-native-dark-mode
"react-native-iphone-x-helper" (clj->js {:getStatusBarHeight (fn [])
:getBottomSpace (fn [])})
"react-native-screens" (clj->js {})
@@ -240,11 +253,14 @@
"react-native-linear-gradient" react-native-gradien
"react-native-navigation" react-native-navigation
"@react-native-community/push-notification-ios" push-notification-ios
"@react-native-community/blur" react-native-blur
"react-native-camera-kit" react-native-camera-kit
"rn-emoji-keyboard" rn-emoji-keyboard
"react-native-notifications" react-native-notifications
"react-native-draggable-flatlist" react-native-draggable-flatlist
"./fleets.js" default-fleets
"./chats.js" default-chats
"@walletconnect/client" wallet-connect-client
"../translations/ar.json" (js/JSON.parse (slurp "./translations/ar.json"))
"../translations/de.json" (js/JSON.parse (slurp "./translations/de.json"))
"../translations/en.json" (js/JSON.parse (slurp "./translations/en.json"))
+5 -1
View File
@@ -57,6 +57,8 @@
(defn pressable-hooks [props]
(let [{background-color :bgColor
border-radius :borderRadius
border-color :borderColor
border-width :borderWidth
type :type
disabled :disabled
on-press :onPress
@@ -121,7 +123,9 @@
[animated/view {:style (merge absolute-fill
background
{:background-color background-color
:border-radius border-radius})}]
:border-radius border-radius
:border-color border-color
:border-width border-width})}]
(into [animated/view {:style foreground}]
(react/get-children children))]]]])))
+29 -22
View File
@@ -28,27 +28,31 @@
(defn themes [theme]
(case theme
:main {:icon-color (:icon-04 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-04 @colors/theme)}
:icon {:icon-color (:icon-01 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-01 @colors/theme)}
:negative {:icon-color (:negative-01 @colors/theme)
:background-color (:negative-02 @colors/theme)
:text-color (:negative-01 @colors/theme)}
:positive {:icon-color (:positive-01 @colors/theme)
:background-color (:positive-02 @colors/theme)
:text-color (:positive-01 @colors/theme)}
:accent {:icon-color (:icon-05 @colors/theme)
:background-color (:interactive-01 @colors/theme)
:text-color (:text-05 @colors/theme)}
:secondary {:icon-color (:icon-02 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-02 @colors/theme)}
:disabled {:icon-color (:icon-02 @colors/theme)
:background-color (:ui-01 @colors/theme)
:text-color (:text-02 @colors/theme)}))
:main {:icon-color (:icon-04 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-04 @colors/theme)}
:icon {:icon-color (:icon-01 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-01 @colors/theme)}
:negative {:icon-color (:negative-01 @colors/theme)
:background-color (:negative-02 @colors/theme)
:text-color (:negative-01 @colors/theme)}
:positive {:icon-color (:positive-01 @colors/theme)
:background-color (:positive-02 @colors/theme)
:text-color (:positive-01 @colors/theme)}
:accent {:icon-color (:icon-05 @colors/theme)
:background-color (:interactive-01 @colors/theme)
:text-color (:text-05 @colors/theme)}
:secondary {:icon-color (:icon-02 @colors/theme)
:background-color (:interactive-02 @colors/theme)
:text-color (:text-02 @colors/theme)}
:disabled {:icon-color (:icon-02 @colors/theme)
:background-color (:ui-01 @colors/theme)
:text-color (:text-02 @colors/theme)}
:monocromatic {:icon-color (:icon-01 @colors/theme)
:background-color (:ui-background @colors/theme)
:text-color (:text-01 @colors/theme)
:border-color (:ui-01 @colors/theme)}))
(defn button [{:keys [on-press disabled type theme before after
haptic-feedback haptic-type on-long-press on-press-start
@@ -62,7 +66,7 @@
(let [theme' (cond
disabled :disabled
:else theme)
{:keys [icon-color background-color text-color]}
{:keys [icon-color background-color text-color border-color]}
(themes theme')
optional-haptic (fn []
@@ -73,6 +77,9 @@
:type type
:disabled disabled
:accessibility-label accessibility-label}
(when border-color
{:border-color border-color
:border-width 1})
(when on-press
{:on-press (fn []
(optional-haptic)
+6 -2
View File
@@ -20,6 +20,7 @@
(def light-theme
{:positive-01 "rgba(68,208,88,1)" ; Primary Positive, text, icons color
:positive-02 "rgba(78,188,96,0.1)" ; Secondary Positive, Supporting color for success illustrations
:positive-03 "rgba(78,188,96,1)" ; Lighter Positive, Supporting color for success illustrations
:negative-01 "rgba(255,45,85,1)" ; Primary Negative, text, icons color
:negative-02 "rgba(255,45,85,0.1))" ; Secondary Negative, Supporting color for errors illustrations
:warning-01 "rgba(255, 202, 15, 1)"
@@ -46,11 +47,13 @@
:backdrop "rgba(0,0,0,0.4)" ; Backdrop for modals and bottom sheet
:border-01 "rgba(238,242,245,1)"
:border-02 "rgba(67, 96, 223, 0.1)"
:highlight "rgba(67,96,223,0.4)"})
:highlight "rgba(67,96,223,0.4)"
:blurred-bg "rgba(255,255,255,0.3)"})
(def dark-theme
{:positive-01 "rgba(68,208,88,1)"
:positive-02 "rgba(78,188,96,0.1)"
:positive-03 "rgba(78,188,96,1)"
:negative-01 "rgba(252,95,95,1)"
:negative-02 "rgba(252,95,95,0.1)"
:warning-01 "rgba(255, 202, 15, 1)"
@@ -77,7 +80,8 @@
:backdrop "rgba(0,0,0,0.4)"
:border-01 "rgba(37,37,40,1)"
:border-02 "rgba(97,119,229,0.1)"
:highlight "rgba(67,96,223,0.4)"})
:highlight "rgba(67,96,223,0.4)"
:blurred-bg "rgba(0,0,0,0.3)"})
(def theme (reagent/atom light-theme))
+9 -3
View File
@@ -1,8 +1,14 @@
(ns quo.theme
(:require [quo.design-system.colors :as colors]))
(defn set-theme [theme]
(reset! colors/theme (case theme
(def theme (atom nil))
(defn get-theme []
@theme)
(defn set-theme [value]
(reset! theme value)
(reset! colors/theme (case value
:dark colors/dark-theme
colors/light-theme))
(colors/set-legacy-theme-type theme))
(colors/set-legacy-theme-type value))
+144
View File
@@ -0,0 +1,144 @@
(ns quo2.components.button
(:require [quo.react-native :as rn]
[status-im.ui.components.icons.icons :as icons]
[quo2.foundations.colors :as colors]
[quo2.components.text :as text]
[quo.theme :as theme]
[reagent.core :as reagent]))
(def themes {:light {:primary {:icon-color colors/white
:label {:style {:color colors/white}}
:background-color {:default colors/primary-50
:pressed colors/primary-70
:disabled colors/primary-50}}
:secondary {:icon-color colors/primary-50
:label {:style {:color colors/primary-50}}
:background-color {:default colors/primary-50-opa-20
:pressed colors/primary-50-opa-40
:disabled colors/primary-50-opa-20}}
:grey {:icon-color colors/neutral-50
:label {:style {:color colors/black}}
:background-color {:default colors/neutral-40
:pressed colors/neutral-30
:disabled colors/neutral-20}}
:outline {:icon-color colors/neutral-50
:label {:style {:color colors/black}}
:border-color {:default colors/neutral-30
:pressed colors/neutral-40}}
:ghost {:icon-color colors/neutral-50
:label {:style {:color colors/black}}
:background-color {:pr:pressedess colors/neutral-10}}
:danger {:icon-color colors/white
:label {:style {:color colors/white}}
:background-color {:default colors/danger-50
:pressed colors/danger-60
:disabled colors/danger-50}}}
:dark {:primary {:icon-color colors/white
:label {:style {:color colors/white}}
:background-color {:default colors/primary-60
:pressed colors/primary-40
:disabled colors/primary-60}}
:secondary {:icon-color colors/primary-50
:label {:style {:color colors/primary-50}}
:background-color {:default colors/primary-50-opa-20
:pressed colors/primary-50-opa-30
:disabled colors/primary-50-opa-20}}
:grey {:icon-color colors/neutral-40
:label {:style {:color colors/white}}
:background-color {:default colors/neutral-80
:pressed colors/neutral-60
:disabled colors/neutral-80}}
:outline {:icon-color colors/neutral-40
:label {:style {:color colors/white}}
:border-color {:default colors/neutral-70
:pressed colors/neutral-60}}
:ghost {:icon-color colors/neutral-40
:label {:style {:color colors/white}}
:background-color {:pressed colors/neutral-80}}
:danger {:icon-color colors/white
:label {:style {:color colors/white}}
:background-color {:default colors/danger-50
:pressed colors/danger-40
:disabled colors/danger-50}}}})
(defn style-container [type size disabled background-color border-color icon above]
(merge {:height size
:align-items :center
:justify-content :center
:flex-direction (if above :column :row)
:border-radius (if (and icon (#{:primary :secondary :danger} type))
24
(case size
56 12
40 12
32 10
24 8))
:background-color background-color
:padding-horizontal (if icon 0 (case size 56 16 40 16 32 12 24 8))}
(when icon
{:width size})
(when border-color
{:border-color border-color
:border-width 1})
(when disabled
{:opacity 0.3})))
(defn button
"with label
[button opts \"label\"]
opts
{:type :primary/:secondary/:grey/:outline/:ghost/:danger
:size 40/32/24
:icon true/false
:before :icon-keyword
:after :icon-keyword}
only icon
[button {:icon true} :main-icons/close-circle]"
[_ _]
(let [pressed (reagent/atom false)]
(fn [{:keys [on-press disabled type size before after above
on-long-press accessibility-label icon]
:or {type :primary
size 40}}
children]
(let [{:keys [icon-color background-color label border-color]}
(get-in themes [(theme/get-theme) type])
state (cond disabled :disabled @pressed :pressed :else :default)]
[rn/touchable-without-feedback (merge {:disabled disabled
:accessibility-label accessibility-label}
(when on-press
{:on-press (fn []
(on-press))})
(when on-long-press
{:on-long-press (fn []
(on-long-press))})
{:on-press-in (fn []
(reset! pressed true))}
{:on-press-out (fn []
(reset! pressed nil))})
[rn/view {:style (style-container type size disabled (get background-color state) (get border-color state) icon above)}
(when above
[rn/view
[icons/icon above {:color icon-color}]])
(when before
[rn/view
[icons/icon before {:color icon-color}]])
[rn/view
(cond
icon
[icons/icon children {:color icon-color}]
(string? children)
[text/text (merge {:size (when (#{56 24} size) :paragraph-2)
:weight :medium
:number-of-lines 1}
label)
children]
(vector? children)
children)]
(when after
[rn/view
[icons/icon after {:color icon-color}]])]]))))
@@ -0,0 +1,35 @@
(ns quo2.components.segmented-control
(:require [reagent.core :as reagent]
[quo.react-native :as rn]
[quo2.components.tab :as tab]
[quo2.foundations.colors :as colors]
[quo.theme :as theme]))
(def themes {:light {:background-color colors/neutral-20}
:dark {:background-color colors/neutral-80}})
(defn segmented-control [{:keys [default-active on-change]}]
(let [active-tab-id (reagent/atom default-active)]
(fn [{:keys [data size]}]
(let [active-id @active-tab-id]
[rn/view {:flex-direction :row
:background-color (get-in themes [(theme/get-theme) :background-color])
:border-radius (case size
32 10
28 8
24 8
20 6)
:padding 2}
(for [[indx {:keys [label id]}] (map-indexed vector data)]
^{:key id}
[rn/view {:margin-left (if (= 0 indx) 0 2)
:flex 1}
[tab/tab
{:id id
:segmented true
:size size
:active (= id active-id)
:on-press #(do (reset! active-tab-id %)
(when on-change
(on-change %)))}
label]])]))))
+75
View File
@@ -0,0 +1,75 @@
(ns quo2.components.tab
(:require [quo2.foundations.colors :as colors]
[quo.react-native :as rn]
[quo.theme :as theme]
[status-im.ui.components.icons.icons :as icons]
[quo2.components.text :as text]))
(def themes {:light {:default {:background-color colors/neutral-20
:icon-color colors/neutral-50
:label {:style {:color colors/black}}}
:active {:background-color colors/neutral-50
:icon-color colors/white
:label {:style {:color colors/white}}}
:disabled {:background-color colors/neutral-20
:icon-color colors/neutral-50
:label {:style {:color colors/black}}}}
:dark {:default {:background-color colors/neutral-80
:icon-color colors/neutral-40
:label {:style {:color colors/white}}}
:active {:background-color colors/neutral-60
:icon-color colors/white
:label {:style {:color colors/white}}}
:disabled {:background-color colors/neutral-80
:icon-color colors/neutral-40
:label {:style {:color colors/white}}}}})
(defn style-container [size disabled background-color]
(merge {:height size
:align-items :center
:justify-content :center
:flex-direction :row
:border-radius (case size
32 10
28 8
24 8
20 6)
:background-color background-color
:padding-horizontal (case size 32 12 28 12 24 8 20 8)}
(when disabled
{:opacity 0.3})))
(defn tab
"[tab opts \"label\"]
opts
{:type :primary/:secondary/:grey/:outline/:ghost/:danger
:size 40/32/24
:icon true/false
:before :icon-keyword
:after :icon-keyword}"
[_ _]
(fn [{:keys [id on-press disabled size before active accessibility-label]
:or {size 32}}
children]
(let [state (cond disabled :disabled active :active :else :default)
{:keys [icon-color background-color label]}
(get-in themes [(theme/get-theme) state])]
[rn/touchable-without-feedback (merge {:disabled disabled
:accessibility-label accessibility-label}
(when on-press
{:on-press (fn []
(on-press id))}))
[rn/view {:style (style-container size disabled background-color)}
(when before
[rn/view
[icons/icon before {:color icon-color}]])
[rn/view
(cond
(string? children)
[text/text (merge {:size (case size 24 :paragraph-2 20 :label nil)
:weight :medium
:number-of-lines 1}
label)
children]
(vector? children)
children)]]])))
+21
View File
@@ -0,0 +1,21 @@
(ns quo2.components.tabs
(:require [reagent.core :as reagent]
[quo.react-native :as rn]
[quo2.components.tab :as tab]))
(defn tabs [{:keys [default-active on-change]}]
(let [active-tab-id (reagent/atom default-active)]
(fn [{:keys [data size]}]
(let [active-id @active-tab-id]
[rn/view {:flex-direction :row}
(for [{:keys [label id]} data]
^{:key id}
[rn/view {:margin-right (if (= size 32) 12 8)}
[tab/tab
{:id id
:size size
:active (= id active-id)
:on-press #(do (reset! active-tab-id %)
(when on-change
(on-change %)))}
label]])]))))
+33
View File
@@ -0,0 +1,33 @@
(ns quo2.components.text
(:require [quo.react-native :as rn]
[reagent.core :as reagent]
[quo.theme :as theme]
[quo2.foundations.colors :as colors]
[quo2.foundations.typography :as typography]))
(defn text-style [{:keys [size align weight style]}]
(merge (case (or weight :regular)
:regular typography/font-regular
:medium typography/font-medium
:semi-bold typography/font-semi-bold
:bold typography/font-bold
:monospace typography/monospace
:inherit nil)
(case (or size :paragraph-1)
:label typography/label
:paragraph-2 typography/paragraph-2
:paragraph-1 typography/paragraph-1
:heading-2 typography/heading-2
:heading-1 typography/heading-1
:inherit nil)
{:text-align (or align :auto)}
(if (:color style)
style
(assoc style :color (if (= (theme/get-theme) :dark) colors/white colors/black)))))
(defn text []
(let [this (reagent/current-component)
props (reagent/props this)
style (text-style props)]
(into [rn/text {:style style}]
(reagent/children this))))
+176
View File
@@ -0,0 +1,176 @@
(ns quo2.foundations.colors
(:require [clojure.string :as string]))
(defn alpha [value opacity]
(if (string/starts-with? value "#")
(let [hex (string/replace value #"#" "")
r (js/parseInt (subs hex 0 2) 16)
g (js/parseInt (subs hex 2 4) 16)
b (js/parseInt (subs hex 4 6) 16)]
(str "rgba(" r "," g "," b "," opacity ")"))
(let [rgb (string/split value #",")]
(str (string/join "," (butlast rgb)) "," opacity ")"))))
;;;;Neutral
;;Solid
(def neutral-5 "#F5F6F8")
(def neutral-10 "#F0F2F5")
(def neutral-20 "#ECEEF1")
(def neutral-30 "#E7EAEE")
(def neutral-40 "#A1ABBD")
(def neutral-50 "#647084")
(def neutral-60 "#303D55")
(def neutral-70 "#192438")
(def neutral-80 "#131D2F")
(def neutral-90 "#0D1625")
(def neutral-95 "#09101C")
;;50 with transparency
(def neutral-50-opa-5 (alpha neutral-50 0.05))
(def neutral-50-opa-10 (alpha neutral-50 0.1))
(def neutral-50-opa-20 (alpha neutral-50 0.2))
(def neutral-50-opa-30 (alpha neutral-50 0.3))
(def neutral-50-opa-40 (alpha neutral-50 0.4))
;;80 with transparency
(def neutral-80-opa-60 (alpha neutral-80 0.6))
(def neutral-80-opa-70 (alpha neutral-80 0.7))
(def neutral-80-opa-80 (alpha neutral-80 0.8))
(def neutral-80-opa-90 (alpha neutral-80 0.9))
(def neutral-80-opa-95 (alpha neutral-80 0.95))
;;95 with transparency
(def neutral-95-opa-60 (alpha neutral-95 0.6))
(def neutral-95-opa-70 (alpha neutral-95 0.7))
(def neutral-95-opa-80 (alpha neutral-95 0.8))
(def neutral-95-opa-90 (alpha neutral-95 0.9))
(def neutral-95-opa-95 (alpha neutral-95 0.95))
;;;;Black
(def black "#000000")
(def black-opa-5 (alpha black 0.05))
(def black-opa-10 (alpha black 0.1))
(def black-opa-20 (alpha black 0.2))
(def black-opa-30 (alpha black 0.3))
(def black-opa-40 (alpha black 0.4))
(def black-opa-50 (alpha black 0.5))
(def black-opa-60 (alpha black 0.6))
(def black-opa-70 (alpha black 0.7))
(def black-opa-80 (alpha black 0.8))
(def black-opa-90 (alpha black 0.9))
(def black-opa-95 (alpha black 0.95))
;;;;White
(def white "#ffffff")
(def white-opa-5 (alpha white 0.05))
(def white-opa-10 (alpha white 0.1))
(def white-opa-20 (alpha white 0.2))
(def white-opa-30 (alpha white 0.3))
(def white-opa-40 (alpha white 0.4))
(def white-opa-50 (alpha white 0.5))
(def white-opa-60 (alpha white 0.6))
(def white-opa-70 (alpha white 0.7))
(def white-opa-80 (alpha white 0.8))
(def white-opa-90 (alpha white 0.9))
(def white-opa-95 (alpha white 0.95))
;;;;Primary
;;Solid
(def primary-10 "#F8F9FE")
(def primary-20 "#D9DFF9")
(def primary-30 "#ACB9F1")
(def primary-40 "#7F93E9")
(def primary-50 "#4360DF")
(def primary-60 "#3851BB")
(def primary-70 "#2E4198")
(def primary-80 "#233274")
(def primary-90 "#182350")
;;50 with transparency
(def primary-50-opa-5 (alpha primary-50 0.05))
(def primary-50-opa-10 (alpha primary-50 0.1))
(def primary-50-opa-20 (alpha primary-50 0.2))
(def primary-50-opa-30 (alpha primary-50 0.3))
(def primary-50-opa-40 (alpha primary-50 0.4))
;;;;Success
;;Solid
(def success-10 "#F6FBFB")
(def success-20 "#D4EDEB")
(def success-30 "#9FD8D3")
(def success-40 "#6BC2BA")
(def success-50 "#26A69A")
(def success-60 "#208B81")
(def success-70 "#1A7169")
(def success-80 "#145650")
(def success-90 "#08211F")
;;50 with transparency
(def success-50-opa-5 (alpha success-50 0.05))
(def success-50-opa-10 (alpha success-50 0.1))
(def success-50-opa-20 (alpha success-50 0.2))
(def success-50-opa-30 (alpha success-50 0.3))
(def success-50-opa-40 (alpha success-50 0.4))
;;;;Warning
;;Solid
(def warning-10 "#FFFBF9")
(def warning-20 "#FEE9DF")
(def warning-30 "#FDCEBA")
(def warning-40 "#FCB394")
(def warning-50 "#FB8F61")
(def warning-60 "#D37851")
(def warning-70 "#AB6142")
(def warning-80 "#824A32")
(def warning-90 "#5A3323")
;;50 with transparency
(def warning-50-opa-5 (alpha warning-50 0.05))
(def warning-50-opa-10 (alpha warning-50 0.1))
(def warning-50-opa-20 (alpha warning-50 0.2))
(def warning-50-opa-30 (alpha warning-50 0.3))
(def warning-50-opa-40 (alpha warning-50 0.4))
;;;;Danger
;;Solid
(def danger-10 "#FEF9F9")
(def danger-20 "#FADFDE")
(def danger-30 "#F4B9B7")
(def danger-40 "#EE9290")
(def danger-50 "#E65F5C")
(def danger-60 "#C1504D")
(def danger-70 "#9C413F")
(def danger-80 "#783130")
(def danger-90 "#532221")
;;50 with transparency
(def danger-50-opa-5 (alpha danger-50 0.05))
(def danger-50-opa-10 (alpha danger-50 0.1))
(def danger-50-opa-20 (alpha danger-50 0.2))
(def danger-50-opa-30 (alpha danger-50 0.3))
(def danger-50-opa-40 (alpha danger-50 0.4))
;;;;Info
;;Solid
(def info-10 "#F6FCFD")
(def info-20 "#D2EEF4")
(def info-30 "#9DD9E6")
(def info-40 "#67C4D8")
(def info-50 "#20A8C6")
(def info-60 "#1B8DA6")
(def info-70 "#167287")
(def info-80 "#115767")
(def info-90 "#0C3C47")
;;50 with transparency
(def info-50-opa-5 (alpha info-50 0.05))
(def info-50-opa-10 (alpha info-50 0.1))
(def info-50-opa-20 (alpha info-50 0.2))
(def info-50-opa-30 (alpha info-50 0.3))
(def info-50-opa-40 (alpha info-50 0.4))
+31
View File
@@ -0,0 +1,31 @@
(ns quo2.foundations.typography)
(def heading-1 {:font-size 27
:line-height 32.4
:letter-spacing -2.1})
(def heading-2 {:font-size 19
:line-height 25.65
:letter-spacing -1.6})
(def paragraph-1 {:font-size 15
:line-height 21.75
:letter-spacing -0.9})
(def paragraph-2 {:font-size 13
:line-height 18.2
:letter-spacing -0.3})
(def label {:font-size 11
:line-height 15.62
:letter-spacing 0.5})
(def font-regular {:font-family "Inter-Regular"}) ; 400
(def font-medium {:font-family "Inter-Medium"}) ; 500 ff
(def font-semi-bold {:font-family "Inter-SemiBold"}) ; 600
(def font-bold {:font-family "Inter-Bold"}) ; 700
(def monospace {:font-family "InterStatus-Regular"})
+86
View File
@@ -0,0 +1,86 @@
(ns quo2.screens.button
(:require [reagent.core :as reagent]
[quo.react-native :as rn]
[quo.previews.preview :as preview]
[quo.design-system.colors :as colors]
[quo2.components.button :as quo2]))
(def descriptor [{:label "Type:"
:key :type
:type :select
:options [{:key :primary
:value "Primary"}
{:key :secondary
:value "Secondary"}
{:key :grey
:value "Grey"}
{:key :outline
:value "Outline"}
{:key :ghost
:value "Ghost"}
{:key :danger
:value "Danger"}]}
{:label "Size:"
:key :size
:type :select
:options [{:key 56
:value "56"}
{:key 40
:value "40"}
{:key 32
:value "32"}
{:key 24
:value "24"}]}
{:label "Icon:"
:key :icon
:type :boolean}
{:label "Above icon:"
:key :above
:type :boolean}
{:label "After icon:"
:key :after
:type :boolean}
{:label "Before icon:"
:key :before
:type :boolean}
{:label "Disabled:"
:key :disabled
:type :boolean}
{:label "Label"
:key :label
:type :text}])
(defn cool-preview []
(let [state (reagent/atom {:label "Press Me"
:size 40})
label (reagent/cursor state [:label])
before (reagent/cursor state [:before])
after (reagent/cursor state [:after])
above (reagent/cursor state [:above])
icon (reagent/cursor state [:icon])]
(fn []
[rn/view {:margin-bottom 50
:padding 16}
[rn/view {:flex 1}
[preview/customizer state descriptor]]
[rn/view {:padding-vertical 60
:flex-direction :row
:justify-content :center}
[quo2/button (merge (dissoc @state
:theme :before :after)
{:on-press #(println "Hello world!")}
(when @above
{:above :main-icons/close-circle})
(when @before
{:before :main-icons/back})
(when @after
{:after :main-icons/next}))
(if @icon :main-icons/close-circle @label)]]])))
(defn preview-button []
[rn/view {:background-color (:ui-background @colors/theme)
:flex 1}
[rn/flat-list {:flex 1
:keyboardShouldPersistTaps :always
:header [cool-preview]
:key-fn str}]])
+63
View File
@@ -0,0 +1,63 @@
(ns quo2.screens.main
(:require [quo.react-native :as rn]
[quo.theme :as theme]
[quo.design-system.colors :as colors]
[re-frame.core :as re-frame]
[quo2.screens.button :as button]
[quo2.screens.text :as text]
[quo2.screens.tabs :as tabs]
[quo2.screens.segmented :as segmented]
[quo.core :as quo]))
(def screens [{:name :quo2-texts
:insets {:top false}
:component text/preview-text}
{:name :quo2-button
:insets {:top false}
:component button/preview-button}
{:name :quo2-tabs
:insets {:top false}
:component tabs/preview-tabs}
{:name :quo2-segmented
:insets {:top false}
:component segmented/preview-segmented}])
(defn theme-switcher []
[rn/view {:style {:flex-direction :row
:margin-vertical 8
:border-radius 4
:background-color (:ui-01 @colors/theme)
:border-width 1
:border-color (:ui-02 @colors/theme)}}
[rn/touchable-opacity {:style {:padding 8
:flex 1
:justify-content :center
:align-items :center}
:on-press #(theme/set-theme :light)}
[quo/text "Set light theme"]]
[rn/view {:width 1
:margin-vertical 4
:background-color (:ui-02 @colors/theme)}]
[rn/touchable-opacity {:style {:padding 8
:flex 1
:justify-content :center
:align-items :center}
:on-press #(theme/set-theme :dark)}
[quo/text "Set dark theme"]]])
(defn main-screen []
[rn/scroll-view {:flex 1
:padding-vertical 8
:padding-horizontal 16
:background-color (:ui-background @colors/theme)}
[theme-switcher]
[rn/view
(for [{:keys [name]} screens]
^{:key name}
[rn/touchable-opacity {:on-press #(re-frame/dispatch [:navigate-to name])}
[rn/view {:style {:padding-vertical 8}}
[quo/text (str "Preview " name)]]])]])
(def main-screens [{:name :quo2-preview
:insets {:top false}
:component main-screen}])
+48
View File
@@ -0,0 +1,48 @@
(ns quo2.screens.segmented
(:require [quo.react-native :as rn]
[quo.design-system.colors :as colors]
[quo.previews.preview :as preview]
[quo2.components.segmented-control :as quo2]
[reagent.core :as reagent]))
(def descriptor [{:label "Size:"
:key :size
:type :select
:options [{:key 32
:value "32"}
{:key 28
:value "28"}
{:key 24
:value "24"}
{:key 20
:value "20"}]}])
(defn cool-preview []
(let [state (reagent/atom {:size 32})]
(fn []
[rn/view {:margin-bottom 50
:padding 16}
[rn/view {:flex 1}
[preview/customizer state descriptor]]
[rn/view {:padding-vertical 60}
[quo2/segmented-control (merge @state
{:default-active 1
:data [{:id 1 :label "Tab 1"}
{:id 2 :label "Tab 2"}
{:id 3 :label "Tab 3"}
{:id 4 :label "Tab 4"}]
:on-change #(println "Active tab" %)})]]
[rn/view {:padding-vertical 60}
[quo2/segmented-control (merge @state
{:default-active 1
:data [{:id 1 :label "Tab 1"}
{:id 2 :label "Tab 2"}]
:on-change #(println "Active tab" %)})]]])))
(defn preview-segmented []
[rn/view {:background-color (:ui-background @colors/theme)
:flex 1}
[rn/flat-list {:flex 1
:keyboardShouldPersistTaps :always
:header [cool-preview]
:key-fn str}]])
+44
View File
@@ -0,0 +1,44 @@
(ns quo2.screens.tabs
(:require [quo.react-native :as rn]
[quo.design-system.colors :as colors]
[quo.previews.preview :as preview]
[quo2.components.tabs :as quo2]
[reagent.core :as reagent]))
(def descriptor [{:label "Size:"
:key :size
:type :select
:options [{:key 32
:value "32"}
{:key 28
:value "28"}
{:key 24
:value "24"}
{:key 20
:value "20"}]}])
(defn cool-preview []
(let [state (reagent/atom {:size 32})]
(fn []
[rn/view {:margin-bottom 50
:padding 16}
[rn/view {:flex 1}
[preview/customizer state descriptor]]
[rn/view {:padding-vertical 60
:flex-direction :row
:justify-content :center}
[quo2/tabs (merge @state
{:default-active 1
:data [{:id 1 :label "Tab 1"}
{:id 2 :label "Tab 2"}
{:id 3 :label "Tab 3"}
{:id 4 :label "Tab 4"}]
:on-change #(println "Active tab" %)})]]])))
(defn preview-tabs []
[rn/view {:background-color (:ui-background @colors/theme)
:flex 1}
[rn/flat-list {:flex 1
:keyboardShouldPersistTaps :always
:header [cool-preview]
:key-fn str}]])
+51
View File
@@ -0,0 +1,51 @@
(ns quo2.screens.text
(:require [quo.react-native :as rn]
[quo.previews.preview :as preview]
[reagent.core :as reagent]
[quo2.components.text :as quo2]
[quo.design-system.colors :as colors]))
(def descriptor [{:label "Size:"
:key :size
:type :select
:options [{:key :heading-1
:value "Heading 1"}
{:key :heading-2
:value "Heading 2"}
{:key :paragraph-1
:value "Paragraph 1"}
{:key :paragraph-2
:value "Paragraph 2"}
{:key :label
:value "Label"}]}
{:label "Weight:"
:key :weight
:type :select
:options [{:key :regular
:value "Regular"}
{:key :medium
:value "Medium"}
{:key :semi-bold
:value "Semi-bold"}
{:key :bold
:value "Bold"}
{:key :monospace
:value "Monospace"}]}])
(defn cool-preview []
(let [state (reagent/atom {})]
(fn []
[rn/view {:margin-bottom 50
:padding 16}
[preview/customizer state descriptor]
[rn/view {:padding-vertical 60}
[quo2/text @state
"The quick brown fox jumped over the lazy dog."]]])))
(defn preview-text []
[rn/view {:background-color (:ui-background @colors/theme)
:flex 1}
[rn/flat-list {:flex 1
:keyboardShouldPersistTaps :always
:header [cool-preview]
:key-fn str}]])
+7 -8
View File
@@ -101,23 +101,22 @@
(re-frame/reg-fx
::resolve-contract
(fn [{:keys [chain contract on-success]}]
(let [register (get ens/ens-registries chain)]
(when contract
(if (string/starts-with? contract "0x")
(on-success contract)
(ens/get-addr register contract on-success))))))
(fn [{:keys [chain-id contract on-success]}]
(when contract
(if (string/starts-with? contract "0x")
(on-success contract)
(ens/address chain-id contract on-success)))))
(fx/defn create [{:keys [db]}]
(when-not config/google-free
{::resolve-contract {:chain (ethereum/chain-keyword db)
{::resolve-contract {:chain (ethereum/chain-id db)
:contract (contracts/get-address db :status/acquisition)
:on-success #(re-frame/dispatch [:set-in [:acquisition :contract] %])}
::get-referrer nil}))
(fx/defn login [{:keys [db]}]
(when-not config/google-free
{::resolve-contract {:chain (ethereum/chain-keyword db)
{::resolve-contract {:chain (ethereum/chain-id db)
:contract (contracts/get-address db :status/acquisition)
:on-success #(re-frame/dispatch [:set-in [:acquisition :contract] %])}
::check-referrer nil}))
+42 -40
View File
@@ -3,7 +3,6 @@
[re-frame.core :as re-frame]
[status-im.ethereum.core :as ethereum]
[status-im.ethereum.ens :as ens]
[status-im.ethereum.resolver :as resolver]
[status-im.add-new.db :as db]
[status-im.utils.random :as random]
[status-im.utils.utils :as utils]
@@ -12,14 +11,15 @@
[status-im.i18n.i18n :as i18n]
[status-im.contact.core :as contact]
[status-im.router.core :as router]
[status-im.navigation :as navigation]))
[status-im.navigation :as navigation]
[status-im.ethereum.stateofus :as stateofus]
[status-im.utils.db :as utils.db]))
(re-frame/reg-fx
:resolve-public-key
(fn [{:keys [chain contact-identity cb]}]
(let [registry (get ens/ens-registries chain)
ens-name (resolver/ens-name-parse contact-identity)]
(resolver/pubkey registry ens-name cb))))
(fn [{:keys [chain-id contact-identity cb]}]
(let [ens-name (stateofus/ens-name-parse contact-identity)]
(ens/pubkey chain-id ens-name cb))))
;;NOTE we want to handle only last resolve
(def resolve-last-id (atom nil))
@@ -27,37 +27,39 @@
(fx/defn new-chat-set-new-identity
{:events [:new-chat/set-new-identity]}
[{db :db} new-identity-raw new-ens-name id]
(when (or (not id) (= id @resolve-last-id))
(let [new-identity (utils/safe-trim new-identity-raw)
is-public-key? (and (string? new-identity)
(string/starts-with? new-identity "0x"))
is-ens? (and (not is-public-key?)
(ens/valid-eth-name-prefix? new-identity))
error (db/validate-pub-key db new-identity)]
(reset! resolve-last-id nil)
(merge {:db (assoc db
:contacts/new-identity
{:public-key new-identity
:state (cond is-ens?
:searching
(and (string/blank? new-identity) (not new-ens-name))
:empty
error
:error
:else
:valid)
:error error
:ens-name (resolver/ens-name-parse new-ens-name)})}
(when is-ens?
(reset! resolve-last-id (random/id))
(let [chain (ethereum/chain-keyword db)]
{:resolve-public-key
{:chain chain
:contact-identity new-identity
:cb #(re-frame/dispatch [:new-chat/set-new-identity
%
new-identity
@resolve-last-id])}}))))))
(let [ens-error (and (= new-identity-raw "0x") (not (string/blank? new-ens-name)))]
(when (or (not id) (= id @resolve-last-id))
(if ens-error
{:db (assoc-in db [:contacts/new-identity :state] :error)}
(let [new-identity (utils/safe-trim new-identity-raw)
is-public-key? (and (string? new-identity)
(utils.db/valid-public-key? new-identity))
is-ens? (and (not is-public-key?)
(ens/valid-eth-name-prefix? new-identity))
error (db/validate-pub-key db new-identity)]
(reset! resolve-last-id nil)
(merge {:db (assoc db
:contacts/new-identity
{:public-key new-identity
:state (cond is-ens?
:searching
(and (string/blank? new-identity) (not new-ens-name))
:empty
error
:error
:else
:valid)
:error error
:ens-name (stateofus/ens-name-parse new-ens-name)})}
(when is-ens?
(reset! resolve-last-id (random/id))
{:resolve-public-key
{:chain-id (ethereum/chain-id db)
:contact-identity new-identity
:cb #(re-frame/dispatch [:new-chat/set-new-identity
%
new-identity
@resolve-last-id])}})))))))
(fx/defn clear-new-identity
{:events [::clear-new-identity ::new-chat-focus]}
@@ -66,7 +68,7 @@
(fx/defn qr-code-handled
{:events [::qr-code-handled]}
[{:keys [db] :as cofx} {:keys [type public-key chat-id data]} {:keys [new-contact?] :as opts}]
[{:keys [db] :as cofx} {:keys [type public-key chat-id data ens-name]} {:keys [new-contact?] :as opts}]
(let [public-key? (and (string? data)
(string/starts-with? data "0x"))
chat-key (cond
@@ -78,9 +80,9 @@
(if-not validation-result
(if new-contact?
(fx/merge cofx
(contact/add-contact chat-key nil nil)
(contact/add-contact chat-key nil ens-name)
(navigation/navigate-to-cofx :contacts-list {}))
(chat/start-chat cofx chat-key nil))
(chat/start-chat cofx chat-key ens-name))
{:utils/show-popup {:title (i18n/label :t/unable-to-read-this-code)
:content (case validation-result
:invalid
+57 -65
View File
@@ -6,7 +6,6 @@
[status-im.ethereum.core :as ethereum]
[status-im.ethereum.ens :as ens]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.ethereum.resolver :as resolver]
[status-im.i18n.i18n :as i18n]
[status-im.native-module.core :as status]
[status-im.ui.components.list-selection :as list-selection]
@@ -14,7 +13,6 @@
[status-im.utils.contenthash :as contenthash]
[status-im.utils.fx :as fx]
[status-im.utils.http :as http]
[status-im.utils.multihash :as multihash]
[status-im.utils.platform :as platform]
[status-im.utils.random :as random]
[status-im.utils.types :as types]
@@ -73,22 +71,10 @@
(let [history-host (http/url-host (try (nth history history-index) (catch js/Error _)))]
(cond-> browser history-host (assoc :unsafe? (eth-phishing-detect history-host)))))
(defn- content->hash [hex]
(when (and hex (not= hex "0x"))
;; TODO(julien) Remove once our ENS DApp are migrated
(multihash/base58 (multihash/create :sha2-256 (subs hex 2)))))
(defn resolve-ens-content-callback [hex]
(let [hash (content->hash hex)]
(if (and hash (not= hash resolver/default-hash))
(re-frame/dispatch [:browser.callback/resolve-ens-multihash-success {:namespace :ipfs :hash hash}])
(re-frame/dispatch [:browser.callback/resolve-ens-contenthash]))))
(defn resolve-ens-contenthash-callback [hex]
(let [{:keys [hash] :as m} (contenthash/decode hex)]
(if (and hash (not= hash resolver/default-hash))
(re-frame/dispatch [:browser.callback/resolve-ens-multihash-success m])
(re-frame/dispatch [:browser.callback/resolve-ens-multihash-error]))))
(defn resolve-ens-contenthash-callback [url]
(if (not (string/blank? url))
(re-frame/dispatch [:browser.callback/resolve-ens-multihash-success url])
(re-frame/dispatch [:browser.callback/resolve-ens-multihash-error])))
(fx/defn resolve-url
[{:keys [db]} {:keys [error? resolved-url]}]
@@ -96,26 +82,12 @@
(let [current-url (get-current-url (get-current-browser db))
host (http/url-host current-url)]
(if (and (not resolved-url) (ens/is-valid-eth-name? host))
(let [chain (ethereum/chain-keyword db)]
{:db (update db :browser/options assoc :resolving? true)
:browser/resolve-ens-content {:registry (get ens/ens-registries
chain)
:ens-name host
:cb resolve-ens-content-callback}})
{:db (update db :browser/options assoc :resolving? true)
:browser/resolve-ens-contenthash {:chain-id (ethereum/chain-id db)
:ens-name host
:cb resolve-ens-contenthash-callback}}
{:db (update db :browser/options assoc :url (or resolved-url current-url) :resolving? false)}))))
(fx/defn resolve-ens-contenthash
{:events [:browser.callback/resolve-ens-contenthash]}
[{:keys [db]}]
(let [current-url (get-current-url (get-current-browser db))
host (http/url-host current-url)
chain (ethereum/chain-keyword db)]
{:db (update db :browser/options assoc :resolving? true)
:browser/resolve-ens-contenthash {:registry (get ens/ens-registries
chain)
:ens-name host
:cb resolve-ens-contenthash-callback}}))
(fx/defn update-browser
[{:keys [db]}
{:keys [browser-id] :as browser}]
@@ -135,28 +107,37 @@
{:keys [url] :as bookmark}]
{:db (assoc-in db [:bookmarks/bookmarks url] bookmark)
::json-rpc/call [{:method "browsers_storeBookmark"
:params [bookmark]
:on-success #(re-frame/dispatch [:browser/sync-bookmark %1])}]})
(fx/defn sync-bookmark
{:events [:browser/sync-bookmark]}
[_ bookmark]
{::json-rpc/call [{:method "wakuext_syncBookmark"
:params [bookmark]
:on-success #()}]})
(fx/defn update-bookmark
{:events [:browser/update-bookmark]}
[{:keys [db]}
[{:keys [db] :as cofx}
{:keys [url] :as bookmark}]
{:db (update-in db
[:bookmarks/bookmarks url]
merge bookmark)
::json-rpc/call [{:method "browsers_updateBookmark"
:params [url bookmark]
:on-success #()}]})
(let [old-bookmark (get-in db [:bookmarks/bookmarks url])
new-bookmark (merge old-bookmark bookmark)]
(fx/merge cofx {:db (assoc-in db [:bookmarks/bookmarks url] new-bookmark)
::json-rpc/call [{:method "browsers_updateBookmark"
:params [url bookmark]
:on-success #(re-frame/dispatch [:browser/sync-bookmark new-bookmark])}]})))
(fx/defn delete-bookmark
{:events [:browser/delete-bookmark]}
[{:keys [db]}
[{:keys [db] :as cofx}
url]
{:db (update db :bookmarks/bookmarks dissoc url)
::json-rpc/call [{:method "browsers_deleteBookmark"
:params [url]
:on-success #()}]})
(let [old-bookmark (get-in db [:bookmarks/bookmarks url])
removed-bookmark (merge old-bookmark {:removed true})]
(fx/merge cofx {:db (update db :bookmarks/bookmarks dissoc url)
::json-rpc/call [{:method "browsers_removeBookmark"
:params [url]
:on-success #(re-frame/dispatch [:browser/sync-bookmark removed-bookmark])}]})))
(defn can-go-back? [{:keys [history-index]}]
(pos? history-index))
@@ -217,11 +198,11 @@
(fx/defn resolve-ens-multihash-success
{:events [:browser.callback/resolve-ens-multihash-success]}
[{:keys [db] :as cofx} m]
[{:keys [db] :as cofx} url]
(let [current-url (get-current-url (get-current-browser db))
host (http/url-host current-url)
path (subs current-url (+ (.indexOf ^js current-url host) (count host)))
gateway (storage-gateway m)]
gateway url]
(fx/merge cofx
{:db (-> (update db :browser/options
assoc
@@ -418,12 +399,19 @@
:result {:jsonrpc "2.0"
:id (int id)
:result (if (= method "eth_coinbase") dapps-address [dapps-address])}})
{:browser/call-rpc [payload
#(re-frame/dispatch [:browser.callback/call-rpc
{:type constants/web3-send-async-callback
:messageId message-id
:error %1
:result %2}])]}))))
(if (= method "personal_ecRecover")
{:signing.fx/recover-message {:params {:message (first params)
:signature (second params)}
:on-completed #(re-frame/dispatch [:browser.callback/call-rpc
{:type constants/web3-send-async-callback
:messageId message-id
:result (types/json->clj %)}])}}
{:browser/call-rpc [payload
#(re-frame/dispatch [:browser.callback/call-rpc
{:type constants/web3-send-async-callback
:messageId message-id
:error %1
:result %2}])]})))))
(fx/defn handle-no-permissions [cofx {:keys [method id]} message-id]
(if (= method "eth_accounts")
@@ -490,23 +478,18 @@
(= type constants/api-request)
(browser.permissions/process-permission cofx dapp-name permission messageId params))))
(re-frame/reg-fx
:browser/resolve-ens-content
(fn [{:keys [registry ens-name cb]}]
(resolver/content registry ens-name cb)))
(re-frame/reg-fx
:browser/resolve-ens-contenthash
(fn [{:keys [registry ens-name cb]}]
(resolver/contenthash registry ens-name cb)))
(fn [{:keys [chain-id ens-name cb]}]
(ens/resource-url chain-id ens-name cb)))
(re-frame/reg-fx
:browser/send-to-bridge
(fn [message]
(let [^js webview @webview-ref/webview-ref
msg (str "ReactNativeWebView.onMessage('"
msg (str "(function() { var __send = function() { if (ReactNativeWebView.onMessage) { ReactNativeWebView.onMessage('"
(types/clj->json message)
"');")]
"');} else {setTimeout(__send, 0)}}; __send();})();")]
(when (and message webview)
(.injectJavaScript webview msg)))))
@@ -584,3 +567,12 @@
{:events [:browser/loading-started]}
[cofx]
(update-browser-options cofx {:error? false :loading? true}))
(fx/defn handle-bookmarks
[{:keys [db]} bookmarks]
(let [changed-bookmarks (reduce (fn [acc {:keys [url] :as bookmark}]
(assoc acc url bookmark))
{}
bookmarks)
stored-bookmarks (get-in db [:bookmarks/bookmarks])]
{:db (assoc-in db [:bookmarks/bookmarks] (merge stored-bookmarks changed-bookmarks))}))
+4 -2
View File
@@ -387,12 +387,14 @@
(fx/defn show-profile
{:events [:chat.ui/show-profile]}
[{:keys [db] :as cofx} identity]
[{:keys [db] :as cofx} identity ens-name]
(let [my-public-key (get-in db [:multiaccount :public-key])]
(when (not= my-public-key identity)
(fx/merge
cofx
{:db (assoc db :contacts/identity identity)}
{:db (-> db
(assoc :contacts/identity identity)
(assoc :contacts/ens-name ens-name))}
(start-profile-chat identity true)))))
(fx/defn clear-history-pressed
+14 -16
View File
@@ -2,6 +2,7 @@
(:require [re-frame.core :as re-frame]
[status-im.utils.fx :as fx]
["@react-native-community/cameraroll" :as CameraRoll]
["react-native-blob-util" :default ReactNativeBlobUtil]
[status-im.utils.types :as types]
[status-im.utils.config :as config]
[status-im.ui.components.permissions :as permissions]
@@ -12,6 +13,7 @@
[status-im.i18n.i18n :as i18n]
[status-im.utils.utils :as utils]
[status-im.utils.platform :as platform]
[status-im.utils.fs :as fs]
[status-im.chat.models :as chat]))
(def maximum-image-size-px 2000)
@@ -37,31 +39,27 @@
(.-localIdentifier result)
(.-path result)))
(defn android-save-image-to-gallery [base64-uri]
(react/image-get-size
base64-uri
(fn [width height]
(image-processing/resize
base64-uri
width
height
100
(fn [^js resized-image]
(let [path (.-path resized-image)
path (if (string/starts-with? path "file") path (str "file://" path))]
(.save CameraRoll path)))
#(log/error "could not resize image" %)))))
(def temp-image-url (str (fs/cache-dir) "/StatusIm_Image.jpeg"))
(defn download-image-http [base64-uri on-success]
(-> (.config ReactNativeBlobUtil (clj->js {:trusty platform/ios?
:path temp-image-url}))
(.fetch "GET" base64-uri)
(.then #(on-success (.path %)))
(.catch #(log/error "could not save image"))))
(defn save-to-gallery [path] (.save CameraRoll path))
(re-frame/reg-fx
::save-image-to-gallery
(fn [base64-uri]
(if platform/ios?
(-> (.save CameraRoll base64-uri)
(-> (download-image-http base64-uri save-to-gallery)
(.catch #(utils/show-popup (i18n/label :t/error)
(i18n/label :t/external-storage-denied))))
(permissions/request-permissions
{:permissions [:write-external-storage]
:on-allowed #(android-save-image-to-gallery base64-uri)
:on-allowed #(download-image-http base64-uri save-to-gallery)
:on-denied (fn []
(utils/set-timeout
#(utils/show-popup (i18n/label :t/error)
+3 -3
View File
@@ -174,7 +174,7 @@
{:chat-id chat-id
:content-type constants/content-type-image
:image-path (utils/safe-replace uri #"file://" "")
:text (i18n/label :t/update-to-see-image)})
:text (i18n/label :t/update-to-see-image {"locale" "en"})})
images)))
(fx/defn clean-input [{:keys [db] :as cofx} current-chat-id]
@@ -227,7 +227,7 @@
:content-type constants/content-type-audio
:audio-path audio-path
:audio-duration-ms duration
:text (i18n/label :t/update-to-listen-audio)})))
:text (i18n/label :t/update-to-listen-audio {"locale" "en"})})))
(fx/defn send-sticker-message
[cofx {:keys [hash pack]} current-chat-id]
@@ -236,7 +236,7 @@
:content-type constants/content-type-sticker
:sticker {:hash hash
:pack pack}
:text (i18n/label :t/update-to-see-sticker)})))
:text (i18n/label :t/update-to-see-sticker {"locale" "en"})})))
(fx/defn send-edited-message [{:keys [db] :as cofx} text {:keys [message-id]}]
(fx/merge
+41 -52
View File
@@ -200,7 +200,17 @@
:nickname nickname
:public-key public-key})))
(defn mentionable-commmunity-members [contacts my-public-key community-members]
(defn mentionable-contacts [contacts]
(reduce
(fn [acc [key contact]]
(let [mentionable-contact (add-searchable-phrases-to-contact contact false)]
(if (nil? mentionable-contact)
acc
(assoc acc key mentionable-contact))))
{}
contacts))
(defn mentionable-contacts-from-identites [contacts my-public-key identities]
(reduce (fn [acc identity]
(let [contact (multiaccounts/contact-by-identity
contacts identity)
@@ -213,58 +223,31 @@
(if (nil? mentionable-contact) acc
(assoc acc identity mentionable-contact))))
{}
(keys (dissoc community-members my-public-key))))
(remove #(= my-public-key %) identities)))
(defn get-mentionable-users
[{{:keys [current-chat-id]
:contacts/keys [contacts] :as db} :db}]
(let [{:keys [chat-type community-id users] :as chat} (get-in db [:chats current-chat-id])
{:keys [name preferred-name public-key]} (:multiaccount db)
chat-specific-suggestions
(cond
(= chat-type constants/private-group-chat-type)
(let [{:keys [public-key]} (:multiaccount db)
all-contacts (:contacts/contacts db)
group-contacts
(contact.db/get-all-contacts-in-group-chat
(disj (:contacts chat) public-key)
nil
all-contacts
nil)]
(reduce
(fn [acc {:keys [alias public-key identicon name]}]
(assoc acc public-key
{:alias alias
:identicon identicon
:public-key public-key
:name name}))
{}
group-contacts))
(= chat-type constants/one-to-one-chat-type)
(assoc users
current-chat-id
(contact.db/public-key->contact contacts current-chat-id))
(defn get-mentionable-users [chat all-contacts current-multiaccount community-members]
(let [{:keys [name preferred-name public-key]} current-multiaccount
{:keys [chat-id users contacts chat-type]} chat
mentionable-contacts (mentionable-contacts all-contacts)
mentionable-users (assoc users public-key {:alias name
:name (or preferred-name name)
:public-key public-key})]
(cond
(= chat-type constants/private-group-chat-type)
(merge mentionable-users
(mentionable-contacts-from-identites all-contacts public-key contacts))
(= chat-type constants/community-chat-type)
(merge users (mentionable-commmunity-members
contacts public-key
(get-in db [:communities community-id :members])))
(= chat-type constants/one-to-one-chat-type)
(assoc mentionable-users chat-id (get mentionable-contacts chat-id
(-> chat-id
contact.db/public-key->new-contact
contact.db/enrich-contact)))
:else users)]
(reduce
(fn [acc [key {:keys [alias name identicon]}]]
(let [name (utils/safe-replace name ".stateofus.eth" "")]
(assoc acc key
{:alias alias
:name (or name alias)
:identicon identicon
:public-key key})))
(assoc chat-specific-suggestions
public-key
{:alias name
:name (or preferred-name name)
:public-key public-key})
contacts)))
(= chat-type constants/community-chat-type)
(merge mentionable-users
(mentionable-contacts-from-identites all-contacts public-key (keys community-members)))
:else (merge mentionable-users mentionable-contacts))))
(def ending-chars "[\\s\\.,;:]")
(def ending-chars-regex (re-pattern ending-chars))
@@ -376,8 +359,14 @@
(recur new-text users (rest idxs)
(+ diff (- (count text) (count new-text)))))))))))))
(defn check-mentions [cofx text]
(replace-mentions text (get-mentionable-users cofx)))
(defn check-mentions [{:keys [db]} text]
(let [current-chat-id (:current-chat-id db)
chat (get-in db [:chats current-chat-id])
all-contacts (:contacts/contacts db)
current-multiaccount (:multiaccount db)
community-members (get-in db [:communities (:community-id chat) :members])
mentionable-users (get-mentionable-users chat all-contacts current-multiaccount community-members)]
(replace-mentions text mentionable-users)))
(defn get-at-sign-idxs
([text start]
+13
View File
@@ -222,3 +222,16 @@
:c2 {:m3 {:chat-id :c2 :message-id :m3}
:m4 {:chat-id :c2 :message-id :m4}}}}}
[:m1 :m3]))
(defn remove-cleared-message [messages cleared-at]
(into {} (remove #(let [message-clock (:clock-value (second %))]
(<= message-clock cleared-at))
messages)))
(fx/defn handle-cleared-histories-messages
{:events [::handle-cleared-hisotories-messages]}
[{:keys [db]} cleared-histories]
{:db (reduce (fn [acc current]
(update-in acc [:messages (:chatId current)] remove-cleared-message (:clearedAt current)))
db
cleared-histories)})
+2 -4
View File
@@ -221,12 +221,10 @@
(fx/defn create
{:events [::create-confirmation-pressed]}
[{:keys [db]}]
(let [{:keys [name description image]} (get db :communities/create)]
;; If access is ENS only, we set the access to require approval and set the rule
;; of ens only
(let [{:keys [name description membership image]} (get db :communities/create)]
(let [params {:name name
:description description
:membership constants/community-on-request-access
:membership membership
:color (rand-nth colors/chat-colors)
:image (string/replace-first (str image) #"file://" "")
:imageAx 0
+2 -2
View File
@@ -9,9 +9,9 @@
(fx/defn send-message-pressed
{:events [:contact.ui/send-message-pressed]
:interceptors [(re-frame/inject-cofx :random-id-generator)]}
[cofx {:keys [public-key]}]
[cofx {:keys [public-key ens-name]}]
(fx/merge cofx
{:dispatch-later [{:ms 1000 :dispatch [:chat.ui/start-chat public-key]}]}
{:dispatch-later [{:ms 1000 :dispatch [:chat.ui/start-chat public-key ens-name]}]}
(notification-center/accept-all-activity-center-notifications-from-chat public-key)
(navigation/pop-to-root-tab :chat-stack)))
+8
View File
@@ -14,6 +14,14 @@
:identicon (identicon/identicon public-key)
:public-key public-key}))
(defn public-key-and-ens-name->new-contact [public-key ens-name]
(let [contact (public-key->new-contact public-key)]
(if ens-name (-> contact
(assoc :ens-name ens-name)
(assoc :ens-verified true)
(assoc :name ens-name))
contact)))
(defn public-key->contact
[contacts public-key]
(when public-key
+69 -94
View File
@@ -2,19 +2,14 @@
(:refer-clojure :exclude [name])
(:require [clojure.string :as string]
[re-frame.core :as re-frame]
[status-im.ethereum.abi-spec :as abi-spec]
[status-im.ethereum.contracts :as contracts]
[status-im.ethereum.core :as ethereum]
[status-im.ethereum.eip55 :as eip55]
[status-im.ethereum.ens :as ens]
[status-im.ethereum.resolver :as resolver]
[status-im.ethereum.stateofus :as stateofus]
[status-im.multiaccounts.update.core :as multiaccounts.update]
[status-im.signing.core :as signing]
[status-im.navigation :as navigation]
[status-im.utils.datetime :as datetime]
[status-im.utils.fx :as fx]
[status-im.utils.money :as money]
[status-im.utils.random :as random]
[status-im.bottom-sheet.core :as bottom-sheet]))
@@ -23,6 +18,26 @@
username
(stateofus/subdomain username)))
(re-frame/reg-fx
::resolve-address
(fn [[chain-id name cb]]
(ens/address chain-id name cb)))
(re-frame/reg-fx
::resolve-owner
(fn [[chain-id name cb]]
(ens/owner chain-id name cb)))
(re-frame/reg-fx
::resolve-pubkey
(fn [[chain-id name cb]]
(ens/pubkey chain-id name cb)))
(re-frame/reg-fx
::get-expiration-time
(fn [[chain-id name cb]]
(ens/expire-at chain-id name cb)))
(fx/defn update-ens-tx-state
{:events [:update-ens-tx-state]}
[{:keys [db]} new-state username custom-domain? tx-hash]
@@ -52,29 +67,6 @@
[{:keys [db]} tx-hash]
{:db (update db :ens/registrations dissoc tx-hash)})
(re-frame/reg-fx
::resolve-address
(fn [[registry name cb]]
(ens/get-addr registry name cb)))
(re-frame/reg-fx
::resolve-owner
(fn [[registry name cb]]
(ens/get-owner registry name cb)))
(re-frame/reg-fx
::resolve-pubkey
(fn [[registry name cb]]
(resolver/pubkey registry name cb)))
(re-frame/reg-fx
::get-expiration-time
(fn [[chain label-hash cb]]
(stateofus/get-registrar
chain
(fn [registrar]
(stateofus/get-expiration-time registrar label-hash cb)))))
(fx/defn set-state
{:events [::name-resolved]}
[{:keys [db]} username state address]
@@ -84,23 +76,6 @@
(assoc-in [:ens/registration :state] state)
(assoc-in [:ens/registration :address] address))}))
(fx/defn on-resolver-found
{:events [::resolver-found]}
[{:keys [db] :as cofx} resolver-contract address]
(let [{:keys [username custom-domain?]} (:ens/registration db)
{:keys [public-key]} (:multiaccount db)
{:keys [x y]} (ethereum/coordinates public-key)
namehash (ens/namehash (str username (when-not custom-domain?
".stateofus.eth")))]
(signing/eth-transaction-call
cofx
{:contract resolver-contract
:from address
:method "setPubkey(bytes32,bytes32,bytes32)"
:params [namehash x y]
:on-result [::save-username custom-domain? username true]
:on-error [::on-registration-failure]})))
(fx/defn save-username
{:events [::save-username]}
[{:keys [db] :as cofx} custom-domain? username redirectToSummary]
@@ -116,26 +91,37 @@
(multiaccounts.update/multiaccount-update
:preferred-name name {})))))
(fx/defn set-pub-key
{:events [::set-pub-key]}
[{:keys [db]}]
(let [{:keys [username address custom-domain?]} (:ens/registration db)
address (or address (ethereum/default-address db))
{:keys [public-key]} (:multiaccount db)
chain-id (ethereum/chain-id db)
username (fullname custom-domain? username)]
(ens/set-pub-key-prepare-tx
chain-id address username public-key
#(re-frame/dispatch [:signing.ui/sign
{:tx-obj %
:on-result [::save-username custom-domain? username true]
:on-error [::on-registration-failure]}]))))
(fx/defn on-input-submitted
{:events [::input-submitted ::input-icon-pressed]}
{:events [::input-submitted]}
[{:keys [db] :as cofx}]
(let [{:keys [state username custom-domain? address]} (:ens/registration db)
registry-contract (get ens/ens-registries (ethereum/chain-keyword db))
ens-name (str username (when-not custom-domain?
".stateofus.eth"))]
(let [{:keys [state username custom-domain?]} (:ens/registration db)]
(case state
(:available :owned)
(navigation/navigate-to-cofx cofx :ens-checkout {})
:connected-with-different-key
(ens/resolver registry-contract ens-name
#(re-frame/dispatch [::resolver-found % address]))
(re-frame/dispatch [::set-pub-key])
:connected
(save-username cofx custom-domain? username true)
;; for other states, we do nothing
nil)))
(defn- on-resolve-owner
[registry custom-domain? username addresses public-key response resolve-last-id* resolve-last-id]
[chain-id custom-domain? username addresses public-key response resolve-last-id* resolve-last-id]
(when (= @resolve-last-id* resolve-last-id)
(cond
@@ -146,14 +132,17 @@
;; if we get an address back, we try to get the public key associated
;; with the username as well
(get addresses (eip55/address->checksum response))
(resolver/pubkey registry (fullname custom-domain? username)
#(re-frame/dispatch [::name-resolved username
(cond
(not public-key) :owned
(= % public-key) :connected
:else :connected-with-different-key)
(eip55/address->checksum response)]))
(ens/pubkey
chain-id
(fullname custom-domain? username)
#(re-frame/dispatch [::name-resolved username
(cond
(not public-key) :owned
(string/ends-with? % "0000000000000000000000000000000000000000000000000000000000000000")
:invalid-ens
(= % public-key) :connected
:else :connected-with-different-key)
(eip55/address->checksum response)]))
:else
(re-frame/dispatch [::name-resolved username :taken]))))
@@ -165,28 +154,17 @@
(fx/defn register-name
{:events [::register-name-pressed]}
[{:keys [db] :as cofx}]
(let [{:keys [custom-domain? username address]}
[{:keys [db]} address]
(let [{:keys [username]}
(:ens/registration db)
{:keys [public-key]} (:multiaccount db)
chain (ethereum/chain-keyword db)
chain-id (ethereum/chain-id db)
amount (registration-cost chain-id)
{:keys [x y]} (ethereum/coordinates public-key)]
(stateofus/get-registrar
chain
(fn [contract]
(signing/eth-transaction-call
cofx
{:contract (contracts/get-address db :status/snt)
:method "approveAndCall(address,uint256,bytes)"
:from address
:params [contract
(money/unit->token amount 18)
(abi-spec/encode "register(bytes32,address,bytes32,bytes32)"
[(ethereum/sha3 username) address x y])]
:on-result [:update-ens-tx-state-and-redirect :submitted username custom-domain?]
:on-error [::on-registration-failure]})))))
chain-id (ethereum/chain-id db)]
(ens/register-prepare-tx
chain-id address username public-key
#(re-frame/dispatch [:signing.ui/sign
{:tx-obj %
:on-result [:update-ens-tx-state-and-redirect :submitted username false]
:on-error [::on-registration-failure]}]))))
(defn- valid-custom-domain? [username]
(and (ens/is-valid-eth-name? username)
@@ -225,11 +203,11 @@
(let [{:keys [multiaccount]} db
{:keys [public-key]} multiaccount
addresses (ethereum/addresses-without-watch db)
registry (get ens/ens-registries (ethereum/chain-keyword db))]
{::resolve-owner [registry
chain-id (ethereum/chain-id db)]
{::resolve-owner [chain-id
(fullname custom-domain? username)
#(on-resolve-owner
registry custom-domain? username addresses public-key %
chain-id custom-domain? username addresses public-key %
resolve-last-id @resolve-last-id)]})))))
(fx/defn return-to-ens-main-screen
@@ -260,7 +238,7 @@
(fx/defn save-preferred-name
{:events [::save-preferred-name]}
[{:keys [db] :as cofx} name]
[cofx name]
(multiaccounts.update/multiaccount-update cofx
:preferred-name name
{}))
@@ -270,7 +248,7 @@
it should only be called if the user cancels the signing
Actual registration failure has not been implemented properly"
{:events [::on-registration-failure]}
[{:keys [db]} username])
[_ _])
(fx/defn store-name-address
{:events [::address-resolved]}
@@ -293,20 +271,17 @@
(fx/defn navigate-to-name
{:events [::navigate-to-name]}
[{:keys [db] :as cofx} username]
(let [chain (ethereum/chain-keyword db)
registry (get ens/ens-registries chain)]
(let [chain-id (ethereum/chain-id db)]
(fx/merge cofx
{::get-expiration-time
[chain
(-> username
stateofus/username
ethereum/sha3)
[chain-id
(stateofus/username username)
#(re-frame/dispatch [::get-expiration-time-success username %])]
::resolve-address
[registry username
[chain-id username
#(re-frame/dispatch [::address-resolved username %])]
::resolve-pubkey
[registry username
[chain-id username
#(re-frame/dispatch [::public-key-resolved username %])]}
(navigation/navigate-to-cofx :ens-name-details username))))
+49 -165
View File
@@ -1,12 +1,5 @@
(ns status-im.ethereum.ens
"
https://docs.ens.domains/en/latest/index.html
https://eips.ethereum.org/EIPS/eip-137
https://eips.ethereum.org/EIPS/eip-181
"
(:refer-clojure :exclude [name])
(:require [clojure.string :as string]
[status-im.ethereum.core :as ethereum]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.ethereum.abi-spec :as abi-spec]))
@@ -16,143 +9,9 @@
:testnet "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"
:rinkeby "0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e"})
(def default-namehash "0000000000000000000000000000000000000000000000000000000000000000")
(def default-address "0x0000000000000000000000000000000000000000")
(def default-key "0x0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")
(defn namehash
[s]
(ethereum/normalized-hex
(if (string/blank? s)
default-namehash
(let [[label remainder] (-> s
string/lower-case
(string/split #"\." 2))]
(if-not (seq label)
default-namehash
(ethereum/sha3 (str (namehash remainder)
(subs (ethereum/sha3 label) 2))))))))
;; Registry contract
(defn resolver
[registry ens-name cb]
(json-rpc/eth-call
{:contract registry
:method "resolver(bytes32)"
:params [(namehash ens-name)]
:outputs ["address"]
:on-error #(cb "0x")
:on-success
(fn [[address]]
(cb (when-not (= address default-address) address)))}))
(defn owner
[registry ens-name cb]
(json-rpc/eth-call
{:contract registry
:method "owner(bytes32)"
:params [(namehash ens-name)]
:outputs ["address"]
:on-error #(cb "0x")
:on-success
(fn [[address]]
(cb address))}))
(defn ttl
[registry ens-name cb]
(json-rpc/eth-call
{:contract registry
:method "ttl(bytes32)"
:params [(namehash ens-name)]
:outputs ["uint256"]
:on-success
(fn [[ttl]]
(cb ttl))}))
;; Resolver contract
;; Resolver must implement EIP65 (supportsInterface). When interacting with an unknown resolver it's safer to rely on it.
(def addr-hash "0x3b3b57de")
(defn addr
[resolver ens-name cb]
(json-rpc/eth-call
{:contract resolver
:method "addr(bytes32)"
:params [(namehash ens-name)]
:outputs ["address"]
:on-error #(cb "0x")
:on-success
(fn [[address]]
(cb address))}))
(def name-hash "0x691f3431")
;; Defined by https://eips.ethereum.org/EIPS/eip-181
(defn name
[resolver ens-name cb]
(json-rpc/eth-call
{:contract resolver
:method "name(bytes32)"
:params [(namehash ens-name)]
:outputs ["string"]
:on-error #(cb "0x")
:on-success
(fn [[name]]
(cb name))}))
(defn cleanup-hash [raw-hash]
;; NOTE: it would be better if our abi-spec/decode was able to do that
(let [;; ignore hex prefix
[_ raw-hash-rest] (split-at 2 raw-hash)
;; the first field gives us the length of the next one in hex and has
;; a length of 32 bytes
;; 1 byte is 2 chars here
[next-field-length-hex raw-hash-rest] (split-at 64 raw-hash-rest)
next-field-length (* ^number (abi-spec/hex-to-number (string/join next-field-length-hex)) 2)
;; we get the next field which is the length of the hash and is
;; expected to be 32 bytes as well
[hash-field-length-hex raw-hash-rest] (split-at next-field-length
raw-hash-rest)
hash-field-length (* ^number (abi-spec/hex-to-number (string/join hash-field-length-hex)) 2)
;; we get the hash
[hash _] (split-at hash-field-length raw-hash-rest)]
(str "0x" (string/join hash))))
(defn contenthash
[resolver ens-name cb]
(json-rpc/eth-call
{:contract resolver
:method "contenthash(bytes32)"
:params [(namehash ens-name)]
:on-error #(cb "0x")
:on-success
(fn [raw-hash]
;; NOTE: it would be better if our abi-spec/decode was able to do that
(cb (cleanup-hash raw-hash)))}))
(defn content
[resolver ens-name cb]
(json-rpc/eth-call
{:contract resolver
:method "content(bytes32)"
:params [(namehash ens-name)]
:on-success
(fn [hash]
(cb hash))
;;at some point infura started to return execution reverted error instead of "0x" result
;;our code expects "0x" result
:on-error #(cb "0x")}))
(def ABI-hash "0x2203ab56")
(def pubkey-hash "0xc8690233")
(defn uncompressed-public-key
[x y]
(when (and x y)
(str "0x04" x y)))
(def default-hash "0x0000000000000000000000000000000000000000000000000000000000000000")
(defn valid-eth-name-prefix?
[prefix]
@@ -167,29 +26,54 @@
(string? ens-name)
(string/ends-with? ens-name ".eth")))
(defn address
[chain-id ens-name cb]
{:pre [(is-valid-eth-name? ens-name)]}
(json-rpc/call {:method "ens_addressOf"
:params [chain-id ens-name]
:on-success cb
:on-error #(cb "0x")}))
(defn pubkey
[resolver ens-name cb]
(json-rpc/eth-call
{:contract resolver
:method "pubkey(bytes32)"
:params [(namehash ens-name)]
:outputs ["bytes32" "bytes32"]
:on-success
(fn [[x y]]
(let [public-key (uncompressed-public-key x y)]
(cb public-key)))
;;at some point infura started to return execution reverted error instead of "0x" result
;;our code expects "0x" result
:on-error #(cb "0x")}))
(defn get-addr
[registry ens-name cb]
[chain-id ens-name cb]
{:pre [(is-valid-eth-name? ens-name)]}
(resolver registry
ens-name
#(addr % ens-name cb)))
(json-rpc/call {:method "ens_publicKeyOf"
:params [chain-id ens-name]
:on-success cb
;;at some point infura started to return execution reverted error instead of "0x" result
;;our code expects "0x" result
:on-error #(cb "0x")}))
(defn get-owner
[registry ens-name cb]
{:pre [(is-valid-eth-name? ens-name)]}
(owner registry ens-name cb))
(defn owner
[chain-id ens-name cb]
(json-rpc/call {:method "ens_ownerOf"
:params [chain-id ens-name]
:on-success cb
:on-error #(cb "0x")}))
(defn resource-url
[chain-id ens-name cb]
(json-rpc/call {:method "ens_resourceURL"
:params [chain-id ens-name]
:on-success #(cb (str "https://" (:Host %)))
:on-error #(cb "0x")}))
(defn expire-at
[chain-id ens-name cb]
(json-rpc/call {:method "ens_expireAt"
:params [chain-id ens-name]
:on-success
;;NOTE: returns a timestamp in s and we want ms
#(cb (* (js/Number (abi-spec/hex-to-number %)) 1000))}))
(defn register-prepare-tx
[chain-id from ens-name pubkey cb]
(json-rpc/call {:method "ens_registerPrepareTx"
:params [chain-id {:from from} ens-name pubkey]
:on-success cb}))
(defn set-pub-key-prepare-tx
[chain-id from ens-name pubkey cb]
(json-rpc/call {:method "ens_setPubKeyPrepareTx"
:params [chain-id {:from from} ens-name pubkey]
:on-success cb}))
-19
View File
@@ -1,19 +0,0 @@
(ns status-im.ethereum.ens-test
(:require [cljs.test :refer-macros [deftest is]]
[status-im.ethereum.ens :as ens]))
(deftest namehash
(is (= (str "0x" ens/default-namehash) (ens/namehash nil)))
(is (= (str "0x" ens/default-namehash) (ens/namehash "")))
(is (= "0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae"
(ens/namehash "eth")))
(is (= "0xde9b09fd7c5f901e23a3f19fecc54828e9c848539801e86591bd9801b019f84f"
(ens/namehash "foo.eth"))))
(deftest cleanup-hash
;; simpledapp.eth
(is (= "0xe30101701220795c1ea0ceaf4ceedc9896f14b73bb30e978e4855ee221b9a57f5a934268280e"
(ens/cleanup-hash "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026e30101701220795c1ea0ceaf4ceedc9896f14b73bb30e978e4855ee221b9a57f5a934268280e0000000000000000000000000000000000000000000000000000")))
;; ethereum.eth
(is (= "0xe301017012206e70f0f72e2bcd0ad69bb2b15ee9e0f4f88693f6b2f485e48699e7d6f8dbd62a"
(ens/cleanup-hash "0x00000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000026e301017012206e70f0f72e2bcd0ad69bb2b15ee9e0f4f88693f6b2f485e48699e7d6f8dbd62a0000000000000000000000000000000000000000000000000000"))))
+12 -1
View File
@@ -29,6 +29,14 @@
"eth_getCode" {}
"eth_syncing" {}
"eth_feeHistory" {}
"ens_publicKeyOf" {}
"ens_addressOf" {}
"ens_expireAt" {}
"ens_ownerOf" {}
"ens_contentHash" {}
"ens_resourceURL" {}
"ens_registerPrepareTx" {}
"ens_setPubKeyPrepareTx" {}
"net_version" {}
"web3_clientVersion" {}
"shh_generateSymKeyFromPassword" {}
@@ -49,6 +57,7 @@
"wakuext_startMessenger" {}
"wakuext_sendPairInstallation" {}
"wakuext_syncDevices" {}
"wakuext_syncBookmark" {}
"wakuext_requestMessages" {}
"wakuext_sendDirectMessage" {}
"wakuext_sendPublicMessage" {}
@@ -196,13 +205,15 @@
"wallet_getOpenseaCollectionsByOwner" {}
"wallet_getOpenseaAssetsByOwnerAndCollection" {}
"wallet_loadTransferByHash" {}
"wallet_getTokens" {};, %* [chainId]}
"wallet_getTokensBalancesForChainIDs" {};, %* [@[chainId], accounts, tokens]
"browsers_getBrowsers" {}
"browsers_addBrowser" {}
"browsers_deleteBrowser" {}
"browsers_getBookmarks" {}
"browsers_storeBookmark" {}
"browsers_updateBookmark" {}
"browsers_deleteBookmark" {}
"browsers_removeBookmark" {}
"mailservers_getMailserverRequestGaps" {}
"mailservers_addMailserverRequestGaps" {}
"mailservers_deleteMailserverRequestGaps" {}
+17 -28
View File
@@ -1,37 +1,26 @@
(ns status-im.ethereum.macros
(:require [clojure.string :as string]
[clojure.java.io :as io]))
(:require [clojure.java.io :as io]
[clojure.string :as cstr]))
(defn token-icon-path
[network symbol]
(let [s (str "./resources/images/tokens/" (name network) "/" (name symbol) ".png")
s-js (str "." s)
image (gensym)]
(if (.exists (io/file s))
`(let [~image (atom nil)]
(fn []
(or @~image
(reset! ~image (js/require ~s-js)))))
`(let [~image (atom nil)]
(fn []
(or
@~image
(reset! ~image
(js/require "../resources/images/tokens/default-token.png"))))))))
(defn- token->icon [network {:keys [icon symbol]}]
;; Tokens can define their own icons.
;; If not try to make one using a local image as resource, if it does not exist fallback to default.
(or icon (token-icon-path network symbol)))
(defn token-icon-path [path]
(fn [el]
(let [el (cstr/replace el ".png" "")
s (str path el ".png")
s-js (str "." s)]
(when (.exists (io/file s))
[el `(js/require ~s-js)]))))
(defmacro resolve-icons
"In react-native arguments to require must be static strings.
Resolve all icons at compilation time so no variable is used."
[network tokens]
(mapv #(-> %
(assoc-in [:icon :source] (token->icon network %))
(update :address string/lower-case))
tokens))
[network]
(let [path (str "./resources/images/tokens/" (name network) "/")
files (->> (io/file path)
file-seq
(filter #(cstr/ends-with? % "png"))
(map #(first (cstr/split (.getName %) #"@")))
distinct)]
(into {} (map (token-icon-path path) files))))
(defn network->icon [network]
(let [s (str "./resources/images/tokens/" (name network) "/0-native.png")
-35
View File
@@ -1,35 +0,0 @@
(ns status-im.ethereum.resolver
(:refer-clojure :exclude [name])
(:require [status-im.ethereum.ens :as ens]
[status-im.ethereum.stateofus :as stateofus]
[clojure.string :as string]))
(def default-hash "0x0000000000000000000000000000000000000000000000000000000000000000")
(defn contenthash [registry ens-name cb]
(ens/resolver registry
ens-name
#(ens/contenthash % ens-name cb)))
(defn content [registry ens-name cb]
(ens/resolver registry
ens-name
#(ens/content % ens-name cb)))
(defn name [registry ens-name cb]
(ens/resolver registry
ens-name
#(ens/name % ens-name cb)))
(defn pubkey
[registry ens-name cb]
{:pre [(ens/is-valid-eth-name? ens-name)]}
(ens/resolver registry
ens-name
#(ens/pubkey % ens-name cb)))
(defn ens-name-parse [contact-identity]
(when (string? contact-identity)
(string/lower-case
(if (ens/is-valid-eth-name? contact-identity)
contact-identity
(stateofus/subdomain contact-identity)))))
+15 -21
View File
@@ -1,8 +1,8 @@
(ns status-im.ethereum.stateofus
(:require [clojure.string :as string]
[status-im.ethereum.json-rpc :as json-rpc]
[status-im.utils.config :as config]
[status-im.ethereum.ens :as ens]))
[status-im.ethereum.ens :as ens]
[status-im.ethereum.core :as ethereum]))
(def domain "stateofus.eth")
@@ -37,14 +37,13 @@
(defn get-registrar [chain callback]
(if-let [contract (get @registrars-cache chain)]
(callback contract)
(let [registry (get ens/ens-registries chain)]
(ens/get-owner
registry
domain
(fn [addr]
(let [addr (or addr (get old-registrars chain))]
(swap! registrars-cache assoc chain addr)
(callback addr)))))))
(ens/owner
(ethereum/chain-keyword->chain-id chain)
domain
(fn [addr]
(let [addr (or addr (get old-registrars chain))]
(swap! registrars-cache assoc chain addr)
(callback addr))))))
(defn get-cached-registrar [chain]
(get @registrars-cache chain (get old-registrars chain)))
@@ -58,14 +57,9 @@
(and (lower-case? username)
(re-find #"^[a-z0-9]+$" username))))
(defn get-expiration-time
[registrar label-hash cb]
(json-rpc/eth-call
{:contract registrar
:method "getExpirationTime(bytes32)"
:params [label-hash]
:outputs ["uint256"]
:on-success
(fn [[release-time]]
;;NOTE: returns a timestamp in s and we want ms
(cb (* release-time 1000)))}))
(defn ens-name-parse [contact-identity]
(when (string? contact-identity)
(string/lower-case
(if (ens/is-valid-eth-name? contact-identity)
contact-identity
(subdomain contact-identity)))))
+12 -796
View File
@@ -52,800 +52,20 @@
(defn ethereum? [symbol]
(native-currency-symbols symbol))
;; NOTE(goranjovic) - fields description:
;;
;; - address - token contract address
;; - symbol - token identifier, must be unique within network
;; - name - token display name
;; - decimals - the maximum number of decimals (raw balance must be divided by 10^decimals to get the actual amount)
;; - nft? - set to true when token is an ERC-781 collectible
;; - hidden? - when true, token is not displayed in any asset selection screens, but will be displayed properly in
;; transaction history (setting this field is a form of "soft" token removal).
;; - skip-decimals-check? - some tokens do not include the decimals field, which is compliant with ERC-20 since it is
;;; and optional field. In that case we are explicitly skipping this step in order not to raise a false error.
;;; We have this explicit flag for decimals and not for name and symbol because we can't tell apart unset decimals
;;; from 0 decimals case.
(def all-default-tokens
{:mainnet
(resolve-icons :mainnet
[{:symbol :DAI
:name "Dai Stablecoin"
:address "0x6b175474e89094c44da98b954eedeac495271d0f"
:decimals 18}
{:symbol :SAI
:name "Sai Stablecoin v1.0"
:address "0x89d24a6b4ccb1b6faa2625fe562bdd9a23260359"
:decimals 18}
{:symbol :MKR
:name "MKR"
:address "0x9f8f72aa9304c8b593d555f12ef6589cc3a579a2"
:decimals 18}
{:symbol :EOS
:name "EOS"
:address "0x86fa049857e0209aa7d9e616f7eb3b3b78ecfdb0"
:decimals 18}
{:symbol :OMG
:name "OMGToken"
:address "0xd26114cd6ee289accf82350c8d8487fedb8a0c07"
:decimals 18}
{:symbol :PPT
:name "Populous Platform"
:address "0xd4fa1460f537bb9085d22c7bccb5dd450ef28e3a"
:decimals 8}
{:symbol :REP
:name "Reputation"
:address "0x1985365e9f78359a9b6ad760e32412f4a445e862"
:decimals 18}
{:symbol :POWR
:name "PowerLedger"
:address "0x595832f8fc6bf59c85c527fec3740a1b7a361269"
:decimals 6}
{:symbol :PAY
:name "TenX Pay Token"
:address "0xb97048628db6b661d4c2aa833e95dbe1a905b280"
:decimals 18}
{:symbol :VRS
:name "Veros"
:address "0x92e78dae1315067a8819efd6dca432de9dcde2e9"
:decimals 6}
{:symbol :GNT
:name "Golem Network Token"
:address "0xa74476443119a942de498590fe1f2454d7d4ac0d"
:decimals 18}
{:symbol :SALT
:name "Salt"
:address "0x4156d3342d5c385a87d264f90653733592000581"
:decimals 8}
{:symbol :BNB
:name "BNB"
:address "0xb8c77482e45f1f44de1745f52c74426c631bdd52"
:decimals 18}
{:symbol :BAT
:name "Basic Attention Token"
:address "0x0d8775f648430679a709e98d2b0cb6250d2887ef"
:decimals 18}
{:symbol :KNC
:name "Kyber Network Crystal"
:address "0xdd974d5c2e2928dea5f71b9825b8b646686bd200"
:decimals 18}
{:symbol :BTU
:name "BTU Protocol"
:address "0xb683D83a532e2Cb7DFa5275eED3698436371cc9f"
:decimals 18}
{:symbol :DGD
:name "Digix DAO"
:address "0xe0b7927c4af23765cb51314a0e0521a9645f0e2a"
:decimals 9
:skip-decimals-check? true}
{:symbol :AE
:name "Aeternity"
:address "0x5ca9a71b1d01849c0a95490cc00559717fcf0d1d"
:decimals 18}
{:symbol :TRX
:name "Tronix"
:address "0xf230b790e05390fc8295f4d3f60332c93bed42e2"
:decimals 6}
{:symbol :RDN
:name "Raiden Token"
:address "0x255aa6df07540cb5d3d297f0d0d4d84cb52bc8e6"
:decimals 18}
{:symbol :SNT
:name "Status Network Token"
:address "0x744d70fdbe2ba4cf95131626614a1763df805b9e"
:decimals 18}
{:symbol :SNGLS
:name "SingularDTV"
:address "0xaec2e87e0a235266d9c5adc9deb4b2e29b54d009"
:decimals 0}
{:symbol :GNO
:name "Gnosis Token"
:address "0x6810e776880c02933d47db1b9fc05908e5386b96"
:decimals 18}
{:symbol :STORJ
:name "StorjToken"
:address "0xb64ef51c888972c908cfacf59b47c1afbc0ab8ac"
:decimals 8}
{:symbol :ADX
:name "AdEx"
:address "0x4470bb87d77b963a013db939be332f927f2b992e"
:decimals 4}
{:symbol :FUN
:name "FunFair"
:address "0x419d0d8bdd9af5e606ae2232ed285aff190e711b"
:decimals 8}
{:symbol :CVC
:name "Civic"
:address "0x41e5560054824ea6b0732e656e3ad64e20e94e45"
:decimals 8}
{:symbol :ICN
:name "ICONOMI"
:address "0x888666ca69e0f178ded6d75b5726cee99a87d698"
:decimals 18}
{:symbol :WTC
:name "Walton Token"
:address "0xb7cb1c96db6b22b0d3d9536e0108d062bd488f74"
:decimals 18}
{:symbol :BTM
:name "Bytom"
:address "0xcb97e65f07da24d46bcdd078ebebd7c6e6e3d750"
:decimals 8}
{:symbol :ZRX
:name "0x Protocol Token"
:address "0xe41d2489571d322189246dafa5ebde1f4699f498"
:decimals 18}
{:symbol :BNT
:name "Bancor Network Token"
:address "0x1f573d6fb3f13d689ff844b4ce37794d79a7ff1c"
:decimals 18}
{:symbol :MTL
:name "Metal"
:address "0xf433089366899d83a9f26a773d59ec7ecf30355e"
:decimals 8}
{:symbol :PPP
:name "PayPie"
:address "0xc42209accc14029c1012fb5680d95fbd6036e2a0"
:decimals 18}
{:symbol :LINK
:name "ChainLink Token"
:address "0x514910771af9ca656af840dff83e8264ecf986ca"
:decimals 18}
{:symbol :KIN
:name "Kin"
:address "0x818fc6c2ec5986bc6e2cbf00939d90556ab12ce5"
:decimals 18}
{:symbol :ANT
:name "Aragon Network Token"
:address "0x960b236a07cf122663c4303350609a66a7b288c0"
:decimals 18}
{:symbol :MGO
:name "MobileGo Token"
:address "0x40395044ac3c0c57051906da938b54bd6557f212"
:decimals 8}
{:symbol :MCO
:name "Monaco"
:address "0xb63b606ac810a52cca15e44bb630fd42d8d1d83d"
:decimals 8}
{:symbol :LRC
:name "LoopringCoin V2"
:address "0xbbbbca6a901c926f240b89eacb641d8aec7aeafd"
:decimals 18}
{:symbol :ZSC
:name "Zeus Shield Coin"
:address "0x7a41e0517a5eca4fdbc7fbeba4d4c47b9ff6dc63"
:decimals 18}
{:symbol :XDATA
:name "Streamr (old)"
:address "0x0cf0ee63788a0849fe5297f3407f701e122cc023"
:decimals 18}
{:symbol :RCN
:name "Ripio Credit Network Token"
:address "0xf970b8e36e23f7fc3fd752eea86f8be8d83375a6"
:decimals 18}
{:symbol :WINGS
:name "WINGS"
:address "0x667088b212ce3d06a1b553a7221e1fd19000d9af"
:decimals 18}
{:symbol :EDG
:name "Edgeless"
:address "0x08711d3b02c8758f2fb3ab4e80228418a7f8e39c"
:decimals 0}
{:symbol :MLN
:name "Melon Token"
:address "0xbeb9ef514a379b997e0798fdcc901ee474b6d9a1"
:decimals 18}
{:symbol :MDA
:name "Moeda Loyalty Points"
:address "0x51db5ad35c671a87207d88fc11d593ac0c8415bd"
:decimals 18}
{:symbol :PLR
:name "PILLAR"
:address "0xe3818504c1b32bf1557b16c238b2e01fd3149c17"
:decimals 18}
{:symbol :QRL
:name "QRL"
:address "0x697beac28b09e122c4332d163985e8a73121b97f"
:decimals 8}
{:symbol :MOD
:name "Modum Token"
:address "0x957c30ab0426e0c93cd8241e2c60392d08c6ac8e"
:decimals 0}
{:symbol :TAAS
:name "Token-as-a-Service"
:address "0xe7775a6e9bcf904eb39da2b68c5efb4f9360e08c"
:decimals 6}
{:symbol :GRID
:name "GRID Token"
:address "0x12b19d3e2ccc14da04fae33e63652ce469b3f2fd"
:decimals 12}
{:symbol :SAN
:name "SANtiment network token"
:address "0x7c5a0ce9267ed19b22f8cae653f198e3e8daf098"
:decimals 18}
{:symbol :SNM
:name "SONM Token"
:address "0x983f6d60db79ea8ca4eb9968c6aff8cfa04b3c63"
:decimals 18}
{:symbol :REQ
:name "Request Token"
:address "0x8f8221afbb33998d8584a2b05749ba73c37a938a"
:decimals 18}
{:symbol :SUB
:name "Substratum"
:address "0x12480e24eb5bec1a9d4369cab6a80cad3c0a377a"
:decimals 2}
{:symbol :MANA
:name "Decentraland MANA"
:address "0x0f5d2fb29fb7d3cfee444a200298f468908cc942"
:decimals 18}
{:symbol :AST
:name "AirSwap Token"
:address "0x27054b13b1b798b345b591a4d22e6562d47ea75a"
:decimals 4}
{:symbol :R
:name "R token"
:address "0x48f775efbe4f5ece6e0df2f7b5932df56823b990"
:decimals 0}
{:symbol :1ST
:name "FirstBlood Token"
:address "0xaf30d2a7e90d7dc361c8c4585e9bb7d2f6f15bc7"
:decimals 18}
{:symbol :CFI
:name "Cofoundit"
:address "0x12fef5e57bf45873cd9b62e9dbd7bfb99e32d73e"
:decimals 18}
{:symbol :ENG
:name "Enigma"
:address "0xf0ee6b27b759c9893ce4f094b49ad28fd15a23e4"
:decimals 8}
{:symbol :AMB
:name "Amber Token"
:address "0x4dc3643dbc642b72c158e7f3d2ff232df61cb6ce"
:decimals 18}
{:symbol :XPA
:name "XPlay Token"
:address "0x90528aeb3a2b736b780fd1b6c478bb7e1d643170"
:decimals 18}
{:symbol :OTN
:name "Open Trading Network"
:address "0x881ef48211982d01e2cb7092c915e647cd40d85c"
:decimals 18}
{:symbol :TRST
:name "Trustcoin"
:address "0xcb94be6f13a1182e4a4b6140cb7bf2025d28e41b"
:decimals 6}
{:symbol :TKN
:name "Monolith TKN"
:address "0xaaaf91d9b90df800df4f55c205fd6989c977e73a"
:decimals 8}
{:symbol :RHOC
:name "RHOC"
:address "0x168296bb09e24a88805cb9c33356536b980d3fc5"
:decimals 8}
{:symbol :TGT
:name "Target Coin"
:address "0xac3da587eac229c9896d919abc235ca4fd7f72c1"
:decimals 1}
{:symbol :EVX
:name "Everex"
:address "0xf3db5fa2c66b7af3eb0c0b782510816cbe4813b8"
:decimals 4}
{:symbol :ICOS
:name "ICOS"
:address "0x014b50466590340d41307cc54dcee990c8d58aa8"
:decimals 6}
{:symbol :DNT
:name "district0x Network Token"
:address "0x0abdace70d3790235af448c88547603b945604ea"
:decimals 18}
{:symbol :DCN
:name "Dentacoin"
:address "0x08d32b0da63e2c3bcf8019c9c5d849d7a9d791e6"
:decimals 0}
{:symbol :EDO
:name "Eidoo Token"
:address "0xced4e93198734ddaff8492d525bd258d49eb388e"
:decimals 18}
{:symbol :CSNO
:name "BitDice"
:address "0x29d75277ac7f0335b2165d0895e8725cbf658d73"
:decimals 8}
{:symbol :COB
:name "Cobinhood Token"
:address "0xb2f7eb1f2c37645be61d73953035360e768d81e6"
:decimals 18}
{:symbol :ENJ
:name "Enjin Coin"
:address "0xf629cbd94d3791c9250152bd8dfbdf380e2a3b9c"
:decimals 18}
{:symbol :AVT
:name "AVENTUS"
:address "0x0d88ed6e74bbfd96b831231638b66c05571e824f"
:decimals 18}
{:symbol :TIME
:name "Chronobank TIME"
:address "0x6531f133e6deebe7f2dce5a0441aa7ef330b4e53"
:decimals 8}
{:symbol :CND
:name "Cindicator Token"
:address "0xd4c435f5b09f855c3317c8524cb1f586e42795fa"
:decimals 18}
{:symbol :STX
:name "Stox"
:address "0x006bea43baa3f7a6f765f14f10a1a1b08334ef45"
:decimals 18}
{:symbol :XAUR
:name "Xaurum"
:address "0x4df812f6064def1e5e029f1ca858777cc98d2d81"
:decimals 8}
{:symbol :VIB
:name "Vibe"
:address "0x2c974b2d0ba1716e644c1fc59982a89ddd2ff724"
:decimals 18}
{:symbol :PRG
:name "PRG"
:address "0x7728dfef5abd468669eb7f9b48a7f70a501ed29d"
:decimals 6}
{:symbol :DPY
:name "Delphy Token"
:address "0x6c2adc2073994fb2ccc5032cc2906fa221e9b391"
:decimals 18}
{:symbol :CDT
:name "CoinDash Token"
:address "0x2fe6ab85ebbf7776fee46d191ee4cea322cecf51"
:decimals 18}
{:symbol :TNT
:name "Tierion Network Token"
:address "0x08f5a9235b08173b7569f83645d2c7fb55e8ccd8"
:decimals 8}
{:symbol :DRT
:name "DomRaiderToken"
:address "0x9af4f26941677c706cfecf6d3379ff01bb85d5ab"
:decimals 8}
{:symbol :SPANK
:name "SPANK"
:address "0x42d6622dece394b54999fbd73d108123806f6a18"
:decimals 18}
{:symbol :BRLN
:name "Berlin Coin"
:address "0x80046305aaab08f6033b56a360c184391165dc2d"
:decimals 18}
{:symbol :USDC
:name "USD Coin"
:address "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48"
:decimals 6}
{:symbol :LPT
:name "Livepeer Token"
:address "0x58b6a8a3302369daec383334672404ee733ab239"
:decimals 18}
{:symbol :ST
:name "Simple Token"
:address "0x2c4e8f2d746113d0696ce89b35f0d8bf88e0aeca"
:decimals 18}
{:symbol :WBTC
:name "Wrapped BTC"
:address "0x2260fac5e5542a773aa44fbcfedf7c193bc2c599"
:decimals 8}
{:symbol :BLT
:name "Bloom Token"
:address "0x107c4504cd79c5d2696ea0030a8dd4e92601b82e"
:decimals 18}
{:symbol :OXT
:name "Orchid"
:address "0x4575f41308EC1483f3d399aa9a2826d74Da13Deb"
:decimals 18}
;; NOTE(goranjovic): the following three tokens are removed from the Manage Assets list
;; and automatically removed from user's selection by a migration. However, we still need
;; them listed here in order to correctly display any previous transactions the user had
;; in their history prior to the upgrade. So, we're just hiding them, not actually deleting from the
;; app.
{:symbol :Centra
:name "Centra token"
:address "0x96a65609a7b84e8842732deb08f56c3e21ac6f8a"
:decimals 18
:hidden? true}
{:symbol :ROL
:name "DICE"
:address "0x2e071d2966aa7d8decb1005885ba1977d6038a65"
:decimals 16
:hidden? true}
{:symbol :ATM
:name "Attention Token of Media"
:address "0x9b11efcaaa1890f6ee52c6bb7cf8153ac5d74139"
:decimals 8
:hidden? true}
;; NOTE(goranjovic): the following tokens are collectibles
{:symbol :CK
:nft? true
:name "CryptoKitties"
:address "0x06012c8cf97bead5deae237070f9587f8e7a266d"}
{:symbol :EMONA
:nft? true
:name "EtheremonAsset"
:address "0xb2c0782ae4a299f7358758b2d15da9bf29e1dd99"}
{:symbol :STRK
:nft? true
:name "CryptoStrikers"
:address "0xdcaad9fd9a74144d226dbf94ce6162ca9f09ed7e"}
{:symbol :SUPR
:nft? true
:name "SupeRare"
:address "0x41a322b28d0ff354040e2cbc676f0320d8c8850d"}
{:symbol :SUPRR
:nft? true
:name "SuperRare"
:address "0xb932a70a57673d89f4acffbe830e8ed7f75fb9e0"}
{:symbol :KDO
:nft? true
:name "KudosToken"
:address "0x2aea4add166ebf38b63d09a75de1a7b94aa24163"}
{:address "0x99ea4dB9EE77ACD40B119BD1dC4E33e1C070b80d"
:decimals 18
:symbol :QSP
:name "Quantstamp Token"}
{:address "0x80fB784B7eD66730e8b1DBd9820aFD29931aab03"
:decimals 18
:symbol :LEND
:name "EthLend Token"}
{:address "0xA15C7Ebe1f07CaF6bFF097D8a589fb8AC49Ae5B3"
:decimals 18
:symbol :NPXS
:name "Pundi X Token"}
{:address "0xA4e8C3Ec456107eA67d3075bF9e3DF3A75823DB0"
:decimals 18
:symbol :LOOM
:name "LoomToken"}
{:address "0x0e0989b1f9B8A38983c2BA8053269Ca62Ec9B195"
:decimals 8
:symbol :POE
:name "Po.et"}
{:address "0x5732046A883704404F284Ce41FfADd5b007FD668"
:decimals 18
:symbol :BLZ
:name "Bluzelle Token"}
{:address "0xFA1a856Cfa3409CFa145Fa4e20Eb270dF3EB21ab"
:decimals 18
:symbol :IOST
:name "IOSToken"}
{:address "0x1776e1F26f98b1A5dF9cD347953a26dd3Cb46671"
:decimals 18
:symbol :NMR
:name "Numeraire"}
{:address "0x8E870D67F660D95d5be530380D0eC0bd388289E1"
:decimals 18
:symbol :USDP
:name "Pax Dollar"}
{:address "0xEA26c4aC16D4a5A106820BC8AEE85fd0b7b2b664"
:decimals 18
:symbol :QKC
:name "QuarkChain Token"}
{:address "0x45804880De22913dAFE09f4980848ECE6EcbAf78"
:decimals 18
:symbol :PAXG
:name "Paxos Gold"}
{:address "0x865ec58b06bF6305B886793AA20A2da31D034E68"
:decimals 18
:symbol :MOC
:name "Moss Coin"}
{:address "0x408e41876cCCDC0F92210600ef50372656052a38"
:decimals 18
:symbol :REN
:name "Republic Token"}
{:address "0x607F4C5BB672230e8672085532f7e901544a7375"
:decimals 9
:symbol :RLC
:name "iEx.ec Network Token"}
{:address "0x8400D94A5cb0fa0D041a3788e395285d61c9ee5e"
:decimals 8
:symbol :UBT
:name "UniBright"}
{:address "0x4f3AfEC4E5a3F2A6a1A411DEF7D7dFe50eE057bF"
:decimals 9
:symbol :DGX
:name "Digix Gold Token"}
{:address "0xEA38eAa3C86c8F9B751533Ba2E562deb9acDED40"
:decimals 18
:symbol :FUEL
:name "Fuel Token"}
{:address "0x00000100F2A2bd000715001920eB70D229700085"
:decimals 18
:symbol :TCAD
:name "TrueCAD"}
{:address "0x6710c63432A2De02954fc0f851db07146a6c0312"
:decimals 18
:symbol :MFG
:name "SyncFab Smart Manufacturing Blockchain"}
{:address "0x543Ff227F64Aa17eA132Bf9886cAb5DB55DCAddf"
:decimals 18
:symbol :GEN
:name "DAOstack"}
{:address "0x0E8d6b471e332F140e7d9dbB99E5E3822F728DA6"
:decimals 18
:symbol :ABYSS
:name "ABYSS"}
{:address "0xB62132e35a6c13ee1EE0f84dC5d40bad8d815206"
:decimals 18
:symbol :NEXO
:name "Nexo"}
{:address "0x0000000000085d4780B73119b644AE5ecd22b376"
:decimals 18
:symbol :TUSD
:name "TrueUSD"}
{:address "0xD0a4b8946Cb52f0661273bfbC6fD0E0C75Fc6433"
:decimals 18
:symbol :STORM
:name "Storm Token"}
{:address "0xaF4DcE16Da2877f8c9e00544c93B62Ac40631F16"
:decimals 5
:symbol :MTH
:name "Monetha"}
{:address "0x00000000441378008EA67F4284A57932B1c000a5"
:decimals 18
:symbol :TGBP
:name "TrueGBP"}
{:address "0xbf2179859fc6D5BEE9Bf9158632Dc51678a4100e"
:decimals 18
:symbol :ELF
:name "ELF Token"}
{:address "0x9992eC3cF6A55b00978cdDF2b27BC6882d88D1eC"
:decimals 18
:symbol :POLY
:name "Polymath"}
{:address "0x20F7A3DdF244dc9299975b4Da1C39F8D5D75f05A"
:decimals 6
:symbol :SPN
:name "Sapien Network"}
{:address "0x1a7a8BD9106F2B8D977E08582DC7d24c723ab0DB"
:decimals 18
:symbol :APPC
:name "AppCoins"}
{:address "0xdAC17F958D2ee523a2206206994597C13D831ec7"
:decimals 6
:symbol :USDT
:name "Tether USD"}
{:address "0xa3d58c4E56fedCae3a7c43A725aeE9A71F0ece4e"
:decimals 18
:symbol :MET
:name "Metronome"}
{:address "0x6f259637dcD74C767781E37Bc6133cd6A68aa161"
:decimals 18
:symbol :HT
:name "HuobiToken"}
{:address "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"
:decimals 18
:symbol :WETH
:name "Wrapped Ether"}
{:address "0x8f3470A7388c05eE4e7AF3d01D8C722b0FF52374"
:decimals 18
:symbol :VERI
:name "Veritaseum"}
{:address "0x00006100F7090010005F1bd7aE6122c3C2CF0090"
:decimals 18
:symbol :TAUD
:name "TrueAUD"}
{:address "0x66497A283E0a007bA3974e837784C6AE323447de"
:decimals 18
:symbol :PT
:name "PornToken"}
{:address "0xB24754bE79281553dc1adC160ddF5Cd9b74361a4"
:decimals 9
:symbol :XRL
:name "RIALTO"}
{:address "0xC011a73ee8576Fb46F5E1c5751cA3B9Fe0af2a6F"
:decimals 18
:symbol :SNX
:name "Synthetix Network Token"}
{:address "0x07e3c70653548B04f0A75970C1F81B4CBbFB606f"
:decimals 18
:symbol :DLT
:name "Delta"}
{:address "0x8207c1FfC5B6804F6024322CcF34F29c3541Ae26"
:decimals 18
:symbol :OGN
:name "OriginToken"}
{:address "0x554C20B7c486beeE439277b4540A434566dC4C02"
:decimals 18
:symbol :HST
:name "Decision Token"}
{:address "0x286BDA1413a2Df81731D4930ce2F862a35A609fE"
:decimals 18
:symbol :WaBi
:name "WaBi"}
{:address "0xE5a3229CCb22b6484594973A03a3851dCd948756"
:decimals 18
:symbol :RAE
:name "RAE Token"}
{:address "0x24692791Bc444c5Cd0b81e3CBCaba4b04Acd1F3B"
:decimals 18
:symbol :UKG
:name "UnikoinGold"}
{:address "0xD46bA6D942050d489DBd938a2C909A5d5039A161"
:decimals 9
:symbol :AMPL
:name "Ampleforth"}
{:address "0xA4Bdb11dc0a2bEC88d24A3aa1E6Bb17201112eBe"
:decimals 6
:symbol :USDS
:name "StableUSD"}
{:address "0xB98d4C97425d9908E66E53A6fDf673ACcA0BE986"
:decimals 18
:symbol :ABT
:name "ArcBlock"}
{:address "0x81c9151de0C8bafCd325a57E3dB5a5dF1CEBf79c"
:decimals 18
:symbol :DAT
:name "Datum Token"}
{:address "0xa6a840E50bCaa50dA017b91A0D86B8b2d41156EE"
:decimals 18
:symbol :EKO
:name "EchoLink"}
{:address "0x4a57E687b9126435a9B19E4A802113e266AdeBde"
:decimals 18
:symbol :FXC
:name "Flexacoin"}
{:address "0xC86D054809623432210c107af2e3F619DcFbf652"
:decimals 18
:symbol :UPP
:name "SENTINEL PROTOCOL"}
{:address "0x5Af2Be193a6ABCa9c8817001F45744777Db30756"
:decimals 8
:symbol :VGX
:name "Voyager"}
{:address "0x69b148395ce0015c13e36bffbad63f49ef874e03"
:symbol :DTA
:name "Data Token"
:decimals 18}
{:address "0x57Ab1ec28D129707052df4dF418D58a2D46d5f51"
:symbol :sUSD
:name "Synth sUSD"
:decimals 18}
{:address "0x5d3a536E4D6DbD6114cc1Ead35777bAB948E3643"
:symbol :cDAI
:name "Compound Dai"
:decimals 8}
{:address "0xba11d00c5f74255f56a5e366f4f77f5a186d7f55"
:symbol :BAND
:name "BandToken"
:decimals 18}
{:address "0xa7fc5d2453e3f68af0cc1b78bcfee94a1b293650"
:symbol :SPIKE
:name "Spiking"
:decimals 10}
{:address "0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984"
:symbol :UNI
:name "Uniswap"
:decimals 18}
{:address "0xc00e94cb662c3520282e6f5717214004a7f26888"
:symbol :COMP
:name "Compound"
:decimals 18}
{:address "0xba100000625a3754423978a60c9317c58a424e3d"
:symbol :BAL
:name "Balancer"
:decimals 18}
{:address "0x8ab7404063ec4dbcfd4598215992dc3f8ec853d7"
:symbol :AKRO
:name "Akropolis"
:decimals 18}
{:address "0x9ba00d6856a4edf4665bca2c2309936572473b7e"
:symbol :aUSDC
:name "Aave Interest bearing USDC"
:decimals 6}
{:address "0xc944e90c64b2c07662a292be6244bdf05cda44a7"
:symbol :GRT
:name "Graph Token"
:decimals 18}
{:address "0x7DD9c5Cba05E151C895FDe1CF355C9A1D5DA6429"
:symbol :GLM
:name "Golem Network Token"
:decimals 18}
{:address "0x23b608675a2b2fb1890d3abbd85c5775c51691d5"
:symbol :SOCKS
:name "Unisocks Edition 0"
:decimals 18}
{:address "0xEEF9f339514298C6A857EfCfC1A762aF84438dEE"
:symbol :HEZ
:name "Hermez Network Token"
:decimals 18}
{:address "0xaa6e8127831c9de45ae56bb1b0d4d4da6e5665bd"
:symbol :ETH2x-FLI
:name "ETH 2x Flexible Leverage Index"
:decimals 18}
{:address "0xba5BDe662c17e2aDFF1075610382B9B691296350"
:symbol :RARE
:name "SuperRare"
:decimals 18}
{:address "0xC18360217D8F7Ab5e7c516566761Ea12Ce7F9D72"
:symbol :ENS
:name "Ethereum Name Service"
:decimals 18}])
:testnet
(resolve-icons :testnet
[{:name "Status Test Token"
:symbol :STT
:decimals 18
;;NOTE(goranjovic): intentionally checksummed for purposes of testing
:address "0xc55cf4b03948d7ebc8b9e8bad92643703811d162"}
{:name "Handy Test Token"
:symbol :HND
:decimals 0
:address "0xdee43a267e8726efd60c2e7d5b81552dcd4fa35c"}
{:name "Lucky Test Token"
:symbol :LXS
:decimals 2
:address "0x703d7dc0bc8e314d65436adf985dda51e09ad43b"}
{:name "Adi Test Token"
:symbol :ADI
:decimals 7
:address "0xe639e24346d646e927f323558e6e0031bfc93581"}
{:name "Wagner Test Token"
:symbol :WGN
:decimals 10
:address "0x2e7cd05f437eb256f363417fd8f920e2efa77540"}
{:name "Modest Test Token"
:symbol :MDS
:decimals 18
:address "0x57cc9b83730e6d22b224e9dc3e370967b44a2de0"}])
:rinkeby
(resolve-icons :rinkeby
[{:name "Moksha Coin"
:symbol :MOKSHA
:decimals 18
:address "0x6ba7dc8dd10880ab83041e60c4ede52bb607864b"}
{:symbol :KDO
:nft? true
:name "KudosToken"
:address "0x93bb0afbd0627bbd3a6c72bc318341d3a22e254a"}
{:symbol :WIBB
:name "WIBB"
:address "0x7d4ccf6af2f0fdad48ee7958bcc28bdef7b732c7"
:decimals 18}
{:name "Status Test Token"
:symbol :STT
:decimals 18
:address "0xc55cf4b03948d7ebc8b9e8bad92643703811d162"}])
:xdai
(resolve-icons :xdai
[{:name "buffiDai"
:symbol :BUFF
:decimals 18
:address "0x3e50bf6703fc132a94e4baff068db2055655f11b"}])
(def token-icons
{:mainnet (resolve-icons :mainnet)
:testnet (resolve-icons :testnet)
:rinkeby (resolve-icons :rinkeby)
:xdai (resolve-icons :xdai)
:custom []})
(defn normalize-chain [tokens]
(reduce (fn [acc {:keys [address] :as token}]
(assoc acc address token))
{}
tokens))
(def default-token (js/require "../resources/images/tokens/default-token.png"))
(def all-tokens-normalized
(reduce-kv (fn [m k v]
(assoc m k (normalize-chain v)))
{}
all-default-tokens))
(defn update-icon
[network token]
(-> token
(assoc-in [:icon :source] (get-in token-icons [network (name (:symbol token))] default-token))
(update :address string/lower-case)))
(defn nfts-for [all-tokens]
(filter :nft? (vals all-tokens)))
@@ -867,8 +87,4 @@
(if (or (= (:symbol-display native-coin) symbol)
(= (:symbol native-coin) symbol))
native-coin
(symbol->token all-tokens symbol))))
(defn symbol->icon [sym]
(:icon (first (filter #(= sym (:symbol %))
(:mainnet all-default-tokens)))))
(symbol->token all-tokens symbol))))
+43 -25
View File
@@ -38,7 +38,7 @@
[status-im.navigation :as navigation]
status-im.notifications-center.core
status-im.pairing.core
status-im.popover.core
[status-im.popover.core :as popover]
status-im.profile.core
status-im.search.core
status-im.signals.core
@@ -52,7 +52,7 @@
status-im.utils.logging.core
[status-im.utils.universal-links.core :as universal-links]
[status-im.utils.utils :as utils]
status-im.visibility-status-popover.core
[status-im.visibility-status-popover.core :as visibility-status-popover]
status-im.visibility-status-updates.core
status-im.waku.core
status-im.wallet.accounts.core
@@ -60,7 +60,9 @@
[status-im.wallet.core :as wallet]
status-im.wallet.custom-tokens.core
[status-im.navigation.core :as navigation.core]
[status-im.multiaccounts.login.core :as login.core]))
[status-im.multiaccounts.login.core :as login.core]
[status-im.signing.core :as signing]
status-im.wallet-connect.core))
(re-frame/reg-fx
:dismiss-keyboard
@@ -115,31 +117,47 @@
(fx/defn system-theme-mode-changed
{:events [:system-theme-mode-changed]}
[{:keys [db] :as cofx} theme]
(let [cur-theme (get-in db [:multiaccount :appearance])
current-tab (get db :current-tab :chat)
view-id (:view-id db)
screen-params (get-in db [:navigation/screen-params view-id])
root-id @navigation.core/root-id]
(let [cur-theme (get-in db [:multiaccount :appearance])
current-tab (get db :current-tab :chat)
view-id (:view-id db)
screen-params (get-in db [:navigation/screen-params view-id])
root-id @navigation.core/root-id
dispatch-later (cond-> []
(= view-id :chat)
(conj {:ms 1000
:dispatch [:chat.ui/navigate-to-chat (:current-chat-id db)]})
(and
(= root-id :chat-stack)
(not-any? #(= view-id %) '(:home :empty-tab :wallet :status :my-profile :chat)))
(conj {:ms 1000
:dispatch [:navigate-to view-id screen-params]})
(some #(= view-id %) navigation.core/community-screens)
(conj {:ms 800 :dispatch
[:navigate-to :community
(get-in db [:navigation/screen-params :community])]})
(= view-id :community-emoji-thumbnail-picker)
(conj {:ms 900 :dispatch
[:navigate-to :create-community-channel
(get-in db [:navigation/screen-params :create-community-channel])]}))]
(navigation.core/dismiss-all-modals)
(when (or (nil? cur-theme) (zero? cur-theme))
(fx/merge cofx
{::multiaccounts/switch-theme (if (= :dark theme) 2 1)
:utils/dispatch-later
(cond-> [{:ms 2000 :dispatch
(if (= view-id :chat)
[:chat.ui/navigate-to-chat (:current-chat-id db)]
[:navigate-to view-id screen-params])}]
(some #(= view-id %) navigation.core/community-screens)
(conj {:ms 1000 :dispatch
[:navigate-to :community
(get-in db [:navigation/screen-params :community])]})
(= view-id :community-emoji-thumbnail-picker)
(conj {:ms 1500 :dispatch
[:navigate-to :create-community-channel
(get-in db [:navigation/screen-params :create-community-channel])]}))}
(bottom-sheet/hide-bottom-sheet)
(merge
{::multiaccounts/switch-theme (if (= :dark theme) 2 1)}
(when (seq dispatch-later)
{:utils/dispatch-later dispatch-later}))
(when (get-in db [:bottom-sheet/show?])
(bottom-sheet/hide-bottom-sheet))
(when (get-in db [:popover/popover])
(popover/hide-popover))
(when (get-in db [:visibility-status-popover/popover])
(visibility-status-popover/hide-visibility-status-popover))
(when (get-in db [:signing/tx])
(signing/discard))
(navigation/init-root root-id)
(when (= root-id :chat-stack)
(navigation/change-tab current-tab))))))
+1 -1
View File
@@ -677,7 +677,7 @@
:open-dapp
:open-dapp-store
:open-nfc-settings
:open-on-etherscan
:open-on-block-explorer
:optional
:outgoing
:pair

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