Compare commits

...
Author SHA1 Message Date
Richard Ramos 47cc8a5757 test: use debug level by default 2024-01-31 15:59:51 -04:00
BalogunofAfrica eda9464b6c fix(ios): button overlap (#18620) 2024-01-30 16:34:12 +01:00
frank 8f3385fc9f fix: endless logout (#18492) 2024-01-30 20:25:53 +08:00
Paul Fitzgerald 7eb4331de1 Chore(wallet): add bridge token page (#18560) 2024-01-30 03:22:45 -08:00
Anton Iakimov 46f01f5eb3 Revert "ci: don't fail on Diawi upload failure"
This reverts commit 36168256bf.
2024-01-30 11:42:04 +01:00
Shivek Khurana 0349b0ed3d 🎡 Don't scroll on press (#18662)
- Hack fix
- Scroll on press breaks something with FlatList
- Which causes some items to not render
- Could be related to scroll view inside scroll view
- But fixing this bug by compromising the UX a tiny bit
2024-01-30 08:32:20 +00:00
Siddarth Kumar f57a26b5f5 Remove hacks from darwin nix purge script (#18656)
## Summary
In this commit we : 
- instead of `cd` to `/Library/LaunchDaemons` and then attempting to `launchctl unload` the nixos plist files we just pass the full path to unload as seen in `nix` documentation here : https://nixos.org/manual/nix/stable/installation/uninstall.html#:~:text=Stop%20and%20remove%20the%20Nix%20daemon%20services%3A

- move killing a process by prompting for confirmation to a new shell script as per feedback from previous PR : https://github.com/status-im/status-mobile/pull/18192#discussion_r1439495310

- fix few small typos

## Platforms
- macOS
2024-01-30 09:00:26 +05:30
Lungu Cristian ab509da60e fix: profile image & customization color for share-qr-code (#18643) 2024-01-29 14:14:51 +02:00
Lungu Cristian 901818492d Replace unmaintained biometrics package (#18531)
* feat: added react-native-biometrics dependency

* chore: added malli schema to auth

* fix: malli schema

* feat: using react-native-biometrics

* fix: removed biometry not-enrolled error supression

* feat: added check for enabled biometric

* fix: biometrics error handling on ios

* chore: remove touch-id library

* chore: cleanup

* removed proj.list dep

* fix: gradle get_projects regex edge-case

Handles cases when the gradle project has a description, which shows up when running `gradle projects` as (`react-native-biometrics` - react-native-biometrics), breaking `make nix-update-gradle`. Here we're just adjusting the regex to ignore everything in the line after the closing (`).

* build: ran "make nix-update-gradle"

* chore: comment typo

* chore: replaced old lib in test mocks

* fix: addressed review comments

* fix: using event for standard-auth biometrics

* ref: using ex-cause for biometric error codes

* fix: removed promesa changes

* fix: auth slide biometric success not triggered
2024-01-29 13:33:46 +02:00
Ibrahem Khalil 302020653b Add lastOpenedAt and JoinedAt for communities (#18439) 2024-01-28 14:59:10 +02:00
Yevheniia Berdnyk 205b74cd34 e2e: remived xfail marks 2024-01-26 20:03:12 +02:00
mmilad75 be618bfafe Wallet: Disable long-press feature on tokens in watch-only accounts. #18597 (#18598)
* add functionality

* update condition
2024-01-26 21:30:01 +03:30
Ulises Manuel 550fa04e33 [#18512] incomplete list of collectibles (#18577)
* Fix var naming react-native-svg namespace

* Update collectible components to show SVGs

* Display collectibles containing collection images

* Show collectibles containing SVG animations as static images

* Reduce collectibles fetching priority

* Add support to visualize SVGs in collectible detail screen
2024-01-26 09:52:04 -06:00
yqrashawnandAjay Sivan 1acf8f0d07 feat: show highest permission role when join community (#18497)
* feat: get revealed accounts for joined community

Signed-off-by: yqrashawn <namy.19@gmail.com>

* Show token requirements only when membership permissions are present.

- Add membership-permissions? to community state.

* feat: show highest permission role in overview and req to join

Signed-off-by: yqrashawn <namy.19@gmail.com>

* feat: get highest perm role in addr for perms

Signed-off-by: yqrashawn <namy.19@gmail.com>

* feat: ui for address for perm drawer

* test: unit test and spec for handle-community

Signed-off-by: yqrashawn <namy.19@gmail.com>

* fix: for #18581

* refactor: based on PR feedback

- move <-rpc to data store
- `role->translation-key`
- highest-permission-role-text -> highest-role-text
- filter out nils for handle community test

Signed-off-by: yqrashawn <namy.19@gmail.com>

---------

Signed-off-by: yqrashawn <namy.19@gmail.com>
Co-authored-by: Ajay Sivan <ajayesivan@gmail.com>
2024-01-26 15:38:10 +08:00
Parvesh Monu d82bf3365d fix bottom tabs blur overlay color (#18621) 2024-01-26 11:44:58 +05:30
Jamie Caprani d8e0d1c36b chore: remove mock data from wallet and feature flag incomplete features (#18569) 2024-01-25 13:13:33 -08:00
Yevheniia Berdnyk ad7a95ed3d e2e: updated deep/universal links tests 2024-01-25 22:20:21 +02:00
Paul Fitzgerald cc24794b74 chore (shell): add indicators to share wallet qrs (#18523) 2024-01-25 19:00:18 +00:00
Omar Basem 1fb6c60f72 Wallet: network receiver preferences (#18583)
* wallet: network receiver preferences
2024-01-25 15:45:45 +04:00
Volodymyr Kozieiev 8999b2b9e8 Implement collectible image preview (#18449)
* Lightbox refactored and moved to common screens that can be reused
* Events renamed
* Unify constants namespace importing
2024-01-25 10:58:12 +00:00
mmilad75 ed7463132a The collectibles are not supported on Optimism and Arbitrum #18507 (#18562)
* add chain id to the request

* add tests

* fix lint issues

* remove OPENSEA_API_KEY

* move subscription to a helper method for chain-ids
2024-01-24 19:17:08 +03:30
Brian Sztamfater d20f10cf8b fix: fix slide button padding on transaction confirmation page (#18585)
Signed-off-by: Brian Sztamfater <brian@status.im>
2024-01-24 10:40:53 -03:00
Brian Sztamfater ebbae051bd fix: fix button color on input amount screen (#18572)
Signed-off-by: Brian Sztamfater <brian@status.im>
2024-01-24 10:27:00 -03:00
mmilad75 521f39b6fb No ability to enter/paste assets exceeds the users's balance #18526 (#18599)
* change functionality

* fix handle-swap

* fix lint issues

* update tests

* change error to error?

* change reset-input-error

* update tests

* fix lint issues
2024-01-24 16:37:47 +03:30
Siddarth Kumar ee1f93defb fix: xcbeautify usage without omitting crucial logs (#18605)
## Summary

I introduced `xcbeautify` inside `make run-ios` command which would sometimes skip spitting crucial logs to the terminal.
In cases where the `react-native-cli` would prompt me of a port being used by another metro server, those prompts would also never reach me since they were piped into `xcbeautify` essentially giving me the impression that `make run-ios` is still doing something when it was actually hung.

This is how `react-native-community/cli` looks for `xcbeautify` ->
https://github.com/react-native-community/cli/blob/main/packages/cli-platform-apple/src/commands/buildCommand/buildProject.ts#L139

This commit fixes the problem by exporting an env variable making `react-native-cli` aware that we have `xcbeautify` installed and this way we now get the full log output we were used to.
2024-01-24 15:28:42 +05:30
John Ngei 3665fe26da fixed: mute-icon when channel is muted 2024-01-24 00:25:16 +01:00
John Ngei 3ec7209fcc Update default wallet name
* updated default wallet name to 'Account 1'

https://github.com/status-im/status-go/compare/ea3e59ff...64c8ce2e

* updated status go
2024-01-23 23:44:47 +01:00
Paul FitzgeraldandAjay Sivan 195826a7f4 chore(quo): add component list item - network list to design system (#18547)
---------

Co-authored-by: Ajay Sivan <ajayesivan@gmail.com>
2024-01-23 11:41:20 -08:00
Ibrahem KhalilandYevheniia Berdnyk 5bb4f3632a [17514] Use OS emojis in emoji picker (#18397)
---------

Co-authored-by: Yevheniia Berdnyk <ie.berdnyk@gmail.com>
2024-01-23 14:41:43 +02:00
Mohamed Javid 4fe62553ca Wallet - Refresh tokens and prices (#18456)
This commit adds

- RPC call for start wallet which will signal the client to refresh data (tokens, prices, ...etc) every 10 minutes
- Refreshes tokens and prices every 10 minutes on receiving the "wallet-tick-reload" signal

---------

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
2024-01-23 17:59:29 +05:30
BalogunofAfrica cb586c8676 fix: make identifier carousel swipe-able (#18515) 2024-01-23 12:25:03 +01:00
Ibrahem Khalil fd50e4281c Add scroll view to profile tab (#18448) 2024-01-23 12:52:34 +02:00
Ulises Manuel dcbb080217 [#18458] Token input fixes (#18520)
* Add custom keyboard to token-input preview
* Fix token input flickering
2024-01-22 20:01:00 -06:00
Parvesh Monu 97d1b3faa1 fix cannot add existing ENS owned by user (#18567) 2024-01-23 04:42:56 +05:30
Nikolay 9c322397a2 chore(wallet): remove account confirmation UI (#18518) 2024-01-22 10:00:07 -08:00
Mohsen ca2b1d5c8e fix: remove quo preview from nightly builds (#18556) 2024-01-22 19:08:34 +03:30
Jamie Caprani 9a4bc7e250 feat(wallet): connect backend to transaction progress page (#18506) 2024-01-22 14:40:13 +00:00
Paul Fitzgerald c6dbfb6244 chore: add background color gradient to share qr code component (#18503) 2024-01-22 06:08:43 -08:00
Omar Basem 826ab6625e Wallet: token input conversion (#18539)
Wallet: token input conversion
2024-01-20 10:23:19 +04:00
Ulises Manuel a9ec2ca7ba Add support to display token images in token gated communities (#18174) 2024-01-19 20:51:50 -06:00
Parvesh Monu 1e11edc442 Remove last reagent atom from messages/view file (#18551) 2024-01-19 21:41:02 +05:30
codemaster bf8461f007 fix: wrong navigation bar color in transparent screens (#18451) 2024-01-19 07:19:58 -08:00
Mohamed Javid 5926426672 [Fix] Currency symbol on recovered profile (#18433)
This commit fixes the currency symbol not shown on the recovered profile.

--

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
2024-01-19 20:03:28 +05:30
yqrashawn e871357b67 refactor: move perm/airdrop addrs into community (#18571)
Signed-off-by: yqrashawn <namy.19@gmail.com>
2024-01-19 20:44:17 +08:00
Omar Basem 9f5e53cc63 wallet: fix address inconsistencies (#18558)
wallet: fix address inconsistencies
2024-01-19 15:45:17 +04:00
yqrashawn 61c0650cec fix: do not show community view until it's loaded (#18570) 2024-01-19 16:36:14 +08:00
Omar Basem 7cc570b6d0 wallet: fix route test net (#18553)
wallet: fix route test net
2024-01-19 07:47:37 +04:00
Brian Sztamfater e609e2ff6a fix: crash when selecting a collectible (#18541)
Signed-off-by: Brian Sztamfater <brian@status.im>
2024-01-18 16:05:09 -03:00
Alexander f8cdb3bd7b Style fix (#18191) 2024-01-18 16:23:42 +01:00
yqrashawn fe9a4eac59 feat: re-fetch community info in community overview and channel (#18465)
Signed-off-by: yqrashawn <namy.19@gmail.com>
2024-01-18 22:05:31 +08:00
frank d934dc26ef Remove the invocation of wakuext_chatMentionReplaceWithPublicKey (#18533) 2024-01-18 21:33:37 +08:00
Mohamed Javid ed3cb42572 Wallet - Add token filter and prices fallback for fiat amount calculation (#18398)
This commit:

- Adds a filter to remove tokens with no name or symbol to prevent displaying tokens with no data
- Adds a fallback value (zero) for token fiat value calculation and to prevent crash on token price calculation

---------

Signed-off-by: Mohamed Javid <19339952+smohamedjavid@users.noreply.github.com>
2024-01-18 15:16:00 +05:30
210 changed files with 3492 additions and 2683 deletions
+3 -2
View File
@@ -282,11 +282,12 @@ SIMULATOR=iPhone 13
# TODO: fix IOS_STATUS_GO_TARGETS to be either amd64 or arm64 when RN is upgraded # TODO: fix IOS_STATUS_GO_TARGETS to be either amd64 or arm64 when RN is upgraded
run-ios: export TARGET := ios run-ios: export TARGET := ios
run-ios: export IOS_STATUS_GO_TARGETS := ios/arm64;iossimulator/amd64 run-ios: export IOS_STATUS_GO_TARGETS := ios/arm64;iossimulator/amd64
run-ios: export XCBeautify=$(shell which xcbeautify) # for react-native-cli to pick this up and to auto format output
run-ios: ##@run Build iOS app and start it in a simulator/device run-ios: ##@run Build iOS app and start it in a simulator/device
ifneq ("$(SIMULATOR)", "") ifneq ("$(SIMULATOR)", "")
npx react-native run-ios --simulator="$(SIMULATOR)" | xcbeautify npx react-native run-ios --simulator="$(SIMULATOR)"
else else
npx react-native run-ios | xcbeautify npx react-native run-ios
endif endif
show-ios-devices: ##@other shows connected ios device and its name show-ios-devices: ##@other shows connected ios device and its name
+1 -3
View File
@@ -78,9 +78,7 @@ pipeline {
} }
stage('Upload') { stage('Upload') {
steps { script { steps { script {
catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE') { env.DIAWI_URL = ios.uploadToDiawi()
env.DIAWI_URL = ios.uploadToDiawi()
}
env.PKG_URL = env.DIAWI_URL env.PKG_URL = env.DIAWI_URL
jenkins.setBuildDesc(IPA: env.PKG_URL) jenkins.setBuildDesc(IPA: env.PKG_URL)
} } } }
+2 -2
View File
@@ -144,9 +144,9 @@ used for keycard
used for svg icons, mostly collectibles are using svg used for svg icons, mostly collectibles are using svg
TODO: updating requires a pod update on iOS TODO: updating requires a pod update on iOS
## "react-native-touch-id": "^4.4.1" ## "react-native-biometrics": "^3.0.1"
used for touch-id identification used for biometric authentication on Android and iOS
## "react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v8.0.7_3" ## "react-native-webview": "git+https://github.com/status-im/react-native-webview.git#v8.0.7_3"
+7 -7
View File
@@ -305,6 +305,8 @@ PODS:
- glog - glog
- react-native-background-timer (2.2.0): - react-native-background-timer (2.2.0):
- React - React
- react-native-biometrics (3.0.1):
- React-Core
- react-native-blob-util (0.13.18): - react-native-blob-util (0.13.18):
- React-Core - React-Core
- react-native-blur (4.3.3): - react-native-blur (4.3.3):
@@ -517,8 +519,6 @@ PODS:
- SocketRocket (0.6.1) - SocketRocket (0.6.1)
- SSZipArchive (2.4.3) - SSZipArchive (2.4.3)
- TOCropViewController (2.6.1) - TOCropViewController (2.6.1)
- TouchID (4.4.1):
- React
- Yoga (1.14.0) - Yoga (1.14.0)
DEPENDENCIES: DEPENDENCIES:
@@ -548,6 +548,7 @@ DEPENDENCIES:
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- React-logger (from `../node_modules/react-native/ReactCommon/logger`) - React-logger (from `../node_modules/react-native/ReactCommon/logger`)
- react-native-background-timer (from `../node_modules/react-native-background-timer`) - react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-biometrics (from `../node_modules/react-native-biometrics`)
- react-native-blob-util (from `../node_modules/react-native-blob-util`) - react-native-blob-util (from `../node_modules/react-native-blob-util`)
- "react-native-blur (from `../node_modules/@react-native-community/blur`)" - "react-native-blur (from `../node_modules/@react-native-community/blur`)"
- "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)" - "react-native-cameraroll (from `../node_modules/@react-native-camera-roll/camera-roll`)"
@@ -603,7 +604,6 @@ DEPENDENCIES:
- RNSVG (from `../node_modules/react-native-svg`) - RNSVG (from `../node_modules/react-native-svg`)
- secp256k1 (from `https://github.com/status-im/secp256k1.swift.git`) - secp256k1 (from `https://github.com/status-im/secp256k1.swift.git`)
- SSZipArchive (= 2.4.3) - SSZipArchive (= 2.4.3)
- TouchID (from `../node_modules/react-native-touch-id`)
- Yoga (from `../node_modules/react-native/ReactCommon/yoga`) - Yoga (from `../node_modules/react-native/ReactCommon/yoga`)
SPEC REPOS: SPEC REPOS:
@@ -669,6 +669,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/logger" :path: "../node_modules/react-native/ReactCommon/logger"
react-native-background-timer: react-native-background-timer:
:path: "../node_modules/react-native-background-timer" :path: "../node_modules/react-native-background-timer"
react-native-biometrics:
:path: "../node_modules/react-native-biometrics"
react-native-blob-util: react-native-blob-util:
:path: "../node_modules/react-native-blob-util" :path: "../node_modules/react-native-blob-util"
react-native-blur: react-native-blur:
@@ -778,8 +780,6 @@ EXTERNAL SOURCES:
secp256k1: secp256k1:
:git: https://github.com/status-im/secp256k1.swift.git :git: https://github.com/status-im/secp256k1.swift.git
:submodules: true :submodules: true
TouchID:
:path: "../node_modules/react-native-touch-id"
Yoga: Yoga:
:path: "../node_modules/react-native/ReactCommon/yoga" :path: "../node_modules/react-native/ReactCommon/yoga"
@@ -793,7 +793,7 @@ CHECKOUT OPTIONS:
:submodules: true :submodules: true
SPEC CHECKSUMS: SPEC CHECKSUMS:
boost: 64032b9e9b938fda23325e68a3771f0fabf414dc boost: 57d2868c099736d80fcd648bf211b4431e51a558
BVLinearGradient: 612a04ff38e8480291f3379ee5b5a2c571f03fe0 BVLinearGradient: 612a04ff38e8480291f3379ee5b5a2c571f03fe0
CryptoSwift: c4f2debceb38bf44c80659afe009f71e23e4a082 CryptoSwift: c4f2debceb38bf44c80659afe009f71e23e4a082
DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54 DoubleConversion: 5189b271737e1565bdce30deb4a08d647e3f5f54
@@ -822,6 +822,7 @@ SPEC CHECKSUMS:
React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba React-jsinspector: aef73cbd43b70675f572214d10fa438c89bf11ba
React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4 React-logger: 2e4aee3e11b3ec4fa6cfd8004610bbb3b8d6cca4
react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4 react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4
react-native-biometrics: 352e5a794bfffc46a0c86725ea7dc62deb085bdc
react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9 react-native-blob-util: 600972b1782380a5a7d5db61a3817ea32349dae9
react-native-blur: c6d0a1dc2b4b519f7afe3b14d8151998632b6d18 react-native-blur: c6d0a1dc2b4b519f7afe3b14d8151998632b6d18
react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35 react-native-cameraroll: 4701ae7c3dbcd3f5e9e150ca17f250a276154b35
@@ -881,7 +882,6 @@ SPEC CHECKSUMS:
SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17 SocketRocket: f32cd54efbe0f095c4d7594881e52619cfe80b17
SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef SSZipArchive: fe6a26b2a54d5a0890f2567b5cc6de5caa600aef
TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6 Yoga: 86fed2e4d425ee4c6eab3813ba1791101ee153c6
PODFILE CHECKSUM: 3f98ce893757dfa17e609ef7cd24fa41635b73a6 PODFILE CHECKSUM: 3f98ce893757dfa17e609ef7cd24fa41635b73a6
+25 -531
View File
@@ -1055,21 +1055,6 @@
} }
}, },
{
"path": "androidx/databinding/databinding-common/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"databinding-common-3.3.1.pom": {
"sha1": "2e932d3219ea5f6d1078b24a8a3ce24b209c9309",
"sha256": "sha256-J5Qv7Gy8ROM19MN5Rx/lo2BsA7Zwt+NG6lXxYtjrF10="
},
"databinding-common-3.3.1.jar": {
"sha1": "45795e2f688474b219d37beb7f9f6756578e6454",
"sha256": "sha256-mq9hUr+3QZCgovJ1St/aoqkP7Ef50KwR811ej5iYkyw="
}
}
},
{ {
"path": "androidx/databinding/databinding-common/3.5.4", "path": "androidx/databinding/databinding-common/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -1179,21 +1164,6 @@
} }
}, },
{
"path": "androidx/databinding/databinding-compiler-common/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"databinding-compiler-common-3.3.1.pom": {
"sha1": "123c2b1dd44ec6e2441be9441bdf393462936928",
"sha256": "sha256-na2hPeqxkcTcC9T7EvFs12+r1ygfSfnOHIirb3kXyzI="
},
"databinding-compiler-common-3.3.1.jar": {
"sha1": "e96aa159e1ed5c5a3461d15adfc42ef5b1f68b59",
"sha256": "sha256-sfLOroi0d73GMp2r8SCNhCHFrT/HzPpEOXEOVBcvxh0="
}
}
},
{ {
"path": "androidx/databinding/databinding-compiler-common/3.5.4", "path": "androidx/databinding/databinding-compiler-common/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -2755,21 +2725,6 @@
} }
}, },
{
"path": "com/android/databinding/baseLibrary/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"baseLibrary-3.3.1.pom": {
"sha1": "611fd96b47fdd27dd88afc23829975278d47774c",
"sha256": "sha256-dKLQobB7s6ExmWyEIG/CHmDQaT4pa7EI07c9B7hnUj8="
},
"baseLibrary-3.3.1.jar": {
"sha1": "702acc804e85563d3ae7b8ee49122e4f857dde83",
"sha256": "sha256-5QRyEqpp1J0FULCvlrQQC4xslwG4PD+24ZzGbzxK6cQ="
}
}
},
{ {
"path": "com/android/databinding/baseLibrary/3.5.4", "path": "com/android/databinding/baseLibrary/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -3288,21 +3243,6 @@
} }
}, },
{
"path": "com/android/tools/analytics-library/crash/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"crash-26.3.1.pom": {
"sha1": "7b667eb48f02b8ba2a981a962e9c1137e251c1e0",
"sha256": "sha256-m0FH4hP4dmWwzUXF6w47Q79EWJf5r9rKF/c8wjjF01c="
},
"crash-26.3.1.jar": {
"sha1": "46163f2cf0e16a1ba9be2ad6dddc39f1a1d6b613",
"sha256": "sha256-k5OoPOLz+pZ4LCU98yROaZo7PfGG3pJssTiVj6+VYpM="
}
}
},
{ {
"path": "com/android/tools/analytics-library/crash/26.5.4", "path": "com/android/tools/analytics-library/crash/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -3442,21 +3382,6 @@
} }
}, },
{
"path": "com/android/tools/analytics-library/protos/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"protos-26.3.1.pom": {
"sha1": "d6015a3a017dcb62d9a9a56c28b5c47bb6727a91",
"sha256": "sha256-IP1qlda7IElg7qdLFBTEWy78J0+4Tf90MnqRYezfc3k="
},
"protos-26.3.1.jar": {
"sha1": "f35a0accd93cfbb4306268ea748e1ac49920a0a8",
"sha256": "sha256-70/09xLY//RrI3jBwQh5l1hXdvpsGhwgBpbXd0eNnUw="
}
}
},
{ {
"path": "com/android/tools/analytics-library/protos/26.5.4", "path": "com/android/tools/analytics-library/protos/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -3596,21 +3521,6 @@
} }
}, },
{
"path": "com/android/tools/analytics-library/shared/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"shared-26.3.1.pom": {
"sha1": "af1e1e7d120696bfee452247b5224290d91d828f",
"sha256": "sha256-3Hxmxmp5mFLNaGRaEXOJSRxiTU1U+OzdX5QENgHtys4="
},
"shared-26.3.1.jar": {
"sha1": "3457faee7a68d84dcbd258889567153acfc731a2",
"sha256": "sha256-bSe5quJj4rwth0SR72dh86WuH34wzEq2v7ktd/2tO/A="
}
}
},
{ {
"path": "com/android/tools/analytics-library/shared/26.5.4", "path": "com/android/tools/analytics-library/shared/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -3750,21 +3660,6 @@
} }
}, },
{
"path": "com/android/tools/analytics-library/tracker/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"tracker-26.3.1.pom": {
"sha1": "6775a4eeafd2ef5270750388ee53503eeafa688b",
"sha256": "sha256-+mgVCnuDFGnXWVQ1ZGPkmcJjl1ubk/YmTQ3qjRHlKwg="
},
"tracker-26.3.1.jar": {
"sha1": "26248cad2525e003752322cfc6bd86182df7daac",
"sha256": "sha256-JG6AgEtANgzjGNp7nRKUjgrUHQwpzHvbOGF9weaWnYg="
}
}
},
{ {
"path": "com/android/tools/analytics-library/tracker/26.5.4", "path": "com/android/tools/analytics-library/tracker/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -3904,21 +3799,6 @@
} }
}, },
{
"path": "com/android/tools/annotations/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"annotations-26.3.1.pom": {
"sha1": "bce2159e811cceee12498cb34812cbae1e7b8eda",
"sha256": "sha256-Y7XWCr1wC4On07xPXk1+cRxZsOB6WsMmd2FOP/1xJLE="
},
"annotations-26.3.1.jar": {
"sha1": "3d46d5da6d5dd17df682a22b914cdc6b84677731",
"sha256": "sha256-U0rc5Q64KdT4yXW8NOpVs49oxjAOAA4rR8Q6xnLQxyE="
}
}
},
{ {
"path": "com/android/tools/annotations/26.5.4", "path": "com/android/tools/annotations/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -4346,21 +4226,6 @@
} }
}, },
{
"path": "com/android/tools/build/apksig/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"apksig-3.3.1.pom": {
"sha1": "e916d810d293ce4ab620435b41d2e3bc67972cd3",
"sha256": "sha256-cGliMgmhK5sal8XJypuekagqDkDG4h4LlMc5barHh80="
},
"apksig-3.3.1.jar": {
"sha1": "5dc32667e573a18b05119685ac3f2b8c0f17182d",
"sha256": "sha256-NXs57dinjUgKlT5rl8CYWf1AyXLBpJtvnTvT1LmYyy0="
}
}
},
{ {
"path": "com/android/tools/build/apksig/3.5.4", "path": "com/android/tools/build/apksig/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -4470,21 +4335,6 @@
} }
}, },
{
"path": "com/android/tools/build/apkzlib/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"apkzlib-3.3.1.pom": {
"sha1": "02214cdec00c2553430192a7f36e9a28cf96bf6f",
"sha256": "sha256-IVhIC03ar9F8K15CEeAPstojFB93BY+VjRqUlFBZ0IU="
},
"apkzlib-3.3.1.jar": {
"sha1": "0563a5b71668b4fe7da03a0a3054c9fdd973d3cf",
"sha256": "sha256-ZAVmwOT1BZATm7z7sP90TB9tzZ8mL48tAVn8QZQTgcw="
}
}
},
{ {
"path": "com/android/tools/build/apkzlib/3.5.4", "path": "com/android/tools/build/apkzlib/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -4624,21 +4474,6 @@
} }
}, },
{
"path": "com/android/tools/build/builder-model/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"builder-model-3.3.1.pom": {
"sha1": "4011d22709777c4063e84d39dbfe4ed535a31905",
"sha256": "sha256-XVNezIVtl4YN/ZElCFrqki4FTrfZ4SRPg3p0n76b++M="
},
"builder-model-3.3.1.jar": {
"sha1": "2c47cf0451da2eaad484ccd2d580a8cfd23fa064",
"sha256": "sha256-BXtSlcP+jNze+uaN47+/nHbTnaI+BMw0ZdZgA3oxfwA="
}
}
},
{ {
"path": "com/android/tools/build/builder-model/3.5.4", "path": "com/android/tools/build/builder-model/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -4790,21 +4625,6 @@
} }
}, },
{
"path": "com/android/tools/build/builder-test-api/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"builder-test-api-3.3.1.pom": {
"sha1": "e79a310b9c89fcb62f343b727f5747783c778861",
"sha256": "sha256-heZof7B9lqEFRE1Rouwnrz9798H5w72QcGZ9QblfZAY="
},
"builder-test-api-3.3.1.jar": {
"sha1": "c1a1ce91c0f34c43a52c54c1a2f6fdbaafadd3da",
"sha256": "sha256-KYnV5vE5YwFoEC40dwJCFbnKvew+Gqc4saBze0tfyww="
}
}
},
{ {
"path": "com/android/tools/build/builder-test-api/3.5.4", "path": "com/android/tools/build/builder-test-api/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -4956,21 +4776,6 @@
} }
}, },
{
"path": "com/android/tools/build/builder/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"builder-3.3.1.pom": {
"sha1": "fbca96adc8069b8fcb01c7271c3b4be4f901b517",
"sha256": "sha256-pg/e6U4EqMemXDi6m2UFhcOkv0cisGFnuI85cO4UA+Q="
},
"builder-3.3.1.jar": {
"sha1": "e4d2ad1ef694fca700b3ab1f4df4b79313d17c98",
"sha256": "sha256-zoj1PYZLXN+oW1cC5yiz1u0NOqkoy2HghCRtSlUBXFI="
}
}
},
{ {
"path": "com/android/tools/build/builder/3.5.4", "path": "com/android/tools/build/builder/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5092,21 +4897,6 @@
} }
}, },
{
"path": "com/android/tools/build/bundletool/0.6.0",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"bundletool-0.6.0.pom": {
"sha1": "5a6e5b5af1687285125f43e00a8e5a8efe6f76a4",
"sha256": "sha256-YDqi6WyRrkPynACNA16mdo0fJya6qjAqXwzYBFfgRiI="
},
"bundletool-0.6.0.jar": {
"sha1": "fb944be26f692e6ac937924ad5be7faa4093dd80",
"sha256": "sha256-QAU1QDlstRlZ0GYLSihk7mqBaXi/AT/UwB3L7IlcS7o="
}
}
},
{ {
"path": "com/android/tools/build/bundletool/0.9.0", "path": "com/android/tools/build/bundletool/0.9.0",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5242,21 +5032,6 @@
} }
}, },
{
"path": "com/android/tools/build/gradle-api/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"gradle-api-3.3.1.pom": {
"sha1": "c9a6cecdb5e233c2ffde76507bddc6f26ade5528",
"sha256": "sha256-3BUSdrg4w9TdT8QdcwRoOkTGotjb3ngpdN9p+1g8dRQ="
},
"gradle-api-3.3.1.jar": {
"sha1": "93aac19942998e480db4195212150fb30f7a78cd",
"sha256": "sha256-SMmx/OFMswX3/3XdL97Ds/qtZK/pFQbviYoEsIbmtBY="
}
}
},
{ {
"path": "com/android/tools/build/gradle-api/3.5.4", "path": "com/android/tools/build/gradle-api/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5457,21 +5232,6 @@
} }
}, },
{
"path": "com/android/tools/build/gradle/3.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"gradle-3.3.1.pom": {
"sha1": "1769370bffda87132eb79580bf54ccb9eb339020",
"sha256": "sha256-9eitp3Q6B3or5f+qF0Q0VmkSQa7ZEoYVgAXzUcRA/3w="
},
"gradle-3.3.1.jar": {
"sha1": "7d642f14aa35443dd7aeecd0600c17da37d3bccc",
"sha256": "sha256-9WSZq8Ux35uuhlFo5y8kCHAtSgH0bXuMGgowDWLcEb0="
}
}
},
{ {
"path": "com/android/tools/build/gradle/3.5.4", "path": "com/android/tools/build/gradle/3.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5593,21 +5353,6 @@
} }
}, },
{
"path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"jetifier-core-1.0.0-beta02.pom": {
"sha1": "db878af76000b681798b114a5169163b1efe59ea",
"sha256": "sha256-kJGGklY7MCjkeLrxyUM3jfSIOTpSeJWMbzaWO2jfw7k="
},
"jetifier-core-1.0.0-beta02.jar": {
"sha1": "fa93fdb83bdfd51e80e09a808fb2515a7134d406",
"sha256": "sha256-72H4QwL4tB3OOFjB/H56kOx0omOgITsfZegMVhRaR5M="
}
}
},
{ {
"path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04", "path": "com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5672,21 +5417,6 @@
} }
}, },
{
"path": "com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta02",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"jetifier-processor-1.0.0-beta02.pom": {
"sha1": "3bf006f5a449806a9ad493a99c9f9417b3040ef0",
"sha256": "sha256-+zYwiX233O8PE6VViKrYxkvcGPZ64KHizNR1igcioa8="
},
"jetifier-processor-1.0.0-beta02.jar": {
"sha1": "624d187319c8dfd6bc8281b4afbab87c39bbb005",
"sha256": "sha256-J+UFZWvlNLNIYHQy/EEeKVQLCE0NTkhlIyqnYswe9Aw="
}
}
},
{ {
"path": "com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04", "path": "com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5781,21 +5511,6 @@
} }
}, },
{
"path": "com/android/tools/build/manifest-merger/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"manifest-merger-26.3.1.pom": {
"sha1": "1aad18d13e7389cf148b1c6c468b2947ca23cbbd",
"sha256": "sha256-YNhLNKJlpgVeZhxpOvIFB1mgbYpuXLpk370esi0vpPU="
},
"manifest-merger-26.3.1.jar": {
"sha1": "aa94f738e318fc73059d9207f433f13556072d05",
"sha256": "sha256-hNrba75FBJgCeexO/2RdkaGgsPpagAQjmjS5vOZ1crU="
}
}
},
{ {
"path": "com/android/tools/build/manifest-merger/26.5.4", "path": "com/android/tools/build/manifest-merger/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -5947,21 +5662,6 @@
} }
}, },
{
"path": "com/android/tools/common/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"common-26.3.1.pom": {
"sha1": "b79360c83ea68ba7f0ac0fadf7c48e1a53511352",
"sha256": "sha256-mvrBYjeX9GBEevDT9gMuQfLdXx1N7pSbd3OBSR6NxVM="
},
"common-26.3.1.jar": {
"sha1": "b0e3aa846dd94f9608018f7ef6501d1069f6488c",
"sha256": "sha256-QashymLYGxzYciSbVSlD1rzTZmN32f1/cY3rQd7HM9Y="
}
}
},
{ {
"path": "com/android/tools/common/26.5.4", "path": "com/android/tools/common/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -6101,21 +5801,6 @@
} }
}, },
{
"path": "com/android/tools/ddms/ddmlib/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"ddmlib-26.3.1.pom": {
"sha1": "14405d92c982c96ace23b7a4c505b0d9de58cd8d",
"sha256": "sha256-MhUp9OEUJ8VtX0uLtcJkLAHza1LkO1wwnEk81IM9sNE="
},
"ddmlib-26.3.1.jar": {
"sha1": "61ca2873fcce1012ba9782adf7e9b0e164fb6007",
"sha256": "sha256-oTYJ+lhJr4+Os0JzaOG8KMp7DwSvKGwLqVoAfrkkHro="
}
}
},
{ {
"path": "com/android/tools/ddms/ddmlib/26.5.4", "path": "com/android/tools/ddms/ddmlib/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -6255,21 +5940,6 @@
} }
}, },
{
"path": "com/android/tools/dvlib/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"dvlib-26.3.1.pom": {
"sha1": "c438f3c025bd878ac3b54368e012b3792f9c8928",
"sha256": "sha256-3lL/6GFK8OCRXxbiIujskxfriVuL9GtfE7hU8B2mDdY="
},
"dvlib-26.3.1.jar": {
"sha1": "971430b6163a834656d07434c46fee64d109ad8e",
"sha256": "sha256-cLMOL4Sc+kKqE7+GWenhTAKtfLSkbLKB4CKOuC5XM4s="
}
}
},
{ {
"path": "com/android/tools/dvlib/26.5.4", "path": "com/android/tools/dvlib/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -6514,21 +6184,6 @@
} }
}, },
{
"path": "com/android/tools/layoutlib/layoutlib-api/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"layoutlib-api-26.3.1.pom": {
"sha1": "0355e0146c59a91fbb303d7faaa6d2d0413f5dde",
"sha256": "sha256-az/hSE+y4dWr/4VYc0KxX5tM3W6E/Vkjm9r7ShTtLXg="
},
"layoutlib-api-26.3.1.jar": {
"sha1": "969ef3a7c0c3b245a3efe8aff7a2f6f15ff4e824",
"sha256": "sha256-Tk6yS7wTU2sl1t063kHZJWr1rnuBpBe5a1WEMLUKQV4="
}
}
},
{ {
"path": "com/android/tools/layoutlib/layoutlib-api/26.5.4", "path": "com/android/tools/layoutlib/layoutlib-api/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -6728,21 +6383,6 @@
} }
}, },
{
"path": "com/android/tools/lint/lint-gradle-api/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"lint-gradle-api-26.3.1.pom": {
"sha1": "dbdbed4b5fa948b991335771c7005fc8aa8be73b",
"sha256": "sha256-6xds70C7k1Yy8gaACv2XSeMP+suuYIgzflDCP2vG5CA="
},
"lint-gradle-api-26.3.1.jar": {
"sha1": "d55e1bcbe4e7c0bb97f5c385a003c4339e38d07f",
"sha256": "sha256-RcBjcp/izzXWOh/9Ih17gtPkpxWay2AvqWuc/5BN5sk="
}
}
},
{ {
"path": "com/android/tools/lint/lint-gradle-api/26.5.4", "path": "com/android/tools/lint/lint-gradle-api/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -7017,21 +6657,6 @@
} }
}, },
{
"path": "com/android/tools/repository/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"repository-26.3.1.pom": {
"sha1": "ab5a2f6cbedccf4ff9efbd5301fe26c9d1aaea2a",
"sha256": "sha256-VRlYrn5H3gUTtUim8TrCf8Bv8/Ww/x6aQ8SAjzRz6zc="
},
"repository-26.3.1.jar": {
"sha1": "0fe4c713437ebfb8c68e95c717c063843bd63758",
"sha256": "sha256-UZR25PiBJMbbndC98J8MSqXMi/Hvq4Dd3uL3Wmug784="
}
}
},
{ {
"path": "com/android/tools/repository/26.5.4", "path": "com/android/tools/repository/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -7171,21 +6796,6 @@
} }
}, },
{
"path": "com/android/tools/sdklib/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"sdklib-26.3.1.pom": {
"sha1": "d6cfc0d8a0f49620138cfaea6c51201c7c678633",
"sha256": "sha256-gnUcqRaojEMoL7ZX1kJerqAstwsEAJlroYEZr6GRRCE="
},
"sdklib-26.3.1.jar": {
"sha1": "85c3c1de8824ca1f5ff491690931256c23a7297b",
"sha256": "sha256-aEN9Fbfmle8G6Yu88HEQQJlVtjsBijR7pofwGuxQfQo="
}
}
},
{ {
"path": "com/android/tools/sdklib/26.5.4", "path": "com/android/tools/sdklib/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -7325,21 +6935,6 @@
} }
}, },
{
"path": "com/android/tools/sdk-common/26.3.1",
"repo": "https://dl.google.com/dl/android/maven2",
"files": {
"sdk-common-26.3.1.pom": {
"sha1": "9b7b4248e21db9c342dba7c3e891f740246b97c3",
"sha256": "sha256-jFp1bExxaochJmmIvOMohkjrj3uDF3DFct1Pcp85iqg="
},
"sdk-common-26.3.1.jar": {
"sha1": "c9bed0f05024f919fe6168ef381afbe72074a272",
"sha256": "sha256-s2dcStd5EUHIfzaADxkUIz8q9Rx2b+F67BsVIsgOL8g="
}
}
},
{ {
"path": "com/android/tools/sdk-common/26.5.4", "path": "com/android/tools/sdk-common/26.5.4",
"repo": "https://dl.google.com/dl/android/maven2", "repo": "https://dl.google.com/dl/android/maven2",
@@ -11342,17 +10937,6 @@
} }
}, },
{
"path": "com/google/guava/guava-parent/26.0-jre",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"guava-parent-26.0-jre.pom": {
"sha1": "3a638a46e3277ff6a3d43d2a50bcccfac2966815",
"sha256": "sha256-u31c1BfA19714+Jwkv3SNSLT/CUa2KB5VsE84Fc66qM="
}
}
},
{ {
"path": "com/google/guava/guava-parent/27.0.1-jre", "path": "com/google/guava/guava-parent/27.0.1-jre",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -11505,21 +11089,6 @@
} }
}, },
{
"path": "com/google/guava/guava/26.0-jre",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"guava-26.0-jre.pom": {
"sha1": "7883e19f8b0cca8c4498d476743e31b107674155",
"sha256": "sha256-HDN63JpKtLhE2oHahZNlgbiUbHy3EoTF3L2vHqp+4Qk="
},
"guava-26.0-jre.jar": {
"sha1": "6a806eff209f36f635f943e16d97491f00f6bfab",
"sha256": "sha256-oOnKutZlvCC80rAfEI5fwD91bhOuqAq6rbn0BwM76iw="
}
}
},
{ {
"path": "com/google/guava/guava/27.0.1-jre", "path": "com/google/guava/guava/27.0.1-jre",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -14121,16 +13690,16 @@
}, },
{ {
"path": "net/bytebuddy/byte-buddy-agent/1.14.10", "path": "net/bytebuddy/byte-buddy-agent/1.14.11",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
"files": { "files": {
"byte-buddy-agent-1.14.10.pom": { "byte-buddy-agent-1.14.11.pom": {
"sha1": "ab24aa41b81d9496ec9ccd188a0449327d93bfdf", "sha1": "00a2165ce3253489dd9fd0836a169dfce74e2042",
"sha256": "sha256-U7yX6ca/fC0OX5y6x9Xeaykk2RbPS4F+ajo1kpx5a0o=" "sha256": "sha256-VBMQ/3WsTurkYFUJn8Ec3b5TqcBe6vry9wMgZQ2zzOk="
}, },
"byte-buddy-agent-1.14.10.jar": { "byte-buddy-agent-1.14.11.jar": {
"sha1": "90ed94ac044ea8953b224304c762316e91fd6b31", "sha1": "f9cb566608fbac6bc7bf54901a7aa11543a989ee",
"sha256": "sha256-Z5k6idR8pY/4aIAqREjd0VDl/k5aVkXe2ZDXtNVXprk=" "sha256": "sha256-L1N6Yhpk+nAT1oxpWnajTujXna105jXKyhbdViV664A="
} }
} }
}, },
@@ -14158,12 +13727,12 @@
}, },
{ {
"path": "net/bytebuddy/byte-buddy-parent/1.14.10", "path": "net/bytebuddy/byte-buddy-parent/1.14.11",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
"files": { "files": {
"byte-buddy-parent-1.14.10.pom": { "byte-buddy-parent-1.14.11.pom": {
"sha1": "4c560a925c30d5911dc875af5af4737e21b397be", "sha1": "696bf3e007e88bd1c0c2d877d74e0f3c56f2b96f",
"sha256": "sha256-xpghkGD7DlZaDyyWCU6Ssg7+FG/WFjayyeTAO9m6Sns=" "sha256": "sha256-RsDxP8l3jcLrtpdIgjqixMvwfqt9GMaqGRxSnRZQiSs="
} }
} }
}, },
@@ -14199,16 +13768,16 @@
}, },
{ {
"path": "net/bytebuddy/byte-buddy/1.14.10", "path": "net/bytebuddy/byte-buddy/1.14.11",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
"files": { "files": {
"byte-buddy-1.14.10.pom": { "byte-buddy-1.14.11.pom": {
"sha1": "8806052a8770a6b3e14362ed0ce6ef263e6a20ab", "sha1": "5ecfcd2f75aa8c7b6347d864a4d0a5212c360301",
"sha256": "sha256-zVh4KEX/ju3y7YOgw+30Xu65nhTAWvii6QGGDqCAzq8=" "sha256": "sha256-NYRJ1sc1OFhFCN2K5s/eVrr0o0t2e3HZzEZE8PH0IRo="
}, },
"byte-buddy-1.14.10.jar": { "byte-buddy-1.14.11.jar": {
"sha1": "8117daf4a612122eb4f517f66adff778cb8b4737", "sha1": "725602eb7c8c56b51b9c21f273f9df5c909d9e7d",
"sha256": "sha256-MObgRGQ3pn2zfit/fTP1B4fd/ZcDWTGd/QVGnaoty84=" "sha256": "sha256-Yq4oGH7SsGKBPaap1We/7nM8NBWCaZti3ZgCMHKaAxM="
} }
} }
}, },
@@ -17822,21 +17391,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-reflect/1.3.20",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-reflect-1.3.20.pom": {
"sha1": "7cc0e8dc8e9bf863127aee4501449e25e85a6f78",
"sha256": "sha256-ajZdjTUpX69X8t86ssuQQgnaqsiQb8Y3R9Pjv6sJPeI="
},
"kotlin-reflect-1.3.20.jar": {
"sha1": "cd49eec32cf964333faf59e04b4085eac7008477",
"sha256": "sha256-7hqSbtZY594ObfAkLNV0s7TgjmT+emgngibG8tM3Mjg="
}
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-reflect/1.3.50", "path": "org/jetbrains/kotlin/kotlin-reflect/1.3.50",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -18227,21 +17781,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-common-1.3.20.pom": {
"sha1": "507fa9faf5120c5c5247bc1b23476ad91760c09c",
"sha256": "sha256-BIjdHCYv5hfXc2K8Sa+BjYztQJQ6pbA8GITb8kdRCjA="
},
"kotlin-stdlib-common-1.3.20.jar": {
"sha1": "7d7934e26ce34da1a0a8d00e38038d7cf3375e89",
"sha256": "sha256-Br3Yrto0fvbvPk6diKASVMzbcHhLaXSV9qQh/WY6tkk="
}
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31", "path": "org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -18527,21 +18066,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-jdk7-1.3.20.pom": {
"sha1": "665178dfa4d04de64edecf5f0dbda61b55f8f4e3",
"sha256": "sha256-SdtmBiZNOmpI+QgzXASEYirVyPTfjEjdSgAmdA4eFsU="
},
"kotlin-stdlib-jdk7-1.3.20.jar": {
"sha1": "aa17d6fd473ce53061a7b2b9d2ae96f547cae93d",
"sha256": "sha256-/Sr3C90rwCT7A8vtYzyhQ4cso2pqFuIYzGfIkLefsx0="
}
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50", "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -18722,21 +18246,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-jdk8-1.3.20.pom": {
"sha1": "5c65523f57e3918ef722a15faae5173fc9a31331",
"sha256": "sha256-DF+73Rh7hSpRoKP7YskCSdpOdN//jf/5RphOL3AlCkI="
},
"kotlin-stdlib-jdk8-1.3.20.jar": {
"sha1": "b1f3cb184c4ce4139741454df2f8fca5320f822d",
"sha256": "sha256-bAgx5+OsqjkL8i952B8y8hLcj94ZgHo1Sk7k9migxHg="
}
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50", "path": "org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -18962,21 +18471,6 @@
} }
}, },
{
"path": "org/jetbrains/kotlin/kotlin-stdlib/1.3.20",
"repo": "https://repo.maven.apache.org/maven2",
"files": {
"kotlin-stdlib-1.3.20.pom": {
"sha1": "9d1e01f424795aa471a8def0b5dc8aeeb537aafd",
"sha256": "sha256-Mu+dGkDXXOr0F5KW7VTdylp+ekpl4aAZ5kmOusg14Rw="
},
"kotlin-stdlib-1.3.20.jar": {
"sha1": "eb2a232734e09fcd1b958a5c7520a93c6de38b32",
"sha256": "sha256-YB+RDalo+z2o6te2Tta/XJcQ2DzqN+SmMYR+fWiOM2E="
}
}
},
{ {
"path": "org/jetbrains/kotlin/kotlin-stdlib/1.3.31", "path": "org/jetbrains/kotlin/kotlin-stdlib/1.3.31",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
@@ -19666,16 +19160,16 @@
}, },
{ {
"path": "org/mockito/mockito-core/5.8.0", "path": "org/mockito/mockito-core/5.9.0",
"repo": "https://repo.maven.apache.org/maven2", "repo": "https://repo.maven.apache.org/maven2",
"files": { "files": {
"mockito-core-5.8.0.pom": { "mockito-core-5.9.0.pom": {
"sha1": "a2b7b33c5d649a2f48b1e7aab95d81671f66875f", "sha1": "2054dcc15b9ede899cb9ec6e8e960e36c68b4574",
"sha256": "sha256-dJWKzd4UjzC/ox/8CFi2L3H2PMws602KjGfX9CjUOi0=" "sha256": "sha256-BJDEL+Yu7WRzQdpAojcHGW2BO0TbKj3KMB2IFz56yPc="
}, },
"mockito-core-5.8.0.jar": { "mockito-core-5.9.0.jar": {
"sha1": "df310627f77f859114ad31e1376fff0dce263cca", "sha1": "faa88b96db3aeb96a93e83dec7491345bfbfc414",
"sha256": "sha256-wyD2YqA8KVHtzFGkS2TXmo6ZQ3P/VIRTtf2vad6+RoI=" "sha256": "sha256-u62Rhe1zSWX6x+Nn8OUVlvaVMeUdiyy87BBI3W+0Hyw="
} }
} }
}, },
-33
View File
@@ -49,7 +49,6 @@ androidx.core:core:1.7.0
androidx.cursoradapter:cursoradapter:1.0.0 androidx.cursoradapter:cursoradapter:1.0.0
androidx.customview:customview:1.0.0 androidx.customview:customview:1.0.0
androidx.databinding:databinding-common:3.2.1 androidx.databinding:databinding-common:3.2.1
androidx.databinding:databinding-common:3.3.1
androidx.databinding:databinding-common:3.5.4 androidx.databinding:databinding-common:3.5.4
androidx.databinding:databinding-common:4.1.0 androidx.databinding:databinding-common:4.1.0
androidx.databinding:databinding-common:7.0.4 androidx.databinding:databinding-common:7.0.4
@@ -57,7 +56,6 @@ androidx.databinding:databinding-common:7.2.1
androidx.databinding:databinding-common:7.3.1 androidx.databinding:databinding-common:7.3.1
androidx.databinding:databinding-common:7.4.2 androidx.databinding:databinding-common:7.4.2
androidx.databinding:databinding-compiler-common:3.2.1 androidx.databinding:databinding-compiler-common:3.2.1
androidx.databinding:databinding-compiler-common:3.3.1
androidx.databinding:databinding-compiler-common:3.5.4 androidx.databinding:databinding-compiler-common:3.5.4
androidx.databinding:databinding-compiler-common:4.1.0 androidx.databinding:databinding-compiler-common:4.1.0
androidx.databinding:databinding-compiler-common:7.0.4 androidx.databinding:databinding-compiler-common:7.0.4
@@ -159,7 +157,6 @@ com.android.databinding:baseLibrary:1.0-rc5
com.android.databinding:baseLibrary:3.0.0 com.android.databinding:baseLibrary:3.0.0
com.android.databinding:baseLibrary:3.0.1 com.android.databinding:baseLibrary:3.0.1
com.android.databinding:baseLibrary:3.2.1 com.android.databinding:baseLibrary:3.2.1
com.android.databinding:baseLibrary:3.3.1
com.android.databinding:baseLibrary:3.5.4 com.android.databinding:baseLibrary:3.5.4
com.android.databinding:baseLibrary:4.1.0 com.android.databinding:baseLibrary:4.1.0
com.android.databinding:baseLibrary:7.0.4 com.android.databinding:baseLibrary:7.0.4
@@ -170,7 +167,6 @@ com.android.databinding:compilerCommon:1.0-rc5
com.android.databinding:compilerCommon:3.0.0 com.android.databinding:compilerCommon:3.0.0
com.android.databinding:compilerCommon:3.0.1 com.android.databinding:compilerCommon:3.0.1
com.android.tools.analytics-library:crash:26.2.1 com.android.tools.analytics-library:crash:26.2.1
com.android.tools.analytics-library:crash:26.3.1
com.android.tools.analytics-library:crash:26.5.4 com.android.tools.analytics-library:crash:26.5.4
com.android.tools.analytics-library:crash:27.1.0 com.android.tools.analytics-library:crash:27.1.0
com.android.tools.analytics-library:crash:30.0.4 com.android.tools.analytics-library:crash:30.0.4
@@ -180,7 +176,6 @@ com.android.tools.analytics-library:crash:30.4.2
com.android.tools.analytics-library:protos:26.0.0 com.android.tools.analytics-library:protos:26.0.0
com.android.tools.analytics-library:protos:26.0.1 com.android.tools.analytics-library:protos:26.0.1
com.android.tools.analytics-library:protos:26.2.1 com.android.tools.analytics-library:protos:26.2.1
com.android.tools.analytics-library:protos:26.3.1
com.android.tools.analytics-library:protos:26.5.4 com.android.tools.analytics-library:protos:26.5.4
com.android.tools.analytics-library:protos:27.1.0 com.android.tools.analytics-library:protos:27.1.0
com.android.tools.analytics-library:protos:30.0.4 com.android.tools.analytics-library:protos:30.0.4
@@ -190,7 +185,6 @@ com.android.tools.analytics-library:protos:30.4.2
com.android.tools.analytics-library:shared:26.0.0 com.android.tools.analytics-library:shared:26.0.0
com.android.tools.analytics-library:shared:26.0.1 com.android.tools.analytics-library:shared:26.0.1
com.android.tools.analytics-library:shared:26.2.1 com.android.tools.analytics-library:shared:26.2.1
com.android.tools.analytics-library:shared:26.3.1
com.android.tools.analytics-library:shared:26.5.4 com.android.tools.analytics-library:shared:26.5.4
com.android.tools.analytics-library:shared:27.1.0 com.android.tools.analytics-library:shared:27.1.0
com.android.tools.analytics-library:shared:30.0.4 com.android.tools.analytics-library:shared:30.0.4
@@ -200,7 +194,6 @@ com.android.tools.analytics-library:shared:30.4.2
com.android.tools.analytics-library:tracker:26.0.0 com.android.tools.analytics-library:tracker:26.0.0
com.android.tools.analytics-library:tracker:26.0.1 com.android.tools.analytics-library:tracker:26.0.1
com.android.tools.analytics-library:tracker:26.2.1 com.android.tools.analytics-library:tracker:26.2.1
com.android.tools.analytics-library:tracker:26.3.1
com.android.tools.analytics-library:tracker:26.5.4 com.android.tools.analytics-library:tracker:26.5.4
com.android.tools.analytics-library:tracker:27.1.0 com.android.tools.analytics-library:tracker:27.1.0
com.android.tools.analytics-library:tracker:30.0.4 com.android.tools.analytics-library:tracker:30.0.4
@@ -208,12 +201,10 @@ com.android.tools.analytics-library:tracker:30.2.1
com.android.tools.analytics-library:tracker:30.3.1 com.android.tools.analytics-library:tracker:30.3.1
com.android.tools.analytics-library:tracker:30.4.2 com.android.tools.analytics-library:tracker:30.4.2
com.android.tools.build.jetifier:jetifier-core:1.0.0-alpha10 com.android.tools.build.jetifier:jetifier-core:1.0.0-alpha10
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta02
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta09
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10 com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10
com.android.tools.build.jetifier:jetifier-processor:1.0.0-alpha10 com.android.tools.build.jetifier:jetifier-processor:1.0.0-alpha10
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta02
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta04 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta04
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta09
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10 com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10
@@ -232,7 +223,6 @@ com.android.tools.build:aaptcompiler:7.4.2
com.android.tools.build:apksig:3.0.0 com.android.tools.build:apksig:3.0.0
com.android.tools.build:apksig:3.0.1 com.android.tools.build:apksig:3.0.1
com.android.tools.build:apksig:3.2.1 com.android.tools.build:apksig:3.2.1
com.android.tools.build:apksig:3.3.1
com.android.tools.build:apksig:3.5.4 com.android.tools.build:apksig:3.5.4
com.android.tools.build:apksig:4.1.0 com.android.tools.build:apksig:4.1.0
com.android.tools.build:apksig:7.0.4 com.android.tools.build:apksig:7.0.4
@@ -240,7 +230,6 @@ com.android.tools.build:apksig:7.2.1
com.android.tools.build:apksig:7.3.1 com.android.tools.build:apksig:7.3.1
com.android.tools.build:apksig:7.4.2 com.android.tools.build:apksig:7.4.2
com.android.tools.build:apkzlib:3.2.1 com.android.tools.build:apkzlib:3.2.1
com.android.tools.build:apkzlib:3.3.1
com.android.tools.build:apkzlib:3.5.4 com.android.tools.build:apkzlib:3.5.4
com.android.tools.build:apkzlib:4.1.0 com.android.tools.build:apkzlib:4.1.0
com.android.tools.build:apkzlib:7.0.4 com.android.tools.build:apkzlib:7.0.4
@@ -252,7 +241,6 @@ com.android.tools.build:builder-model:1.5.0
com.android.tools.build:builder-model:3.0.0 com.android.tools.build:builder-model:3.0.0
com.android.tools.build:builder-model:3.0.1 com.android.tools.build:builder-model:3.0.1
com.android.tools.build:builder-model:3.2.1 com.android.tools.build:builder-model:3.2.1
com.android.tools.build:builder-model:3.3.1
com.android.tools.build:builder-model:3.5.4 com.android.tools.build:builder-model:3.5.4
com.android.tools.build:builder-model:4.1.0 com.android.tools.build:builder-model:4.1.0
com.android.tools.build:builder-model:7.0.4 com.android.tools.build:builder-model:7.0.4
@@ -264,7 +252,6 @@ com.android.tools.build:builder-test-api:1.5.0
com.android.tools.build:builder-test-api:3.0.0 com.android.tools.build:builder-test-api:3.0.0
com.android.tools.build:builder-test-api:3.0.1 com.android.tools.build:builder-test-api:3.0.1
com.android.tools.build:builder-test-api:3.2.1 com.android.tools.build:builder-test-api:3.2.1
com.android.tools.build:builder-test-api:3.3.1
com.android.tools.build:builder-test-api:3.5.4 com.android.tools.build:builder-test-api:3.5.4
com.android.tools.build:builder-test-api:4.1.0 com.android.tools.build:builder-test-api:4.1.0
com.android.tools.build:builder-test-api:7.0.4 com.android.tools.build:builder-test-api:7.0.4
@@ -276,7 +263,6 @@ com.android.tools.build:builder:1.5.0
com.android.tools.build:builder:3.0.0 com.android.tools.build:builder:3.0.0
com.android.tools.build:builder:3.0.1 com.android.tools.build:builder:3.0.1
com.android.tools.build:builder:3.2.1 com.android.tools.build:builder:3.2.1
com.android.tools.build:builder:3.3.1
com.android.tools.build:builder:3.5.4 com.android.tools.build:builder:3.5.4
com.android.tools.build:builder:4.1.0 com.android.tools.build:builder:4.1.0
com.android.tools.build:builder:7.0.4 com.android.tools.build:builder:7.0.4
@@ -284,7 +270,6 @@ com.android.tools.build:builder:7.2.1
com.android.tools.build:builder:7.3.1 com.android.tools.build:builder:7.3.1
com.android.tools.build:builder:7.4.2 com.android.tools.build:builder:7.4.2
com.android.tools.build:bundletool:0.5.0 com.android.tools.build:bundletool:0.5.0
com.android.tools.build:bundletool:0.6.0
com.android.tools.build:bundletool:0.9.0 com.android.tools.build:bundletool:0.9.0
com.android.tools.build:bundletool:0.14.0 com.android.tools.build:bundletool:0.14.0
com.android.tools.build:bundletool:1.6.0 com.android.tools.build:bundletool:1.6.0
@@ -294,7 +279,6 @@ com.android.tools.build:bundletool:1.11.4
com.android.tools.build:gradle-api:3.0.0 com.android.tools.build:gradle-api:3.0.0
com.android.tools.build:gradle-api:3.0.1 com.android.tools.build:gradle-api:3.0.1
com.android.tools.build:gradle-api:3.2.1 com.android.tools.build:gradle-api:3.2.1
com.android.tools.build:gradle-api:3.3.1
com.android.tools.build:gradle-api:3.5.4 com.android.tools.build:gradle-api:3.5.4
com.android.tools.build:gradle-api:4.1.0 com.android.tools.build:gradle-api:4.1.0
com.android.tools.build:gradle-api:7.0.4 com.android.tools.build:gradle-api:7.0.4
@@ -311,7 +295,6 @@ com.android.tools.build:gradle:1.5.0
com.android.tools.build:gradle:3.0.0 com.android.tools.build:gradle:3.0.0
com.android.tools.build:gradle:3.0.1 com.android.tools.build:gradle:3.0.1
com.android.tools.build:gradle:3.2.1 com.android.tools.build:gradle:3.2.1
com.android.tools.build:gradle:3.3.1
com.android.tools.build:gradle:3.5.4 com.android.tools.build:gradle:3.5.4
com.android.tools.build:gradle:4.1.0 com.android.tools.build:gradle:4.1.0
com.android.tools.build:gradle:7.0.4 com.android.tools.build:gradle:7.0.4
@@ -322,7 +305,6 @@ com.android.tools.build:manifest-merger:24.5.0
com.android.tools.build:manifest-merger:26.0.0 com.android.tools.build:manifest-merger:26.0.0
com.android.tools.build:manifest-merger:26.0.1 com.android.tools.build:manifest-merger:26.0.1
com.android.tools.build:manifest-merger:26.2.1 com.android.tools.build:manifest-merger:26.2.1
com.android.tools.build:manifest-merger:26.3.1
com.android.tools.build:manifest-merger:26.5.4 com.android.tools.build:manifest-merger:26.5.4
com.android.tools.build:manifest-merger:27.1.0 com.android.tools.build:manifest-merger:27.1.0
com.android.tools.build:manifest-merger:30.0.4 com.android.tools.build:manifest-merger:30.0.4
@@ -336,7 +318,6 @@ com.android.tools.ddms:ddmlib:24.5.0
com.android.tools.ddms:ddmlib:26.0.0 com.android.tools.ddms:ddmlib:26.0.0
com.android.tools.ddms:ddmlib:26.0.1 com.android.tools.ddms:ddmlib:26.0.1
com.android.tools.ddms:ddmlib:26.2.1 com.android.tools.ddms:ddmlib:26.2.1
com.android.tools.ddms:ddmlib:26.3.1
com.android.tools.ddms:ddmlib:26.5.4 com.android.tools.ddms:ddmlib:26.5.4
com.android.tools.ddms:ddmlib:27.1.0 com.android.tools.ddms:ddmlib:27.1.0
com.android.tools.ddms:ddmlib:30.0.4 com.android.tools.ddms:ddmlib:30.0.4
@@ -355,7 +336,6 @@ com.android.tools.layoutlib:layoutlib-api:24.5.0
com.android.tools.layoutlib:layoutlib-api:26.0.0 com.android.tools.layoutlib:layoutlib-api:26.0.0
com.android.tools.layoutlib:layoutlib-api:26.0.1 com.android.tools.layoutlib:layoutlib-api:26.0.1
com.android.tools.layoutlib:layoutlib-api:26.2.1 com.android.tools.layoutlib:layoutlib-api:26.2.1
com.android.tools.layoutlib:layoutlib-api:26.3.1
com.android.tools.layoutlib:layoutlib-api:26.5.4 com.android.tools.layoutlib:layoutlib-api:26.5.4
com.android.tools.layoutlib:layoutlib-api:27.1.0 com.android.tools.layoutlib:layoutlib-api:27.1.0
com.android.tools.layoutlib:layoutlib-api:30.0.4 com.android.tools.layoutlib:layoutlib-api:30.0.4
@@ -371,7 +351,6 @@ com.android.tools.lint:lint-checks:24.5.0
com.android.tools.lint:lint-checks:26.0.0 com.android.tools.lint:lint-checks:26.0.0
com.android.tools.lint:lint-checks:26.0.1 com.android.tools.lint:lint-checks:26.0.1
com.android.tools.lint:lint-gradle-api:26.2.1 com.android.tools.lint:lint-gradle-api:26.2.1
com.android.tools.lint:lint-gradle-api:26.3.1
com.android.tools.lint:lint-gradle-api:26.5.4 com.android.tools.lint:lint-gradle-api:26.5.4
com.android.tools.lint:lint-gradle-api:27.1.0 com.android.tools.lint:lint-gradle-api:27.1.0
com.android.tools.lint:lint-model:27.1.0 com.android.tools.lint:lint-model:27.1.0
@@ -412,7 +391,6 @@ com.android.tools:annotations:24.5.0
com.android.tools:annotations:26.0.0 com.android.tools:annotations:26.0.0
com.android.tools:annotations:26.0.1 com.android.tools:annotations:26.0.1
com.android.tools:annotations:26.2.1 com.android.tools:annotations:26.2.1
com.android.tools:annotations:26.3.1
com.android.tools:annotations:26.5.4 com.android.tools:annotations:26.5.4
com.android.tools:annotations:27.1.0 com.android.tools:annotations:27.1.0
com.android.tools:annotations:30.0.4 com.android.tools:annotations:30.0.4
@@ -424,7 +402,6 @@ com.android.tools:common:24.5.0
com.android.tools:common:26.0.0 com.android.tools:common:26.0.0
com.android.tools:common:26.0.1 com.android.tools:common:26.0.1
com.android.tools:common:26.2.1 com.android.tools:common:26.2.1
com.android.tools:common:26.3.1
com.android.tools:common:26.5.4 com.android.tools:common:26.5.4
com.android.tools:common:27.1.0 com.android.tools:common:27.1.0
com.android.tools:common:30.0.4 com.android.tools:common:30.0.4
@@ -436,7 +413,6 @@ com.android.tools:dvlib:24.5.0
com.android.tools:dvlib:26.0.0 com.android.tools:dvlib:26.0.0
com.android.tools:dvlib:26.0.1 com.android.tools:dvlib:26.0.1
com.android.tools:dvlib:26.2.1 com.android.tools:dvlib:26.2.1
com.android.tools:dvlib:26.3.1
com.android.tools:dvlib:26.5.4 com.android.tools:dvlib:26.5.4
com.android.tools:dvlib:27.1.0 com.android.tools:dvlib:27.1.0
com.android.tools:dvlib:30.0.4 com.android.tools:dvlib:30.0.4
@@ -446,7 +422,6 @@ com.android.tools:dvlib:30.4.2
com.android.tools:repository:26.0.0 com.android.tools:repository:26.0.0
com.android.tools:repository:26.0.1 com.android.tools:repository:26.0.1
com.android.tools:repository:26.2.1 com.android.tools:repository:26.2.1
com.android.tools:repository:26.3.1
com.android.tools:repository:26.5.4 com.android.tools:repository:26.5.4
com.android.tools:repository:27.1.0 com.android.tools:repository:27.1.0
com.android.tools:repository:30.0.4 com.android.tools:repository:30.0.4
@@ -458,7 +433,6 @@ com.android.tools:sdklib:24.5.0
com.android.tools:sdklib:26.0.0 com.android.tools:sdklib:26.0.0
com.android.tools:sdklib:26.0.1 com.android.tools:sdklib:26.0.1
com.android.tools:sdklib:26.2.1 com.android.tools:sdklib:26.2.1
com.android.tools:sdklib:26.3.1
com.android.tools:sdklib:26.5.4 com.android.tools:sdklib:26.5.4
com.android.tools:sdklib:27.1.0 com.android.tools:sdklib:27.1.0
com.android.tools:sdklib:30.0.4 com.android.tools:sdklib:30.0.4
@@ -470,7 +444,6 @@ com.android.tools:sdk-common:24.5.0
com.android.tools:sdk-common:26.0.0 com.android.tools:sdk-common:26.0.0
com.android.tools:sdk-common:26.0.1 com.android.tools:sdk-common:26.0.1
com.android.tools:sdk-common:26.2.1 com.android.tools:sdk-common:26.2.1
com.android.tools:sdk-common:26.3.1
com.android.tools:sdk-common:26.5.4 com.android.tools:sdk-common:26.5.4
com.android.tools:sdk-common:27.1.0 com.android.tools:sdk-common:27.1.0
com.android.tools:sdk-common:30.0.4 com.android.tools:sdk-common:30.0.4
@@ -590,7 +563,6 @@ com.google.guava:failureaccess:1.0.1
com.google.guava:guava:17.0 com.google.guava:guava:17.0
com.google.guava:guava:22.0 com.google.guava:guava:22.0
com.google.guava:guava:23.0 com.google.guava:guava:23.0
com.google.guava:guava:26.0-jre
com.google.guava:guava:27.0.1-jre com.google.guava:guava:27.0.1-jre
com.google.guava:guava:28.1-jre com.google.guava:guava:28.1-jre
com.google.guava:guava:29.0-jre com.google.guava:guava:29.0-jre
@@ -817,7 +789,6 @@ org.jetbrains.kotlin:kotlin-project-model:1.6.20
org.jetbrains.kotlin:kotlin-project-model:1.9.0 org.jetbrains.kotlin:kotlin-project-model:1.9.0
org.jetbrains.kotlin:kotlin-reflect:1.1.3-2 org.jetbrains.kotlin:kotlin-reflect:1.1.3-2
org.jetbrains.kotlin:kotlin-reflect:1.2.0 org.jetbrains.kotlin:kotlin-reflect:1.2.0
org.jetbrains.kotlin:kotlin-reflect:1.3.20
org.jetbrains.kotlin:kotlin-reflect:1.3.50 org.jetbrains.kotlin:kotlin-reflect:1.3.50
org.jetbrains.kotlin:kotlin-reflect:1.3.72 org.jetbrains.kotlin:kotlin-reflect:1.3.72
org.jetbrains.kotlin:kotlin-reflect:1.4.32 org.jetbrains.kotlin:kotlin-reflect:1.4.32
@@ -834,7 +805,6 @@ org.jetbrains.kotlin:kotlin-scripting-jvm:1.6.20
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.0 org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.0
org.jetbrains.kotlin:kotlin-script-runtime:1.9.0 org.jetbrains.kotlin:kotlin-script-runtime:1.9.0
org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71 org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50 org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-common:1.3.72
org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32 org.jetbrains.kotlin:kotlin-stdlib-common:1.4.32
@@ -843,7 +813,6 @@ org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.22 org.jetbrains.kotlin:kotlin-stdlib-common:1.7.22
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-common:1.9.0
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71 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.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.72
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.32
@@ -852,7 +821,6 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.20
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.22 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.22
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71 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.3.50
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.72
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.32
@@ -861,7 +829,6 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.22
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0
org.jetbrains.kotlin:kotlin-stdlib:1.1.3-2 org.jetbrains.kotlin:kotlin-stdlib:1.1.3-2
org.jetbrains.kotlin:kotlin-stdlib:1.2.71 org.jetbrains.kotlin:kotlin-stdlib:1.2.71
org.jetbrains.kotlin:kotlin-stdlib:1.3.20
org.jetbrains.kotlin:kotlin-stdlib:1.3.50 org.jetbrains.kotlin:kotlin-stdlib:1.3.50
org.jetbrains.kotlin:kotlin-stdlib:1.3.72 org.jetbrains.kotlin:kotlin-stdlib:1.3.72
org.jetbrains.kotlin:kotlin-stdlib:1.4.32 org.jetbrains.kotlin:kotlin-stdlib:1.4.32
+4 -38
View File
@@ -62,7 +62,6 @@ https://dl.google.com/dl/android/maven2/androidx/core/core/1.7.0/core-1.7.0.pom
https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0.pom https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0.pom https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.3.1/databinding-common-3.3.1.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.5.4/databinding-common-3.5.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.5.4/databinding-common-3.5.4.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/4.1.0/databinding-common-4.1.0.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/4.1.0/databinding-common-4.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.0.4/databinding-common-7.0.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.0.4/databinding-common-7.0.4.pom
@@ -70,7 +69,6 @@ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.3.1/databinding-common-7.3.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.3.1/databinding-common-7.3.1.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.4.2/databinding-common-7.4.2.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/7.4.2/databinding-common-7.4.2.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.2.1/databinding-compiler-common-3.2.1.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.2.1/databinding-compiler-common-3.2.1.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.3.1/databinding-compiler-common-3.3.1.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.5.4/databinding-compiler-common-3.5.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/3.5.4/databinding-compiler-common-3.5.4.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/4.1.0/databinding-compiler-common-4.1.0.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/4.1.0/databinding-compiler-common-4.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.0.4/databinding-compiler-common-7.0.4.pom https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compiler-common/7.0.4/databinding-compiler-common-7.0.4.pom
@@ -170,7 +168,6 @@ https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.0/run
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.0/baseLibrary-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.0/baseLibrary-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.3.1/baseLibrary-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.5.4/baseLibrary-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.5.4/baseLibrary-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/4.1.0/baseLibrary-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/4.1.0/baseLibrary-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.0.4/baseLibrary-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/7.0.4/baseLibrary-7.0.4.pom
@@ -205,7 +202,6 @@ https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.0.2/su
https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/26.0.2/support-vector-drawable-26.0.2.pom https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/26.0.2/support-vector-drawable-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/27.0.1/support-vector-drawable-27.0.1.pom https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/27.0.1/support-vector-drawable-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.3.1/crash-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.5.4/crash-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.5.4/crash-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/27.1.0/crash-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/27.1.0/crash-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.0.4/crash-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/30.0.4/crash-30.0.4.pom
@@ -215,7 +211,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/cras
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.0/protos-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.0/protos-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.1/protos-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.0.1/protos-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.2.1/protos-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.2.1/protos-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.3.1/protos-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.5.4/protos-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/26.5.4/protos-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/27.1.0/protos-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/27.1.0/protos-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.0.4/protos-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/protos/30.0.4/protos-30.0.4.pom
@@ -225,7 +220,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/prot
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.0/shared-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.0/shared-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.0.1/shared-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.2.1/shared-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.2.1/shared-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.3.1/shared-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.5.4/shared-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/26.5.4/shared-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/27.1.0/shared-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/27.1.0/shared-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.0.4/shared-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shared/30.0.4/shared-30.0.4.pom
@@ -235,7 +229,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/shar
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.0/tracker-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.0/tracker-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.0.1/tracker-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.2.1/tracker-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.2.1/tracker-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.3.1/tracker-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.5.4/tracker-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/26.5.4/tracker-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/27.1.0/tracker-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/27.1.0/tracker-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.0.4/tracker-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/tracker/30.0.4/tracker-30.0.4.pom
@@ -245,7 +238,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/trac
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.0/annotations-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.0/annotations-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.1/annotations-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.0.1/annotations-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.2.1/annotations-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.2.1/annotations-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.3.1/annotations-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.5.4/annotations-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/26.5.4/annotations-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/27.1.0/annotations-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/27.1.0/annotations-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.0.4/annotations-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/annotations/30.0.4/annotations-30.0.4.pom
@@ -271,7 +263,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/aaptcompiler/7.4
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.0/apksig-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.0/apksig-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.0.1/apksig-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.2.1/apksig-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.2.1/apksig-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.3.1/apksig-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.5.4/apksig-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/3.5.4/apksig-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/4.1.0/apksig-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/4.1.0/apksig-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.0.4/apksig-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.0.4/apksig-7.0.4.pom
@@ -279,7 +270,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.2.1/apk
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.3.1/apksig-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.3.1/apksig-7.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.4.2/apksig-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apksig/7.4.2/apksig-7.4.2.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.2.1/apkzlib-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.2.1/apkzlib-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.3.1/apkzlib-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.5.4/apkzlib-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/3.5.4/apkzlib-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/4.1.0/apkzlib-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/4.1.0/apkzlib-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.0.4/apkzlib-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.0.4/apkzlib-7.0.4.pom
@@ -289,7 +279,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/apkzlib/7.4.2/ap
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.0/builder-model-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.0/builder-model-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.1/builder-model-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.0.1/builder-model-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.2.1/builder-model-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.2.1/builder-model-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.3.1/builder-model-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.5.4/builder-model-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/3.5.4/builder-model-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/4.1.0/builder-model-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/4.1.0/builder-model-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.0.4/builder-model-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.0.4/builder-model-7.0.4.pom
@@ -299,7 +288,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-model/7.
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.0/builder-test-api-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.0/builder-test-api-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.1/builder-test-api-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.0.1/builder-test-api-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.2.1/builder-test-api-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.2.1/builder-test-api-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.3.1/builder-test-api-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.5.4/builder-test-api-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/3.5.4/builder-test-api-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/4.1.0/builder-test-api-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/4.1.0/builder-test-api-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.0.4/builder-test-api-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api/7.0.4/builder-test-api-7.0.4.pom
@@ -309,7 +297,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder-test-api
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.0/builder-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.0/builder-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.0.1/builder-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.2.1/builder-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.2.1/builder-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.3.1/builder-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.5.4/builder-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/3.5.4/builder-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/4.1.0/builder-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/4.1.0/builder-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.0.4/builder-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.0.4/builder-7.0.4.pom
@@ -317,7 +304,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.2.1/bu
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.3.1/builder-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.3.1/builder-7.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.4.2/builder-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/builder/7.4.2/builder-7.4.2.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.5.0/bundletool-0.5.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.5.0/bundletool-0.5.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.6.0/bundletool-0.6.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.9.0/bundletool-0.9.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.9.0/bundletool-0.9.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.14.0/bundletool-0.14.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/0.14.0/bundletool-0.14.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.6.0/bundletool-1.6.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.6.0/bundletool-1.6.0.pom
@@ -327,7 +313,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/bundletool/1.11.
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.0/gradle-api-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.0/gradle-api-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.1/gradle-api-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.0.1/gradle-api-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.2.1/gradle-api-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.2.1/gradle-api-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.3.1/gradle-api-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.5.4/gradle-api-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/3.5.4/gradle-api-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/4.1.0/gradle-api-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/4.1.0/gradle-api-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.0.4/gradle-api-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-api/7.0.4/gradle-api-7.0.4.pom
@@ -340,7 +325,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle-settings-
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.0/gradle-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.0.1/gradle-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.2.1/gradle-3.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.3.1/gradle-3.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.4/gradle-3.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.5.4/gradle-3.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1.0/gradle-4.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/4.1.0/gradle-4.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.0.4/gradle-7.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.0.4/gradle-7.0.4.pom
@@ -348,19 +332,16 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.2.1/gra
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.3.1/gradle-7.3.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.3.1/gradle-7.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/7.4.2/gradle-7.4.2.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-alpha10/jetifier-core-1.0.0-alpha10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-alpha10/jetifier-core-1.0.0-alpha10.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta02/jetifier-core-1.0.0-beta02.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta09/jetifier-core-1.0.0-beta09.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta09/jetifier-core-1.0.0-beta09.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta10/jetifier-core-1.0.0-beta10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta10/jetifier-core-1.0.0-beta10.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-alpha10/jetifier-processor-1.0.0-alpha10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-alpha10/jetifier-processor-1.0.0-alpha10.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta02/jetifier-processor-1.0.0-beta02.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04/jetifier-processor-1.0.0-beta04.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta04/jetifier-processor-1.0.0-beta04.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta09/jetifier-processor-1.0.0-beta09.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta09/jetifier-processor-1.0.0-beta09.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta10/jetifier-processor-1.0.0-beta10.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/jetifier/jetifier-processor/1.0.0-beta10/jetifier-processor-1.0.0-beta10.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.0/manifest-merger-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.0/manifest-merger-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.1/manifest-merger-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.0.1/manifest-merger-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.2.1/manifest-merger-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.2.1/manifest-merger-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.3.1/manifest-merger-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.5.4/manifest-merger-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/26.5.4/manifest-merger-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/27.1.0/manifest-merger-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/27.1.0/manifest-merger-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.0.4/manifest-merger-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/30.0.4/manifest-merger-30.0.4.pom
@@ -370,7 +351,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/build/manifest-merger/
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.0/common-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.0/common-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/common-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.0.1/common-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.2.1/common-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.2.1/common-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.3.1/common-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/26.5.4/common-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/26.5.4/common-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/27.1.0/common-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/27.1.0/common-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/common/30.0.4/common-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/common/30.0.4/common-30.0.4.pom
@@ -380,7 +360,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/common/30.4.2/common-3
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.0/ddmlib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.0/ddmlib-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.0.1/ddmlib-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.2.1/ddmlib-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.3.1/ddmlib-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.5.4/ddmlib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/26.5.4/ddmlib-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/27.1.0/ddmlib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/27.1.0/ddmlib-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.0.4/ddmlib-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.0.4/ddmlib-30.0.4.pom
@@ -390,7 +369,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/ddms/ddmlib/30.4.2/ddm
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.0/dvlib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.0/dvlib-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.0.1/dvlib-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.2.1/dvlib-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.3.1/dvlib-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.5.4/dvlib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/26.5.4/dvlib-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/27.1.0/dvlib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/27.1.0/dvlib-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.0.4/dvlib-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/dvlib/30.0.4/dvlib-30.0.4.pom
@@ -407,7 +385,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/external/org-jetbrains
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.0/layoutlib-api-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.0/layoutlib-api-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.1/layoutlib-api-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.0.1/layoutlib-api-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.2.1/layoutlib-api-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.2.1/layoutlib-api-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.3.1/layoutlib-api-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.5.4/layoutlib-api-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/26.5.4/layoutlib-api-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/27.1.0/layoutlib-api-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/27.1.0/layoutlib-api-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.0.4/layoutlib-api-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/layoutlib/layoutlib-api/30.0.4/layoutlib-api-30.0.4.pom
@@ -421,7 +398,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0.
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0.1/lint-checks-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/26.0.1/lint-checks-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/30.4.2/lint-checks-30.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-checks/30.4.2/lint-checks-30.4.2.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.2.1/lint-gradle-api-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.2.1/lint-gradle-api-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.3.1/lint-gradle-api-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.5.4/lint-gradle-api-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/26.5.4/lint-gradle-api-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/27.1.0/lint-gradle-api-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle-api/27.1.0/lint-gradle-api-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/30.4.2/lint-gradle-30.4.2.pom https://dl.google.com/dl/android/maven2/com/android/tools/lint/lint-gradle/30.4.2/lint-gradle-30.4.2.pom
@@ -440,7 +416,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/play-sdk-proto/30.4.2/
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.0/repository-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.0/repository-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1/repository-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.0.1/repository-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.2.1/repository-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.2.1/repository-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.3.1/repository-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.5.4/repository-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/26.5.4/repository-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/27.1.0/repository-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/27.1.0/repository-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.0.4/repository-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.0.4/repository-30.0.4.pom
@@ -450,7 +425,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/repository/30.4.2/repo
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.0/sdklib-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.0/sdklib-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.0.1/sdklib-26.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.2.1/sdklib-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.3.1/sdklib-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.5.4/sdklib-26.5.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/26.5.4/sdklib-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/27.1.0/sdklib-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/27.1.0/sdklib-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.0.4/sdklib-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.0.4/sdklib-30.0.4.pom
@@ -460,7 +434,6 @@ https://dl.google.com/dl/android/maven2/com/android/tools/sdklib/30.4.2/sdklib-3
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.0/sdk-common-26.0.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.0/sdk-common-26.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1/sdk-common-26.0.1.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/26.0.1/sdk-common-26.0.1.pom
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.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/android/tools/sdk-common/26.5.4/sdk-common-26.5.4.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/27.1.0/sdk-common-27.1.0.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/27.1.0/sdk-common-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.0.4/sdk-common-30.0.4.pom https://dl.google.com/dl/android/maven2/com/android/tools/sdk-common/30.0.4/sdk-common-30.0.4.pom
@@ -715,7 +688,6 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-pa
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/22.0/guava-parent-22.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/23.0/guava-parent-23.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/23.0/guava-parent-23.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-jre/guava-parent-26.0-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/27.0.1-jre/guava-parent-27.0.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/27.0.1-jre/guava-parent-27.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/28.1-jre/guava-parent-28.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/28.1-jre/guava-parent-28.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/29.0-jre/guava-parent-29.0-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/29.0-jre/guava-parent-29.0-jre.pom
@@ -728,7 +700,6 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava/17.0/guava-17.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-android/guava-26.0-android.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-android/guava-26.0-android.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-jre/guava-26.0-jre.pom
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/27.0.1-jre/guava-27.0.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/28.1-jre/guava-28.1-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/28.1-jre/guava-28.1-jre.pom
https://repo.maven.apache.org/maven2/com/google/guava/guava/29.0-jre/guava-29.0-jre.pom https://repo.maven.apache.org/maven2/com/google/guava/guava/29.0-jre/guava-29.0-jre.pom
@@ -913,13 +884,13 @@ 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/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.13/byte-buddy-agent-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.13/byte-buddy-agent-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.19/byte-buddy-agent-1.11.19.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.11.19/byte-buddy-agent-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.14.10/byte-buddy-agent-1.14.10.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.14.11/byte-buddy-agent-1.14.11.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.13/byte-buddy-parent-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.13/byte-buddy-parent-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.19/byte-buddy-parent-1.11.19.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.11.19/byte-buddy-parent-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.14.10/byte-buddy-parent-1.14.10.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.14.11/byte-buddy-parent-1.14.11.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.13/byte-buddy-1.11.13.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.13/byte-buddy-1.11.13.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.19/byte-buddy-1.11.19.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.11.19/byte-buddy-1.11.19.pom
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.14.10/byte-buddy-1.14.10.pom https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.14.11/byte-buddy-1.14.11.pom
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.pom https://repo.maven.apache.org/maven2/net/java/dev/jna/jna-platform/5.6.0/jna-platform-5.6.0.pom
https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom https://repo.maven.apache.org/maven2/net/java/dev/jna/jna/5.6.0/jna-5.6.0.pom
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom
@@ -1167,7 +1138,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.9.0/kotlin-project-model-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-project-model/1.9.0/kotlin-project-model-1.9.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/kotlin-reflect-1.1.3-2.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/kotlin-reflect-1.1.3-2.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.72/kotlin-reflect-1.3.72.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.32/kotlin-reflect-1.4.32.pom
@@ -1194,7 +1164,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.9.0/kotlin-script-runtime-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.9.0/kotlin-script-runtime-1.9.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.0/kotlin-stdlib-common-1.3.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.0/kotlin-stdlib-common-1.3.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31/kotlin-stdlib-common-1.3.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31/kotlin-stdlib-common-1.3.31.pom
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.50/kotlin-stdlib-common-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.60/kotlin-stdlib-common-1.3.60.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.60/kotlin-stdlib-common-1.3.60.pom
@@ -1214,7 +1183,6 @@ 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.7.22/kotlin-stdlib-common-1.7.22.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.7.22/kotlin-stdlib-common-1.7.22.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.0/kotlin-stdlib-common-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.9.0/kotlin-stdlib-common-1.9.0.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.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.3.50/kotlin-stdlib-jdk7-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.72/kotlin-stdlib-jdk7-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.72/kotlin-stdlib-jdk7-1.3.72.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.10/kotlin-stdlib-jdk7-1.4.10.pom
@@ -1227,7 +1195,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.22/kotlin-stdlib-jdk7-1.7.22.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.7.22/kotlin-stdlib-jdk7-1.7.22.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.9.0/kotlin-stdlib-jdk7-1.9.0.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.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.3.50/kotlin-stdlib-jdk8-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.72/kotlin-stdlib-jdk8-1.3.72.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.72/kotlin-stdlib-jdk8-1.3.72.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.10/kotlin-stdlib-jdk8-1.4.10.pom
@@ -1243,7 +1210,6 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.0/ko
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.20/kotlin-stdlib-1.2.20.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.20/kotlin-stdlib-1.2.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.2.71/kotlin-stdlib-1.2.71.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.0/kotlin-stdlib-1.3.0.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.0/kotlin-stdlib-1.3.0.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotlin-stdlib-1.3.31.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotlin-stdlib-1.3.31.pom
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.50/kotlin-stdlib-1.3.50.pom
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.60/kotlin-stdlib-1.3.60.pom https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.60/kotlin-stdlib-1.3.60.pom
@@ -1288,7 +1254,7 @@ https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.8/stax-ex-1.8.po
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.1.0/stax-ex-2.1.0.pom https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.1.0/stax-ex-2.1.0.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.12.4/mockito-core-3.12.4.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.12.4/mockito-core-3.12.4.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/4.0.0/mockito-core-4.0.0.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-core/4.0.0/mockito-core-4.0.0.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.8.0/mockito-core-5.8.0.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-core/5.9.0/mockito-core-5.9.0.pom
https://repo.maven.apache.org/maven2/org/mockito/mockito-inline/4.0.0/mockito-inline-4.0.0.pom https://repo.maven.apache.org/maven2/org/mockito/mockito-inline/4.0.0/mockito-inline-4.0.0.pom
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.3/objenesis-parent-3.3.pom https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.3/objenesis-parent-3.3.pom
+1 -1
View File
@@ -19,4 +19,4 @@ trap show_gradle_log ERR
./gradlew projects --no-daemon --console plain 2>&1 \ ./gradlew projects --no-daemon --console plain 2>&1 \
| tee "${GRADLE_LOG_FILE}" \ | tee "${GRADLE_LOG_FILE}" \
| grep "Project ':" \ | grep "Project ':" \
| sed -E "s;^.--- Project '\:([@_a-zA-Z0-9\-]+)';\1;" | sed -E "s;^.--- Project '\:([@_a-zA-Z0-9\-]+)'.*;\1;"
+1 -1
View File
@@ -1,6 +1,7 @@
app app
react-native-async-storage_async-storage react-native-async-storage_async-storage
react-native-background-timer react-native-background-timer
react-native-biometrics
react-native-blob-util react-native-blob-util
react-native-blur react-native-blur
react-native-camera-kit react-native-camera-kit
@@ -36,6 +37,5 @@ react-native-static-safe-area-insets
react-native-status react-native-status
react-native-status-keycard react-native-status-keycard
react-native-svg react-native-svg
react-native-touch-id
react-native-transparent-video react-native-transparent-video
react-native-webview react-native-webview
+14
View File
@@ -0,0 +1,14 @@
#!/usr/bin/env bash
set -Eeuo pipefail
# script to prompt user for terminating a process
pid="${1}"
read -p "Do you want to terminate this process? (y/n): " choice
if [[ "${choice}" == "y" ]]; then
sudo kill "${pid}"
echo "Process ${pid} terminated."
else
echo "Process not terminated. Please close it manually and retry."
exit 1
fi
+11 -21
View File
@@ -22,12 +22,10 @@ nix_purge_linux_multi_user_users() {
} }
nix_purge_darwin_multi_user_service() { nix_purge_darwin_multi_user_service() {
cd /Library/LaunchDaemons sudo launchctl unload /Library/LaunchDaemons/org.nixos.nix-daemon.plist
NIX_SERVICES=(org.nixos.darwin-store.plist org.nixos.nix-daemon.plist) sudo rm /Library/LaunchDaemons/org.nixos.nix-daemon.plist
for NIX_SERVICE in "${NIX_SERVICES[@]}"; do sudo launchctl unload /Library/LaunchDaemons/org.nixos.darwin-store.plist
sudo launchctl unload "${NIX_SERVICE}" || true sudo rm /Library/LaunchDaemons/org.nixos.darwin-store.plist
sudo launchctl remove "${NIX_SERVICE}" || true
done
} }
nix_purge_darwin_multi_user_users() { nix_purge_darwin_multi_user_users() {
@@ -48,18 +46,10 @@ nix_purge_darwin_multi_user_volumes() {
# Identify the process using the volume # Identify the process using the volume
local pid=$(lsof +D /nix | awk 'NR==2{print $2}') local pid=$(lsof +D /nix | awk 'NR==2{print $2}')
if [ -n "$pid" ]; then if [[ -n "$pid" ]]; then
echo "The volume /nix is in use by process ID $pid." echo "The volume /nix is in use by process ID $pid."
"${GIT_ROOT}/nix/scripts/kill_proc_prompt.sh" "${pid}" || return 1
# Ask the user whether to terminate the process
read -p "Do you want to terminate this process? (y/n): " choice
if [[ $choice == "y" ]]; then
sudo kill $pid
echo "Process $pid terminated."
else
echo "Process not terminated. Please close it manually and retry."
return 1
fi
else else
echo "No process found using /nix. Manual intervention required." echo "No process found using /nix. Manual intervention required."
return 1 return 1
@@ -71,9 +61,9 @@ nix_purge_darwin_multi_user_volumes() {
nix_purge_multi_user() { nix_purge_multi_user() {
if [[ $(uname -s) == "Darwin" ]]; then if [[ $(uname -s) == "Darwin" ]]; then
nix_purge_darwin_multi_user_service || true nix_purge_darwin_multi_user_service
nix_purge_darwin_multi_user_users || true nix_purge_darwin_multi_user_users
nix_purge_darwin_multi_user_volumes || true nix_purge_darwin_multi_user_volumes
else else
nix_purge_linux_multi_user_service nix_purge_linux_multi_user_service
nix_purge_linux_multi_user_users nix_purge_linux_multi_user_users
@@ -117,7 +107,7 @@ if (return 0 2>/dev/null); then
return return
fi fi
# Confirm user decission, unless --force is used. # Confirm user decision, unless --force is used.
if [[ "${1}" != "--force" ]]; then if [[ "${1}" != "--force" ]]; then
echo -e "${YLW}Are you sure you want to purge Nix?${RST}" >&2 echo -e "${YLW}Are you sure you want to purge Nix?${RST}" >&2
read -p "[y/n]: " -n 1 -r read -p "[y/n]: " -n 1 -r
@@ -129,7 +119,7 @@ if [[ "${1}" != "--force" ]]; then
fi fi
NIX_INSTALL_TYPE=$(nix_install_type) NIX_INSTALL_TYPE=$(nix_install_type)
# Purging /nix on NixOS would be disasterous. # Purging /nix on NixOS would be disastrous.
if [[ "${NIX_INSTALL_TYPE}" == "nixos" ]]; then if [[ "${NIX_INSTALL_TYPE}" == "nixos" ]]; then
echo -e "${RED}You should not purge Nix files on NixOS!${RST}" >&2 echo -e "${RED}You should not purge Nix files on NixOS!${RST}" >&2
exit exit
+1 -1
View File
@@ -35,6 +35,7 @@
"react-dom": "18.0.0", "react-dom": "18.0.0",
"react-native": "0.72.5", "react-native": "0.72.5",
"react-native-background-timer": "^2.1.1", "react-native-background-timer": "^2.1.1",
"react-native-biometrics": "^3.0.1",
"react-native-blob-util": "^0.13.18", "react-native-blob-util": "^0.13.18",
"react-native-camera-kit": "14.0.0-beta13", "react-native-camera-kit": "14.0.0-beta13",
"react-native-config": "^1.5.0", "react-native-config": "^1.5.0",
@@ -65,7 +66,6 @@
"react-native-static-safe-area-insets": "^2.2.0", "react-native-static-safe-area-insets": "^2.2.0",
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#refs/tags/v2.5.39", "react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#refs/tags/v2.5.39",
"react-native-svg": "13.10.0", "react-native-svg": "13.10.0",
"react-native-touch-id": "^4.4.1",
"react-native-transparent-video": "git+https://github.com/status-im/react-native-transparent-video.git#refs/tags/0.1.1", "react-native-transparent-video": "git+https://github.com/status-im/react-native-transparent-video.git#refs/tags/0.1.1",
"react-native-webview": "13.6.3", "react-native-webview": "13.6.3",
"react-syntax-highlighter": "^15.5.0", "react-syntax-highlighter": "^15.5.0",
Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

@@ -1,5 +1,8 @@
(ns legacy.status-im.data-store.communities (ns legacy.status-im.data-store.communities
(:require [clojure.set :as set])) (:require
[clojure.set :as set]
[clojure.walk :as walk]
[status-im.constants :as constants]))
(defn rpc->channel-permissions (defn rpc->channel-permissions
[rpc-channels-permissions] [rpc-channels-permissions]
@@ -7,3 +10,68 @@
(fn [{:keys [viewAndPostPermissions viewOnlyPermissions]}] (fn [{:keys [viewAndPostPermissions viewOnlyPermissions]}]
{:view-only (set/rename-keys viewOnlyPermissions {:satisfied :satisfied?}) {:view-only (set/rename-keys viewOnlyPermissions {:satisfied :satisfied?})
:view-and-post (set/rename-keys viewAndPostPermissions {:satisfied :satisfied?})}))) :view-and-post (set/rename-keys viewAndPostPermissions {:satisfied :satisfied?})})))
(defn <-revealed-accounts-rpc
[accounts]
(mapv
#(set/rename-keys % {:isAirdropAddress :airdrop-address?})
(js->clj accounts :keywordize-keys true)))
(defn <-request-to-join-community-rpc
[r]
(set/rename-keys r
{:communityId :community-id
:publicKey :public-key
:chatId :chat-id}))
(defn <-requests-to-join-community-rpc
[requests key-fn]
(reduce #(assoc %1 (key-fn %2) (<-request-to-join-community-rpc %2)) {} requests))
(defn <-chats-rpc
[chats]
(reduce-kv (fn [acc k v]
(assoc acc
(name k)
(-> v
(assoc :can-post? (:canPost v))
(dissoc :canPost)
(update :members walk/stringify-keys))))
{}
chats))
(defn <-categories-rpc
[categ]
(reduce-kv #(assoc %1 (name %2) %3) {} categ))
(defn <-rpc
[c]
(-> c
(set/rename-keys {:canRequestAccess :can-request-access?
:canManageUsers :can-manage-users?
:canDeleteMessageForEveryone :can-delete-message-for-everyone?
:canJoin :can-join?
:requestedToJoinAt :requested-to-join-at
:isMember :is-member?
:adminSettings :admin-settings
:tokenPermissions :token-permissions
:communityTokensMetadata :tokens-metadata
:introMessage :intro-message
:muteTill :muted-till
:lastOpenedAt :last-opened-at
:joinedAt :joined-at})
(update :admin-settings
set/rename-keys
{:pinMessageAllMembersEnabled :pin-message-all-members-enabled?})
(update :members walk/stringify-keys)
(update :chats <-chats-rpc)
(update :token-permissions seq)
(update :categories <-categories-rpc)
(assoc :membership-permissions?
(some #(= (:type %) constants/community-token-permission-become-member)
(vals (:tokenPermissions c))))
(assoc :token-images
(reduce (fn [acc {sym :symbol image :image}]
(assoc acc sym image))
{}
(:communityTokensMetadata c)))))
@@ -51,3 +51,9 @@
(visibility-status-updates/<-rpc-settings) (visibility-status-updates/<-rpc-settings)
(set/rename-keys {:compressedKey :compressed-key (set/rename-keys {:compressedKey :compressed-key
:emojiHash :emoji-hash}))) :emojiHash :emoji-hash})))
(defn rpc->setting-value
[{:keys [name] :as setting}]
(condp = name
:currency (update setting :value keyword)
setting))
+1 -1
View File
@@ -231,7 +231,7 @@
[db] [db]
(into #{} (into #{}
(remove #(= (:type %) :watch) (remove #(= (:type %) :watch)
(map #(eip55/address->checksum (:address %)) (get db :profile/wallet-accounts))))) (map #(eip55/address->checksum (:address %)) (vals (get-in db [:wallet :accounts]))))))
;;NOTE we want to handle only last resolve ;;NOTE we want to handle only last resolve
(def resolve-last-id (atom nil)) (def resolve-last-id (atom nil))
@@ -79,10 +79,15 @@
"recent-history-ready" (recent-history-fetching-ended cofx event) "recent-history-ready" (recent-history-fetching-ended cofx event)
"fetching-history-error" (fetching-error cofx event) "fetching-history-error" (fetching-error cofx event)
"non-archival-node-detected" (non-archival-node-detected cofx event) "non-archival-node-detected" (non-archival-node-detected cofx event)
"pending-transaction-status-changed" {:fx
[[:dispatch
[:wallet/pending-transaction-status-changed-received
event]]]}
"wallet-owned-collectibles-filtering-done" {:fx [[:dispatch "wallet-owned-collectibles-filtering-done" {:fx [[:dispatch
[:wallet/owned-collectibles-filtering-done [:wallet/owned-collectibles-filtering-done
event]]]} event]]]}
"wallet-get-collectibles-details-done" {:fx [[:dispatch "wallet-get-collectibles-details-done" {:fx [[:dispatch
[:wallet/get-collectible-details-done [:wallet/get-collectible-details-done
event]]]} event]]]}
"wallet-tick-reload" {:fx [[:dispatch [:wallet/reload]]]}
(log/debug ::unknown-wallet-event :type type :event event))) (log/debug ::unknown-wallet-event :type type :event event)))
+1
View File
@@ -43,6 +43,7 @@
[react-native.permissions :as permissions] [react-native.permissions :as permissions]
[react-native.platform :as platform] [react-native.platform :as platform]
[status-im.common.biometric.events :as biometric] [status-im.common.biometric.events :as biometric]
status-im.common.serialization
status-im.common.standard-authentication.events status-im.common.standard-authentication.events
[status-im.common.theme.core :as theme] [status-im.common.theme.core :as theme]
[status-im.common.universal-links :as universal-links] [status-im.common.universal-links :as universal-links]
@@ -246,7 +246,7 @@
[rn/touchable-opacity [rn/touchable-opacity
{:on-press #(do {:on-press #(do
(rf/dispatch [:pop-to-root :shell-stack]) (rf/dispatch [:pop-to-root :shell-stack])
(rf/dispatch [:navigate-to :community-overview (:id community)]) (rf/dispatch [:communities/navigate-to-community-overview (:id community)])
(rf/dispatch [:chat/close]))} (rf/dispatch [:chat/close]))}
[rn/text [rn/text
{:style {:text-align :center {:style {:text-align :center
+2 -2
View File
@@ -164,7 +164,7 @@
{:MediaStates {} {:MediaStates {}
:PlaybackCategories {}}) :PlaybackCategories {}})
(def net-info #js {}) (def net-info #js {})
(def touchid #js {}) (def react-native-biometrics #js {:default {}})
(def react-native-image-viewing #js {:default {}}) (def react-native-image-viewing #js {:default {}})
(def react-native-static-safe-area-insets #js {:default {}}) (def react-native-static-safe-area-insets #js {:default {}})
@@ -391,7 +391,7 @@
"react-native-fetch-polyfill" fetch "react-native-fetch-polyfill" fetch
"react-native-status-keycard" status-keycard "react-native-status-keycard" status-keycard
"react-native-keychain" keychain "react-native-keychain" keychain
"react-native-touch-id" touchid "react-native-biometrics" react-native-biometrics
"@react-native-community/netinfo" net-info "@react-native-community/netinfo" net-info
"react-native-dialogs" dialogs "react-native-dialogs" dialogs
"react-native" react-native "react-native" react-native
+11 -11
View File
@@ -11,17 +11,17 @@
(defn token-requirement-list-row (defn token-requirement-list-row
[tokens padding?] [tokens padding?]
[rn/view {:style (style/token-row padding?)} [rn/view {:style (style/token-row padding?)}
(map-indexed (fn [token-index token] (map-indexed (fn [token-index {:keys [img-src amount sufficient? purchasable?] :as token}]
(let [{:keys [amount sufficient? purchasable?]} token] ^{:key token-index}
^{:key token-index} [rn/view {:style style/token-tag-spacing}
[rn/view {:style style/token-tag-spacing} [token-tag/view
[token-tag/view {:token-symbol (:symbol token)
{:token-symbol (:symbol token) :token-img-src img-src
:token-value amount :token-value amount
:size :size-24 :size :size-24
:options (cond :options (cond
sufficient? :hold sufficient? :hold
purchasable? :add)}]])) purchasable? :add)}]])
tokens)]) tokens)])
(defn- internal-view (defn- internal-view
+33 -20
View File
@@ -76,15 +76,19 @@
(str description " · " (i18n/label :t/on-device))]) (str description " · " (i18n/label :t/on-device))])
(defn- context-tag-subtitle (defn- context-tag-subtitle
[{:keys [community-logo community-name]}] [{:keys [context-tag-type community-logo community-name account-name emoji customization-color]}]
[rn/view (let [tag-type (or context-tag-type :account)]
{:accessibility-label :context-tag-wrapper [rn/view
:style {:flex-wrap :wrap}} {:accessibility-label :context-tag-wrapper
[context-tag/view :style {:flex-wrap :wrap}}
{:type :community [context-tag/view
:community-name community-name {:type tag-type
:community-logo community-logo :account-name account-name
:size 24}]]) :emoji emoji
:community-name community-name
:community-logo community-logo
:size 24
:customization-color customization-color}]]))
(defn- description-subtitle (defn- description-subtitle
[{:keys [theme blur? description]}] [{:keys [theme blur? description]}]
@@ -95,7 +99,8 @@
description]) description])
(defn- subtitle (defn- subtitle
[{:keys [type theme blur? keycard? networks description community-name community-logo]}] [{:keys [type theme blur? keycard? networks description community-name community-logo
context-tag-type account-name emoji customization-color]}]
(cond (cond
(= :keypair type) (= :keypair type)
[keypair-subtitle [keypair-subtitle
@@ -118,8 +123,12 @@
(= :context-tag type) (= :context-tag type)
[context-tag-subtitle [context-tag-subtitle
{:community-logo community-logo {:context-tag-type context-tag-type
:community-name community-name}] :community-logo community-logo
:community-name community-name
:account-name account-name
:emoji emoji
:customization-color customization-color}]
(and (not= :label type) description) (and (not= :label type) description)
[description-subtitle [description-subtitle
@@ -173,6 +182,7 @@
(defn- view-internal (defn- view-internal
[{:keys [title title-icon type theme description blur? community-name community-logo button-icon [{:keys [title title-icon type theme description blur? community-name community-logo button-icon
account-name emoji
on-button-press on-button-press
on-button-long-press on-button-long-press
button-disabled? account-avatar-emoji account-avatar-type customization-color icon-avatar button-disabled? account-avatar-emoji account-avatar-type customization-color icon-avatar
@@ -196,14 +206,17 @@
:theme theme :theme theme
:blur? blur?}] :blur? blur?}]
[subtitle [subtitle
{:type type {:type type
:theme theme :theme theme
:blur? blur? :blur? blur?
:keycard? keycard? :keycard? keycard?
:networks networks :networks networks
:description description :description description
:community-name community-name :community-name community-name
:community-logo community-logo}]] :community-logo community-logo
:customization-color customization-color
:account-name account-name
:emoji emoji}]]
[right-icon [right-icon
{:theme theme {:theme theme
:type type :type type
@@ -1,6 +1,6 @@
(ns quo.components.gradient.gradient-cover.style) (ns quo.components.gradient.gradient-cover.style)
(defn root-container (defn root-container
[opacity] [opacity height]
{:height 252 {:height (or height 252)
:opacity opacity}) :opacity opacity})
@@ -6,7 +6,7 @@
[react-native.linear-gradient :as linear-gradient])) [react-native.linear-gradient :as linear-gradient]))
(defn- view-internal (defn- view-internal
[{:keys [customization-color opacity container-style] :or {customization-color :blue}}] [{:keys [customization-color opacity container-style height] :or {customization-color :blue}}]
(let [color-top (colors/custom-color customization-color 50 20) (let [color-top (colors/custom-color customization-color 50 20)
color-bottom (colors/custom-color customization-color 50 0)] color-bottom (colors/custom-color customization-color 50 0)]
[linear-gradient/linear-gradient [linear-gradient/linear-gradient
@@ -14,6 +14,6 @@
:colors [color-top color-bottom] :colors [color-top color-bottom]
:start {:x 0 :y 0} :start {:x 0 :y 0}
:end {:x 0 :y 1} :end {:x 0 :y 1}
:style (merge (style/root-container opacity) container-style)}])) :style (merge (style/root-container opacity height) container-style)}]))
(def view (quo.theme/with-theme view-internal)) (def view (quo.theme/with-theme view-internal))
@@ -0,0 +1,40 @@
(ns quo.components.list-items.network-list.component-spec
(:require [quo.components.list-items.network-list.view :as network-list]
[quo.foundations.colors :as colors]
[test-helpers.component :as h]))
(defn- render
[component]
(h/render-with-theme-provider component :light))
(def props
{:theme :light
:state :default
:label "Mainnet"
:network-image 873
:customization-color :blue
:token-value "100.00 ETH"
:fiat-value "€100.00"})
(h/describe "List items: Network List"
(h/test "default state explicit"
(render [network-list/view props])
(h/is-truthy (h/get-by-text "Mainnet")))
(h/test "Pressed state"
(render [network-list/view props])
(h/fire-event :on-press-in (h/get-by-label-text ::network-list))
(h/wait-for #(h/has-style (h/query-by-label-text ::network-list)
{:backgroundColor (colors/resolve-color :blue :light 5)})))
(h/test "Active state"
(render [network-list/view (assoc props :state :active)])
(h/has-style (h/query-by-label-text ::network-list)
{:backgroundColor (colors/resolve-color :blue :light 10)}))
(h/test "Call on-press"
(let [on-press (h/mock-fn)]
(render [network-list/view (assoc props :on-press on-press)])
(h/fire-event :on-press (h/get-by-label-text ::network-list))
(h/was-called on-press))))
@@ -0,0 +1,41 @@
(ns quo.components.list-items.network-list.style
(:require [quo.foundations.colors :as colors]))
(defn- background-color
[state customization-color theme]
(case state
:pressed (colors/resolve-color customization-color theme 5)
:active (colors/resolve-color customization-color theme 10)
:transparent))
(defn container
[state customization-color theme]
{:flex-direction :row
:justify-content :space-between
:align-items :center
:padding-horizontal 12
:padding-vertical 8
:border-radius 12
:height 56
:background-color (background-color state customization-color theme)})
(def info
{:flex-direction :row
:align-items :center
:gap 2})
(def network-image
{:border-width 1
:border-radius 16
:border-color colors/neutral-80-opa-5
:margin-right 8
:background-color colors/neutral-80-opa-5
:height 32
:width 32})
(def values-container
{:align-items :flex-end})
(defn fiat-value
[theme]
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)})
@@ -0,0 +1,76 @@
(ns quo.components.list-items.network-list.view
(:require
[clojure.string :as string]
[quo.components.list-items.network-list.style :as style]
[quo.components.markdown.text :as text]
[quo.theme :as quo.theme]
[react-native.core :as rn]
[reagent.core :as reagent]
[schema.core :as schema]))
(defn- info
[{:keys [network-image label]}]
[rn/view {:style style/info}
[rn/image
{:source network-image
:style style/network-image}]
[rn/view
[text/text
{:weight :semi-bold
:style {:text-transform :capitalize}
:number-of-lines 1}
(if (string/blank? label) "-" label)]]])
(defn- values
[{:keys [token-value fiat-value theme]}]
[rn/view {:style style/values-container}
[text/text
{:weight :medium
:size :paragraph-2
:number-of-lines 1}
token-value]
[text/text
{:style (style/fiat-value theme)
:size :paragraph-2
:number-of-lines 1}
fiat-value]])
(def ?schema
[:=>
[:catn
[:props
[:map {:closed true}
[:network-image :int]
[:label :string]
[:fiat-value :string]
[:token-value :string]
[:customization-color {:optional true} [:maybe :schema.common/customization-color]]
[:state {:optional true} [:enum :pressed :active :default]]
[:on-press {:optional true} [:maybe fn?]]
[:theme :schema.common/theme]]]]
:any])
(defn- view-internal
[]
(let [pressed? (reagent/atom false)
on-press-in #(reset! pressed? true)
on-press-out #(reset! pressed? false)]
(fn [{:keys [on-press state customization-color theme]
:as props
:or {customization-color :blue}}]
(let [internal-state (if @pressed?
:pressed
state)]
[rn/pressable
{:style (style/container internal-state customization-color theme)
:on-press-in on-press-in
:on-press-out on-press-out
:on-press on-press
:accessibility-label :network-list}
[info props]
[values props]]))))
(def view
(quo.theme/with-theme
(schema/instrument #'view-internal ?schema)))
@@ -1,4 +1,4 @@
(ns quo.components.list-items.user-list (ns quo.components.list-items.user
(:require (:require
[quo.components.avatars.user-avatar.view :as user-avatar] [quo.components.avatars.user-avatar.view :as user-avatar]
[quo.components.icon :as icons] [quo.components.icon :as icons]
@@ -18,14 +18,14 @@
:align-items :center}) :align-items :center})
(defn action-icon (defn action-icon
[{:keys [type on-press on-check disabled? checked?]}] [{:keys [type on-press on-check disabled? checked?]} theme]
[rn/touchable-opacity [rn/touchable-opacity
{:on-press (when on-press on-press)} {:on-press (when on-press on-press)}
(case type (case type
:options :options
[icons/icon :i/options [icons/icon :i/options
{:size 20 {:size 20
:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}] :color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}]
:checkbox :checkbox
[selectors/view [selectors/view
{:type :checkbox {:type :checkbox
@@ -37,30 +37,33 @@
[text/text "not implemented"] [text/text "not implemented"]
[rn/view])]) [rn/view])])
(defn user-list (defn user
[{:keys [short-chat-key primary-name secondary-name photo-path online? contact? verified? [{:keys [short-chat-key primary-name secondary-name photo-path online? contact? verified?
untrustworthy? on-press on-long-press accessory]}] untrustworthy? on-press on-long-press accessory customization-color theme]}]
[rn/touchable-opacity [rn/touchable-highlight
{:style container-style {:style container-style
:underlay-color (colors/resolve-color customization-color theme 5)
:accessibility-label :user-list :accessibility-label :user-list
:on-press (when on-press on-press) :on-press (when on-press on-press)
:on-long-press (when on-long-press on-long-press)} :on-long-press (when on-long-press on-long-press)}
[user-avatar/user-avatar [:<>
{:full-name primary-name [user-avatar/user-avatar
:profile-picture photo-path {:full-name primary-name
:online? online? :profile-picture photo-path
:size :small}] :online? online?
[rn/view {:style {:margin-horizontal 8 :flex 1}} :size :small}]
[author/view [rn/view {:style {:margin-horizontal 8 :flex 1}}
{:primary-name primary-name [author/view
:secondary-name secondary-name {:primary-name primary-name
:contact? contact? :secondary-name secondary-name
:verified? verified? :contact? contact?
:untrustworthy? untrustworthy?}] :verified? verified?
(when short-chat-key :untrustworthy? untrustworthy?
[text/text :size 15}]
{:size :paragraph-1 (when short-chat-key
:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}} [text/text
short-chat-key])] {:size :paragraph-2
(when accessory :style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40)}}
[action-icon accessory])]) short-chat-key])]
(when accessory
[action-icon accessory theme])]])
@@ -38,7 +38,7 @@
(defn icon-container (defn icon-container
[is-first?] [is-first?]
{:margin-left (if is-first? 4 2) {:margin-left (if is-first? 4 2)
:margin-bottom 2}) :margin-bottom 4})
(defn time-text (defn time-text
[theme] [theme]
+1 -2
View File
@@ -51,8 +51,7 @@
[icons/icon :main-icons2/untrustworthy [icons/icon :main-icons2/untrustworthy
{:size 12 {:size 12
:no-color true :no-color true
:container-style (style/icon-container contact?)}]) :container-style (style/icon-container contact?)}])]
]
(when (and (not verified?) short-chat-key) (when (and (not verified?) short-chat-key)
[text/text [text/text
{:weight :monospace {:weight :monospace
@@ -2,7 +2,9 @@
(:require (:require
[quo.components.markdown.text :as text] [quo.components.markdown.text :as text]
[quo.components.profile.collectible.style :as style] [quo.components.profile.collectible.style :as style]
[react-native.core :as rn])) [react-native.core :as rn]
[react-native.fast-image :as fast-image]
[react-native.svg :as svg]))
(defn remaining-tiles (defn remaining-tiles
[amount] [amount]
@@ -14,12 +16,21 @@
(str "+" amount)]]) (str "+" amount)]])
(defn tile (defn tile
[{:keys [style resource size]}] [{:keys [style size resource]}]
(let [source (if (string? resource) {:uri resource} resource)] (let [svg? (and (map? resource) (:svg? resource))
image-style (style/tile-style-by-size size)]
[rn/view {:style style} [rn/view {:style style}
[rn/image (if svg?
{:style (style/tile-style-by-size size) [rn/view
:source source}]])) {:style {:border-radius (:border-radius image-style)
:overflow :hidden}}
[svg/svg-uri (assoc image-style :uri (:uri resource))]]
[fast-image/fast-image
{:style image-style
:source (if (string? resource)
{:uri resource
:priority :low}
resource)}])]))
(defn two-tiles (defn two-tiles
[{:keys [images size]}] [{:keys [images size]}]
@@ -34,10 +34,9 @@
(= :pinned use-case) (= :pinned use-case)
theme) theme)
container-style)} container-style)}
[rn/image [rn/text
{:style {:width 15 :height 15} {:accessibility-label :emoji}
:accessibility-label :emoji (reaction.resource/system-emojis emoji)]
:source (reaction.resource/get-reaction emoji)}]
[text/text [text/text
{:size :paragraph-2 {:size :paragraph-2
:weight :semi-bold :weight :semi-bold
@@ -4,6 +4,14 @@
(def ^:private reactions (def ^:private reactions
(resolve-all-reactions)) (resolve-all-reactions))
(def system-emojis
{:reaction/thumbs-up "👍"
:reaction/thumbs-down "👎"
:reaction/love "❤"
:reaction/laugh "😂"
:reaction/sad "😢"
:reaction/angry "😡"})
(defn get-reaction (defn get-reaction
[reaction] [reaction]
(assert (keyword? reaction) "Reaction should be a keyword") (assert (keyword? reaction) "Reaction should be a keyword")
@@ -19,6 +19,5 @@
(swap! pressed? not) (swap! pressed? not)
(when on-press (when on-press
(on-press e)))} (on-press e)))}
[rn/image [rn/text
{:source (reactions.resource/get-reaction emoji) (reactions.resource/system-emojis emoji)]])))
:style {:width 20 :height 20}}]])))
@@ -8,19 +8,20 @@
(defn- category-internal (defn- category-internal
[{:keys [label data container-style] :as props}] [{:keys [label data container-style] :as props}]
[rn/view {:style (merge (style/container label) container-style)} (let [settings-item (filter identity data)]
(when label [rn/view {:style (merge (style/container label) container-style)}
[text/text (when label
{:weight :medium [text/text
:size :paragraph-2 {:weight :medium
:style (style/label props)} :size :paragraph-2
label]) :style (style/label props)}
[rn/view {:style (style/settings-items props)} label])
(for [item data] [rn/view {:style (style/settings-items props)}
^{:key item} (for [item settings-item]
[:<> ^{:key item}
[settings-item/view item] [:<>
(when-not (= item (last data)) [settings-item/view item]
[rn/view {:style (style/settings-separator props)}])])]]) (when-not (= item (last settings-item))
[rn/view {:style (style/settings-separator props)}])])]]))
(def settings-category (quo.theme/with-theme category-internal)) (def settings-category (quo.theme/with-theme category-internal))
@@ -20,7 +20,7 @@
network-image] network-image]
:or {subtitle-type :default}}] :or {subtitle-type :default}}]
[rn/view {:style style/subtitle-container} [rn/view {:style style/subtitle-container}
(when (not= :small size) (when (and subtitle-type (not= :small size))
[rn/view {:style (style/subtitle-icon-container subtitle-type)} [rn/view {:style (style/subtitle-icon-container subtitle-type)}
(case subtitle-type (case subtitle-type
:icon [icons/icon icon :icon [icons/icon icon
@@ -16,6 +16,12 @@
:padding-top 12 :padding-top 12
:padding-bottom 8}) :padding-bottom 8})
(def gradient-bg
{:position :absolute
:top 0
:left 0
:right 0})
;;; Header ;;; Header
(def header-container (def header-container
{:flex-direction :row {:flex-direction :row
@@ -4,14 +4,13 @@
[oops.core :as oops] [oops.core :as oops]
[quo.components.avatars.account-avatar.view :as account-avatar] [quo.components.avatars.account-avatar.view :as account-avatar]
[quo.components.buttons.button.view :as button] [quo.components.buttons.button.view :as button]
[quo.components.gradient.gradient-cover.view :as gradient-cover]
[quo.components.markdown.text :as text] [quo.components.markdown.text :as text]
[quo.components.share.qr-code.view :as qr-code] [quo.components.share.qr-code.view :as qr-code]
[quo.components.share.share-qr-code.style :as style] [quo.components.share.share-qr-code.style :as style]
[quo.components.tabs.tab.view :as tab] [quo.components.tabs.tab.view :as tab]
[quo.theme] [quo.theme]
[react-native.blur :as blur]
[react-native.core :as rn] [react-native.core :as rn]
[react-native.platform :as platform]
[reagent.core :as reagent] [reagent.core :as reagent]
[utils.i18n :as i18n])) [utils.i18n :as i18n]))
@@ -126,41 +125,44 @@
[{:keys [share-qr-type qr-image-uri component-width customization-color full-name [{:keys [share-qr-type qr-image-uri component-width customization-color full-name
profile-picture emoji on-share-press] profile-picture emoji on-share-press]
:as props}] :as props}]
[rn/view {:style style/content-container} [:<>
[rn/view [rn/view {:style style/gradient-bg}
{:style style/share-qr-container} [gradient-cover/view {:customization-color customization-color :height 463}]]
[rn/view {:style style/content-container}
[rn/view [rn/view
{:style style/share-qr-inner-container} {:style style/share-qr-container}
[account-avatar/view [rn/view
{:customization-color customization-color {:style style/share-qr-inner-container}
:emoji emoji [account-avatar/view
:size 32}] {:customization-color customization-color
[text/text :emoji emoji
{:size :heading-2 :size 32}]
:weight :semi-bold [text/text
:style {:margin-left 8}} full-name]] {:size :heading-2
[share-button {:on-press on-share-press}]] :weight :semi-bold
(when (#{:wallet-legacy :wallet-multichain} share-qr-type) :style {:margin-left 8}} full-name]]
[header props]) [share-button {:on-press on-share-press}]]
[quo.theme/provider {:theme :light} (when (#{:wallet-legacy :wallet-multichain} share-qr-type)
[qr-code/view [header props])
{:qr-image-uri qr-image-uri [quo.theme/provider {:theme :light}
:size (style/qr-code-size component-width) [qr-code/view
:avatar (if (= share-qr-type :profile) {:qr-image-uri qr-image-uri
:profile :size (style/qr-code-size component-width)
:wallet-account) :avatar (if (= share-qr-type :profile)
:customization-color customization-color :profile
:full-name full-name :wallet-account)
:profile-picture profile-picture :customization-color customization-color
:emoji emoji}]] :full-name full-name
[rn/view {:style style/bottom-container} :profile-picture profile-picture
(case share-qr-type :emoji emoji}]]
:profile [profile-bottom props] [rn/view {:style style/bottom-container}
:wallet-legacy [wallet-legacy-bottom props] (case share-qr-type
:wallet-multichain [wallet-multichain-bottom props] :profile [profile-bottom props]
nil)]]) :wallet-legacy [wallet-legacy-bottom props]
:wallet-multichain [wallet-multichain-bottom props]
nil)]]])
(defn view (defn- view-internal
"Receives the following properties: "Receives the following properties:
- type: :profile | :wallet-legacy | :wallet-multichain - type: :profile | :wallet-legacy | :wallet-multichain
- qr-image-uri: Image source value. - qr-image-uri: Image source value.
@@ -190,16 +192,9 @@
Sometimes while using a blur layer on top of another on Android, this component looks Sometimes while using a blur layer on top of another on Android, this component looks
bad because of the `blur/view`, so we can set `unblur-on-android? true` to fix it. bad because of the `blur/view`, so we can set `unblur-on-android? true` to fix it.
" "
[{:keys [unblur-on-android?] :as props}] [props]
(reagent/with-let [component-width (reagent/atom nil) (reagent/with-let [component-width (reagent/atom nil)
container-component (if (and platform/android? unblur-on-android?) container-component [rn/view {:background-color style/overlay-color}]]
[rn/view {:background-color style/overlay-color}]
[blur/view
{:blur-radius 20
:blur-amount 20
:blur-type :transparent
:overlay-color style/overlay-color
:background-color style/overlay-color}])]
[quo.theme/provider {:theme :dark} [quo.theme/provider {:theme :dark}
[rn/view [rn/view
{:accessibility-label :share-qr-code {:accessibility-label :share-qr-code
@@ -211,3 +206,6 @@
(-> props (-> props
(assoc :component-width @component-width) (assoc :component-width @component-width)
(clojure.set/rename-keys {:type :share-qr-type}))]))]])) (clojure.set/rename-keys {:type :share-qr-type}))]))]]))
(def view (quo.theme/with-theme view-internal))
+1 -1
View File
@@ -27,7 +27,7 @@
9.213 11.877 8.436 C 11.787 7.866 11.649 7.313 11.468 6.781 Z" 9.213 11.877 8.436 C 11.787 7.866 11.649 7.313 11.468 6.781 Z"
:clip-path "url(#clip0_5514_84289)"}] :clip-path "url(#clip0_5514_84289)"}]
[svg/defs [svg/defs
[svg/clippath {:id "clip0_5514_84289"} [svg/clip-path {:id "clip0_5514_84289"}
[svg/rect {:width width :height height :fill :none}]]]]) [svg/rect {:width width :height height :fill :none}]]]])
(defn- content (defn- content
+7 -6
View File
@@ -20,7 +20,7 @@
- :token-symbol - string" - :token-symbol - string"
[] []
(let [container-width (reagent/atom 0)] (let [container-width (reagent/atom 0)]
(fn [{:keys [options size blur? theme token-value token-symbol] (fn [{:keys [options size blur? theme token-value token-img-src token-symbol]
:or {size :size-24}}] :or {size :size-24}}]
[rn/view [rn/view
{:on-layout #(reset! container-width {:on-layout #(reset! container-width
@@ -42,11 +42,12 @@
[])} [])}
[rn/view {:style (style/container size options blur? theme)} [rn/view {:style (style/container size options blur? theme)}
[token/view [token/view
{:style (style/token-img size) {:style (style/token-img size)
:token token-symbol :token token-symbol
:size (case size :size (case size
:size-24 :size-20 :size-24 :size-20
:size-32 :size-28)}] :size-32 :size-28)
:image-source token-img-src}]
[text/text [text/text
{:size :paragraph-2 {:size :paragraph-2
:weight :medium :weight :medium
+20 -18
View File
@@ -15,9 +15,7 @@
[:token {:optional true} [:or keyword? string?]] [:token {:optional true} [:or keyword? string?]]
[:style {:optional true} map?] [:style {:optional true} map?]
;; Ignores `token` and uses this as parameter to `rn/image`'s source. ;; Ignores `token` and uses this as parameter to `rn/image`'s source.
[:image-source {:optional true} [:or :schema.common/image-source :string]] [:image-source {:optional true} [:maybe [:or :schema.common/image-source :string]]]]]
;; If true, adds `data:image/png;base64,` as prefix to the string passed as `image-source`
[:add-b64-prefix? {:optional true} boolean?]]]
:any]) :any])
(defn- size->number (defn- size->number
@@ -52,28 +50,32 @@
first first
string/capitalize)]]) string/capitalize)]])
(defn- normalize-b64-string
[b64-image]
(if (string/starts-with? b64-image "data:image/")
b64-image
(str b64-png-image-prefix b64-image)))
(defn view-internal (defn view-internal
"Render a token image. "Render a token image.
Props: Props:
- style: extra styles to apply to the `rn/image` component. - style: extra styles to apply to the `rn/image` component.
- size: `:size-nn` or just `nn`, being `nn` any number. Defaults to 32. - size: `:size-nn` or just `nn`, being `nn` any number. Defaults to 32.
- token: string or keyword, it can contain upper case letters or not. - token: string or keyword, it can contain upper case letters or not.
E.g. all of these are valid and resolve to the same: E.g. all of these are valid and resolve to the same:
:token/snt | :snt | :SNT | \"SNT\" | \"snt\". :token/snt | :snt | :SNT | \"SNT\" | \"snt\".
- image-source: Ignores `token` and uses this as parameter to `rn/image`'s source. - image-source: Ignores `token` and uses this as parameter to `rn/image`'s source, it
- add-b64-prefix?: If true, adds `data:image/png;base64,` as prefix to the string can be a b64 string representing an image.
passed as `image-source`.
" "
[{:keys [token size style image-source add-b64-prefix?] [{:keys [token size style image-source]
:or {size 32}}] :or {size 32}}]
(let [b64-string (if (and image-source add-b64-prefix?) (let [img-src (if (string? image-source)
(str b64-png-image-prefix image-source) (normalize-b64-string image-source)
image-source) image-source)]
source (or b64-string (token-loader/get-token-image token))] (if-let [existing-source (or img-src (token-loader/get-token-image token))]
(if source
[rn/image [rn/image
{:style (token-style style size) {:style (token-style style size)
:source source}] :source existing-source}]
[temp-empty-symbol token size style]))) [temp-empty-symbol token size style])))
(def view (schema/instrument #'view-internal ?schema)) (def view (schema/instrument #'view-internal ?schema))
@@ -4,7 +4,7 @@
(defn container (defn container
[network state theme] [network state theme]
{:flex 1 {:width 136
:height 44 :height 44
:border-width 1 :border-width 1
:border-radius 12 :border-radius 12
@@ -10,8 +10,12 @@
[react-native.core :as rn])) [react-native.core :as rn]))
(defn network-bridge-add (defn network-bridge-add
[{:keys [network state theme]}] [{:keys [network state theme container-style on-press]}]
[rn/view {:style (merge (style/container network state theme) (style/add-container theme))} [rn/pressable
{:style (merge (style/container network state theme)
(style/add-container theme)
container-style)
:on-press on-press}
[icon/icon :i/add-circle {:size 12 :no-color true}]]) [icon/icon :i/add-circle {:size 12 :no-color true}]])
(defn- network->text (defn- network->text
@@ -21,13 +25,14 @@
:else (string/capitalize (name network)))) :else (string/capitalize (name network))))
(defn view-internal (defn view-internal
[{:keys [theme network status amount container-style] :as args}] [{:keys [theme network status amount container-style on-press] :as args}]
(if (= status :add) (if (= status :add)
[network-bridge-add args] [network-bridge-add args]
[rn/view [rn/pressable
{:style (merge (style/container network status theme) container-style) {:style (merge (style/container network status theme) container-style)
:accessible true :accessible true
:accessibility-label :container} :accessibility-label :container
:on-press on-press}
(if (= status :loading) (if (= status :loading)
[rn/view [rn/view
{:style (style/loading-skeleton theme) {:style (style/loading-skeleton theme)
@@ -1,8 +1,7 @@
(ns quo.components.wallet.token-input.style (ns quo.components.wallet.token-input.style
(:require (:require
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
[quo.foundations.typography :as typography] [quo.foundations.typography :as typography]))
[react-native.platform :as platform]))
(defn main-container (defn main-container
[width] [width]
@@ -16,23 +15,55 @@
:flex-direction :row :flex-direction :row
:justify-content :space-between}) :justify-content :space-between})
(defn text-input (defn token-name
[theme] [theme]
(merge typography/heading-1 {:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
{:font-weight "600" :margin-right 8
:margin-left 8 :padding-bottom 2})
:margin-right (if platform/ios? 6 4)
:color (colors/theme-colors colors/neutral-100 colors/white theme) (def token-label-container
:padding 0 {:position :absolute
:text-align :center :left 40 ; token image size + margin
:height "100%"})) :right 0
:bottom 0
:top 0
:flex-direction :row
:align-items :flex-end})
(def text-input-container
{:position :absolute
:top 0
:bottom 0
:left 40 ; token image size + margin
:right 0})
(def text-input-dimensions
(-> typography/heading-1
(dissoc :letter-spacing)
(assoc :font-weight "600"
:margin-right 5
:padding-left 0
:padding-right 0
:padding-top 0
:padding-bottom 0
:height "100%")))
(defn text-input
[theme error?]
(assoc text-input-dimensions
:color
(if error?
(colors/resolve-color :danger theme)
(colors/theme-colors colors/neutral-100 colors/white theme))))
(defn placeholder-text
[theme]
(colors/theme-colors colors/neutral-40 colors/neutral-50 theme))
(defn divider (defn divider
[width theme] [theme]
{:height 1 {:margin-vertical 8
:width width :background-color (colors/theme-colors colors/neutral-10 colors/neutral-90 theme)})
:background-color (colors/theme-colors colors/neutral-10 colors/neutral-90 theme)
:margin-vertical 8})
(def data-container (def data-container
{:padding-top 4 {:padding-top 4
@@ -40,3 +71,7 @@
:flex-direction :row :flex-direction :row
:justify-content :space-between :justify-content :space-between
:align-items :center}) :align-items :center})
(defn fiat-amount
[theme]
{:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)})
+115 -63
View File
@@ -7,85 +7,137 @@
[quo.components.tags.network-tags.view :as network-tag] [quo.components.tags.network-tags.view :as network-tag]
[quo.components.utilities.token.view :as token] [quo.components.utilities.token.view :as token]
[quo.components.wallet.token-input.style :as style] [quo.components.wallet.token-input.style :as style]
[quo.foundations.colors :as colors]
[quo.foundations.common :as common] [quo.foundations.common :as common]
[quo.theme :as quo.theme] [quo.theme :as quo.theme]
[react-native.core :as rn] [react-native.core :as rn]
[reagent.core :as reagent])) [reagent.core :as reagent]))
(defn fiat-format
[currency num-value conversion]
(str (get common/currency-label currency) (.toFixed (* num-value conversion) 2)))
(defn crypto-format
[num-value conversion crypto-decimals token]
(str (.toFixed (/ num-value conversion) (or crypto-decimals 2))
" "
(string/upper-case (or (clj->js token) ""))))
(defn calc-value (defn calc-value
[crypto? currency token value conversion] [{:keys [crypto? currency token value conversion crypto-decimals]}]
(let [num-value (if (string? value) (parse-double (or value "0")) value)] (let [num-value (if (string? value)
(or (parse-double value) 0)
value)]
(if crypto? (if crypto?
(str (get common/currency-label currency) (.toFixed (* num-value conversion) 2)) (fiat-format currency num-value conversion)
(str (.toFixed (/ num-value conversion) 2) " " (string/upper-case (or (clj->js token) "")))))) (crypto-format num-value conversion crypto-decimals token))))
(defn- data-info
[{:keys [theme token crypto-decimals conversion networks title crypto? currency amount error?]}]
[rn/view {:style style/data-container}
[network-tag/view
{:networks networks
:title title
:status (when error? :error)}]
[text/text
{:size :paragraph-2
:weight :medium
:style (style/fiat-amount theme)}
(calc-value {:crypto? crypto?
:currency currency
:token token
:value amount
:conversion conversion
:crypto-decimals crypto-decimals})]])
(defn- token-name-text
[theme text]
[text/text
{:style (style/token-name theme)
:size :paragraph-2
:weight :semi-bold}
(string/upper-case (or (clj->js text) ""))])
(defn- token-label
[{:keys [theme value text]}]
[rn/view
{:style style/token-label-container
:pointer-events :none}
[rn/text-input
{:max-length 12
:style style/text-input-dimensions
:editable false
:placeholder "0"
:opacity 0
:value value}]
[token-name-text theme text]])
(defn input-section
[{:keys [on-change-text value value-atom]}]
(let [input-ref (atom nil)
set-ref #(reset! input-ref %)
focus-input #(when-let [ref ^js @input-ref]
(.focus ref))
controlled-input? (some? value)
handle-on-change-text (fn [v]
(when-not controlled-input?
(reset! value-atom v))
(when on-change-text
(on-change-text v)))]
(fn [{:keys [theme token customization-color show-keyboard? crypto? currency value error?]
:or {show-keyboard? true}}]
[rn/pressable
{:on-press focus-input
:style {:flex 1}}
[token/view
{:token token
:size :size-32}]
[rn/view {:style style/text-input-container}
[rn/text-input
(cond-> {:style (style/text-input theme error?)
:placeholder-text-color (style/placeholder-text theme)
:auto-focus true
:ref set-ref
:placeholder "0"
:keyboard-type :numeric
:max-length 12
:on-change-text handle-on-change-text
:selection-color customization-color
:show-soft-input-on-focus show-keyboard?}
controlled-input? (assoc :value value)
(not controlled-input?) (assoc :default-value @value-atom))]]
[token-label
{:theme theme
:text (if crypto? token currency)
:value (if controlled-input? value @value-atom)}]])))
(defn- view-internal (defn- view-internal
[{external-value :value}] [{:keys [on-swap]}]
(let [width (:width (rn/get-window)) (let [width (:width (rn/get-window))
value (reagent/atom nil) value-atom (reagent/atom nil)
crypto? (reagent/atom true) crypto? (reagent/atom true)
input-ref (atom nil) handle-on-swap (fn []
controlled-input? (some? external-value)] (swap! crypto? not)
(fn [{:keys [theme token currency conversion networks title customization-color (when on-swap
on-change-text on-swap container-style show-keyboard?] (on-swap @crypto?)))]
:or {show-keyboard? true} (fn [{:keys [theme container-style value] :as props}]
external-value :value}] [rn/view {:style (merge (style/main-container width) container-style)}
[rn/view
{:style (merge
(style/main-container width)
container-style)}
[rn/view {:style style/amount-container} [rn/view {:style style/amount-container}
[rn/pressable [input-section
{:on-press #(when @input-ref (.focus ^js @input-ref)) (assoc props
:style {:flex-direction :row :value-atom value-atom
:flex-grow 1 :crypto? @crypto?)]
:align-items :flex-end}}
[token/view {:token token :size :size-32}]
[rn/text-input
(cond-> {:auto-focus true
:ref #(reset! input-ref %)
:placeholder "0"
:placeholder-text-color (colors/theme-colors colors/neutral-40
colors/neutral-50
theme)
:keyboard-type :numeric
:max-length 12
:on-change-text (fn [v]
(when-not controlled-input?
(reset! value v))
(when on-change-text
(on-change-text v)))
:style (style/text-input theme)
:selection-color customization-color
:show-soft-input-on-focus show-keyboard?}
controlled-input? (assoc :value external-value)
(not controlled-input?) (assoc :default-value @value))]
[text/text
{:size :paragraph-2
:weight :semi-bold
:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)
:margin-right 8
:padding-bottom 2}}
(string/upper-case (or (clj->js (if @crypto? token currency)) ""))]]
[button/button [button/button
{:icon true {:icon true
:icon-only? true :icon-only? true
:size 32 :size 32
:on-press (fn [] :on-press handle-on-swap
(swap! crypto? not)
(when on-swap
(on-swap @crypto?)))
:type :outline :type :outline
:accessibility-label :reorder} :accessibility-label :reorder}
:i/reorder]] :i/reorder]]
[divider-line/view {:container-style {:margin-vertical 8}}] [divider-line/view {:container-style (style/divider theme)}]
[rn/view {:style style/data-container} [data-info
[network-tag/view {:networks networks :title title}] (assoc props
[text/text :crypto? @crypto?
{:size :paragraph-2 :amount (or value @value-atom))]])))
:weight :medium
:style {:color (colors/theme-colors colors/neutral-50 colors/neutral-40 theme)}}
(calc-value @crypto? currency token (or external-value @value) conversion)]]])))
(def view (quo.theme/with-theme view-internal)) (def view (quo.theme/with-theme view-internal))
+5 -3
View File
@@ -80,13 +80,14 @@
quo.components.list-items.community.view quo.components.list-items.community.view
quo.components.list-items.dapp.view quo.components.list-items.dapp.view
quo.components.list-items.menu-item quo.components.list-items.menu-item
quo.components.list-items.network-list.view
quo.components.list-items.preview-list.view quo.components.list-items.preview-list.view
quo.components.list-items.quiz-item.view quo.components.list-items.quiz-item.view
quo.components.list-items.saved-address.view quo.components.list-items.saved-address.view
quo.components.list-items.saved-contact-address.view quo.components.list-items.saved-contact-address.view
quo.components.list-items.token-network.view quo.components.list-items.token-network.view
quo.components.list-items.token-value.view quo.components.list-items.token-value.view
quo.components.list-items.user-list quo.components.list-items.user
quo.components.loaders.skeleton-list.view quo.components.loaders.skeleton-list.view
quo.components.markdown.list.view quo.components.markdown.list.view
quo.components.markdown.text quo.components.markdown.text
@@ -299,16 +300,17 @@
(def account-list-card quo.components.list-items.account-list-card.view/view) (def account-list-card quo.components.list-items.account-list-card.view/view)
(def address quo.components.list-items.address.view/view) (def address quo.components.list-items.address.view/view)
(def channel quo.components.list-items.channel.view/view) (def channel quo.components.list-items.channel.view/view)
(def community-list-item quo.components.list-items.community.view/view) (def community-list quo.components.list-items.community.view/view)
(def dapp quo.components.list-items.dapp.view/view) (def dapp quo.components.list-items.dapp.view/view)
(def menu-item quo.components.list-items.menu-item/menu-item) (def menu-item quo.components.list-items.menu-item/menu-item)
(def network-list quo.components.list-items.network-list.view/view)
(def preview-list quo.components.list-items.preview-list.view/view) (def preview-list quo.components.list-items.preview-list.view/view)
(def quiz-item quo.components.list-items.quiz-item.view/view) (def quiz-item quo.components.list-items.quiz-item.view/view)
(def saved-address quo.components.list-items.saved-address.view/view) (def saved-address quo.components.list-items.saved-address.view/view)
(def saved-contact-address quo.components.list-items.saved-contact-address.view/view) (def saved-contact-address quo.components.list-items.saved-contact-address.view/view)
(def token-network quo.components.list-items.token-network.view/view) (def token-network quo.components.list-items.token-network.view/view)
(def token-value quo.components.list-items.token-value.view/view) (def token-value quo.components.list-items.token-value.view/view)
(def user-list quo.components.list-items.user-list/user-list) (def user quo.components.list-items.user/user)
;;;; Loaders ;;;; Loaders
(def skeleton-list quo.components.loaders.skeleton-list.view/view) (def skeleton-list quo.components.loaders.skeleton-list.view/view)
+1
View File
@@ -48,6 +48,7 @@
quo.components.list-items.channel.component-spec quo.components.list-items.channel.component-spec
quo.components.list-items.community.component-spec quo.components.list-items.community.component-spec
quo.components.list-items.dapp.component-spec quo.components.list-items.dapp.component-spec
quo.components.list-items.network-list.component-spec
quo.components.list-items.quiz-item.component-spec quo.components.list-items.quiz-item.component-spec
quo.components.list-items.saved-address.component-spec quo.components.list-items.saved-address.component-spec
quo.components.list-items.saved-contact-address.component-spec quo.components.list-items.saved-contact-address.component-spec
+76
View File
@@ -0,0 +1,76 @@
(ns react-native.biometrics
(:require
["react-native-biometrics" :default Biometrics]
[clojure.string :as string]
[oops.core :as oops]
[react-native.platform :as platform]
[schema.core :as schema]))
(def ^:private ^:const android-not-available-error-message "Biometric hardware unavailable")
(def ^:private ^:const android-not-enrolled-error-message "No fingerprints enrolled.")
(def ^:private ^:const ios-not-enrolled-error-message "No identities are enrolled")
(defn get-supported-type
"Returns a JS promise that resolves with the biometrics types supported by the
device, regardless of whether it's enabled or disabled.
Resolved values: `:Biometrics` `:FaceID` `:TouchID`"
[]
(-> (Biometrics.)
(.isSensorAvailable)
(.then (fn [result]
(-> result
(oops/oget :biometryType)
keyword)))
(.catch (constantly nil))))
(defn get-available
"Returns a JS promise that resolves to a boolean, which signifies whether
biometrics is enabled/disabled on the device."
[]
(-> (Biometrics.)
(.isSensorAvailable)
(.then (fn [result]
(oops/oget result :available)))))
;; NOTE: the react-native-biometrics package error codes/messages differ across platforms.
;; On android we get error messages while on iOS it's a stringified Obj-C error object.
(defn- convert-auth-error-message
[message]
(let [cause (if platform/android?
(condp = message
android-not-enrolled-error-message ::not-enrolled
android-not-available-error-message ::not-available
::unknown)
(condp #(string/includes? %2 %1) message
ios-not-enrolled-error-message ::not-enrolled
::unknown))]
(ex-info "Failed to authenticate with biometrics"
{:orig-error-message message}
cause)))
(defn authenticate
"Returns a JS promise that resolves with a boolean auth success state: `true` for
success and `false` when canceled by user."
[{:keys [prompt-message fallback-prompt-message cancel-button-text]}]
(-> (Biometrics.)
(.simplePrompt #js
{"promptMessage" prompt-message
"fallbackPromptMessage" fallback-prompt-message
"cancelButtonText" cancel-button-text})
(.then (fn [result]
(oops/oget result :success)))
(.catch (fn [error]
(-> (.-message error)
convert-auth-error-message
throw)))))
(schema/=> authenticate
[:=>
[:cat
[:map {:closed true}
[:prompt-message string?]
[:fallback-prompt-message {:optional true} string?]
[:cancel-button-text {:optional true} string?]]]
:any])
+2 -1
View File
@@ -20,7 +20,8 @@
(merge (merge
props props
{:source (if (string? source) {:source (if (string? source)
{:uri source} {:uri source
:priority :high}
source) source)
:on-error (fn [e] :on-error (fn [e]
(when-let [on-error (:on-error props)] (when-let [on-error (:on-error props)]
+5 -3
View File
@@ -72,9 +72,11 @@
(defn get-credentials (defn get-credentials
"Gets the credentials for a specified server from the Keychain" "Gets the credentials for a specified server from the Keychain"
[server callback] ([server]
(-> (.getInternetCredentials ^js react-native-keychain (string/lower-case server)) (get-credentials server identity))
(.then callback))) ([server callback]
(-> (.getInternetCredentials ^js react-native-keychain (string/lower-case server))
(.then callback))))
(defn reset-credentials (defn reset-credentials
[server] [server]
+13 -11
View File
@@ -17,19 +17,19 @@
(fn [^js data] (fn [^js data]
(let [^js section (.-section data)] (let [^js section (.-section data)]
(reagent/as-element [f (reagent/as-element [f
{:title (.-title section) {:index (.-index section)
:title (.-title section)
:data (.-data section)}])))) :data (.-data section)}]))))
(defn- wrap-per-section-render-fn (defn- wrap-per-section-render-fn
[props] [index props]
(update (-> (if-let [f (:render-fn props)]
(if-let [f (:render-fn props)] (assoc (dissoc props :render-fn :render-data)
(assoc (dissoc props :render-fn :render-data) :renderItem
:renderItem (memo-wrap-render-fn f (:render-data props)))
(memo-wrap-render-fn f (:render-data props))) props)
props) (update :data to-array)
:data (assoc :index index)))
to-array))
(defn section-list (defn section-list
"A wrapper for SectionList. "A wrapper for SectionList.
@@ -42,6 +42,8 @@
props props
(when render-section-footer-fn (when render-section-footer-fn
{:renderSectionFooter (wrap-render-section-header-fn render-section-footer-fn)}) {:renderSectionFooter (wrap-render-section-header-fn render-section-footer-fn)})
{:sections (clj->js (map wrap-per-section-render-fn sections)) {:sections (->> sections
(map-indexed wrap-per-section-render-fn)
(clj->js))
:renderSectionHeader (wrap-render-section-header-fn render-section-header-fn) :renderSectionHeader (wrap-render-section-header-fn render-section-header-fn)
:style style})]) :style style})])
+3 -2
View File
@@ -6,10 +6,11 @@
(def svg (reagent/adapt-react-class Svg/default)) (def svg (reagent/adapt-react-class Svg/default))
(def path (reagent/adapt-react-class Svg/Path)) (def path (reagent/adapt-react-class Svg/Path))
(def rect (reagent/adapt-react-class Svg/Rect)) (def rect (reagent/adapt-react-class Svg/Rect))
(def clippath (reagent/adapt-react-class Svg/ClipPath)) (def clip-path (reagent/adapt-react-class Svg/ClipPath))
(def defs (reagent/adapt-react-class Svg/Defs)) (def defs (reagent/adapt-react-class Svg/Defs))
(def circle (reagent/adapt-react-class Svg/Circle)) (def circle (reagent/adapt-react-class Svg/Circle))
(def svgxml (reagent/adapt-react-class Svg/SvgXml)) (def svg-xml (reagent/adapt-react-class Svg/SvgXml))
(def svg-uri (reagent/adapt-react-class Svg/SvgUri))
(def g (reagent/adapt-react-class Svg/G)) (def g (reagent/adapt-react-class Svg/G))
(def linear-gradient (reagent/adapt-react-class Svg/LinearGradient)) (def linear-gradient (reagent/adapt-react-class Svg/LinearGradient))
(def stop (reagent/adapt-react-class Svg/Stop)) (def stop (reagent/adapt-react-class Svg/Stop))
-20
View File
@@ -1,20 +0,0 @@
(ns react-native.touch-id
(:require
["react-native-touch-id" :default touchid]))
;; currently, for android, react-native-touch-id
;; is not returning supported biometric type
;; defaulting to :fingerprint
(def android-default-support :fingerprint)
(defn get-supported-type
[callback]
(-> (.isSupported ^js touchid)
(.then #(callback (or (keyword %) android-default-support)))
(.catch #(callback nil))))
(defn authenticate
[{:keys [on-success on-fail reason options]}]
(-> (.authenticate ^js touchid reason (clj->js options))
(.then #(when on-success (on-success %)))
(.catch #(when on-fail (on-fail (aget % "code"))))))
+51 -88
View File
@@ -2,9 +2,8 @@
(:require (:require
[native-module.core :as native-module] [native-module.core :as native-module]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[react-native.async-storage :as async-storage] [react-native.biometrics :as biometrics]
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.touch-id :as touch-id]
[status-im.common.keychain.events :as keychain] [status-im.common.keychain.events :as keychain]
[status-im.constants :as constants] [status-im.constants :as constants]
[taoensso.timbre :as log] [taoensso.timbre :as log]
@@ -12,27 +11,19 @@
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
(def android-device-blacklisted? (def android-device-blacklisted?
(= (:brand (native-module/get-device-model-info)) "bannedbrand")) (and platform/android? (= (:brand (native-module/get-device-model-info)) "bannedbrand")))
(defn get-supported-type
[callback]
(cond platform/ios? (touch-id/get-supported-type callback)
platform/android? (if android-device-blacklisted?
(callback nil)
(touch-id/get-supported-type callback))
:else (callback nil)))
(defn get-label-by-type (defn get-label-by-type
[biometric-type] [biometric-type]
(condp = biometric-type (condp = biometric-type
:fingerprint (i18n/label :t/biometric-fingerprint) constants/biometrics-type-android (i18n/label :t/biometric-fingerprint)
:FaceID (i18n/label :t/biometric-faceid) constants/biometrics-type-face-id (i18n/label :t/biometric-faceid)
(i18n/label :t/biometric-touchid))) (i18n/label :t/biometric-touchid)))
(defn get-icon-by-type (defn get-icon-by-type
[biometric-type] [biometric-type]
(condp = biometric-type (condp = biometric-type
:FaceID :i/face-id constants/biometrics-type-face-id :i/face-id
:i/touch-id)) :i/touch-id))
(re-frame/reg-fx (re-frame/reg-fx
@@ -41,8 +32,10 @@
;;NOTE: if we can't save user password, we can't use biometric ;;NOTE: if we can't save user password, we can't use biometric
(keychain/can-save-user-password? (keychain/can-save-user-password?
(fn [can-save?] (fn [can-save?]
(when can-save? (when (and can-save? (not android-device-blacklisted?))
(get-supported-type #(rf/dispatch [:biometric/get-supported-biometric-type-success %]))))))) (-> (biometrics/get-supported-type)
(.then (fn [type]
(rf/dispatch [:biometric/get-supported-biometric-type-success type])))))))))
(rf/defn get-supported-biometric-auth-success (rf/defn get-supported-biometric-auth-success
{:events [:biometric/get-supported-biometric-type-success]} {:events [:biometric/get-supported-biometric-type-success]}
@@ -51,82 +44,32 @@
(rf/defn show-message (rf/defn show-message
{:events [:biometric/show-message]} {:events [:biometric/show-message]}
[_ code] [_ error]
(let [handle-error? (and code (let [code (ex-cause error)
(not (contains? #{constants/biometric-error-user-canceled content (if (#{::biometrics/not-enrolled
constants/biometric-error-user-fallback} ::biometrics/not-available}
code))) code)
content (if (#{constants/biometric-error-not-available (i18n/label :t/grant-face-id-permissions)
constants/biometric-error-not-enrolled} (i18n/label :t/biometric-auth-error {:code code}))]
code) {:effects.utils/show-popup
(i18n/label :t/grant-face-id-permissions) {:title (i18n/label :t/biometric-auth-login-error-title)
(i18n/label :t/biometric-auth-error {:code code}))] :content content}}))
(when handle-error?
{:effects.utils/show-popup
{:title (i18n/label :t/biometric-auth-login-error-title)
:content content}})))
(defn- supress-biometry-error-key
[key-uid]
(keyword (str "biometric/supress-not-enrolled-error-" key-uid)))
;; NOTE: if the account had biometrics registered, but it's not enrolled at the moment,
;; we should show the error message only once and supress further "NOT_ENROLLED" errors
;; until biometry is enrolled again. Note that we can only know that when :biometric/authenticate
;; is dispatched and fails with "NOT_ENROLLED", since :biometric/get-supported-biometric-type
;; only tells us what kind of biometric is available on the device, but it doesn't know of its
;; enrollment status.
(re-frame/reg-fx
:biometric/supress-not-enrolled-error
(fn [[key-uid dispatch-event]]
(let [storage-key (supress-biometry-error-key key-uid)]
(-> (async-storage/get-item storage-key identity)
(.then (fn [item]
(when (not item)
(rf/dispatch dispatch-event)
(async-storage/set-item! storage-key true))))
(.catch (fn [err]
(log/error "Couldn't supress biometry NOT_ENROLLED error"
{:key-uid key-uid
:event :biometric/supress-not-enrolled-error
:error err})))))))
;; NOTE: when biometrics is re-enrolled, we erase the flag in async-storage to assure
;; the "NOT_ENROLLED" error message will be shown again if biometrics is un-enrolled
;; in the future.
(re-frame/reg-fx
:biometric/reset-not-enrolled-error
(fn [key-uid]
(let [storage-key (supress-biometry-error-key key-uid)]
(-> (async-storage/get-item storage-key identity)
(.then (fn [supress?]
(when supress?
(async-storage/set-item! storage-key nil))))
(.catch (fn [err]
(log/error "Couldn't reset supressing biometry NOT_ENROLLED error"
{:key-uid key-uid
:event :biometric/reset-not-enrolled-error
:error err})))))))
(re-frame/reg-fx (re-frame/reg-fx
:biometric/authenticate :biometric/authenticate
(fn [options] (fn [{:keys [on-success on-fail prompt-message]}]
(touch-id/authenticate (-> (biometrics/authenticate
(merge {:prompt-message (or prompt-message (i18n/label :t/biometric-auth-reason-login))
{:reason (i18n/label :t/biometric-auth-reason-login) :fallback-prompt-message (i18n/label
:options (merge :t/biometric-auth-login-ios-fallback-label)
{:unifiedErrors true} :cancel-button-text (i18n/label :t/cancel)})
(when platform/ios? (.then (fn [not-canceled?]
{:passcodeFallback false (when (and on-success not-canceled?)
:fallbackLabel (i18n/label :t/biometric-auth-login-ios-fallback-label)}) (on-success))))
(when platform/android? (.catch (fn [err]
{:title (i18n/label :t/biometric-auth-android-title) (when on-fail
:imageColor :blue (on-fail err)))))))
:imageErrorColor :red
:sensorDescription (i18n/label :t/biometric-auth-android-sensor-desc)
:sensorErrorDescription (i18n/label :t/biometric-auth-android-sensor-error-desc)
:cancelText (i18n/label :t/cancel)}))}
options))))
(rf/defn authenticate (rf/defn authenticate
{:events [:biometric/authenticate]} {:events [:biometric/authenticate]}
@@ -155,3 +98,23 @@
(let [key-uid (get-in db [:profile/profile :key-uid])] (let [key-uid (get-in db [:profile/profile :key-uid])]
{:db (assoc db :auth-method constants/auth-method-none) {:db (assoc db :auth-method constants/auth-method-none)
:keychain/clear-user-password key-uid}))) :keychain/clear-user-password key-uid})))
(rf/reg-fx
:biometric/check-if-available
(fn [[key-uid callback]]
(keychain/can-save-user-password?
(fn [can-save?]
(when can-save?
(-> (biometrics/get-available)
(.then (fn [available?]
(when-not available?
(throw (js/Error. "biometric-not-available")))))
(.then #(keychain/get-auth-method! key-uid))
(.then (fn [auth-method]
(when auth-method (callback auth-method))))
(.catch (fn [err]
(when-not (= (.-message err) "biometric-not-available")
(log/error "Failed to check if biometrics is available"
{:error err
:key-uid key-uid
:event :profile.login/check-biometric}))))))))))
@@ -0,0 +1,5 @@
(ns status-im.common.contact-list.style)
(defn contacts-section-header
[first-item?]
{:padding-top (if first-item? 0 8)})
+6 -3
View File
@@ -1,7 +1,10 @@
(ns status-im.common.contact-list.view (ns status-im.common.contact-list.view
(:require (:require
[quo.core :as quo])) [quo.core :as quo]
[react-native.core :as rn]
[status-im.common.contact-list.style :as style]))
(defn contacts-section-header (defn contacts-section-header
[{:keys [title]}] [{:keys [title index]}]
[quo/divider-label title]) [rn/view (style/contacts-section-header (= index 0))
[quo/divider-label title]])
@@ -6,17 +6,21 @@
(defn contact-list-item (defn contact-list-item
[{:keys [on-press on-long-press accessory]} [{:keys [on-press on-long-press accessory]}
{:keys [primary-name secondary-name public-key compressed-key ens-verified added?]}] {:keys [primary-name secondary-name public-key compressed-key ens-verified added?]}
(let [photo-path (rf/sub [:chats/photo-path public-key]) theme]
online? (rf/sub [:visibility-status-updates/online? public-key])] (let [photo-path (rf/sub [:chats/photo-path public-key])
[quo/user-list online? (rf/sub [:visibility-status-updates/online? public-key])
{:short-chat-key (address/get-shortened-compressed-key (or compressed-key public-key)) customization-color (rf/sub [:profile/customization-color])]
:primary-name primary-name [quo/user
:secondary-name secondary-name {:customization-color customization-color
:photo-path photo-path :theme theme
:online? online? :short-chat-key (address/get-shortened-compressed-key (or compressed-key public-key))
:verified? ens-verified :primary-name primary-name
:contact? added? :secondary-name secondary-name
:on-press on-press :photo-path photo-path
:on-long-press on-long-press :online? online?
:accessory accessory}])) :verified? ens-verified
:contact? added?
:on-press on-press
:on-long-press on-long-press
:accessory accessory}]))
@@ -52,7 +52,8 @@
:remove-listeners remove-listeners})) :remove-listeners remove-listeners}))
(defn view (defn view
[{:keys [header footer customization-color gradient-cover?]} & [{:keys [header footer customization-color footer-container-padding gradient-cover?]
:or {footer-container-padding (safe-area/get-top)}} &
children] children]
(reagent/with-let [window-height (:height (rn/get-window)) (reagent/with-let [window-height (:height (rn/get-window))
footer-container-height (reagent/atom 0) footer-container-height (reagent/atom 0)
@@ -94,7 +95,7 @@
children)] children)]
[rn/keyboard-avoiding-view [rn/keyboard-avoiding-view
{:style style/keyboard-avoiding-view {:style style/keyboard-avoiding-view
:keyboard-vertical-offset (if platform/ios? (safe-area/get-top) 0) :keyboard-vertical-offset (if platform/ios? footer-container-padding 0)
:pointer-events :box-none} :pointer-events :box-none}
[floating-container/view [floating-container/view
{:on-layout set-footer-container-height {:on-layout set-footer-container-height
+8 -12
View File
@@ -70,17 +70,13 @@
{:db (assoc db :auth-method method) {:db (assoc db :auth-method method)
:keychain/save-auth-method [key-uid method]}) :keychain/save-auth-method [key-uid method]})
(re-frame/reg-fx (defn get-auth-method!
:keychain/get-auth-method [key-uid]
(fn [[key-uid callback]] (-> (str key-uid "-auth")
(can-save-user-password? (keychain/get-credentials)
(fn [can-save?] (.then (fn [value]
(if can-save? (if value (oops/oget value "password") auth-method-none)))
(keychain/get-credentials (.catch (constantly auth-method-none))))
(str key-uid "-auth")
(fn [value]
(callback (if value (oops/oget value "password") auth-method-none))))
(callback nil))))))
(defn save-user-password! (defn save-user-password!
[key-uid password] [key-uid password]
@@ -101,7 +97,7 @@
(get-user-password! key-uid callback))) (get-user-password! key-uid callback)))
(rf/defn get-user-password (rf/defn get-user-password
[_ key-uid callback] [_ [key-uid callback]]
{:keychain/get-user-password [key-uid callback]}) {:keychain/get-user-password [key-uid callback]})
(defn- password-migration-key-name (defn- password-migration-key-name
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.animations (ns status-im.common.lightbox.animations
(:require (:require
[react-native.reanimated :as reanimated])) [react-native.reanimated :as reanimated]))
@@ -1,25 +1,25 @@
(ns status-im.contexts.chat.messenger.lightbox.bottom-view (ns status-im.common.lightbox.bottom-view
(:require (:require
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
[react-native.core :as rn] [react-native.core :as rn]
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.constants :as c] [status-im.common.lightbox.constants :as constants]
[status-im.contexts.chat.messenger.lightbox.style :as style] [status-im.common.lightbox.style :as style]
[status-im.contexts.chat.messenger.lightbox.text-sheet.view :as text-sheet] [status-im.common.lightbox.text-sheet.view :as text-sheet]
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
(defn get-small-item-layout (defn get-small-item-layout
[_ index] [_ index]
#js #js
{:length c/small-image-size {:length constants/small-image-size
:offset (* (+ c/small-image-size 8) index) :offset (* (+ constants/small-image-size 8) index)
:index index}) :index index})
(defn- f-small-image (defn- f-small-image
[item index _ {:keys [scroll-index props]}] [item index _ {:keys [scroll-index props]}]
(let [size (if (= @scroll-index index) c/focused-image-size c/small-image-size) (let [size (if (= @scroll-index index) constants/focused-image-size constants/small-image-size)
size-value (anim/use-val size) size-value (anim/use-val size)
{:keys [scroll-index-lock? small-list-ref flat-list-ref]} {:keys [scroll-index-lock? small-list-ref flat-list-ref]}
props] props]
@@ -27,7 +27,7 @@
[rn/touchable-opacity [rn/touchable-opacity
{:active-opacity 1 {:active-opacity 1
:on-press (fn [] :on-press (fn []
(rf/dispatch [:chat.ui/zoom-out-signal @scroll-index]) (rf/dispatch [:lightbox/zoom-out-signal @scroll-index])
(reset! scroll-index-lock? true) (reset! scroll-index-lock? true)
(js/setTimeout #(reset! scroll-index-lock? false) 500) (js/setTimeout #(reset! scroll-index-lock? false) 500)
(js/setTimeout (js/setTimeout
@@ -38,9 +38,9 @@
(.scrollToIndex ^js @flat-list-ref (.scrollToIndex ^js @flat-list-ref
#js {:animated true :index index})) #js {:animated true :index index}))
(if platform/ios? 50 150)) (if platform/ios? 50 150))
(rf/dispatch [:chat.ui/update-shared-element-id (:message-id item)]))} (rf/dispatch [:lightbox/update-animation-shared-element-id (:id item)]))}
[reanimated/fast-image [reanimated/fast-image
{:source {:uri (:image (:content item))} {:source {:uri (:image item)}
:style (reanimated/apply-animations-to-style {:width size-value :style (reanimated/apply-animations-to-style {:width size-value
:height size-value} :height size-value}
{:border-radius 10})}]])) {:border-radius 10})}]]))
@@ -50,20 +50,26 @@
[:f> f-small-image item index _ render-data]) [:f> f-small-image item index _ render-data])
(defn bottom-view (defn bottom-view
[messages index scroll-index insets animations derived item-width props state transparent?] [{:keys [images index scroll-index insets animations derived item-width props state transparent?
(let [padding-horizontal (- (/ item-width 2) (/ c/focused-image-size 2))] bottom-text-component]}]
(let [padding-horizontal (- (/ item-width 2) (/ constants/focused-image-size 2))]
[reanimated/linear-gradient [reanimated/linear-gradient
{:colors [colors/neutral-100-opa-100 colors/neutral-100-opa-80 colors/neutral-100-opa-0] {:colors [colors/neutral-100-opa-100 colors/neutral-100-opa-80 colors/neutral-100-opa-0]
:location [0.2 0.9] :location [0.2 0.9]
:start {:x 0 :y 1} :start {:x 0 :y 1}
:end {:x 0 :y 0} :end {:x 0 :y 0}
:style (style/gradient-container insets animations derived transparent?)} :style (style/gradient-container insets animations derived transparent?)}
[text-sheet/view messages animations state props] (when bottom-text-component
[text-sheet/view
{:overlay-opacity (:overlay-opacity animations)
:overlay-z-index (:overlay-z-index state)
:text-sheet-lock? (:text-sheet-lock? props)
:text-component bottom-text-component}])
[rn/flat-list [rn/flat-list
{:ref #(reset! (:small-list-ref props) %) {:ref #(reset! (:small-list-ref props) %)
:key-fn :message-id :key-fn :id
:style {:height c/small-list-height} :style {:height constants/small-list-height}
:data messages :data images
:render-fn small-image :render-fn small-image
:render-data {:scroll-index scroll-index :render-data {:scroll-index scroll-index
:props props} :props props}
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.constants) (ns status-im.common.lightbox.constants)
(def ^:const small-image-size 40) (def ^:const small-image-size 40)
(def ^:const focused-extra-size 16) (def ^:const focused-extra-size 16)
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.effects (ns status-im.common.lightbox.effects
(:require [react-native.blob :as blob] (:require [react-native.blob :as blob]
[react-native.cameraroll :as cameraroll] [react-native.cameraroll :as cameraroll]
[react-native.fs :as fs] [react-native.fs :as fs]
@@ -10,7 +10,7 @@
{:trusty platform/ios? {:trusty platform/ios?
:path (str (fs/cache-dir) "/StatusIm_Image.jpeg")}) :path (str (fs/cache-dir) "/StatusIm_Image.jpeg")})
(rf/reg-fx :effects.chat/share-image (rf/reg-fx :effects.lightbox/share-image
(fn [uri] (fn [uri]
(blob/fetch uri (blob/fetch uri
config config
@@ -20,7 +20,7 @@
#(fs/unlink downloaded-url) #(fs/unlink downloaded-url)
#(fs/unlink downloaded-url)))))) #(fs/unlink downloaded-url))))))
(rf/reg-fx :effects.chat/save-image-to-gallery (rf/reg-fx :effects.lightbox/save-image-to-gallery
(fn [[uri on-success]] (fn [[uri on-success]]
(blob/fetch uri (blob/fetch uri
config config
+37
View File
@@ -0,0 +1,37 @@
(ns status-im.common.lightbox.events
(:require [reagent.core :as reagent]
status-im.common.lightbox.effects
[utils.re-frame :as rf]))
(rf/reg-event-fx :lightbox/navigate-to-lightbox
(fn [{:keys [db]} [animation-shared-element-id screen-params]]
(reagent/next-tick #(rf/dispatch [:navigate-to :lightbox screen-params]))
{:db (assoc db :animation-shared-element-id animation-shared-element-id)}))
(rf/reg-event-fx :lightbox/update-animation-shared-element-id
(fn [{:keys [db]} [animation-shared-element-id]]
{:db (assoc db :animation-shared-element-id animation-shared-element-id)}))
(rf/reg-event-fx :lightbox/exit-lightbox-signal
(fn [{:keys [db]} [value]]
{:db (assoc db :lightbox/exit-signal value)}))
(rf/reg-event-fx :lightbox/zoom-out-signal
(fn [{:keys [db]} [value]]
{:db (assoc db :lightbox/zoom-out-signal value)}))
(rf/reg-event-fx :lightbox/orientation-change
(fn [{:keys [db]} [value]]
{:db (assoc db :lightbox/orientation value)}))
(rf/reg-event-fx :lightbox/lightbox-scale
(fn [{:keys [db]} [value]]
{:db (assoc db :lightbox/scale value)}))
(rf/reg-event-fx :lightbox/share-image
(fn [_ [uri]]
{:effects.lightbox/share-image uri}))
(rf/reg-event-fx :lightbox/save-image-to-gallery
(fn [_ [uri on-success]]
{:effects.lightbox/save-image-to-gallery [uri on-success]}))
@@ -1,9 +1,9 @@
(ns status-im.contexts.chat.messenger.lightbox.style (ns status-im.common.lightbox.style
(:require (:require
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[status-im.contexts.chat.messenger.lightbox.constants :as c])) [status-im.common.lightbox.constants :as constants]))
;;;; VIEW ;;;; VIEW
(defn image (defn image
@@ -33,7 +33,7 @@
{:position :absolute {:position :absolute
:padding-horizontal 20 :padding-horizontal 20
:top (if (or platform/ios? (not landscape?)) top-inset 0) :top (if (or platform/ios? (not landscape?)) top-inset 0)
:height c/top-view-height :height constants/top-view-height
:z-index 4 :z-index 4
:flex-direction :row :flex-direction :row
:justify-content :space-between :justify-content :space-between
@@ -44,7 +44,7 @@
(defn top-gradient (defn top-gradient
[insets] [insets]
{:position :absolute {:position :absolute
:height (+ c/top-view-height (:top insets) 0) :height (+ constants/top-view-height (:top insets) 0)
:top (- (:top insets)) :top (- (:top insets))
:left 0 :left 0
:right 0}) :right 0})
@@ -71,12 +71,12 @@
:display (if @transparent? :none :flex) :display (if @transparent? :none :flex)
:bottom 0 :bottom 0
:padding-bottom (:bottom insets) :padding-bottom (:bottom insets)
:padding-top c/text-min-height :padding-top constants/text-min-height
:z-index 3})) :z-index 3}))
(defn content-container (defn content-container
[padding-horizontal] [padding-horizontal]
{:padding-vertical c/small-list-padding-vertical {:padding-vertical constants/small-list-padding-vertical
:padding-horizontal padding-horizontal :padding-horizontal padding-horizontal
:align-items :center :align-items :center
:justify-content :center}) :justify-content :center})
@@ -1,8 +1,8 @@
(ns status-im.contexts.chat.messenger.lightbox.text-sheet.style (ns status-im.common.lightbox.text-sheet.style
(:require (:require
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[status-im.contexts.chat.messenger.lightbox.constants :as constants])) [status-im.common.lightbox.constants :as constants]))
(defn sheet-container (defn sheet-container
[{:keys [height top]}] [{:keys [height top]}]
@@ -14,10 +14,10 @@
:right 0})) :right 0}))
(defn text-style (defn text-style
[expanding-message?] [expandable-text?]
{:color colors/white {:color colors/white
:margin-horizontal 20 :margin-horizontal 20
:align-items (when-not expanding-message? :center) :align-items (when-not expandable-text? :center)
:flex-grow 1}) :flex-grow 1})
(def bar-container (def bar-container
@@ -1,10 +1,10 @@
(ns status-im.contexts.chat.messenger.lightbox.text-sheet.utils (ns status-im.common.lightbox.text-sheet.utils
(:require (:require
[oops.core :as oops] [oops.core :as oops]
[react-native.gesture :as gesture] [react-native.gesture :as gesture]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[reagent.core :as r] [reagent.core :as r]
[status-im.contexts.chat.messenger.lightbox.constants :as constants])) [status-im.common.lightbox.constants :as constants]))
(defn- collapse-sheet (defn- collapse-sheet
[{:keys [derived-value overlay-opacity saved-top expanded? overlay-z-index]}] [{:keys [derived-value overlay-opacity saved-top expanded? overlay-z-index]}]
@@ -16,10 +16,10 @@
(defn sheet-gesture (defn sheet-gesture
[{:keys [derived-value saved-top overlay-opacity gradient-opacity]} [{:keys [derived-value saved-top overlay-opacity gradient-opacity]}
expanded-height max-height full-height overlay-z-index expanded? dragging? expanding-message?] expanded-height max-height full-height overlay-z-index expanded? dragging? expandable-text?]
(let [disable-gesture-update (r/atom false)] (let [disable-gesture-update (r/atom false)]
(-> (gesture/gesture-pan) (-> (gesture/gesture-pan)
(gesture/enabled expanding-message?) (gesture/enabled expandable-text?)
(gesture/on-start (fn [] (gesture/on-start (fn []
(reset! overlay-z-index 1) (reset! overlay-z-index 1)
(reset! dragging? true) (reset! dragging? true)
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.text-sheet.view (ns status-im.common.lightbox.text-sheet.view
(:require (:require
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
[react-native.core :as rn] [react-native.core :as rn]
@@ -8,33 +8,31 @@
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[react-native.safe-area :as safe-area] [react-native.safe-area :as safe-area]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.contexts.chat.messenger.lightbox.constants :as constants] [status-im.common.lightbox.constants :as constants]
[status-im.contexts.chat.messenger.lightbox.text-sheet.style :as style] [status-im.common.lightbox.text-sheet.style :as style]
[status-im.contexts.chat.messenger.lightbox.text-sheet.utils :as utils] [status-im.common.lightbox.text-sheet.utils :as utils]))
[status-im.contexts.chat.messenger.messages.content.text.view :as message-view]))
(defn- text-sheet (defn- text-sheet
[messages overlay-opacity overlay-z-index text-sheet-lock?] [_]
(let [text-height (reagent/atom 0) (let [text-height (reagent/atom 0)
expanded? (reagent/atom false) expanded? (reagent/atom false)
dragging? (atom false)] dragging? (atom false)]
(fn [] (fn [{:keys [overlay-opacity overlay-z-index text-sheet-lock? text-component]}]
(let [{:keys [chat-id content]} (first messages) (let [insets (safe-area/get-insets)
insets (safe-area/get-insets) window-height (:height (rn/get-window))
window-height (:height (rn/get-window)) max-height (- window-height
max-height (- window-height constants/text-min-height
constants/text-min-height constants/top-view-height
constants/top-view-height (:bottom insets)
(:bottom insets) (when platform/ios? (:top insets)))
(when platform/ios? (:top insets))) full-height (+ constants/bar-container-height
full-height (+ constants/bar-container-height constants/text-margin
constants/text-margin constants/line-height
constants/line-height @text-height)
@text-height) expanded-height (min max-height full-height)
expanded-height (min max-height full-height) animations (utils/init-animations overlay-opacity)
animations (utils/init-animations overlay-opacity) derived (utils/init-derived-animations animations)
derived (utils/init-derived-animations animations) expandable-text? (> @text-height (* constants/line-height 2))]
expanding-message? (> @text-height (* constants/line-height 2))]
[rn/view [rn/view
[reanimated/linear-gradient [reanimated/linear-gradient
{:colors [colors/neutral-100-opa-0 colors/neutral-100] {:colors [colors/neutral-100-opa-0 colors/neutral-100]
@@ -51,10 +49,10 @@
overlay-z-index overlay-z-index
expanded? expanded?
dragging? dragging?
expanding-message?)} expandable-text?)}
[gesture/gesture-detector [gesture/gesture-detector
{:gesture (-> (gesture/gesture-tap) {:gesture (-> (gesture/gesture-tap)
(gesture/enabled (and expanding-message? (not @expanded?))) (gesture/enabled (and expandable-text? (not @expanded?)))
(gesture/on-start (fn [] (gesture/on-start (fn []
(utils/expand-sheet animations (utils/expand-sheet animations
expanded-height expanded-height
@@ -63,7 +61,7 @@
expanded? expanded?
text-sheet-lock?))))} text-sheet-lock?))))}
[reanimated/view {:style (style/sheet-container derived)} [reanimated/view {:style (style/sheet-container derived)}
(when expanding-message? (when expandable-text?
[rn/view {:style style/bar-container} [rn/view {:style style/bar-container}
[rn/view {:style style/bar}]]) [rn/view {:style style/bar}]])
[linear-gradient/linear-gradient [linear-gradient/linear-gradient
@@ -72,19 +70,17 @@
:end {:x 0 :y 0} :end {:x 0 :y 0}
:locations [0.7 0.8 1] :locations [0.7 0.8 1]
:style (style/bottom-gradient (:bottom insets))}] :style (style/bottom-gradient (:bottom insets))}]
[gesture/scroll-view [gesture/scroll-view
{:scroll-enabled false {:scroll-enabled false
:scroll-event-throttle 16 :scroll-event-throttle 16
:bounces false :bounces false
:style {:height (- max-height constants/bar-container-height)} :style {:height (- max-height constants/bar-container-height)}
:content-container-style {:padding-top (when (not expanding-message?) :content-container-style {:padding-top (when (not expandable-text?)
constants/bar-container-height)}} constants/bar-container-height)}}
[message-view/render-parsed-text [rn/view {:on-layout #(utils/on-layout % text-height)}
{:content content text-component]]]]]]))))
:chat-id chat-id
:style-override (style/text-style expanding-message?)
:on-layout #(utils/on-layout % text-height)}]]]]]]))))
(defn view (defn view
[messages {:keys [overlay-opacity]} {:keys [overlay-z-index]} {:keys [text-sheet-lock?]}] [props]
[:f> text-sheet messages overlay-opacity overlay-z-index text-sheet-lock?]) [:f> text-sheet props])
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.top-view (ns status-im.common.lightbox.top-view
(:require (:require
[quo.core :as quo] [quo.core :as quo]
[quo.foundations.colors :as colors] [quo.foundations.colors :as colors]
@@ -6,10 +6,9 @@
[react-native.orientation :as orientation] [react-native.orientation :as orientation]
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.constants :as c] [status-im.common.lightbox.constants :as constants]
[status-im.contexts.chat.messenger.lightbox.style :as style] [status-im.common.lightbox.style :as style]
[utils.datetime :as datetime]
[utils.i18n :as i18n] [utils.i18n :as i18n]
[utils.re-frame :as rf] [utils.re-frame :as rf]
[utils.url :as url])) [utils.url :as url]))
@@ -17,7 +16,7 @@
(defn animate-rotation (defn animate-rotation
[result screen-width screen-height insets [result screen-width screen-height insets
{:keys [rotate top-view-y top-view-x top-view-width top-view-bg]}] {:keys [rotate top-view-y top-view-x top-view-width top-view-bg]}]
(let [top-x (+ (/ c/top-view-height 2) (:top insets))] (let [top-x (+ (/ constants/top-view-height 2) (:top insets))]
(cond (cond
(= result orientation/landscape-left) (= result orientation/landscape-left)
(do (do
@@ -42,9 +41,9 @@
(anim/animate top-view-bg colors/neutral-100-opa-0))))) (anim/animate top-view-bg colors/neutral-100-opa-0)))))
(defn drawer (defn drawer
[messages index] [images index]
(let [{:keys [content]} (nth messages index) (let [{:keys [image]} (nth images index)
uri (url/replace-port (:image content) (rf/sub [:mediaserver/port]))] uri (url/replace-port image (rf/sub [:mediaserver/port]))]
[quo/action-drawer [quo/action-drawer
[[{:icon :i/save [[{:icon :i/save
:accessibility-label :save-image :accessibility-label :save-image
@@ -52,7 +51,7 @@
:on-press (fn [] :on-press (fn []
(rf/dispatch [:hide-bottom-sheet]) (rf/dispatch [:hide-bottom-sheet])
(rf/dispatch (rf/dispatch
[:chat.ui/save-image-to-gallery [:lightbox/save-image-to-gallery
uri uri
#(rf/dispatch [:toasts/upsert #(rf/dispatch [:toasts/upsert
{:id :random-id {:id :random-id
@@ -61,20 +60,19 @@
:text (i18n/label :t/photo-saved)}])]))}]]])) :text (i18n/label :t/photo-saved)}])]))}]]]))
(defn share-image (defn share-image
[messages index] [images index]
(let [{:keys [content]} (nth messages index) (let [{:keys [image]} (nth images index)
uri (url/replace-port (:image content) (rf/sub [:mediaserver/port]))] uri (url/replace-port image (rf/sub [:mediaserver/port]))]
(rf/dispatch [:chat.ui/share-image uri]))) (rf/dispatch [:lightbox/share-image uri])))
(defn top-view (defn top-view
[messages insets index animations derived landscape? screen-width] [images insets index animations derived landscape? screen-width]
(let [{:keys [from timestamp]} (first messages) (let [{:keys [description header]} (nth images @index)
[primary-name _] (rf/sub [:contacts/contact-two-names-by-identity from]) bg-color (if landscape?
bg-color (if landscape? colors/neutral-100-opa-70
colors/neutral-100-opa-70 colors/neutral-100-opa-0)
colors/neutral-100-opa-0)
{:keys [background-color opacity {:keys [background-color opacity
overlay-opacity]} animations] overlay-opacity]} animations]
[reanimated/view [reanimated/view
{:style {:style
(style/top-view-container (:top insets) screen-width bg-color landscape? animations derived)} (style/top-view-container (:top insets) screen-width bg-color landscape? animations derived)}
@@ -92,7 +90,7 @@
(anim/animate opacity 0) (anim/animate opacity 0)
(anim/animate overlay-opacity 0) (anim/animate overlay-opacity 0)
(rf/dispatch (if platform/ios? (rf/dispatch (if platform/ios?
[:chat.ui/exit-lightbox-signal @index] [:lightbox/exit-lightbox-signal @index]
[:navigate-back]))) [:navigate-back])))
:style style/close-container} :style style/close-container}
[quo/icon :close {:size 20 :color colors/white}]] [quo/icon :close {:size 20 :color colors/white}]]
@@ -100,22 +98,22 @@
[quo/text [quo/text
{:weight :semi-bold {:weight :semi-bold
:size :paragraph-1 :size :paragraph-1
:style {:color colors/white}} primary-name] :style {:color colors/white}} header]
[quo/text [quo/text
{:weight :medium {:weight :medium
:size :paragraph-2 :size :paragraph-2
:style {:color colors/neutral-40}} (when timestamp (datetime/to-short-str timestamp))]]] :style {:color colors/neutral-40}} description]]]
[rn/view {:style style/top-right-buttons} [rn/view {:style style/top-right-buttons}
[rn/touchable-opacity [rn/touchable-opacity
{:active-opacity 1 {:active-opacity 1
:accessibility-label :share-image :accessibility-label :share-image
:on-press #(share-image messages @index) :on-press #(share-image images @index)
:style (merge style/close-container {:margin-right 12})} :style (merge style/close-container {:margin-right 12})}
[quo/icon :share {:size 20 :color colors/white}]] [quo/icon :share {:size 20 :color colors/white}]]
[rn/touchable-opacity [rn/touchable-opacity
{:active-opacity 1 {:active-opacity 1
:accessibility-label :image-options :accessibility-label :image-options
:on-press #(rf/dispatch [:show-bottom-sheet :on-press #(rf/dispatch [:show-bottom-sheet
{:content (fn [] [drawer messages @index])}]) {:content (fn [] [drawer images @index])}])
:style style/close-container} :style style/close-container}
[quo/icon :options {:size 20 :color colors/white}]]]])) [quo/icon :options {:size 20 :color colors/white}]]]]))
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.utils (ns status-im.common.lightbox.utils
(:require (:require
[clojure.string :as string] [clojure.string :as string]
[oops.core :as oops] [oops.core :as oops]
@@ -9,9 +9,9 @@
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.safe-area :as safe-area] [react-native.safe-area :as safe-area]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.constants :as constants] [status-im.common.lightbox.constants :as constants]
[status-im.contexts.chat.messenger.lightbox.top-view :as top-view] [status-im.common.lightbox.top-view :as top-view]
[utils.re-frame :as rf] [utils.re-frame :as rf]
[utils.worklets.chat.messenger.lightbox :as worklet])) [utils.worklets.chat.messenger.lightbox :as worklet]))
@@ -46,7 +46,7 @@
(if platform/ios? 250 100))) (if platform/ios? 250 100)))
(swap! timers assoc :mount-index-lock (js/setTimeout #(reset! scroll-index-lock? false) 300)) (swap! timers assoc :mount-index-lock (js/setTimeout #(reset! scroll-index-lock? false) 300))
(fn [] (fn []
(rf/dispatch [:chat.ui/zoom-out-signal nil]) (rf/dispatch [:lightbox/zoom-out-signal nil])
(when platform/android? (when platform/android?
(rf/dispatch [:chat.ui/lightbox-scale 1])) (rf/dispatch [:chat.ui/lightbox-scale 1]))
(clear-timers timers))))) (clear-timers timers)))))
@@ -69,7 +69,7 @@
landscape? (string/includes? result orientation/landscape) landscape? (string/includes? result orientation/landscape)
item-width (if (and landscape? platform/ios?) screen-height screen-width)] item-width (if (and landscape? platform/ios?) screen-height screen-width)]
(when (or landscape? (= result orientation/portrait)) (when (or landscape? (= result orientation/portrait))
(rf/dispatch [:chat.ui/orientation-change result])) (rf/dispatch [:lightbox/orientation-change result]))
(cond (cond
landscape? landscape?
(orientation/lock-to-landscape "lightbox") (orientation/lock-to-landscape "lightbox")
@@ -148,11 +148,11 @@
:timers (atom {})}) :timers (atom {})})
(defn init-state (defn init-state
[messages index] [images index]
;; The initial value of data is the image that was pressed (and not the whole album) in order ;; The initial value of data is the image that was pressed (and not the whole album) in order
;; for the transition animation to execute properly, otherwise it would animate towards ;; for the transition animation to execute properly, otherwise it would animate towards
;; outside the screen (even if we have `initialScrollIndex` set). ;; outside the screen (even if we have `initialScrollIndex` set).
{:data (reagent/atom (if (number? index) [(nth messages index)] [])) {:data (reagent/atom (if (number? index) [(nth images index)] []))
:scroll-index (reagent/atom index) :scroll-index (reagent/atom index)
:transparent? (reagent/atom false) :transparent? (reagent/atom false)
:set-full-height? (reagent/atom false) :set-full-height? (reagent/atom false)
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.view (ns status-im.common.lightbox.view
(:require (:require
[clojure.string :as string] [clojure.string :as string]
[oops.core :as oops] [oops.core :as oops]
@@ -9,13 +9,13 @@
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[react-native.safe-area :as safe-area] [react-native.safe-area :as safe-area]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.bottom-view :as bottom-view] [status-im.common.lightbox.bottom-view :as bottom-view]
[status-im.contexts.chat.messenger.lightbox.constants :as constants] [status-im.common.lightbox.constants :as constants]
[status-im.contexts.chat.messenger.lightbox.style :as style] [status-im.common.lightbox.style :as style]
[status-im.contexts.chat.messenger.lightbox.top-view :as top-view] [status-im.common.lightbox.top-view :as top-view]
[status-im.contexts.chat.messenger.lightbox.utils :as utils] [status-im.common.lightbox.utils :as utils]
[status-im.contexts.chat.messenger.lightbox.zoomable-image.view :as zoomable-image] [status-im.common.lightbox.zoomable-image.view :as zoomable-image]
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
(defn get-item-layout (defn get-item-layout
@@ -33,9 +33,10 @@
(reset! scroll-index index) (reset! scroll-index index)
(when @small-list-ref (when @small-list-ref
(.scrollToIndex ^js @small-list-ref #js {:animated true :index index})) (.scrollToIndex ^js @small-list-ref #js {:animated true :index index}))
(rf/dispatch [:chat.ui/update-shared-element-id (:message-id (oops/oget changed :item))])))) (rf/dispatch [:lightbox/update-animation-shared-element-id
(:id (oops/oget changed :item))]))))
(defn image (defn image-view
[message index _ {:keys [screen-width screen-height] :as args}] [message index _ {:keys [screen-width screen-height] :as args}]
[rn/view [rn/view
{:style (style/image (+ screen-width constants/separator-width) screen-height)} {:style (style/image (+ screen-width constants/separator-width) screen-height)}
@@ -43,30 +44,31 @@
[rn/view {:style {:width constants/separator-width}}]]) [rn/view {:style {:width constants/separator-width}}]])
(defn lightbox-content (defn lightbox-content
[props {:keys [data transparent? scroll-index set-full-height?] :as state} [{:keys [props state animations derived images index handle-items-changed bottom-text-component]}]
animations derived messages index handle-items-changed] (let [{:keys [data transparent? scroll-index
(let [insets (safe-area/get-insets) set-full-height?]} state
window (rn/get-window) insets (safe-area/get-insets)
window-width (:width window) window (rn/get-window)
window-height (if platform/android? window-width (:width window)
(+ (:height window) (:top insets)) window-height (if platform/android?
(:height window)) (+ (:height window) (:top insets))
curr-orientation (or (rf/sub [:lightbox/orientation]) orientation/portrait) (:height window))
landscape? (string/includes? curr-orientation orientation/landscape) curr-orientation (or (rf/sub [:lightbox/orientation]) orientation/portrait)
horizontal? (or platform/android? (not landscape?)) landscape? (string/includes? curr-orientation orientation/landscape)
inverted? (and platform/ios? (= curr-orientation orientation/landscape-right)) horizontal? (or platform/android? (not landscape?))
screen-width (if (or platform/ios? (= curr-orientation orientation/portrait)) inverted? (and platform/ios? (= curr-orientation orientation/landscape-right))
window-width screen-width (if (or platform/ios? (= curr-orientation orientation/portrait))
window-height) window-width
screen-height (if (or platform/ios? (= curr-orientation orientation/portrait)) window-height)
window-height screen-height (if (or platform/ios? (= curr-orientation orientation/portrait))
window-width) window-height
item-width (if (and landscape? platform/ios?) screen-height screen-width)] window-width)
item-width (if (and landscape? platform/ios?) screen-height screen-width)]
[reanimated/view [reanimated/view
{:style (reanimated/apply-animations-to-style {:background-color (:background-color animations)} {:style (reanimated/apply-animations-to-style {:background-color (:background-color animations)}
{:height screen-height})} {:height screen-height})}
(when-not @transparent? (when-not @transparent?
[:f> top-view/top-view messages insets scroll-index animations derived landscape? [:f> top-view/top-view images insets scroll-index animations derived landscape?
screen-width]) screen-width])
[gesture/gesture-detector [gesture/gesture-detector
{:gesture (utils/drag-gesture animations (and landscape? platform/ios?) set-full-height?)} {:gesture (utils/drag-gesture animations (and landscape? platform/ios?) set-full-height?)}
@@ -92,7 +94,7 @@
:scroll-event-throttle 8 :scroll-event-throttle 8
:style {:width (+ screen-width constants/separator-width)} :style {:width (+ screen-width constants/separator-width)}
:data @data :data @data
:render-fn image :render-fn image-view
:render-data {:opacity-value (:opacity animations) :render-data {:opacity-value (:opacity animations)
:overlay-opacity (:overlay-opacity animations) :overlay-opacity (:overlay-opacity animations)
:border-value (:border animations) :border-value (:border animations)
@@ -118,26 +120,47 @@
;; NOTE: not un-mounting bottom-view based on `transparent?` (like we do with the top-view ;; NOTE: not un-mounting bottom-view based on `transparent?` (like we do with the top-view
;; above), since we need to save the state of the text-sheet position. Instead, we use ;; above), since we need to save the state of the text-sheet position. Instead, we use
;; the `:display` style property to hide the bottom-sheet. ;; the `:display` style property to hide the bottom-sheet.
(when (not landscape?) (when (and (not landscape?) (or bottom-text-component (> (count images) 1)))
[:f> bottom-view/bottom-view messages index scroll-index insets animations derived [:f> bottom-view/bottom-view
item-width props state transparent?])])) {:images images
:index index
:scroll-index scroll-index
:insets insets
:animations animations
:derived derived
:item-width item-width
:props props
:state state
:transparent? transparent?
:bottom-text-component bottom-text-component}])]))
(defn- f-lightbox (defn- f-lightbox
[] []
(let [{:keys [messages index]} (rf/sub [:get-screen-params]) (let [{:keys [images index bottom-text-component]} (rf/sub [:get-screen-params])
props (utils/init-props) props
state (utils/init-state messages index) (utils/init-props)
handle-items-changed (fn [e] state
(on-viewable-items-changed e props state))] (utils/init-state images index)
handle-items-changed
(fn [e]
(on-viewable-items-changed e props state))]
(fn [] (fn []
(let [animations (utils/init-animations (count messages) index) (let [animations (utils/init-animations (count images) index)
derived (utils/init-derived-animations animations)] derived (utils/init-derived-animations animations)]
(anim/animate (:background-color animations) colors/neutral-100) (anim/animate (:background-color animations) colors/neutral-100)
(reset! (:data state) messages) (reset! (:data state) images)
(when platform/ios? ; issue: https://github.com/wix/react-native-navigation/issues/7726 (when platform/ios? ; issue: https://github.com/wix/react-native-navigation/issues/7726
(utils/orientation-change props state animations)) (utils/orientation-change props state animations))
(utils/effect props animations index) (utils/effect props animations index)
[:f> lightbox-content props state animations derived messages index handle-items-changed])))) [:f> lightbox-content
{:props props
:state state
:animations animations
:derived derived
:images images
:index index
:handle-items-changed handle-items-changed
:bottom-text-component bottom-text-component}]))))
(defn lightbox (defn lightbox
[] []
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.zoomable-image.constants) (ns status-im.common.lightbox.zoomable-image.constants)
(def ^:const min-scale 1) (def ^:const min-scale 1)
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.zoomable-image.style (ns status-im.common.lightbox.zoomable-image.style
(:require (:require
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated])) [react-native.reanimated :as reanimated]))
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.zoomable-image.utils (ns status-im.common.lightbox.zoomable-image.utils
(:require (:require
[clojure.string :as string] [clojure.string :as string]
[react-native.core :as rn] [react-native.core :as rn]
@@ -6,8 +6,8 @@
[react-native.orientation :as orientation] [react-native.orientation :as orientation]
[react-native.platform :as platform] [react-native.platform :as platform]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.zoomable-image.constants :as constants] [status-im.common.lightbox.zoomable-image.constants :as constants]
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
;;; Helpers ;;; Helpers
@@ -97,7 +97,7 @@
(rescale constants/min-scale true) (rescale constants/min-scale true)
(js/setTimeout #(rf/dispatch [:navigate-back]) 70)) (js/setTimeout #(rf/dispatch [:navigate-back]) 70))
(rf/dispatch [:navigate-back])) (rf/dispatch [:navigate-back]))
(js/setTimeout #(rf/dispatch [:chat.ui/exit-lightbox-signal nil]) 500))) (js/setTimeout #(rf/dispatch [:lightbox/exit-lightbox-signal nil]) 500)))
(defn handle-zoom-out-signal (defn handle-zoom-out-signal
"Zooms out when pressing on another photo from the small bottom list" "Zooms out when pressing on another photo from the small bottom list"
@@ -1,4 +1,4 @@
(ns status-im.contexts.chat.messenger.lightbox.zoomable-image.view (ns status-im.common.lightbox.zoomable-image.view
(:require (:require
[oops.core :refer [oget]] [oops.core :refer [oget]]
[react-native.core :as rn] [react-native.core :as rn]
@@ -7,10 +7,10 @@
[react-native.platform :as platform] [react-native.platform :as platform]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[reagent.core :as r] [reagent.core :as r]
[status-im.contexts.chat.messenger.lightbox.animations :as anim] [status-im.common.lightbox.animations :as anim]
[status-im.contexts.chat.messenger.lightbox.zoomable-image.constants :as c] [status-im.common.lightbox.zoomable-image.constants :as c]
[status-im.contexts.chat.messenger.lightbox.zoomable-image.style :as style] [status-im.common.lightbox.zoomable-image.style :as style]
[status-im.contexts.chat.messenger.lightbox.zoomable-image.utils :as utils] [status-im.common.lightbox.zoomable-image.utils :as utils]
[utils.re-frame :as rf] [utils.re-frame :as rf]
[utils.url :as url])) [utils.url :as url]))
@@ -206,7 +206,7 @@
(anim/animate-decay pan-y-start velocity [lower-bound upper-bound])))))))) (anim/animate-decay pan-y-start velocity [lower-bound upper-bound]))))))))
(defn- f-zoomable-image (defn- f-zoomable-image
[dimensions animations state rescale curr-orientation content focused? index render-data [dimensions animations state rescale curr-orientation image focused? index render-data
image-dimensions-nil?] image-dimensions-nil?]
(let [{:keys [transparent? set-full-height?]} render-data (let [{:keys [transparent? set-full-height?]} render-data
portrait? (= curr-orientation orientation/portrait) portrait? (= curr-orientation orientation/portrait)
@@ -229,7 +229,7 @@
(= curr-orientation orientation/portrait))} (= curr-orientation orientation/portrait))}
[reanimated/fast-image [reanimated/fast-image
(merge (merge
{:source {:uri (url/replace-port (:image content) (rf/sub [:mediaserver/port]))} {:source {:uri (url/replace-port image (rf/sub [:mediaserver/port]))}
:native-ID (when focused? :shared-element) :native-ID (when focused? :shared-element)
:style (style/image dimensions animations render-data index)} :style (style/image dimensions animations render-data index)}
(when image-dimensions-nil? (when image-dimensions-nil?
@@ -238,12 +238,12 @@
(defn zoomable-image (defn zoomable-image
[] []
(let [state (utils/init-state)] (let [state (utils/init-state)]
(fn [{:keys [image-width image-height content message-id]} index render-data] (fn [{:keys [image-width image-height image id]} index render-data]
(let [shared-element-id (rf/sub [:shared-element-id]) (let [animation-shared-element-id (rf/sub [:animation-shared-element-id])
exit-lightbox-signal (rf/sub [:lightbox/exit-signal]) exit-lightbox-signal (rf/sub [:lightbox/exit-signal])
zoom-out-signal (rf/sub [:lightbox/zoom-out-signal]) zoom-out-signal (rf/sub [:lightbox/zoom-out-signal])
{:keys [set-full-height? curr-orientation]} render-data {:keys [set-full-height? curr-orientation]} render-data
focused? (= shared-element-id message-id) focused? (= animation-shared-element-id id)
;; TODO - remove `image-dimensions` check, once ;; TODO - remove `image-dimensions` check, once
;; https://github.com/status-im/status-desktop/issues/10944 is fixed ;; https://github.com/status-im/status-desktop/issues/10944 is fixed
image-dimensions-nil? (not (and image-width image-height)) image-dimensions-nil? (not (and image-width image-height))
@@ -269,5 +269,5 @@
rescale rescale
set-full-height?)) set-full-height?))
(utils/handle-zoom-out-signal zoom-out-signal index (anim/get-val (:scale animations)) rescale) (utils/handle-zoom-out-signal zoom-out-signal index (anim/get-val (:scale animations)) rescale)
[:f> f-zoomable-image dimensions animations state rescale curr-orientation content focused? [:f> f-zoomable-image dimensions animations state rescale curr-orientation image focused?
index render-data image-dimensions-nil?])))) index render-data image-dimensions-nil?]))))
+3
View File
@@ -38,6 +38,9 @@
:no-contacts :no-contacts
{:light (js/require "../resources/images/ui2/no-contacts-light.png") {:light (js/require "../resources/images/ui2/no-contacts-light.png")
:dark (js/require "../resources/images/ui2/no-contacts-dark.png")} :dark (js/require "../resources/images/ui2/no-contacts-dark.png")}
:no-contacts-to-chat
{:light (js/require "../resources/images/ui2/no-contacts-to-chat-light.png")
:dark (js/require "../resources/images/ui2/no-contacts-to-chat-dark.png")}
:keycard-chip :keycard-chip
{:light (js/require "../resources/images/ui2/keycard-chip-light.png") {:light (js/require "../resources/images/ui2/keycard-chip-light.png")
:dark (js/require "../resources/images/ui2/keycard-chip-dark.png")} :dark (js/require "../resources/images/ui2/keycard-chip-dark.png")}
+2 -8
View File
@@ -259,12 +259,6 @@
{:type :wallet-account {:type :wallet-account
:account (when account (string/lower-case account))}) :account (when account (string/lower-case account))})
(defn community-route-type
[route-params]
(if (string/starts-with? (:community-id route-params) "z")
:desktop-community
:community))
(defn handle-uri (defn handle-uri
[chain chats uri cb] [chain chats uri cb]
(let [{:keys [handler route-params query-params]} (match-uri uri)] (let [{:keys [handler route-params query-params]} (match-uri uri)]
@@ -297,14 +291,14 @@
(cb {:type handler :community-id (:community-id route-params)}) (cb {:type handler :community-id (:community-id route-params)})
(and (= handler :community) (:community-id route-params)) (and (= handler :community) (:community-id route-params))
(cb {:type (community-route-type route-params) (cb {:type :community
:community-id (:community-id route-params)}) :community-id (:community-id route-params)})
(and (= handler :community-chat) (:community-channel-id route-params) (:community-id route-params)) (and (= handler :community-chat) (:community-channel-id route-params) (:community-id route-params))
(match-community-channel-async route-params cb) (match-community-channel-async route-params cb)
(and (= handler :community-chat) (:community-id route-params)) (and (= handler :community-chat) (:community-id route-params))
(cb {:type (community-route-type route-params) (cb {:type :community
:community-id (:community-id route-params)}) :community-id (:community-id route-params)})
;; NOTE: removed in `match-uri`, might need this in the future ;; NOTE: removed in `match-uri`, might need this in the future
+2 -1
View File
@@ -4,6 +4,7 @@
[quo.core :as quo] [quo.core :as quo]
[react-native.core :as rn] [react-native.core :as rn]
[react-native.reanimated :as reanimated] [react-native.reanimated :as reanimated]
[react-native.safe-area :as safe-area]
[reagent.core :as reagent] [reagent.core :as reagent]
[status-im.common.scroll-page.style :as style] [status-im.common.scroll-page.style :as style]
[utils.re-frame :as rf])) [utils.re-frame :as rf]))
@@ -59,7 +60,7 @@
[rn/view {:style {:margin-top 0}} [rn/view {:style {:margin-top 0}}
top-nav] top-nav]
[quo/page-nav [quo/page-nav
(cond-> {:margin-top 44 (cond-> {:margin-top (safe-area/get-top)
:type :no-title :type :no-title
:background (if (= 1 (reanimated/get-shared-value opacity-animation)) :background (if (= 1 (reanimated/get-shared-value opacity-animation))
:blur :blur
+27
View File
@@ -0,0 +1,27 @@
(ns status-im.common.serialization
(:require
[native-module.core :as native-module]
[status-im.constants :as constants]
[utils.re-frame :as rf]
[utils.transforms :as transforms]))
(rf/reg-fx :serialization/deserialize-and-compress-key
(fn [{:keys [serialized-key on-success on-error]}]
(native-module/deserialize-and-compress-key
serialized-key
(fn [resp]
(let [{:keys [error]} (transforms/json->clj resp)]
(if error
(on-error error)
(on-success resp)))))))
(rf/reg-fx :serialization/decompress-public-key
(fn [{:keys [compressed-key on-success on-error]}]
(native-module/compressed-key->public-key
compressed-key
constants/deserialization-key
(fn [resp]
(let [{:keys [error]} (transforms/json->clj resp)]
(if error
(on-error error)
(on-success (str "0x" (subs resp 5)))))))))
@@ -1,6 +1,6 @@
(ns status-im.common.standard-authentication.standard-auth.authorize (ns status-im.common.standard-authentication.standard-auth.authorize
(:require (:require
[react-native.touch-id :as biometric] [react-native.biometrics :as biometrics]
[status-im.common.standard-authentication.enter-password.view :as enter-password] [status-im.common.standard-authentication.enter-password.view :as enter-password]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[utils.i18n :as i18n] [utils.i18n :as i18n]
@@ -39,25 +39,29 @@
; to retrigger biometric auth, so they can endlessly repeat this cycle. ; to retrigger biometric auth, so they can endlessly repeat this cycle.
biometrics-login (fn [on-press-biometrics] biometrics-login (fn [on-press-biometrics]
(rf/dispatch [:dismiss-keyboard]) (rf/dispatch [:dismiss-keyboard])
(biometric/authenticate (rf/dispatch
{:reason (i18n/label :t/biometric-auth-confirm-message) [:biometric/authenticate
:on-success (fn [_response] {:prompt-message (i18n/label :t/biometric-auth-confirm-message)
(on-close) :on-success (fn []
(rf/dispatch [:standard-auth/on-biometric-success (on-close)
(handle-auth-success true)])) (rf/dispatch [:standard-auth/on-biometric-success
:on-fail (fn [error] (handle-auth-success true)]))
(on-close) :on-fail (fn [error]
(log/error "Authentication Failed. Error:" error) (on-close)
(when on-auth-fail (on-auth-fail error)) (log/error
(password-login {:on-press-biometrics (ex-message error)
#(on-press-biometrics (-> error ex-data (assoc :code (ex-cause error))))
on-press-biometrics)}))}))] (when on-auth-fail (on-auth-fail error))
(password-login {:on-press-biometrics
#(on-press-biometrics
on-press-biometrics)}))}]))]
(if biometric-auth? (if biometric-auth?
(biometric/get-supported-type (-> (biometrics/get-supported-type)
(fn [biometric-type] (.then (fn [biometric-type]
(if biometric-type (if biometric-type
(biometrics-login biometrics-login) (biometrics-login biometrics-login)
(do (do
(reset-password) (reset-password)
(password-login {}))))) (password-login {})))))
(.catch #(password-login {})))
(password-login {})))) (password-login {}))))
+4 -31
View File
@@ -2,12 +2,12 @@
(:require (:require
[clojure.string :as string] [clojure.string :as string]
[goog.string :as gstring] [goog.string :as gstring]
[native-module.core :as native-module]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[react-native.async-storage :as async-storage] [react-native.async-storage :as async-storage]
[react-native.core :as rn] [react-native.core :as rn]
[schema.core :as schema] [schema.core :as schema]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.communities.events :as communities.events]
[status-im.navigation.events :as navigation] [status-im.navigation.events :as navigation]
[taoensso.timbre :as log] [taoensso.timbre :as log]
[utils.ethereum.chain :as chain] [utils.ethereum.chain :as chain]
@@ -68,32 +68,6 @@
(log/info "universal-links: handling community request " community-id) (log/info "universal-links: handling community request " community-id)
(navigation/navigate-to cofx :community-requests-to-join {:community-id community-id})) (navigation/navigate-to cofx :community-requests-to-join {:community-id community-id}))
(rf/defn handle-community
[cofx {:keys [community-id]}]
(log/info "universal-links: handling community" community-id)
(navigation/navigate-to cofx :community {:community-id community-id}))
(rf/defn handle-navigation-to-desktop-community-from-mobile
{:events [:handle-navigation-to-desktop-community-from-mobile]}
[cofx deserialized-key]
(rf/merge
cofx
{:dispatch [:navigate-to :community-overview deserialized-key]}
(navigation/pop-to-root :shell-stack)))
(rf/defn handle-desktop-community
[_ {:keys [community-id]}]
(native-module/deserialize-and-compress-key
community-id
(fn [deserialized-key]
(rf/dispatch [:chat.ui/fetch-community (str deserialized-key)])
(rf/dispatch [:handle-navigation-to-desktop-community-from-mobile (str deserialized-key)]))))
(rf/defn handle-community-chat
[cofx {:keys [chat-id]}]
(log/info "universal-links: handling community chat" chat-id)
{:dispatch [:chat/pop-to-root-and-navigate-to-chat chat-id]})
(rf/defn handle-view-profile (rf/defn handle-view-profile
[{:keys [db] :as cofx} {:keys [public-key ens-name]}] [{:keys [db] :as cofx} {:keys [public-key ens-name]}]
(log/info "universal-links: handling view profile" public-key) (log/info "universal-links: handling view profile" public-key)
@@ -143,14 +117,13 @@
(rf/defn on-handle (rf/defn on-handle
{:events [::match-value]} {:events [::match-value]}
[cofx url {:keys [type] :as data}] [cofx url {:keys [type chat-id] :as data}]
(case type (case type
:group-chat (handle-group-chat cofx data) :group-chat (handle-group-chat cofx data)
:private-chat (handle-private-chat cofx data) :private-chat (handle-private-chat cofx data)
:community-requests (handle-community-requests cofx data) :community-requests (handle-community-requests cofx data)
:community (handle-community cofx data) :community (communities.events/navigate-to-serialized-community cofx data)
:desktop-community (handle-desktop-community cofx data) :community-chat {:dispatch [:communities/navigate-to-community-chat chat-id :pop-to-root]}
:community-chat (handle-community-chat cofx data)
:contact (handle-view-profile cofx data) :contact (handle-view-profile cofx data)
:browser (handle-browse cofx data) :browser (handle-browse cofx data)
:eip681 (handle-eip681 cofx data) :eip681 (handle-eip681 cofx data)
+4
View File
@@ -162,3 +162,7 @@
(def community-accounts-selection-enabled? false) (def community-accounts-selection-enabled? false)
(def fetch-messages-enabled? (enabled? (get-config :FETCH_MESSAGES_ENABLED "1"))) (def fetch-messages-enabled? (enabled? (get-config :FETCH_MESSAGES_ENABLED "1")))
(def wallet-feature-flags
{:edit-default-keypair false
:bridge-token false})
+11 -4
View File
@@ -338,6 +338,13 @@
(def ^:const local-pairing-action-sync-device 3) (def ^:const local-pairing-action-sync-device 3)
(def ^:const local-pairing-action-pairing-installation 4) (def ^:const local-pairing-action-pairing-installation 4)
(def ^:const serialization-key
"We pass this serialization key as a parameter to MultiformatSerializePublicKey
function at status-go, This key determines the output base of the serialization.
according to https://specs.status.im/spec/2#public-key-serialization we serialize
keys with base58btc encoding"
"z")
(def ^:const deserialization-key (def ^:const deserialization-key
"We pass this deserialization key as a parameter to MultiformatDeserializePublicKey "We pass this deserialization key as a parameter to MultiformatDeserializePublicKey
function at status-go, This key determines the output base of the deserialization. function at status-go, This key determines the output base of the deserialization.
@@ -371,10 +378,10 @@
(def ^:const auth-method-biometric-prepare "biometric-prepare") (def ^:const auth-method-biometric-prepare "biometric-prepare")
(def ^:const auth-method-none "none") (def ^:const auth-method-none "none")
(def ^:const biometric-error-user-canceled "USER_CANCELED") ;; NOTE all android biometrics falls under :Biometrics
(def ^:const biometric-error-user-fallback "USER_USER_FALLBACK") (def ^:const biometrics-type-android :Biometrics)
(def ^:const biometric-error-not-available "NOT_AVAILABLE") (def ^:const biometrics-type-touch-id :TouchID)
(def ^:const biometric-error-not-enrolled "NOT_ENROLLED") (def ^:const biometrics-type-face-id :FaceID)
(def ^:const onboarding-generating-keys-animation-duration-ms 7000) (def ^:const onboarding-generating-keys-animation-duration-ms 7000)
(def ^:const onboarding-generating-keys-navigation-retry-ms 3000) (def ^:const onboarding-generating-keys-navigation-retry-ms 3000)
@@ -29,7 +29,7 @@
{:icon :i/add-user {:icon :i/add-user
:accessibility-label :add-a-contact :accessibility-label :add-a-contact
:label (i18n/label :t/add-a-contact) :label (i18n/label :t/add-a-contact)
:sub-label (i18n/label :t/enter-a-chat-key) :sub-label (i18n/label :t/enter-chat-key)
:add-divider? true :add-divider? true
:on-press #(debounce/dispatch-and-chill :on-press #(debounce/dispatch-and-chill
[:open-modal :new-contact] [:open-modal :new-contact]
+13 -34
View File
@@ -4,13 +4,12 @@
[legacy.status-im.chat.models.loading :as loading] [legacy.status-im.chat.models.loading :as loading]
[legacy.status-im.data-store.chats :as chats-store] [legacy.status-im.data-store.chats :as chats-store]
[re-frame.core :as re-frame] [re-frame.core :as re-frame]
[reagent.core :as reagent] status-im.common.lightbox.events
[status-im.common.muting.helpers :refer [format-mute-till]] [status-im.common.muting.helpers :refer [format-mute-till]]
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.chat.contacts.events :as contacts-store] [status-im.contexts.chat.contacts.events :as contacts-store]
status-im.contexts.chat.effects status-im.contexts.chat.effects
[status-im.contexts.chat.messenger.composer.link-preview.events :as link-preview] [status-im.contexts.chat.messenger.composer.link-preview.events :as link-preview]
status-im.contexts.chat.messenger.lightbox.events
status-im.contexts.chat.messenger.messages.content.reactions.events status-im.contexts.chat.messenger.messages.content.reactions.events
[status-im.contexts.chat.messenger.messages.delete-message-for-me.events :as delete-for-me] [status-im.contexts.chat.messenger.messages.delete-message-for-me.events :as delete-for-me]
[status-im.contexts.chat.messenger.messages.delete-message.events :as delete-message] [status-im.contexts.chat.messenger.messages.delete-message.events :as delete-message]
@@ -394,38 +393,6 @@
[cofx chat-id] [cofx chat-id]
(navigation/navigate-to cofx :chat-pinned-messages {:chat-id chat-id})) (navigation/navigate-to cofx :chat-pinned-messages {:chat-id chat-id}))
(rf/defn update-shared-element-id
{:events [:chat.ui/update-shared-element-id]}
[{:keys [db]} shared-element-id]
{:db (assoc db :shared-element-id shared-element-id)})
(rf/defn navigate-to-lightbox
{:events [:chat.ui/navigate-to-lightbox]}
[{:keys [db]} shared-element-id screen-params]
(reagent/next-tick #(rf/dispatch [:navigate-to :lightbox screen-params]))
{:db (assoc db :shared-element-id shared-element-id)})
(rf/defn exit-lightbox-signal
{:events [:chat.ui/exit-lightbox-signal]}
[{:keys [db]} value]
{:db (assoc db :lightbox/exit-signal value)})
(rf/defn zoom-out-signal
{:events [:chat.ui/zoom-out-signal]}
[{:keys [db]} value]
{:db (assoc db :lightbox/zoom-out-signal value)})
(rf/defn orientation-change
{:events [:chat.ui/orientation-change]}
[{:keys [db]} value]
{:db (assoc db :lightbox/orientation value)})
(rf/defn lightbox-scale
{:events [:chat.ui/lightbox-scale]}
[{:keys [db]} value]
{:db (assoc db :lightbox/scale value)})
(rf/defn check-last-chat (rf/defn check-last-chat
{:events [:chat/check-last-chat]} {:events [:chat/check-last-chat]}
[{:keys [db]}] [{:keys [db]}]
@@ -452,3 +419,15 @@
{:events [:chat.ui/scroll-to-bottom]} {:events [:chat.ui/scroll-to-bottom]}
[_] [_]
{:effects.chat/scroll-to-bottom nil}) {:effects.chat/scroll-to-bottom nil})
(rf/reg-event-fx :chat.ui/clear-sending-images
(fn [{:keys [db]}]
{:db (update-in db [:chat/inputs (:current-chat-id db) :metadata] assoc :sending-image {})}))
(rf/reg-event-fx :chat.ui/image-unselected
(fn [{:keys [db]} [original]]
(let [current-chat-id (:current-chat-id db)]
{:db (update-in db
[:chat/inputs current-chat-id :metadata :sending-image]
dissoc
(:uri original))})))
@@ -1,21 +1,7 @@
(ns status-im.contexts.chat.home.add-new-contact.effects (ns status-im.contexts.chat.home.add-new-contact.effects
(:require (:require
[legacy.status-im.ethereum.ens :as ens] [legacy.status-im.ethereum.ens :as ens]
[native-module.core :as native-module] [utils.re-frame :as rf]))
[status-im.constants :as constants]
[utils.re-frame :as rf]
[utils.transforms :as transforms]))
(rf/reg-fx :effects.contacts/decompress-public-key
(fn [{:keys [compressed-key on-success on-error]}]
(native-module/compressed-key->public-key
compressed-key
constants/deserialization-key
(fn [resp]
(let [{:keys [error]} (transforms/json->clj resp)]
(if error
(on-error error)
(on-success (str "0x" (subs resp 5)))))))))
(rf/reg-fx :effects.contacts/resolve-public-key-from-ens (rf/reg-fx :effects.contacts/resolve-public-key-from-ens
(fn [{:keys [chain-id ens on-success on-error]}] (fn [{:keys [chain-id ens on-success on-error]}]
@@ -104,7 +104,7 @@
:empty {:db (dissoc db :contacts/new-identity)} :empty {:db (dissoc db :contacts/new-identity)}
(:valid :invalid) {:db (assoc db :contacts/new-identity contact)} (:valid :invalid) {:db (assoc db :contacts/new-identity contact)}
:decompress-key {:db (assoc db :contacts/new-identity contact) :decompress-key {:db (assoc db :contacts/new-identity contact)
:effects.contacts/decompress-public-key :serialization/decompress-public-key
{:compressed-key id {:compressed-key id
:on-success :on-success
(dispatcher :contacts/set-new-identity-success input) (dispatcher :contacts/set-new-identity-success input)
@@ -132,7 +132,7 @@
:type :compressed-key :type :compressed-key
:public-key nil ; not yet... :public-key nil ; not yet...
:state :decompress-key})) :state :decompress-key}))
:effects.contacts/decompress-public-key :serialization/decompress-public-key
{:compressed-key user-ckey {:compressed-key user-ckey
:on-success [:contacts/set-new-identity-success user-ckey] :on-success [:contacts/set-new-identity-success user-ckey]
:on-error [:contacts/set-new-identity-error user-ckey]}}))) :on-error [:contacts/set-new-identity-error user-ckey]}})))
@@ -21,7 +21,7 @@
[] []
{:size :heading-1 {:size :heading-1
:weight :semi-bold :weight :semi-bold
:style {:margin-top 32 :style {:margin-top 28
:margin-bottom 6 :margin-bottom 6
:color (colors/theme-colors colors/neutral-100 colors/white)}}) :color (colors/theme-colors colors/neutral-100 colors/white)}})
@@ -16,33 +16,38 @@
(defn- no-contacts-view (defn- no-contacts-view
[{:keys [theme]}] [{:keys [theme]}]
[rn/view (let [customization-color (rf/sub [:profile/customization-color])]
{:style (style/no-contacts)} [rn/view
[rn/image {:source (resources/get-themed-image :no-contacts theme)}] {:style (style/no-contacts)}
[quo/text [rn/image {:source (resources/get-themed-image :no-contacts-to-chat theme)}]
{:weight :semi-bold [quo/text
:size :paragraph-1 {:weight :semi-bold
:style {:margin-bottom 2 :size :paragraph-1
:margin-top 12}} :style {:margin-bottom 2
(i18n/label :t/you-have-no-contacts)] :margin-top 12}}
[quo/text (i18n/label :t/you-have-no-contacts)]
{:weight :regular [quo/text
:size :label} {:weight :regular
(i18n/label :t/dont-yell-at-me)] :size :paragraph-2}
[quo/button (i18n/label :t/dont-yell-at-me)]
{:type :primary [quo/button
:size 32 {:customization-color customization-color
:container-style {:margin-top 20 :theme theme
:margin-bottom 12} :type :primary
:on-press #(rf/dispatch [:invite.events/share-link])} :size 32
(i18n/label :t/invite-friends)] :container-style {:margin-top 20
[quo/button :margin-bottom 12}
{:type :grey :on-press #(rf/dispatch [:invite.events/share-link])}
:size 32 (i18n/label :t/invite-friends)]
:on-press #(do [quo/button
(rf/dispatch [:navigate-back]) {:customization-color customization-color
(rf/dispatch [:open-modal :new-contact]))} :theme theme
(i18n/label :t/add-a-contact)]]) :type :grey
:size 32
:on-press #(do
(rf/dispatch [:navigate-back])
(rf/dispatch [:open-modal :new-contact]))}
(i18n/label :t/add-a-contact)]]))
(defn contact-item-render (defn contact-item-render
[_] [_]
+5 -3
View File
@@ -73,7 +73,7 @@
:shared-value scroll-shared-value})}]))) :shared-value scroll-shared-value})}])))
(defn contact-item-render (defn contact-item-render
[{:keys [public-key] :as item}] [{:keys [public-key] :as item} theme]
(let [current-pk (rf/sub [:multiaccount/public-key]) (let [current-pk (rf/sub [:multiaccount/public-key])
show-profile-actions #(rf/dispatch [:show-bottom-sheet show-profile-actions #(rf/dispatch [:show-bottom-sheet
{:content (fn [] [actions/contact-actions item])}])] {:content (fn [] [actions/contact-actions item])}])]
@@ -83,7 +83,8 @@
:on-long-press show-profile-actions :on-long-press show-profile-actions
:accessory {:type :options :accessory {:type :options
:on-press show-profile-actions}}) :on-press show-profile-actions}})
item])) item
theme]))
(defn contacts (defn contacts
[{:keys [theme pending-contact-requests set-scroll-ref scroll-shared-value]}] [{:keys [theme pending-contact-requests set-scroll-ref scroll-shared-value]}]
@@ -105,7 +106,8 @@
:sections items :sections items
:sticky-section-headers-enabled false :sticky-section-headers-enabled false
:render-section-header-fn contact-list/contacts-section-header :render-section-header-fn contact-list/contacts-section-header
:render-fn contact-item-render :render-fn (fn [data]
(contact-item-render data theme))
:scroll-event-throttle 8 :scroll-event-throttle 8
:on-scroll #(common.banner/set-scroll-shared-value :on-scroll #(common.banner/set-scroll-shared-value
{:scroll-input (oops/oget % "nativeEvent.contentOffset.y") {:scroll-input (oops/oget % "nativeEvent.contentOffset.y")
@@ -30,7 +30,7 @@
(js/setTimeout #(reanimated/set-shared-value background-y (js/setTimeout #(reanimated/set-shared-value background-y
(- window-height)) (- window-height))
300) 300)
(rf/dispatch [:chat.ui/replace-mentions-and-send-current-message]) (rf/dispatch [:chat.ui/send-current-message])
(rf/dispatch [:chat.ui/set-input-maximized false]) (rf/dispatch [:chat.ui/set-input-maximized false])
(rf/dispatch [:chat.ui/set-input-content-height comp-constants/input-height]) (rf/dispatch [:chat.ui/set-input-content-height comp-constants/input-height])
(rf/dispatch [:chat.ui/set-chat-input-text nil]) (rf/dispatch [:chat.ui/set-chat-input-text nil])
@@ -114,9 +114,8 @@
[{:keys [input-ref]} [{:keys [input-ref]}
{:keys [text-value saved-cursor-position cursor-position]} {:keys [text-value saved-cursor-position cursor-position]}
{:keys [edit input-with-mentions]} {:keys [edit input-with-mentions]}
messages-list-on-layout-finished?] chat-screen-layout-calculations-complete?]
(let [mention? (some #(= :mention (first %)) (seq input-with-mentions)) (let [mention? (some #(= :mention (first %)) (seq input-with-mentions))]
composer-just-opened? (not @messages-list-on-layout-finished?)]
(rn/use-effect (rn/use-effect
(fn [] (fn []
(let [mention-text (reduce (fn [acc item] (let [mention-text (reduce (fn [acc item]
@@ -128,7 +127,9 @@
;; NOTE: using text-value for cases when the user ;; NOTE: using text-value for cases when the user
;; leaves the app with an unfinished edit and re-opens ;; leaves the app with an unfinished edit and re-opens
;; the chat. ;; the chat.
(and (seq @text-value) composer-just-opened?) (and (seq @text-value)
(not (reanimated/get-shared-value
chat-screen-layout-calculations-complete?)))
@text-value @text-value
:else (get-in edit [:content :text])) :else (get-in edit [:content :text]))
selection-pos (count edit-text) selection-pos (count edit-text)
@@ -150,7 +151,9 @@
;; UI. This way, `on-focus` will trigger first without changing the height, after which ;; UI. This way, `on-focus` will trigger first without changing the height, after which
;; `on-content-size-change` will animate the height of the input based on the injected ;; `on-content-size-change` will animate the height of the input based on the injected
;; text. ;; text.
(js/setTimeout #(do (when @messages-list-on-layout-finished? (.focus ^js @input-ref)) (js/setTimeout #(do (when (reanimated/get-shared-value
chat-screen-layout-calculations-complete?)
(.focus ^js @input-ref))
(reagent/next-tick inject-edit-text)) (reagent/next-tick inject-edit-text))
600)))) 600))))
[(:message-id edit)]))) [(:message-id edit)])))
@@ -159,12 +162,12 @@
[{:keys [input-ref]} [{:keys [input-ref]}
{:keys [container-opacity]} {:keys [container-opacity]}
{:keys [reply]} {:keys [reply]}
messages-list-on-layout-finished?] chat-screen-layout-calculations-complete?]
(rn/use-effect (rn/use-effect
(fn [] (fn []
(when reply (when reply
(reanimated/animate container-opacity 1)) (reanimated/animate container-opacity 1))
(when (and reply @input-ref @messages-list-on-layout-finished?) (when (and reply @input-ref (reanimated/get-shared-value chat-screen-layout-calculations-complete?))
(js/setTimeout #(.focus ^js @input-ref) 600))) (js/setTimeout #(.focus ^js @input-ref) 600)))
[(:message-id reply)])) [(:message-id reply)]))
@@ -207,24 +207,12 @@
(link-preview/reset-unfurled) (link-preview/reset-unfurled)
(cancel-message-edit))) (cancel-message-edit)))
(rf/defn replace-mentions-and-send-current-message (rf/defn send-current-message
"Sends message from current chat input" "Sends message from current chat input"
{:events [:chat.ui/replace-mentions-and-send-current-message]} {:events [:chat.ui/send-current-message]}
[{{:keys [current-chat-id] :as db} :db}] [{{:keys [current-chat-id] :as db} :db :as cofx}]
(let [{:keys [input-text metadata]} (get-in db [:chat/inputs current-chat-id])] (let [{:keys [input-text metadata]} (get-in db [:chat/inputs current-chat-id])
{:json-rpc/call [{:method "wakuext_chatMentionReplaceWithPublicKey" editing-message (:editing-message metadata)]
:params [current-chat-id input-text] (if editing-message
:on-error #(log/error "[wakuext_chatMentionReplaceWithPublicKey] on-error" %) (send-edited-message cofx input-text editing-message)
:on-success #(rf/dispatch [:chat.ui/send-current-message-with-mentions (send-messages cofx input-text current-chat-id))))
current-chat-id
(:editing-message metadata)
input-text
%])}]}))
(rf/defn send-current-message-with-mentions
{:events [:chat.ui/send-current-message-with-mentions]}
[{:keys [db] :as cofx} current-chat-id editing-message input-text new-text]
(rf/merge cofx
(if editing-message
(send-edited-message new-text editing-message)
(send-messages new-text current-chat-id))))
@@ -31,12 +31,12 @@
(defn sheet-component (defn sheet-component
[{:keys [insets [{:keys [insets
chat-list-scroll-y chat-list-scroll-y
chat-screen-layout-calculations-complete?
window-height window-height
blur-height blur-height
opacity opacity
background-y background-y
theme theme]} props state]
messages-list-on-layout-finished?]} props state]
(let [subscriptions (utils/init-subs) (let [subscriptions (utils/init-subs)
content-height (reagent/atom (or (:input-content-height ; Actual text height content-height (reagent/atom (or (:input-content-height ; Actual text height
subscriptions) subscriptions)
@@ -75,8 +75,8 @@
animations animations
dimensions dimensions
subscriptions) subscriptions)
(effects/use-edit props state subscriptions messages-list-on-layout-finished?) (effects/use-edit props state subscriptions chat-screen-layout-calculations-complete?)
(effects/use-reply props animations subscriptions messages-list-on-layout-finished?) (effects/use-reply props animations subscriptions chat-screen-layout-calculations-complete?)
(effects/update-input-mention props state subscriptions) (effects/update-input-mention props state subscriptions)
(effects/link-previews props state animations subscriptions) (effects/link-previews props state animations subscriptions)
(effects/use-images props state animations subscriptions) (effects/use-images props state animations subscriptions)
@@ -145,22 +145,20 @@
[:f> actions/view props state animations window-height insets subscriptions]]]]])) [:f> actions/view props state animations window-height insets subscriptions]]]]]))
(defn f-composer (defn f-composer
[{:keys [insets chat-list-scroll-y messages-list-on-layout-finished?]}] [props]
(let [window-height (:height (rn/get-window)) (let [window-height (:height (rn/get-window))
theme (quo.theme/use-theme-value) theme (quo.theme/use-theme-value)
opacity (reanimated/use-shared-value 0) opacity (reanimated/use-shared-value 0)
background-y (reanimated/use-shared-value (- window-height)) ; Y position of background background-y (reanimated/use-shared-value (- window-height)) ; Y position of background
; overlay ; overlay
blur-height (reanimated/use-shared-value (+ constants/composer-default-height blur-height (reanimated/use-shared-value (+ constants/composer-default-height
(:bottom insets))) (:bottom (:insets props))))
extra-params {:insets insets extra-params (assoc props
:window-height window-height :window-height window-height
:chat-list-scroll-y chat-list-scroll-y :blur-height blur-height
:blur-height blur-height :opacity opacity
:opacity opacity :background-y background-y
:background-y background-y :theme theme)
:theme theme
:messages-list-on-layout-finished? messages-list-on-layout-finished?}
props (utils/init-non-reactive-state) props (utils/init-non-reactive-state)
state (utils/init-reactive-state)] state (utils/init-reactive-state)]
[rn/view (when platform/ios? {:style {:z-index 1}}) [rn/view (when platform/ios? {:style {:z-index 1}})
@@ -1,23 +0,0 @@
(ns status-im.contexts.chat.messenger.lightbox.events
(:require status-im.contexts.chat.messenger.lightbox.effects
[utils.re-frame :as rf]))
(rf/reg-event-fx :chat.ui/clear-sending-images
(fn [{:keys [db]}]
{:db (update-in db [:chat/inputs (:current-chat-id db) :metadata] assoc :sending-image {})}))
(rf/reg-event-fx :chat.ui/image-unselected
(fn [{:keys [db]} [original]]
(let [current-chat-id (:current-chat-id db)]
{:db (update-in db
[:chat/inputs current-chat-id :metadata :sending-image]
dissoc
(:uri original))})))
(rf/reg-event-fx :chat.ui/share-image
(fn [_ [uri]]
{:effects.chat/share-image uri}))
(rf/reg-event-fx :chat.ui/save-image-to-gallery
(fn [_ [uri on-success]]
{:effects.chat/save-image-to-gallery [uri on-success]}))
@@ -7,6 +7,8 @@
[status-im.constants :as constants] [status-im.constants :as constants]
[status-im.contexts.chat.messenger.messages.content.album.style :as style] [status-im.contexts.chat.messenger.messages.content.album.style :as style]
[status-im.contexts.chat.messenger.messages.content.image.view :as image] [status-im.contexts.chat.messenger.messages.content.image.view :as image]
[status-im.contexts.chat.messenger.messages.content.lightbox.utils :as lightbox-utils]
[status-im.contexts.chat.messenger.messages.content.lightbox.view :as lightbox]
[status-im.contexts.chat.messenger.messages.content.text.view :as text] [status-im.contexts.chat.messenger.messages.content.text.view :as text]
[utils.re-frame :as rf] [utils.re-frame :as rf]
[utils.url :as url])) [utils.url :as url]))
@@ -21,17 +23,19 @@
(defn album-message (defn album-message
[{:keys [albumize?] :as message} context on-long-press message-container-data] [{:keys [albumize?] :as message} context on-long-press message-container-data]
(let [shared-element-id (rf/sub [:shared-element-id]) (let [animation-shared-element-id (rf/sub [:animation-shared-element-id])
media-server-port (rf/sub [:mediaserver/port]) media-server-port (rf/sub [:mediaserver/port])
first-image (first (:album message)) album-messages (:album message)
album-style (if (> (:image-width first-image) (:image-height first-image)) first-image (first album-messages)
:landscape album-style (if (> (:image-width first-image) (:image-height first-image))
:portrait) :landscape
images-count (count (:album message)) :portrait)
images-count (count album-messages)
;; album images are always square, except when we have 3 images, then they must be ;; album images are always square, except when we have 3 images, then they must be
;; rectangular ;; rectangular
;; (portrait or landscape) ;; (portrait or landscape)
portrait? (and (= images-count rectangular-style-count) (= album-style :portrait))] portrait? (and (= images-count rectangular-style-count)
(= album-style :portrait))]
(if (and albumize? (> images-count 1)) (if (and albumize? (> images-count 1))
[:<> [:<>
[rn/view {:style {:margin-bottom 4}} [text/text-content first-image]] [rn/view {:style {:margin-bottom 4}} [text/text-content first-image]]
@@ -52,14 +56,21 @@
{:key (:message-id item) {:key (:message-id item)
:active-opacity 1 :active-opacity 1
:on-long-press #(on-long-press message context) :on-long-press #(on-long-press message context)
:on-press #(rf/dispatch [:chat.ui/navigate-to-lightbox :on-press #(rf/dispatch
(:message-id item) [:lightbox/navigate-to-lightbox
{:messages (:album message) (:message-id item)
:index index}])} {:index index
:images (into []
(map
lightbox-utils/convert-message-to-lightbox-image
album-messages))
:bottom-text-component
[lightbox/bottom-text-for-lightbox
first-image]}])}
[fast-image/fast-image [fast-image/fast-image
{:style (style/image dimensions index portrait? images-count) {:style (style/image dimensions index portrait? images-count)
:source {:uri (url/replace-port (:image (:content item)) media-server-port)} :source {:uri (url/replace-port (:image (:content item)) media-server-port)}
:native-ID (when (and (= shared-element-id (:message-id item)) :native-ID (when (and (= animation-shared-element-id (:message-id item))
(< index constants/max-album-photos)) (< index constants/max-album-photos))
:shared-element)}] :shared-element)}]
(when (and (> images-count constants/max-album-photos) (when (and (> images-count constants/max-album-photos)
@@ -71,11 +82,11 @@
:size :heading-2 :size :heading-2
:style {:color colors/white}} :style {:color colors/white}}
(str "+" (- images-count (dec constants/max-album-photos)))]])])) (str "+" (- images-count (dec constants/max-album-photos)))]])]))
(:album message))]] album-messages)]]
[:<> [:<>
(map-indexed (map-indexed
(fn [index item] (fn [index item]
[:<> {:key (:message-id item)} [:<> {:key (:message-id item)}
[image/image-message index item {:on-long-press #(on-long-press message context)} [image/image-message index item {:on-long-press #(on-long-press message context)}
message-container-data]]) message-container-data]])
(:album message))]))) album-messages)])))

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