Compare commits
93 Commits
Author | SHA1 | Date |
---|---|---|
Honza Rychnovský | 00db536674 | |
dependabot[bot] | 02e67ae778 | |
dependabot[bot] | 9fdfcf39dd | |
Honza Rychnovský | 6ee0deeb5c | |
Honza Rychnovský | a97b71d922 | |
dependabot[bot] | b235e0cc82 | |
Honza Rychnovský | 6c3307748a | |
Honza Rychnovský | c3cf711ee6 | |
Honza Rychnovský | 5c21a776d5 | |
Honza Rychnovský | 6160554d64 | |
Honza Rychnovský | 2828c25c21 | |
Honza Rychnovský | e2ddebe47c | |
Honza Rychnovský | 448177c2d1 | |
Honza Rychnovský | 09febc6ff1 | |
Honza Rychnovský | a1cf59f9b2 | |
Honza Rychnovský | eae133f650 | |
Honza Rychnovský | b0ccdef6e3 | |
Honza Rychnovský | a95172ad76 | |
Honza Rychnovský | 9b2bad6f10 | |
dependabot[bot] | 9ca5548ca3 | |
dependabot[bot] | 841e0e76d1 | |
dependabot[bot] | e1a805fc0a | |
dependabot[bot] | 9ae38c92bc | |
Honza Rychnovský | b9249d6ebf | |
Honza Rychnovský | 2ac9f5ebd4 | |
Honza Rychnovský | e0439f0ca9 | |
Honza Rychnovský | abafc0387f | |
Honza Rychnovský | d9565e68e0 | |
Honza Rychnovský | 45ca274f98 | |
Honza Rychnovský | 66ba050719 | |
Honza Rychnovský | 1ffbaf986f | |
dependabot[bot] | 992c1dd197 | |
dependabot[bot] | 32e68c3d91 | |
Honza Rychnovský | dd371348eb | |
dependabot[bot] | 6ef9d9f02e | |
Honza Rychnovský | 551055e65c | |
Honza Rychnovský | ff2ce3a379 | |
Honza Rychnovský | 786c8c2cab | |
Honza Rychnovský | fb5d446bab | |
Honza Rychnovský | b00c807df1 | |
dependabot[bot] | 533f335038 | |
dependabot[bot] | e3fb6083c9 | |
dependabot[bot] | 681fb6ae85 | |
dependabot[bot] | 7cc067af49 | |
Honza Rychnovský | 9c9388a695 | |
Honza Rychnovský | e92c0b613c | |
dependabot[bot] | cada044991 | |
Honza Rychnovský | 895d692588 | |
Honza Rychnovský | 81508f6466 | |
Honza Rychnovský | afd47e513e | |
Honza Rychnovský | 0e6b8f83a0 | |
dependabot[bot] | fc1ce4087d | |
dependabot[bot] | 316bc8702a | |
Honza Rychnovský | dc955d6ee3 | |
Honza Rychnovský | bd8cbcab10 | |
Honza Rychnovský | 47937ffabc | |
Honza Rychnovský | cad8e48bf8 | |
Honza Rychnovský | bcdf328cb4 | |
dependabot[bot] | ed34fb1b3a | |
Honza Rychnovský | c9308546ab | |
Honza Rychnovský | c6aac62070 | |
Honza Rychnovský | 0d3d0c4d19 | |
dependabot[bot] | af92f1b52f | |
Honza Rychnovský | bca1c32b8c | |
Honza Rychnovský | b34d086cc0 | |
Honza Rychnovský | 8c027003cc | |
dependabot[bot] | 84c7618037 | |
Honza Rychnovský | e398af5690 | |
Honza Rychnovský | 2c45ab642b | |
Honza Rychnovský | c8a14f0375 | |
Honza Rychnovský | a8ad649ef8 | |
Honza Rychnovský | 4ae3fde690 | |
Honza Rychnovský | c99c2907b1 | |
Honza Rychnovský | 809820c1f2 | |
Honza Rychnovský | 8b58233648 | |
Honza Rychnovský | e2eb043afb | |
dependabot[bot] | 73de78caf9 | |
Honza Rychnovský | 7f3e55cc82 | |
Honza Rychnovský | 3845772071 | |
dependabot[bot] | 24cd22186f | |
Honza Rychnovský | fe5236fdae | |
dependabot[bot] | 8e495a542f | |
Honza Rychnovský | d309da9287 | |
dependabot[bot] | fd7703e005 | |
Honza Rychnovský | d076605444 | |
Honza Rychnovský | 9a929c1109 | |
Honza Rychnovský | e000745885 | |
Honza Rychnovský | 5bf7a635ff | |
Honza Rychnovský | 45ab8ce8c9 | |
Honza Rychnovský | cc5f3504fe | |
dependabot[bot] | 8f44794f9e | |
Honza Rychnovský | c8e3a05eb9 | |
dependabot[bot] | 77c9f3198a |
|
@ -1,3 +1,3 @@
|
|||
FROM clamav/clamav:1.3.0
|
||||
FROM clamav/clamav:1.3.1
|
||||
RUN freshclam
|
||||
ENTRYPOINT ["clamscan", "--recursive"]
|
||||
|
|
|
@ -38,12 +38,12 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
# Gradle Wrapper validation can be flaky
|
||||
# https://github.com/gradle/wrapper-validation-action/issues/40
|
||||
- name: Gradle Wrapper Validation
|
||||
timeout-minutes: 1
|
||||
uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2
|
||||
uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5
|
||||
|
||||
check_secrets:
|
||||
environment: deployment
|
||||
|
@ -80,18 +80,18 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
with:
|
||||
ref: main
|
||||
fetch-depth: 0 # To fetch all commits
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 10
|
||||
with:
|
||||
gradle-home-cache-cleanup: true
|
||||
|
@ -112,7 +112,7 @@ jobs:
|
|||
# Note that this step is not currently used due to #1033
|
||||
if: false
|
||||
id: auth_google_play
|
||||
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c
|
||||
uses: google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa
|
||||
with:
|
||||
create_credentials_file: true
|
||||
project_id: ${{ secrets.GOOGLE_PLAY_CLOUD_PROJECT }}
|
||||
|
@ -125,6 +125,13 @@ jobs:
|
|||
echo "home=${HOME}" >> "$GITHUB_ENV"
|
||||
- name: Export Signing Key
|
||||
env:
|
||||
# The upload key must be exported using `base64 -w 0 <filename.jks>` for use
|
||||
# as a Github Secrets value; if the key is exported with standard wrapping,
|
||||
# it will fail to import correctly.
|
||||
# NOTE: This is the upload signing key, which may be replaced at will, not
|
||||
# the application signing key which is escrowed by Google and may only be
|
||||
# replaced once a year (and has a bunch of additional hassles associated with
|
||||
# replacing it.)
|
||||
SIGNING_KEYSTORE_BASE_64: ${{ secrets.UPLOAD_KEYSTORE_BASE_64 }}
|
||||
SIGNING_KEY_PATH: ${{ format('{0}/release.jks', env.home) }}
|
||||
shell: bash
|
||||
|
@ -160,7 +167,7 @@ jobs:
|
|||
zip -r ${BINARIES_ZIP_PATH} . -i app/build/outputs/apk/\*/\*.apk app/build/outputs/apk_from_bundle/\*/\*.apk app/build/outputs/bundle/\*/\*.aab
|
||||
zip -r ${MAPPINGS_ZIP_PATH} . -i app/build/outputs/mapping/\*/mapping.txt
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 5
|
||||
with:
|
||||
name: Binaries
|
||||
|
@ -177,9 +184,9 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Download release artifact
|
||||
uses: actions/download-artifact@87c55149d96e628cc2ef7e6fc2aab372015aec85
|
||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e
|
||||
with:
|
||||
name: Binaries
|
||||
- name: Unzip artifacts
|
||||
|
|
|
@ -32,12 +32,12 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
# Gradle Wrapper validation can be flaky
|
||||
# https://github.com/gradle/wrapper-validation-action/issues/40
|
||||
- name: Gradle Wrapper Validation
|
||||
timeout-minutes: 1
|
||||
uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2
|
||||
uses: gradle/wrapper-validation-action@216d1ad2b3710bf005dc39237337b9673fd8fcd5
|
||||
|
||||
check_firebase_secrets:
|
||||
runs-on: ubuntu-latest
|
||||
|
@ -71,15 +71,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Check properties
|
||||
timeout-minutes: 4
|
||||
|
@ -94,15 +94,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Detekt
|
||||
timeout-minutes: 10
|
||||
|
@ -120,7 +120,7 @@ jobs:
|
|||
zip -r ${REPORTS_ZIP_PATH} . -i build/reports/detekt/*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Detekt static analysis results
|
||||
|
@ -134,15 +134,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Ktlint
|
||||
timeout-minutes: 4
|
||||
|
@ -160,7 +160,7 @@ jobs:
|
|||
zip -r ${REPORTS_ZIP_PATH} . -i build/reports/ktlint/\*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Ktlint static analysis results
|
||||
|
@ -174,15 +174,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Android Lint
|
||||
timeout-minutes: 15
|
||||
|
@ -203,7 +203,7 @@ jobs:
|
|||
zip -r ${LINT_ZIP_PATH} . -i \*build/reports/\*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Android Lint static analysis results
|
||||
|
@ -217,15 +217,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Test
|
||||
timeout-minutes: 10
|
||||
|
@ -244,7 +244,7 @@ jobs:
|
|||
zip -r ${RESULTS_ZIP_PATH} . -i \*build/reports/\* \*/build/kover/html/\* \*/build/kover/xml/report.xml
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Test Kotlin modules results
|
||||
|
@ -261,15 +261,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Build
|
||||
timeout-minutes: 20
|
||||
|
@ -277,7 +277,7 @@ jobs:
|
|||
./gradlew assembleDebug assembleAndroidTest assembleZcashmainnetDebug assembleZcashtestnetDebug
|
||||
- name: Authenticate to Google Cloud for Firebase Test Lab
|
||||
id: auth_test_lab
|
||||
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c
|
||||
uses: google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa
|
||||
with:
|
||||
create_credentials_file: true
|
||||
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }}
|
||||
|
@ -309,7 +309,7 @@ jobs:
|
|||
zip -r ${TEST_RESULTS_ZIP_PATH} . -i build/fladle/\* \*/build/outputs/androidTest-results/\*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Test Android modules with FTL results
|
||||
|
@ -324,15 +324,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Build and test
|
||||
timeout-minutes: 30
|
||||
|
@ -356,7 +356,7 @@ jobs:
|
|||
zip -r ${TEST_RESULTS_ZIP_PATH} . -i \*/build/test-results/\*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Test Android libs with WTF results
|
||||
|
@ -371,15 +371,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Build and test
|
||||
timeout-minutes: 30
|
||||
|
@ -403,7 +403,7 @@ jobs:
|
|||
zip -r ${TEST_RESULTS_ZIP_PATH} . -i \*/build/test-results/\*
|
||||
- name: Upload Artifacts
|
||||
if: ${{ always() }}
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
name: Test Android app with WTF results
|
||||
|
@ -421,15 +421,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Export Google Services JSON
|
||||
env:
|
||||
|
@ -451,7 +451,7 @@ jobs:
|
|||
./gradlew :app:assembleDebug
|
||||
- name: Authenticate to Google Cloud for Firebase Test Lab
|
||||
id: auth_test_lab
|
||||
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c
|
||||
uses: google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa
|
||||
with:
|
||||
create_credentials_file: true
|
||||
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }}
|
||||
|
@ -475,15 +475,15 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Export Google Services JSON
|
||||
env:
|
||||
|
@ -530,7 +530,7 @@ jobs:
|
|||
zip -r ${MAPPINGS_ZIP_PATH} . -i *app/build/outputs/mapping/*/mapping.txt
|
||||
zip -r ${COMPOSE_METRICS_ZIP_PATH} . -i \*/build/compose-metrics/\* \*/build/compose-reports/\*
|
||||
- name: Upload Artifacts
|
||||
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3
|
||||
uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808
|
||||
timeout-minutes: 2
|
||||
with:
|
||||
name: Binaries
|
||||
|
@ -548,19 +548,19 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
timeout-minutes: 1
|
||||
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
|
||||
uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
|
||||
- name: Set up Java
|
||||
uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93
|
||||
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9
|
||||
timeout-minutes: 1
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: 17
|
||||
- name: Set up Gradle
|
||||
uses: gradle/gradle-build-action@29c0906b64b8fc82467890bfb7a0a7ef34bda89e
|
||||
uses: gradle/gradle-build-action@4c39dd82cd5e1ec7c6fa0173bb41b4b6bb3b86ff
|
||||
timeout-minutes: 5
|
||||
- name: Authenticate to Google Cloud for Firebase Test Lab
|
||||
id: auth_test_lab
|
||||
uses: google-github-actions/auth@55bd3a7c6e2ae7cf1877fd1ccb9d54c0503c457c
|
||||
uses: google-github-actions/auth@71fee32a0bb7e97b4d33d548e7d957010649d8fa
|
||||
with:
|
||||
create_credentials_file: true
|
||||
project_id: ${{ vars.FIREBASE_TEST_LAB_PROJECT }}
|
||||
|
@ -568,7 +568,7 @@ jobs:
|
|||
workload_identity_provider: ${{ secrets.FIREBASE_TEST_LAB_WORKLOAD_IDENTITY_PROVIDER }}
|
||||
access_token_lifetime: '900s'
|
||||
- name: Download a single artifact
|
||||
uses: actions/download-artifact@87c55149d96e628cc2ef7e6fc2aab372015aec85
|
||||
uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e
|
||||
with:
|
||||
name: Binaries
|
||||
- name: Robo test
|
||||
|
|
|
@ -9,6 +9,9 @@ syntax: glob
|
|||
.idea/modules.xml
|
||||
.idea/tasks.xml
|
||||
.idea/workspace.xml
|
||||
.idea/deploymentTargetSelector.xml
|
||||
.idea/migrations.xml
|
||||
.idea/studiobot.xml
|
||||
.settings
|
||||
*.iml
|
||||
bin/
|
||||
|
|
87
CHANGELOG.md
87
CHANGELOG.md
|
@ -9,6 +9,93 @@ directly impact users rather than highlighting other key architectural updates.*
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
### Added
|
||||
- Zashi now provides system biometric or device credential (pattern, pin, or password) authentication for these use
|
||||
cases: Send funds, Recovery Phrase, Export Private Data, and Delete Wallet.
|
||||
- The app entry animation has been reworked to apply on every app access point, i.e. it will be displayed when
|
||||
users return to an already set up app as well.
|
||||
|
||||
## [1.0 (650)] - 2024-05-07
|
||||
|
||||
### Added
|
||||
- Delete Zashi feature has been added. It's accessible from the Advanced settings screen. It removes the wallet
|
||||
secrets from Zashi and resets its state.
|
||||
- Transaction messages are now checked and removed in case of duplicity
|
||||
|
||||
### Changed
|
||||
- We've improved the visibility logic of the little loader that is part of the Balances widget
|
||||
- The App-Update screen UI has been reworked to align with the latest design guidelines
|
||||
|
||||
### Removed
|
||||
- Concatenation of the messages on a multi-messages transaction has been removed and will be addressed using a new
|
||||
design
|
||||
|
||||
### Fixed
|
||||
- Transparent funds shielding action has been improved to address the latest user feedback
|
||||
- Onboarding screen dynamic height calculation has been improved
|
||||
- A few more minor UI improvements
|
||||
|
||||
## [1.0 (638)] - 2024-04-26
|
||||
|
||||
### Fixed
|
||||
- Default server selection option
|
||||
|
||||
## [1.0 (636)] - 2024-04-26
|
||||
|
||||
### Changed
|
||||
- We have added one more group of server options (zec.rocks) for increased coverage and reliability
|
||||
- zec.rocks:443 is now default wallet option
|
||||
|
||||
## [1.0 (630)] - 2024-04-24
|
||||
|
||||
### Changed
|
||||
- We have added more server options for increased coverage and reliability
|
||||
- If you experience issues with the Zcash Lightwalletd Mainnet server selected by default, please switch to one of
|
||||
the Ywallet servers: https://status.zcash-infra.com/
|
||||
|
||||
## [1.0 (628)] - 2024-04-23
|
||||
|
||||
### Changed
|
||||
- The Scan QR code screen has been reworked to align with the rest of the screens
|
||||
- The Send Form screen scrolls to the Send button on very small devices after the memo is typed
|
||||
|
||||
### Fixed
|
||||
- Sending zero funds is allowed only for shielded recipient address type
|
||||
- The Balances widget loader has been improved to better handle cases, like a wallet with only transparent funds
|
||||
|
||||
## [0.2.0 (609)] - 2024-04-18
|
||||
|
||||
### Added
|
||||
- Advanced Settings screen that provides more technical options like Export private data, Recovery phrase, or
|
||||
Choose server has been added
|
||||
- A new Server switching screen has been added. Its purpose is to enable switching between predefined and custom
|
||||
lightwalletd servers in runtime.
|
||||
- The About screen now contains a link to the new Zashi Privacy Policy website
|
||||
- The Send Confirmation screen has been reworked according to the new design
|
||||
- Transitions between screens are now animated with a simple slide animation
|
||||
- Proposal API from the Zcash SDK has been integrated together with handling error states for multi-transaction
|
||||
submission
|
||||
- New Restoring Your Wallet label and Synchronization widget have been added to all post-onboarding screens to notify
|
||||
users about the current state of the wallet-restoring process
|
||||
|
||||
### Changed
|
||||
- The Transaction History UI has been incorporated into the Account screen and completely reworked according to the
|
||||
design guidelines
|
||||
- Reworked Send screens flow and their look (e.g., Send Failure screen is now a modal dialog instead of a separate
|
||||
screen)
|
||||
- The sending and shielding funds logic has been connected to the new Proposal API from the Zcash SDK
|
||||
- The error dialog contains an error description now. It's useful for tracking down the failure cause.
|
||||
- A small circular progress indicator is displayed when the app runs block synchronization, and the available balance
|
||||
is zero instead of reflecting a result value.
|
||||
- Block synchronization statuses have been simplified to Syncing, Synced, and Error states only
|
||||
- All internal dependencies have been updated
|
||||
|
||||
### Fixed
|
||||
- Button sizing has been updated to align with the design guidelines and preserve stretching if necessary
|
||||
|
||||
### Removed
|
||||
- The seed copy feature from the New wallet recovery and Seed recovery screens has been removed for security reasons
|
||||
|
||||
## [0.2.0 (560)] - 2024-02-27
|
||||
|
||||
### Added
|
||||
|
|
|
@ -93,7 +93,7 @@ android {
|
|||
releaseKeystorePassword,
|
||||
releaseKeyAlias,
|
||||
releaseKeyAliasPassword
|
||||
).all { !it.isNullOrBlank() }
|
||||
).all { it.isNotBlank() }
|
||||
|
||||
signingConfigs {
|
||||
if (isReleaseSigningConfigured) {
|
||||
|
@ -120,6 +120,8 @@ android {
|
|||
getByName("release").apply {
|
||||
isMinifyEnabled = project.property("IS_MINIFY_ENABLED").toString().toBoolean()
|
||||
isShrinkResources = project.property("IS_MINIFY_ENABLED").toString().toBoolean()
|
||||
ndk.debugSymbolLevel = project.property("NDK_DEBUG_SYMBOL_LEVEL").toString()
|
||||
|
||||
proguardFiles(
|
||||
getDefaultProguardFile("proguard-android-optimize.txt"),
|
||||
"proguard-project.txt"
|
||||
|
@ -251,6 +253,7 @@ androidComponents {
|
|||
".readme",
|
||||
))
|
||||
|
||||
// The fixed Locale.US is intended
|
||||
if (variant.name.lowercase(Locale.US).contains("release")) {
|
||||
variant.packaging.resources.excludes.addAll(listOf(
|
||||
"**/*.kotlin_metadata",
|
||||
|
|
|
@ -9,6 +9,9 @@
|
|||
# Generate the combined proguard configuration for debugging.
|
||||
-printconfiguration build/outputs/proguard-config.txt
|
||||
|
||||
# This is generated automatically by the Android Gradle plugin.
|
||||
-dontwarn com.google.j2objc.annotations.ReflectionSupport
|
||||
-dontwarn com.google.j2objc.annotations.RetainedWith
|
||||
-dontwarn androidx.compose.ui.util.MathHelpersKt
|
||||
-dontwarn com.google.common.util.concurrent.ListenableFuture
|
||||
-dontwarn com.google.errorprone.annotations.InlineMe
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
# This is a Gradle generated file for dependency locking.
|
||||
# Manual edits can break the build and are not advised.
|
||||
# This file is expected to be part of source control.
|
||||
org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.2.1=classpath
|
||||
org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.2.1=classpath
|
||||
org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:4.3.0=classpath
|
||||
org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.3.0=classpath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-assignment:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-assignment:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.22=classpath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
|
||||
org.jetbrains:annotations:13.0=classpath
|
||||
empty=
|
||||
|
|
|
@ -1,74 +1,78 @@
|
|||
# This is a Gradle generated file for dependency locking.
|
||||
# Manual edits can break the build and are not advised.
|
||||
# This file is expected to be part of source control.
|
||||
androidx.databinding:databinding-common:8.1.1=runtimeClasspath
|
||||
androidx.databinding:databinding-compiler-common:8.1.1=runtimeClasspath
|
||||
com.android.databinding:baseLibrary:8.1.1=runtimeClasspath
|
||||
com.android.tools.analytics-library:crash:31.1.1=runtimeClasspath
|
||||
com.android.tools.analytics-library:protos:31.1.1=runtimeClasspath
|
||||
com.android.tools.analytics-library:shared:31.1.1=runtimeClasspath
|
||||
com.android.tools.analytics-library:tracker:31.1.1=runtimeClasspath
|
||||
androidx.databinding:databinding-common:8.3.0=runtimeClasspath
|
||||
androidx.databinding:databinding-compiler-common:8.3.0=runtimeClasspath
|
||||
com.android.databinding:baseLibrary:8.3.0=runtimeClasspath
|
||||
com.android.tools.analytics-library:crash:31.3.0=runtimeClasspath
|
||||
com.android.tools.analytics-library:protos:31.3.0=runtimeClasspath
|
||||
com.android.tools.analytics-library:shared:31.3.0=runtimeClasspath
|
||||
com.android.tools.analytics-library:tracker:31.3.0=runtimeClasspath
|
||||
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10=runtimeClasspath
|
||||
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10=runtimeClasspath
|
||||
com.android.tools.build:aapt2-proto:8.1.1-10154469=runtimeClasspath
|
||||
com.android.tools.build:aaptcompiler:8.1.1=runtimeClasspath
|
||||
com.android.tools.build:apksig:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:apkzlib:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:builder-model:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:builder-test-api:8.1.1=runtimeClasspath
|
||||
com.android.tools.build:builder:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:bundletool:1.14.0=runtimeClasspath
|
||||
com.android.tools.build:gradle-api:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:gradle-settings-api:8.1.1=runtimeClasspath
|
||||
com.android.tools.build:gradle:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:manifest-merger:31.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:aapt2-proto:8.3.0-10880808=runtimeClasspath
|
||||
com.android.tools.build:aaptcompiler:8.3.0=runtimeClasspath
|
||||
com.android.tools.build:apksig:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:apkzlib:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:builder-model:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:builder-test-api:8.3.0=runtimeClasspath
|
||||
com.android.tools.build:builder:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:bundletool:1.15.6=runtimeClasspath
|
||||
com.android.tools.build:gradle-api:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:gradle-settings-api:8.3.0=runtimeClasspath
|
||||
com.android.tools.build:gradle:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:manifest-merger:31.3.0=compileClasspath,runtimeClasspath
|
||||
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=runtimeClasspath
|
||||
com.android.tools.ddms:ddmlib:31.1.1=runtimeClasspath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.1.1=runtimeClasspath
|
||||
com.android.tools.lint:lint-model:31.1.1=runtimeClasspath
|
||||
com.android.tools.lint:lint-typedef-remover:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.1.1=runtimeClasspath
|
||||
com.android.tools:annotations:31.1.1=runtimeClasspath
|
||||
com.android.tools:common:31.1.1=runtimeClasspath
|
||||
com.android.tools:dvlib:31.1.1=runtimeClasspath
|
||||
com.android.tools:repository:31.1.1=runtimeClasspath
|
||||
com.android.tools:sdk-common:31.1.1=runtimeClasspath
|
||||
com.android.tools:sdklib:31.1.1=runtimeClasspath
|
||||
com.android:signflinger:8.1.1=runtimeClasspath
|
||||
com.android:zipflinger:8.1.1=compileClasspath,runtimeClasspath
|
||||
com.android.tools.ddms:ddmlib:31.3.0=runtimeClasspath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.3.0=runtimeClasspath
|
||||
com.android.tools.lint:lint-model:31.3.0=runtimeClasspath
|
||||
com.android.tools.lint:lint-typedef-remover:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.3.0=runtimeClasspath
|
||||
com.android.tools:annotations:31.3.0=runtimeClasspath
|
||||
com.android.tools:common:31.3.0=runtimeClasspath
|
||||
com.android.tools:dvlib:31.3.0=runtimeClasspath
|
||||
com.android.tools:repository:31.3.0=runtimeClasspath
|
||||
com.android.tools:sdk-common:31.3.0=runtimeClasspath
|
||||
com.android.tools:sdklib:31.3.0=runtimeClasspath
|
||||
com.android:signflinger:8.3.0=runtimeClasspath
|
||||
com.android:zipflinger:8.3.0=compileClasspath,runtimeClasspath
|
||||
com.google.android:annotations:4.1.1.4=runtimeClasspath
|
||||
com.google.api-client:google-api-client:2.2.0=compileClasspath,runtimeClasspath
|
||||
com.google.api.grpc:proto-google-common-protos:2.0.1=runtimeClasspath
|
||||
com.google.api.grpc:proto-google-common-protos:2.17.0=runtimeClasspath
|
||||
com.google.apis:google-api-services-androidpublisher:v3-rev20231030-2.0.0=compileClasspath,runtimeClasspath
|
||||
com.google.auth:google-auth-library-credentials:1.18.0=compileClasspath,runtimeClasspath
|
||||
com.google.auth:google-auth-library-oauth2-http:1.18.0=compileClasspath,runtimeClasspath
|
||||
com.google.auto.value:auto-value-annotations:1.10.1=compileClasspath,runtimeClasspath
|
||||
com.google.code.findbugs:jsr305:3.0.2=compileClasspath,runtimeClasspath
|
||||
com.google.code.gson:gson:2.10=compileClasspath,runtimeClasspath
|
||||
com.google.code.gson:gson:2.10=compileClasspath
|
||||
com.google.code.gson:gson:2.10.1=runtimeClasspath
|
||||
com.google.crypto.tink:tink:1.7.0=runtimeClasspath
|
||||
com.google.dagger:dagger:2.28.3=runtimeClasspath
|
||||
com.google.errorprone:error_prone_annotations:2.16=compileClasspath,runtimeClasspath
|
||||
com.google.errorprone:error_prone_annotations:2.16=compileClasspath
|
||||
com.google.errorprone:error_prone_annotations:2.18.0=runtimeClasspath
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0=runtimeClasspath
|
||||
com.google.guava:failureaccess:1.0.1=compileClasspath,runtimeClasspath
|
||||
com.google.guava:guava:31.1-jre=compileClasspath,runtimeClasspath
|
||||
com.google.guava:guava:31.1-jre=compileClasspath
|
||||
com.google.guava:guava:32.0.1-jre=runtimeClasspath
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=compileClasspath,runtimeClasspath
|
||||
com.google.http-client:google-http-client-apache-v2:1.42.3=compileClasspath,runtimeClasspath
|
||||
com.google.http-client:google-http-client-gson:1.42.3=compileClasspath,runtimeClasspath
|
||||
com.google.http-client:google-http-client:1.42.3=compileClasspath,runtimeClasspath
|
||||
com.google.j2objc:j2objc-annotations:1.3=compileClasspath,runtimeClasspath
|
||||
com.google.j2objc:j2objc-annotations:1.3=compileClasspath
|
||||
com.google.j2objc:j2objc-annotations:2.8=runtimeClasspath
|
||||
com.google.jimfs:jimfs:1.1=runtimeClasspath
|
||||
com.google.oauth-client:google-oauth-client:1.34.1=compileClasspath,runtimeClasspath
|
||||
com.google.protobuf:protobuf-java-util:3.19.3=runtimeClasspath
|
||||
com.google.protobuf:protobuf-java:3.19.3=runtimeClasspath
|
||||
com.google.testing.platform:core-proto:0.0.8-alpha08=runtimeClasspath
|
||||
com.google.protobuf:protobuf-java-util:3.22.3=runtimeClasspath
|
||||
com.google.protobuf:protobuf-java:3.22.3=runtimeClasspath
|
||||
com.google.testing.platform:core-proto:0.0.9-alpha02=runtimeClasspath
|
||||
com.googlecode.juniversalchardet:juniversalchardet:1.0.3=runtimeClasspath
|
||||
com.squareup:javapoet:1.10.0=runtimeClasspath
|
||||
com.squareup:javawriter:2.5.0=compileClasspath,runtimeClasspath
|
||||
|
@ -77,31 +81,31 @@ com.sun.istack:istack-commons-runtime:3.0.8=runtimeClasspath
|
|||
com.sun.xml.fastinfoset:FastInfoset:1.2.16=runtimeClasspath
|
||||
com.vdurmont:semver4j:3.1.0=runtimeClasspath
|
||||
commons-codec:commons-codec:1.15=compileClasspath,runtimeClasspath
|
||||
commons-io:commons-io:2.12.0=runtimeClasspath
|
||||
commons-io:commons-io:2.15.1=runtimeClasspath
|
||||
commons-logging:commons-logging:1.2=compileClasspath,runtimeClasspath
|
||||
io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.0=compileClasspath,runtimeClasspath
|
||||
io.grpc:grpc-api:1.45.1=runtimeClasspath
|
||||
io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.6=compileClasspath,runtimeClasspath
|
||||
io.grpc:grpc-api:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-context:1.27.2=compileClasspath
|
||||
io.grpc:grpc-context:1.45.1=runtimeClasspath
|
||||
io.grpc:grpc-core:1.45.1=runtimeClasspath
|
||||
io.grpc:grpc-netty:1.45.1=runtimeClasspath
|
||||
io.grpc:grpc-protobuf-lite:1.45.1=runtimeClasspath
|
||||
io.grpc:grpc-protobuf:1.45.1=runtimeClasspath
|
||||
io.grpc:grpc-stub:1.45.1=runtimeClasspath
|
||||
io.netty:netty-buffer:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-codec-http2:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-codec-http:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-codec-socks:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-codec:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-common:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-handler-proxy:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-handler:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-resolver:4.1.72.Final=runtimeClasspath
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final=runtimeClasspath
|
||||
io.netty:netty-transport:4.1.72.Final=runtimeClasspath
|
||||
io.grpc:grpc-context:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-core:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-netty:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-protobuf-lite:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-protobuf:1.57.0=runtimeClasspath
|
||||
io.grpc:grpc-stub:1.57.0=runtimeClasspath
|
||||
io.netty:netty-buffer:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-codec-http2:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-codec-http:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-codec-socks:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-codec:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-common:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-handler-proxy:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-handler:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-resolver:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-transport-native-unix-common:4.1.93.Final=runtimeClasspath
|
||||
io.netty:netty-transport:4.1.93.Final=runtimeClasspath
|
||||
io.opencensus:opencensus-api:0.31.1=compileClasspath,runtimeClasspath
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1=compileClasspath,runtimeClasspath
|
||||
io.perfmark:perfmark-api:0.23.0=runtimeClasspath
|
||||
io.perfmark:perfmark-api:0.26.0=runtimeClasspath
|
||||
jakarta.activation:jakarta.activation-api:1.2.1=runtimeClasspath
|
||||
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2=runtimeClasspath
|
||||
javax.annotation:javax.annotation-api:1.3.2=runtimeClasspath
|
||||
|
@ -117,71 +121,70 @@ org.apache.httpcomponents:httpmime:4.5.6=runtimeClasspath
|
|||
org.bitbucket.b_c:jose4j:0.7.0=runtimeClasspath
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67=runtimeClasspath
|
||||
org.bouncycastle:bcprov-jdk15on:1.67=runtimeClasspath
|
||||
org.checkerframework:checker-qual:3.12.0=compileClasspath,runtimeClasspath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.19=runtimeClasspath
|
||||
org.checkerframework:checker-qual:3.12.0=compileClasspath
|
||||
org.checkerframework:checker-qual:3.33.0=runtimeClasspath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.23=runtimeClasspath
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.2=runtimeClasspath
|
||||
org.glassfish.jaxb:txw2:2.3.2=runtimeClasspath
|
||||
org.jdom:jdom2:2.0.6=runtimeClasspath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinCompilerClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.20=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.8.20-RC2=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=compileClasspath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.20=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.20-RC2=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20-RC2=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20-RC2=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20-RC2=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.21=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.22=compileClasspath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.22=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.23=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlinx.kover:org.jetbrains.kotlinx.kover.gradle.plugin:0.7.3=compileClasspath,runtimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=runtimeClasspath
|
||||
org.jetbrains.kotlinx:kover-gradle-plugin:0.7.3=compileClasspath,runtimeClasspath
|
||||
org.jetbrains:annotations:13.0=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,runtimeClasspath
|
||||
org.json:json:20230227=runtimeClasspath
|
||||
org.jetbrains:annotations:13.0=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains:annotations:23.0.0=runtimeClasspath
|
||||
org.json:json:20240205=runtimeClasspath
|
||||
org.jvnet.staxex:stax-ex:1.8.1=runtimeClasspath
|
||||
org.ow2.asm:asm-analysis:9.2=runtimeClasspath
|
||||
org.ow2.asm:asm-commons:9.2=runtimeClasspath
|
||||
org.ow2.asm:asm-tree:9.2=runtimeClasspath
|
||||
org.ow2.asm:asm-util:9.2=runtimeClasspath
|
||||
org.ow2.asm:asm:9.2=compileClasspath,runtimeClasspath
|
||||
org.ow2.asm:asm-analysis:9.6=runtimeClasspath
|
||||
org.ow2.asm:asm-commons:9.6=runtimeClasspath
|
||||
org.ow2.asm:asm-tree:9.6=runtimeClasspath
|
||||
org.ow2.asm:asm-util:9.6=runtimeClasspath
|
||||
org.ow2.asm:asm:9.6=compileClasspath,runtimeClasspath
|
||||
org.slf4j:slf4j-api:1.7.30=runtimeClasspath
|
||||
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-6-1:0.15.1=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-6-6:0.15.1=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-7-6:0.15.1=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-api:0.15.1=runtimeClasspath
|
||||
wtf.emulator:gradle-compat:0.15.1=runtimeClasspath
|
||||
wtf.emulator:gradle-plugin:0.15.1=compileClasspath,runtimeClasspath
|
||||
xerces:xercesImpl:2.12.0=runtimeClasspath
|
||||
xml-apis:xml-apis:1.4.01=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-6-1:0.16.2=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-6-6:0.16.2=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-7-6:0.16.2=runtimeClasspath
|
||||
wtf.emulator:gradle-compat-api:0.16.2=runtimeClasspath
|
||||
wtf.emulator:gradle-compat:0.16.2=runtimeClasspath
|
||||
wtf.emulator:gradle-plugin:0.16.2=compileClasspath,runtimeClasspath
|
||||
empty=annotationProcessor,kotlinScriptDefExtensions
|
||||
|
|
|
@ -175,7 +175,7 @@ fun com.android.build.gradle.BaseExtension.configureBaseExtension() {
|
|||
)
|
||||
}
|
||||
|
||||
if (this is CommonExtension<*, *, *, *, *>) {
|
||||
if (this is CommonExtension<*, *, *, *, *, *>) {
|
||||
kotlinOptions {
|
||||
jvmTarget = project.property("ANDROID_JVM_TARGET").toString()
|
||||
allWarningsAsErrors = project.property("ZCASH_IS_TREAT_WARNINGS_AS_ERRORS").toString().toBoolean()
|
||||
|
@ -191,7 +191,7 @@ fun com.android.build.gradle.BaseExtension.configureBaseExtension() {
|
|||
}
|
||||
}
|
||||
|
||||
fun CommonExtension<*, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
|
||||
fun CommonExtension<*, *, *, *, *, *>.kotlinOptions(block: KotlinJvmOptions.() -> Unit) {
|
||||
(this as ExtensionAware).extensions.configure("kotlinOptions", block)
|
||||
}
|
||||
|
||||
|
|
|
@ -245,6 +245,8 @@ abstract class PublishToGooglePlay @Inject constructor(
|
|||
track,
|
||||
Track().setReleases(
|
||||
listOf(TrackRelease()
|
||||
// TODO [#1440]: Provide a way to inject in-app-update information
|
||||
// TODO [#1440]: https://github.com/Electric-Coin-Company/zashi-android/issues/1440
|
||||
.setName(versionName)
|
||||
.setVersionCodes(bundleVersionCodes)
|
||||
.setStatus(status)
|
||||
|
|
|
@ -4,29 +4,29 @@
|
|||
junit:junit:4.13.2=commonTestImplementationCopy,jvmTestCompileClasspath,jvmTestImplementationCopy,jvmTestRuntimeClasspath
|
||||
org.hamcrest:hamcrest-core:1.3=commonTestImplementationCopy,jvmTestCompileClasspath,jvmTestImplementationCopy,jvmTestRuntimeClasspath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=kotlinCompilerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20=kotlinKlibCommonizerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.23=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=kotlinCompilerPluginClasspathJvmMainCopy,kotlinCompilerPluginClasspathJvmTestCopy,kotlinCompilerPluginClasspathMetadataCommonMainCopy,kotlinCompilerPluginClasspathMetadataMainCopy
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.21=kotlinCompilerPluginClasspathJvmMainCopy2,kotlinCompilerPluginClasspathJvmTestCopy2,kotlinCompilerPluginClasspathMetadataCommonMainCopy2,kotlinCompilerPluginClasspathMetadataMainCopy2
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain,metadataCommonMainCompileClasspath
|
||||
|
@ -35,14 +35,14 @@ org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20=commonMainApiCopy,commonMainCompi
|
|||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21=jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.21=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.23=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.20=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestCompileClasspathCopy2,jvmTestImplementationCopy,jvmTestImplementationDependenciesMetadataCopy,jvmTestRuntimeClasspathCopy,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.21=commonTestImplementationCopy2,jvmTestImplementationCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains:annotations:13.0=commonTestImplementationCopy,jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestImplementationCopy,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
empty=allSourceSetsCompileDependenciesMetadataCopy,allSourceSetsRuntimeDependenciesMetadataCopy,archives,archivesCopy,commonMainApiDependenciesMetadataCopy,commonMainCompileOnlyCopy,commonMainImplementationCopy,commonMainIntransitiveDependenciesMetadata,commonMainIntransitiveDependenciesMetadataCopy,commonMainRuntimeOnlyCopy,commonMainRuntimeOnlyDependenciesMetadata,commonTestCompileOnlyCopy,commonTestIntransitiveDependenciesMetadata,commonTestIntransitiveDependenciesMetadataCopy,commonTestRuntimeOnlyCopy,commonTestRuntimeOnlyDependenciesMetadata,default,defaultCopy,jvmCompileOnlyCopy,jvmMainApiCopy,jvmMainCompileOnlyCopy,jvmMainImplementationCopy,jvmMainIntransitiveDependenciesMetadata,jvmMainIntransitiveDependenciesMetadataCopy,jvmMainRuntimeOnlyCopy,jvmMainRuntimeOnlyDependenciesMetadata,jvmRuntimeOnlyCopy,jvmSourceArtifactsCopy,jvmTestCompileOnlyCopy,jvmTestIntransitiveDependenciesMetadata,jvmTestIntransitiveDependenciesMetadataCopy,jvmTestRuntimeOnlyCopy,jvmTestRuntimeOnlyDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinCompilerPluginClasspathCopy,kotlinNativeCompilerPluginClasspath,kotlinNativeCompilerPluginClasspathCopy,kotlinScriptDef,kotlinScriptDefCopy,kotlinScriptDefExtensions,kotlinScriptDefExtensionsCopy,metadataCommonMainCompileOnlyCopy,metadataCompileOnlyCopy,testKotlinScriptDef,testKotlinScriptDefCopy,testKotlinScriptDefExtensions,testKotlinScriptDefExtensionsCopy
|
||||
|
|
|
@ -97,6 +97,7 @@ tasks {
|
|||
"ZCASH_EMULATOR_WTF_API_KEY" to "",
|
||||
|
||||
"IS_MINIFY_ENABLED" to "true",
|
||||
"NDK_DEBUG_SYMBOL_LEVEL" to "symbol_table",
|
||||
|
||||
"ZCASH_RELEASE_APP_NAME" to "Zashi",
|
||||
"ZCASH_RELEASE_PACKAGE_NAME" to "co.electriccoin.zcash",
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
# This is a Gradle generated file for dependency locking.
|
||||
# Manual edits can break the build and are not advised.
|
||||
# This file is expected to be part of source control.
|
||||
org.gradle.kotlin.kotlin-dsl.base:org.gradle.kotlin.kotlin-dsl.base.gradle.plugin:4.2.1=classpath
|
||||
org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.2.1=classpath
|
||||
org.gradle.kotlin.kotlin-dsl.base:org.gradle.kotlin.kotlin-dsl.base.gradle.plugin:4.3.0=classpath
|
||||
org.gradle.kotlin:gradle-kotlin-dsl-plugins:4.3.0=classpath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-assignment:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-assignment:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.22=classpath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
|
||||
org.jetbrains:annotations:13.0=classpath
|
||||
empty=
|
||||
|
|
|
@ -4,33 +4,28 @@
|
|||
com.googlecode.javaewah:JavaEWAH:1.1.13=buildScriptClasspath,compileClasspath,testCompileClasspath,testRuntimeClasspath
|
||||
org.eclipse.jgit:org.eclipse.jgit:6.4.0.202211300538-r=buildScriptClasspath,compileClasspath,testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.20=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.20=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.22=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.22=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinCompilerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.7.10=testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=compileClasspath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.22=compileClasspath
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-sam-with-receiver:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.20=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.22=kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.20=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.7.10=kotlinCompilerPluginClasspathTest,testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.7.10=testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.7.10=testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.7.10=kotlinCompilerPluginClasspathTest,testCompileClasspath,testRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.22=kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.7.10=kotlinCompilerPluginClasspathTest
|
||||
org.jetbrains:annotations:13.0=compileClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathMain,kotlinCompilerPluginClasspathTest,testCompileClasspath,testRuntimeClasspath
|
||||
|
|
|
@ -1,81 +1,80 @@
|
|||
# This is a Gradle generated file for dependency locking.
|
||||
# Manual edits can break the build and are not advised.
|
||||
# This file is expected to be part of source control.
|
||||
androidx.databinding:databinding-common:8.1.1=classpath
|
||||
androidx.databinding:databinding-compiler-common:8.1.1=classpath
|
||||
com.android.databinding:baseLibrary:8.1.1=classpath
|
||||
com.android.tools.analytics-library:crash:31.1.1=classpath
|
||||
com.android.tools.analytics-library:protos:31.1.1=classpath
|
||||
com.android.tools.analytics-library:shared:31.1.1=classpath
|
||||
com.android.tools.analytics-library:tracker:31.1.1=classpath
|
||||
androidx.databinding:databinding-common:8.3.0=classpath
|
||||
androidx.databinding:databinding-compiler-common:8.3.0=classpath
|
||||
com.android.databinding:baseLibrary:8.3.0=classpath
|
||||
com.android.tools.analytics-library:crash:31.3.0=classpath
|
||||
com.android.tools.analytics-library:protos:31.3.0=classpath
|
||||
com.android.tools.analytics-library:shared:31.3.0=classpath
|
||||
com.android.tools.analytics-library:tracker:31.3.0=classpath
|
||||
com.android.tools.build.jetifier:jetifier-core:1.0.0-beta10=classpath
|
||||
com.android.tools.build.jetifier:jetifier-processor:1.0.0-beta10=classpath
|
||||
com.android.tools.build:aapt2-proto:8.1.1-10154469=classpath
|
||||
com.android.tools.build:aaptcompiler:8.1.1=classpath
|
||||
com.android.tools.build:apksig:8.1.1=classpath
|
||||
com.android.tools.build:apkzlib:8.1.1=classpath
|
||||
com.android.tools.build:builder-model:8.1.1=classpath
|
||||
com.android.tools.build:builder-test-api:8.1.1=classpath
|
||||
com.android.tools.build:builder:8.1.1=classpath
|
||||
com.android.tools.build:bundletool:1.14.0=classpath
|
||||
com.android.tools.build:gradle-api:8.1.1=classpath
|
||||
com.android.tools.build:gradle-settings-api:8.1.1=classpath
|
||||
com.android.tools.build:gradle:8.1.1=classpath
|
||||
com.android.tools.build:manifest-merger:31.1.1=classpath
|
||||
com.android.tools.build:aapt2-proto:8.3.0-10880808=classpath
|
||||
com.android.tools.build:aaptcompiler:8.3.0=classpath
|
||||
com.android.tools.build:apksig:8.3.0=classpath
|
||||
com.android.tools.build:apkzlib:8.3.0=classpath
|
||||
com.android.tools.build:builder-model:8.3.0=classpath
|
||||
com.android.tools.build:builder-test-api:8.3.0=classpath
|
||||
com.android.tools.build:builder:8.3.0=classpath
|
||||
com.android.tools.build:bundletool:1.15.6=classpath
|
||||
com.android.tools.build:gradle-api:8.3.0=classpath
|
||||
com.android.tools.build:gradle-settings-api:8.3.0=classpath
|
||||
com.android.tools.build:gradle:8.3.0=classpath
|
||||
com.android.tools.build:manifest-merger:31.3.0=classpath
|
||||
com.android.tools.build:transform-api:2.0.0-deprecated-use-gradle-api=classpath
|
||||
com.android.tools.ddms:ddmlib:31.1.1=classpath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.1.1=classpath
|
||||
com.android.tools.lint:lint-model:31.1.1=classpath
|
||||
com.android.tools.lint:lint-typedef-remover:31.1.1=classpath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.1.1=classpath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.1.1=classpath
|
||||
com.android.tools:annotations:31.1.1=classpath
|
||||
com.android.tools:common:31.1.1=classpath
|
||||
com.android.tools:dvlib:31.1.1=classpath
|
||||
com.android.tools:repository:31.1.1=classpath
|
||||
com.android.tools:sdk-common:31.1.1=classpath
|
||||
com.android.tools:sdklib:31.1.1=classpath
|
||||
com.android:signflinger:8.1.1=classpath
|
||||
com.android:zipflinger:8.1.1=classpath
|
||||
com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.42.0=classpathCopy,classpathCopy2
|
||||
com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.47.0=classpath
|
||||
com.github.ben-manes:gradle-versions-plugin:0.47.0=classpath
|
||||
com.android.tools.ddms:ddmlib:31.3.0=classpath
|
||||
com.android.tools.layoutlib:layoutlib-api:31.3.0=classpath
|
||||
com.android.tools.lint:lint-model:31.3.0=classpath
|
||||
com.android.tools.lint:lint-typedef-remover:31.3.0=classpath
|
||||
com.android.tools.utp:android-device-provider-ddmlib-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-device-provider-gradle-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-additional-test-output-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-apk-installer-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-coverage-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-emulator-control-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-logcat-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-host-retention-proto:31.3.0=classpath
|
||||
com.android.tools.utp:android-test-plugin-result-listener-gradle-proto:31.3.0=classpath
|
||||
com.android.tools:annotations:31.3.0=classpath
|
||||
com.android.tools:common:31.3.0=classpath
|
||||
com.android.tools:dvlib:31.3.0=classpath
|
||||
com.android.tools:repository:31.3.0=classpath
|
||||
com.android.tools:sdk-common:31.3.0=classpath
|
||||
com.android.tools:sdklib:31.3.0=classpath
|
||||
com.android:signflinger:8.3.0=classpath
|
||||
com.android:zipflinger:8.3.0=classpath
|
||||
com.github.ben-manes.versions:com.github.ben-manes.versions.gradle.plugin:0.51.0=classpath,classpathCopy,classpathCopy2
|
||||
com.github.ben-manes:gradle-versions-plugin:0.51.0=classpath
|
||||
com.google.android.gms:strict-version-matcher-plugin:1.2.4=classpath
|
||||
com.google.android:annotations:4.1.1.4=classpath
|
||||
com.google.api-client:google-api-client:2.2.0=classpath
|
||||
com.google.api.grpc:proto-google-common-protos:2.0.1=classpath
|
||||
com.google.api.grpc:proto-google-common-protos:2.17.0=classpath
|
||||
com.google.apis:google-api-services-androidpublisher:v3-rev20231030-2.0.0=classpath
|
||||
com.google.auth:google-auth-library-credentials:1.18.0=classpath
|
||||
com.google.auth:google-auth-library-oauth2-http:1.18.0=classpath
|
||||
com.google.auto.value:auto-value-annotations:1.10.1=classpath
|
||||
com.google.code.findbugs:jsr305:3.0.2=classpath
|
||||
com.google.code.gson:gson:2.10=classpath
|
||||
com.google.code.gson:gson:2.10.1=classpath
|
||||
com.google.crypto.tink:tink:1.7.0=classpath
|
||||
com.google.dagger:dagger:2.28.3=classpath
|
||||
com.google.errorprone:error_prone_annotations:2.16=classpath
|
||||
com.google.firebase:firebase-crashlytics-buildtools:2.9.4=classpath
|
||||
com.google.firebase:firebase-crashlytics-gradle:2.9.4=classpath
|
||||
com.google.errorprone:error_prone_annotations:2.18.0=classpath
|
||||
com.google.firebase:firebase-crashlytics-buildtools:2.9.9=classpath
|
||||
com.google.firebase:firebase-crashlytics-gradle:2.9.9=classpath
|
||||
com.google.flatbuffers:flatbuffers-java:1.12.0=classpath
|
||||
com.google.gms:google-services:4.3.15=classpath
|
||||
com.google.gms:google-services:4.4.1=classpath
|
||||
com.google.guava:failureaccess:1.0.1=classpath
|
||||
com.google.guava:guava:31.1-jre=classpath
|
||||
com.google.guava:guava:32.0.1-jre=classpath
|
||||
com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava=classpath
|
||||
com.google.http-client:google-http-client-apache-v2:1.42.3=classpath
|
||||
com.google.http-client:google-http-client-gson:1.42.3=classpath
|
||||
com.google.http-client:google-http-client:1.42.3=classpath
|
||||
com.google.j2objc:j2objc-annotations:1.3=classpath
|
||||
com.google.j2objc:j2objc-annotations:2.8=classpath
|
||||
com.google.jimfs:jimfs:1.1=classpath
|
||||
com.google.oauth-client:google-oauth-client:1.34.1=classpath
|
||||
com.google.protobuf:protobuf-java-util:3.19.3=classpath
|
||||
com.google.protobuf:protobuf-java:3.19.3=classpath
|
||||
com.google.testing.platform:core-proto:0.0.8-alpha08=classpath
|
||||
com.google.protobuf:protobuf-java-util:3.22.3=classpath
|
||||
com.google.protobuf:protobuf-java:3.22.3=classpath
|
||||
com.google.testing.platform:core-proto:0.0.9-alpha02=classpath
|
||||
com.googlecode.juniversalchardet:juniversalchardet:1.0.3=classpath
|
||||
com.osacky.flank.gradle:fladle:0.17.4=classpath
|
||||
com.osacky.fulladle:com.osacky.fulladle.gradle.plugin:0.17.3=classpathCopy
|
||||
|
@ -90,36 +89,34 @@ com.squareup:javawriter:2.5.0=classpath
|
|||
com.sun.activation:javax.activation:1.2.0=classpath
|
||||
com.sun.istack:istack-commons-runtime:3.0.8=classpath
|
||||
com.sun.xml.fastinfoset:FastInfoset:1.2.16=classpath
|
||||
com.thoughtworks.xstream:xstream:1.4.20=classpath
|
||||
com.vdurmont:semver4j:3.1.0=classpath
|
||||
commons-codec:commons-codec:1.15=classpath
|
||||
commons-io:commons-io:2.12.0=classpath
|
||||
commons-io:commons-io:2.15.1=classpath
|
||||
commons-logging:commons-logging:1.2=classpath
|
||||
io.github.x-stream:mxparser:1.2.2=classpath
|
||||
io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.0=classpath
|
||||
io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.23.6=classpath
|
||||
io.gitlab.arturbosch.detekt:io.gitlab.arturbosch.detekt.gradle.plugin:1.19.0=classpathCopy
|
||||
io.gitlab.arturbosch.detekt:io.gitlab.arturbosch.detekt.gradle.plugin:1.20.0=classpathCopy2
|
||||
io.grpc:grpc-api:1.45.1=classpath
|
||||
io.grpc:grpc-context:1.45.1=classpath
|
||||
io.grpc:grpc-core:1.45.1=classpath
|
||||
io.grpc:grpc-netty:1.45.1=classpath
|
||||
io.grpc:grpc-protobuf-lite:1.45.1=classpath
|
||||
io.grpc:grpc-protobuf:1.45.1=classpath
|
||||
io.grpc:grpc-stub:1.45.1=classpath
|
||||
io.netty:netty-buffer:4.1.72.Final=classpath
|
||||
io.netty:netty-codec-http2:4.1.72.Final=classpath
|
||||
io.netty:netty-codec-http:4.1.72.Final=classpath
|
||||
io.netty:netty-codec-socks:4.1.72.Final=classpath
|
||||
io.netty:netty-codec:4.1.72.Final=classpath
|
||||
io.netty:netty-common:4.1.72.Final=classpath
|
||||
io.netty:netty-handler-proxy:4.1.72.Final=classpath
|
||||
io.netty:netty-handler:4.1.72.Final=classpath
|
||||
io.netty:netty-resolver:4.1.72.Final=classpath
|
||||
io.netty:netty-tcnative-classes:2.0.46.Final=classpath
|
||||
io.netty:netty-transport:4.1.72.Final=classpath
|
||||
io.grpc:grpc-api:1.57.0=classpath
|
||||
io.grpc:grpc-context:1.57.0=classpath
|
||||
io.grpc:grpc-core:1.57.0=classpath
|
||||
io.grpc:grpc-netty:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf-lite:1.57.0=classpath
|
||||
io.grpc:grpc-protobuf:1.57.0=classpath
|
||||
io.grpc:grpc-stub:1.57.0=classpath
|
||||
io.netty:netty-buffer:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http2:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-http:4.1.93.Final=classpath
|
||||
io.netty:netty-codec-socks:4.1.93.Final=classpath
|
||||
io.netty:netty-codec:4.1.93.Final=classpath
|
||||
io.netty:netty-common:4.1.93.Final=classpath
|
||||
io.netty:netty-handler-proxy:4.1.93.Final=classpath
|
||||
io.netty:netty-handler:4.1.93.Final=classpath
|
||||
io.netty:netty-resolver:4.1.93.Final=classpath
|
||||
io.netty:netty-transport-native-unix-common:4.1.93.Final=classpath
|
||||
io.netty:netty-transport:4.1.93.Final=classpath
|
||||
io.opencensus:opencensus-api:0.31.1=classpath
|
||||
io.opencensus:opencensus-contrib-http-util:0.31.1=classpath
|
||||
io.perfmark:perfmark-api:0.23.0=classpath
|
||||
io.perfmark:perfmark-api:0.26.0=classpath
|
||||
jakarta.activation:jakarta.activation-api:1.2.1=classpath
|
||||
jakarta.xml.bind:jakarta.xml.bind-api:2.3.2=classpath
|
||||
javax.annotation:javax.annotation-api:1.3.2=classpath
|
||||
|
@ -135,60 +132,57 @@ org.apache.httpcomponents:httpmime:4.5.6=classpath
|
|||
org.bitbucket.b_c:jose4j:0.7.0=classpath
|
||||
org.bouncycastle:bcpkix-jdk15on:1.67=classpath
|
||||
org.bouncycastle:bcprov-jdk15on:1.67=classpath
|
||||
org.checkerframework:checker-qual:3.12.0=classpath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.19=classpath
|
||||
org.checkerframework:checker-qual:3.33.0=classpath
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.23=classpath
|
||||
org.glassfish.jaxb:jaxb-runtime:2.3.2=classpath
|
||||
org.glassfish.jaxb:txw2:2.3.2=classpath
|
||||
org.jdom:jdom2:2.0.6=classpath
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.21=classpath
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-annotations:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea-proto:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-idea:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugins-bom:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-api:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-project-model:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.20=classpath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.22=classpath
|
||||
org.jetbrains.kotlin:kotlin-tooling-core:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.9.23=classpath
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.9.23=classpath
|
||||
org.jetbrains.kotlinx.kover:org.jetbrains.kotlinx.kover.gradle.plugin:0.7.3=classpath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=classpath
|
||||
org.jetbrains.kotlinx:kover-gradle-plugin:0.7.3=classpath
|
||||
org.jetbrains:annotations:13.0=classpath
|
||||
org.json:json:20230227=classpath
|
||||
org.json:json:20240205=classpath
|
||||
org.jvnet.staxex:stax-ex:1.8.1=classpath
|
||||
org.ow2.asm:asm-analysis:9.2=classpath
|
||||
org.ow2.asm:asm-commons:9.2=classpath
|
||||
org.ow2.asm:asm-tree:9.2=classpath
|
||||
org.ow2.asm:asm-util:9.2=classpath
|
||||
org.ow2.asm:asm:9.2=classpath
|
||||
org.ow2.asm:asm-analysis:9.6=classpath
|
||||
org.ow2.asm:asm-commons:9.6=classpath
|
||||
org.ow2.asm:asm-tree:9.6=classpath
|
||||
org.ow2.asm:asm-util:9.6=classpath
|
||||
org.ow2.asm:asm:9.6=classpath
|
||||
org.slf4j:slf4j-api:1.7.30=classpath
|
||||
org.tensorflow:tensorflow-lite-metadata:0.1.0-rc2=classpath
|
||||
wtf.emulator:gradle-compat-6-1:0.15.1=classpath
|
||||
wtf.emulator:gradle-compat-6-6:0.15.1=classpath
|
||||
wtf.emulator:gradle-compat-7-6:0.15.1=classpath
|
||||
wtf.emulator:gradle-compat-api:0.15.1=classpath
|
||||
wtf.emulator:gradle-compat:0.15.1=classpath
|
||||
wtf.emulator:gradle-plugin:0.15.1=classpath
|
||||
xerces:xercesImpl:2.12.0=classpath
|
||||
xml-apis:xml-apis:1.4.01=classpath
|
||||
xmlpull:xmlpull:1.1.3.1=classpath
|
||||
wtf.emulator:gradle-compat-6-1:0.16.2=classpath
|
||||
wtf.emulator:gradle-compat-6-6:0.16.2=classpath
|
||||
wtf.emulator:gradle-compat-7-6:0.16.2=classpath
|
||||
wtf.emulator:gradle-compat-api:0.16.2=classpath
|
||||
wtf.emulator:gradle-compat:0.16.2=classpath
|
||||
wtf.emulator:gradle-plugin:0.16.2=classpath
|
||||
empty=
|
||||
|
|
|
@ -8,53 +8,51 @@ org.jetbrains.intellij.deps:coverage-report:1.0.21=koverJvmReporter
|
|||
org.jetbrains.intellij.deps:intellij-coverage-agent:1.0.724=koverJvmAgent,koverJvmReporter
|
||||
org.jetbrains.intellij.deps:intellij-coverage-reporter:1.0.724=koverJvmReporter
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.23=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.21=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.23=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.17.3=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:atomicfu:0.20.2=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.21.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.6=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.23.1=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-collections-immutable-jvm:0.3.7=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.5=allSourceSetsRuntimeDependenciesMetadata,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.6=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.7=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.7.3=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.8.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.5.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-datetime:0.4.0=allSourceSetsRuntimeDependenciesMetadata,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-datetime:0.5.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
|
|
|
@ -40,6 +40,8 @@ private data class MergingConfiguration(private val configurations: PersistentLi
|
|||
return null != configurations.firstWithKey(key)
|
||||
}
|
||||
|
||||
// TODO [#1373]: Catch and log Configuration Key Coercion Failures
|
||||
// TODO [#1373]: https://github.com/Electric-Coin-Company/zashi-android/issues/1373
|
||||
override fun getBoolean(
|
||||
key: ConfigKey,
|
||||
defaultValue: Boolean
|
||||
|
@ -49,6 +51,8 @@ private data class MergingConfiguration(private val configurations: PersistentLi
|
|||
} ?: defaultValue
|
||||
}
|
||||
|
||||
// TODO [#1373]: Catch and log Configuration Key Coercion Failures
|
||||
// TODO [#1373]: https://github.com/Electric-Coin-Company/zashi-android/issues/1373
|
||||
override fun getInt(
|
||||
key: ConfigKey,
|
||||
defaultValue: Int
|
||||
|
|
|
@ -6,5 +6,7 @@ data class BooleanConfigurationEntry(
|
|||
override val key: ConfigKey,
|
||||
private val defaultValue: Boolean
|
||||
) : DefaultEntry<Boolean> {
|
||||
// TODO [#1373]: Catch and log Configuration Key Coercion Failures
|
||||
// TODO [#1373]: https://github.com/Electric-Coin-Company/zashi-android/issues/1373
|
||||
override fun getValue(configuration: Configuration) = configuration.getBoolean(key, defaultValue)
|
||||
}
|
||||
|
|
|
@ -6,5 +6,7 @@ data class IntegerConfigurationEntry(
|
|||
override val key: ConfigKey,
|
||||
private val defaultValue: Int
|
||||
) : DefaultEntry<Int> {
|
||||
// TODO [#1373]: Catch and log Configuration Key Coercion Failures
|
||||
// TODO [#1373]: https://github.com/Electric-Coin-Company/zashi-android/issues/1373
|
||||
override fun getValue(configuration: Configuration) = configuration.getInt(key, defaultValue)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
package co.electriccoin.zcash.configuration.model.exception
|
||||
|
||||
/**
|
||||
* Exception that may occur when parsing a value from the remote configuration. This could mean that someone made an
|
||||
* error in the remote config console.
|
||||
*/
|
||||
class ConfigurationParseException(message: String, cause: Throwable?) : IllegalArgumentException(message, cause)
|
|
@ -1,6 +1,7 @@
|
|||
package co.electriccoin.zcash.configuration.model.map
|
||||
|
||||
import co.electriccoin.zcash.configuration.model.entry.ConfigKey
|
||||
import co.electriccoin.zcash.configuration.model.exception.ConfigurationParseException
|
||||
import kotlinx.collections.immutable.PersistentMap
|
||||
import kotlinx.datetime.Instant
|
||||
|
||||
|
@ -10,31 +11,35 @@ data class StringConfiguration(
|
|||
val configurationMapping: PersistentMap<String, String>,
|
||||
override val updatedAt: Instant?
|
||||
) : Configuration {
|
||||
@Throws(ConfigurationParseException::class)
|
||||
override fun getBoolean(
|
||||
key: ConfigKey,
|
||||
defaultValue: Boolean
|
||||
) = configurationMapping[key.key]?.let {
|
||||
try {
|
||||
it.toBooleanStrict()
|
||||
} catch (
|
||||
@Suppress("SwallowedException") e: IllegalArgumentException
|
||||
) {
|
||||
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
||||
defaultValue
|
||||
} catch (e: IllegalArgumentException) {
|
||||
throw ConfigurationParseException(
|
||||
"Failed while parsing String value to Boolean. This could mean " +
|
||||
"someone made an error in the remote config console",
|
||||
e
|
||||
)
|
||||
}
|
||||
} ?: defaultValue
|
||||
|
||||
@Throws(ConfigurationParseException::class)
|
||||
override fun getInt(
|
||||
key: ConfigKey,
|
||||
defaultValue: Int
|
||||
) = configurationMapping[key.key]?.let {
|
||||
try {
|
||||
it.toInt()
|
||||
} catch (
|
||||
@Suppress("SwallowedException") e: NumberFormatException
|
||||
) {
|
||||
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
||||
defaultValue
|
||||
} catch (e: IllegalArgumentException) {
|
||||
throw ConfigurationParseException(
|
||||
"Failed while parsing String value to Int. This could mean " +
|
||||
"someone made an error in the remote config console",
|
||||
e
|
||||
)
|
||||
}
|
||||
} ?: defaultValue
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package co.electriccoin.zcash.configuration.test
|
||||
|
||||
import co.electriccoin.zcash.configuration.model.entry.ConfigKey
|
||||
import co.electriccoin.zcash.configuration.model.exception.ConfigurationParseException
|
||||
import co.electriccoin.zcash.configuration.model.map.Configuration
|
||||
import kotlinx.datetime.Instant
|
||||
|
||||
|
@ -13,31 +14,35 @@ import kotlinx.datetime.Instant
|
|||
class MockConfiguration(private val configurationMapping: Map<String, String> = emptyMap()) : Configuration {
|
||||
override val updatedAt: Instant? = null
|
||||
|
||||
@Throws(ConfigurationParseException::class)
|
||||
override fun getBoolean(
|
||||
key: ConfigKey,
|
||||
defaultValue: Boolean
|
||||
) = configurationMapping[key.key]?.let {
|
||||
try {
|
||||
it.toBooleanStrict()
|
||||
} catch (
|
||||
@Suppress("SwallowedException") e: IllegalArgumentException
|
||||
) {
|
||||
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
||||
defaultValue
|
||||
} catch (e: IllegalArgumentException) {
|
||||
throw ConfigurationParseException(
|
||||
"Failed while parsing String value to Boolean. This could mean " +
|
||||
"someone made an error in the remote config console",
|
||||
e
|
||||
)
|
||||
}
|
||||
} ?: defaultValue
|
||||
|
||||
@Throws(ConfigurationParseException::class)
|
||||
override fun getInt(
|
||||
key: ConfigKey,
|
||||
defaultValue: Int
|
||||
) = configurationMapping[key.key]?.let {
|
||||
try {
|
||||
it.toInt()
|
||||
} catch (
|
||||
@Suppress("SwallowedException") e: NumberFormatException
|
||||
) {
|
||||
// In the future, log coercion failure as this could mean someone made an error in the remote config console
|
||||
defaultValue
|
||||
} catch (e: IllegalArgumentException) {
|
||||
throw ConfigurationParseException(
|
||||
"Failed while parsing String value to Int. This could mean " +
|
||||
"someone made an error in the remote config console",
|
||||
e
|
||||
)
|
||||
}
|
||||
} ?: defaultValue
|
||||
|
||||
|
|
|
@ -69,7 +69,12 @@ private class FirebaseCrashReporterImpl(
|
|||
) : CrashReporter {
|
||||
@AnyThread
|
||||
override fun reportCaughtException(exception: Throwable) {
|
||||
firebaseCrashlytics.recordException(exception)
|
||||
error(
|
||||
"Although most of the sensitive model objects implement custom [toString] methods to redact information" +
|
||||
" if they were to be logged (which includes exceptions), we're encouraged to disable caught exception" +
|
||||
" reporting to the remote Crashlytics service due to its security risk. Use the the local variant of" +
|
||||
" the reporter to report caught exception - [LocalCrashReporter]."
|
||||
)
|
||||
}
|
||||
|
||||
override fun enable() {
|
||||
|
|
|
@ -8,70 +8,70 @@ org.jetbrains.intellij.deps:coverage-report:1.0.21=koverJvmReporter
|
|||
org.jetbrains.intellij.deps:intellij-coverage-agent:1.0.724=koverJvmAgent,koverJvmReporter
|
||||
org.jetbrains.intellij.deps:intellij-coverage-reporter:1.0.724=koverJvmReporter
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=kotlinCompilerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20=kotlinKlibCommonizerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.23=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=kotlinCompilerPluginClasspathJvmMainCopy,kotlinCompilerPluginClasspathJvmTestCopy,kotlinCompilerPluginClasspathMetadataCommonMainCopy,kotlinCompilerPluginClasspathMetadataMainCopy
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.21=kotlinCompilerPluginClasspathJvmMainCopy2,kotlinCompilerPluginClasspathJvmTestCopy2,kotlinCompilerPluginClasspathMetadataCommonMainCopy2,kotlinCompilerPluginClasspathMetadataMainCopy2
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20=commonTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0=commonTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0=commonTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20=allSourceSetsCompileDependenciesMetadataCopy,allSourceSetsRuntimeDependenciesMetadataCopy,commonMainApiCopy,commonTestApiCopy,compileClasspathCopy,jvmApiCopy,jvmApiElementsCopy,jvmCompileClasspathCopy,jvmImplementationCopy,jvmRuntimeClasspathCopy,jvmRuntimeElementsCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy,metadataApiCopy,metadataApiElementsCopy,metadataCommonMainApiCopy,metadataCommonMainCompileClasspathCopy,metadataCommonMainImplementationCopy,metadataCompileClasspathCopy,metadataImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.20=commonTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.6.20=commonTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.21=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.23=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.20=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.21=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.17.3=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:atomicfu:0.20.2=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.21.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.23.1=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1=commonTestImplementationCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1=commonMainApiCopy,commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1=commonMainApiCopy,commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.7.3=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.8.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.3.2=commonMainApiCopy,jvmTestCompileClasspathCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.3.3=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.5.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
Note: Contact Support will fail on some devices without an app to handle email, such as an Android TV device. See issue #386
|
||||
Note: Contact Support will fail and display an error message on some devices without an app to handle email, such as an
|
||||
Android TV device.
|
||||
|
||||
# Check Support Email Contents
|
||||
1. If using a test device or emulator, be sure to configure a default email app. For example, try opening the Gmail app and confirm that it shows your inbox.
|
||||
|
|
|
@ -50,11 +50,19 @@ ZCASH_FIREBASE_TEST_LAB_PROJECT=
|
|||
# Optionally disable minification
|
||||
IS_MINIFY_ENABLED=true
|
||||
|
||||
# Optionally change the NDK debug symbols generation level
|
||||
# Supported values are:
|
||||
# - none (default, no native debug metadata will be packaged)
|
||||
# - symbol_table (only the symbol tables will be packaged)
|
||||
# - full (the debug info and symbol tables will be packaged)
|
||||
# The result will be placed in app/build/outputs/native-debug-symbols/variant-name/native-debug-symbols.zip
|
||||
NDK_DEBUG_SYMBOL_LEVEL=symbol_table
|
||||
|
||||
# If ZCASH_GOOGLE_PLAY_SERVICE_KEY_FILE_PATH is set and the deployment task is triggered, then
|
||||
# VERSION_CODE is effectively ignored. VERSION_NAME is suffixed with the version code.
|
||||
# If not using automated Google Play deployment, then these serve as the actual version numbers.
|
||||
ZCASH_VERSION_CODE=1
|
||||
ZCASH_VERSION_NAME=0.2.0
|
||||
ZCASH_VERSION_NAME=1.0
|
||||
|
||||
# Set these fields, as you need them (e.g. with values "Zcash X" and "co.electriccoin.zcash.x")
|
||||
# to distinguish a different release build that can be installed alongside the official version
|
||||
|
@ -133,63 +141,65 @@ ANDROID_COMPILE_SDK_VERSION=34
|
|||
|
||||
ANDROID_NDK_VERSION=23.0.7599858
|
||||
|
||||
ANDROID_GRADLE_PLUGIN_VERSION=8.1.1
|
||||
DETEKT_VERSION=1.23.0
|
||||
DETEKT_COMPOSE_RULES_VERSION=0.3.5
|
||||
EMULATOR_WTF_GRADLE_PLUGIN_VERSION=0.15.1
|
||||
FIREBASE_CRASHLYTICS_BUILD_TOOLS_VERSION=2.9.4
|
||||
ANDROID_GRADLE_PLUGIN_VERSION=8.3.0
|
||||
DETEKT_VERSION=1.23.6
|
||||
DETEKT_COMPOSE_RULES_VERSION=0.3.15
|
||||
EMULATOR_WTF_GRADLE_PLUGIN_VERSION=0.16.2
|
||||
FIREBASE_CRASHLYTICS_BUILD_TOOLS_VERSION=2.9.9
|
||||
FLANK_VERSION=23.10.1
|
||||
FULLADLE_VERSION=0.17.4
|
||||
GOOGLE_PLAY_SERVICES_GRADLE_PLUGIN_VERSION=4.3.15
|
||||
GRADLE_VERSIONS_PLUGIN_VERSION=0.47.0
|
||||
GOOGLE_PLAY_SERVICES_GRADLE_PLUGIN_VERSION=4.4.1
|
||||
GRADLE_VERSIONS_PLUGIN_VERSION=0.51.0
|
||||
JGIT_VERSION=6.4.0.202211300538-r
|
||||
KTLINT_VERSION=1.0.1
|
||||
KTLINT_VERSION=1.2.1
|
||||
|
||||
ACCOMPANIST_PERMISSIONS_VERSION=0.32.0
|
||||
ANDROIDX_ACTIVITY_VERSION=1.8.1
|
||||
ANDROIDX_ANNOTATION_VERSION=1.7.0
|
||||
ACCOMPANIST_PERMISSIONS_VERSION=0.34.0
|
||||
ANDROIDX_ACTIVITY_VERSION=1.8.2
|
||||
ANDROIDX_ANNOTATION_VERSION=1.7.1
|
||||
ANDROIDX_APPCOMPAT_VERSION=1.6.1
|
||||
ANDROIDX_CAMERA_VERSION=1.3.0
|
||||
ANDROIDX_COMPOSE_COMPILER_VERSION=1.5.6
|
||||
ANDROIDX_COMPOSE_MATERIAL3_VERSION=1.1.2
|
||||
ANDROIDX_COMPOSE_MATERIAL_ICONS_VERSION=1.5.4
|
||||
ANDROIDX_COMPOSE_VERSION=1.5.4
|
||||
ANDROIDX_BIOMETRIC_VERSION=1.2.0-alpha05
|
||||
ANDROIDX_CAMERA_VERSION=1.3.2
|
||||
ANDROIDX_COMPOSE_COMPILER_VERSION=1.5.11
|
||||
ANDROIDX_COMPOSE_MATERIAL3_VERSION=1.2.1
|
||||
ANDROIDX_COMPOSE_MATERIAL_ICONS_VERSION=1.6.5
|
||||
ANDROIDX_COMPOSE_VERSION=1.6.6
|
||||
ANDROIDX_CONSTRAINTLAYOUT_VERSION=1.0.1
|
||||
ANDROIDX_CORE_VERSION=1.9.0
|
||||
ANDROIDX_CORE_VERSION=1.12.0
|
||||
ANDROIDX_ESPRESSO_VERSION=3.5.1
|
||||
ANDROIDX_LIFECYCLE_VERSION=2.6.2
|
||||
ANDROIDX_NAVIGATION_COMPOSE_VERSION=2.7.5
|
||||
ANDROIDX_LIFECYCLE_VERSION=2.7.0
|
||||
ANDROIDX_NAVIGATION_COMPOSE_VERSION=2.7.7
|
||||
ANDROIDX_PROFILE_INSTALLER_VERSION=1.3.1
|
||||
ANDROIDX_SECURITY_CRYPTO_VERSION=1.1.0-alpha06
|
||||
ANDROIDX_SPLASH_SCREEN_VERSION=1.0.1
|
||||
ANDROIDX_TEST_JUNIT_VERSION=1.1.5
|
||||
ANDROIDX_TEST_ORCHESTRATOR_VERSION=1.4.2
|
||||
ANDROIDX_TEST_CORE_VERSION=1.5.0
|
||||
ANDROIDX_TEST_MACROBENCHMARK_VERSION=1.2.2
|
||||
ANDROIDX_TEST_MACROBENCHMARK_VERSION=1.2.3
|
||||
ANDROIDX_TEST_RUNNER_VERSION=1.5.2
|
||||
ANDROIDX_STARTUP_VERSION=1.1.1
|
||||
ANDROIDX_TEST_SERVICE_VERSION=1.4.2
|
||||
ANDROIDX_UI_AUTOMATOR_VERSION=2.2.0-alpha1
|
||||
ANDROIDX_UI_AUTOMATOR_VERSION=2.3.0
|
||||
ANDROIDX_WORK_MANAGER_VERSION=2.9.0
|
||||
CORE_LIBRARY_DESUGARING_VERSION=2.0.4
|
||||
FIREBASE_BOM_VERSION_MATCHER=32.6.0
|
||||
FIREBASE_BOM_VERSION_MATCHER=32.8.1
|
||||
GOOGLE_AUTH_LIB_JAVA_VERSION=1.18.0
|
||||
JACOCO_VERSION=0.8.9
|
||||
KOTLIN_VERSION=1.9.21
|
||||
KOTLINX_COROUTINES_VERSION=1.7.3
|
||||
JACOCO_VERSION=0.8.12
|
||||
KOTLIN_VERSION=1.9.23
|
||||
KOTLINX_COROUTINES_VERSION=1.8.0
|
||||
KOTLINX_DATETIME_VERSION=0.5.0
|
||||
KOTLINX_IMMUTABLE_COLLECTIONS_VERSION=0.3.6
|
||||
KOTLINX_IMMUTABLE_COLLECTIONS_VERSION=0.3.7
|
||||
KOTLINX_SERIALIZABLE_JSON_VERSION=1.6.3
|
||||
KOVER_VERSION=0.7.3
|
||||
PLAY_APP_UPDATE_VERSION=2.1.0
|
||||
PLAY_APP_UPDATE_KTX_VERSION=2.1.0
|
||||
PLAY_PUBLISHER_API_VERSION=v3-rev20231030-2.0.0
|
||||
ZCASH_ANDROID_WALLET_PLUGINS_VERSION=1.0.0
|
||||
ZCASH_BIP39_VERSION=1.0.7
|
||||
ZXING_VERSION=3.5.2
|
||||
ZXING_VERSION=3.5.3
|
||||
|
||||
# WARNING: Ensure a non-snapshot version is used before releasing to production.
|
||||
ZCASH_SDK_VERSION=2.0.6-SNAPSHOT
|
||||
ZCASH_BIP39_VERSION=1.0.8
|
||||
|
||||
# WARNING: Ensure a non-snapshot version is used before releasing to production
|
||||
ZCASH_SDK_VERSION=2.1.1-SNAPSHOT
|
||||
|
||||
# Toolchain is the Java version used to build the application, which is separate from the
|
||||
# Java version used to run the application.
|
||||
|
|
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionSha256Sum=9d926787066a081739e8200858338b4a69e837c3a821a33aca9db09dd4a41026
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
|
||||
distributionSha256Sum=544c35d6bd849ae8a5ed0bcea39ba677dc40f49df7d1835561582da2009b961d
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
|
|
@ -43,11 +43,11 @@ set JAVA_EXE=java.exe
|
|||
%JAVA_EXE% -version >NUL 2>&1
|
||||
if %ERRORLEVEL% equ 0 goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
@ -57,11 +57,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|||
|
||||
if exist "%JAVA_EXE%" goto execute
|
||||
|
||||
echo.
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||
echo.
|
||||
echo Please set the JAVA_HOME variable in your environment to match the
|
||||
echo location of your Java installation.
|
||||
echo. 1>&2
|
||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
|
||||
echo. 1>&2
|
||||
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
|
||||
echo location of your Java installation. 1>&2
|
||||
|
||||
goto fail
|
||||
|
||||
|
|
|
@ -8,64 +8,64 @@ org.jetbrains.intellij.deps:coverage-report:1.0.21=koverJvmReporter
|
|||
org.jetbrains.intellij.deps:intellij-coverage-agent:1.0.724=koverJvmAgent,koverJvmReporter
|
||||
org.jetbrains.intellij.deps:intellij-coverage-reporter:1.0.724=koverJvmReporter
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=kotlinCompilerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20=kotlinKlibCommonizerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.23=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=kotlinCompilerPluginClasspathJvmMainCopy,kotlinCompilerPluginClasspathJvmTestCopy,kotlinCompilerPluginClasspathMetadataCommonMainCopy,kotlinCompilerPluginClasspathMetadataMainCopy
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.21=kotlinCompilerPluginClasspathJvmMainCopy2,kotlinCompilerPluginClasspathJvmTestCopy2,kotlinCompilerPluginClasspathMetadataCommonMainCopy2,kotlinCompilerPluginClasspathMetadataMainCopy2
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20=commonMainApiCopy,commonMainApiCopy2,commonMainCompileOnlyDependenciesMetadataCopy,commonMainImplementationDependenciesMetadataCopy,commonMainRuntimeOnlyDependenciesMetadataCopy,commonTestApiCopy,commonTestApiDependenciesMetadataCopy,commonTestCompileOnlyDependenciesMetadataCopy,commonTestImplementationDependenciesMetadataCopy,commonTestRuntimeOnlyDependenciesMetadataCopy,compileClasspathCopy,jvmApiCopy,jvmApiElementsCopy,jvmCompileClasspathCopy,jvmImplementationCopy,jvmMainApiDependenciesMetadataCopy,jvmMainCompileOnlyDependenciesMetadataCopy,jvmMainImplementationDependenciesMetadataCopy,jvmMainRuntimeOnlyDependenciesMetadataCopy,jvmRuntimeClasspathCopy,jvmRuntimeElementsCopy,jvmTestApiCopy,jvmTestApiDependenciesMetadataCopy,jvmTestCompileClasspathCopy,jvmTestCompileOnlyDependenciesMetadataCopy,jvmTestImplementationCopy,jvmTestImplementationCopy2,jvmTestImplementationDependenciesMetadataCopy,jvmTestRuntimeClasspathCopy,jvmTestRuntimeOnlyDependenciesMetadataCopy,metadataApiCopy,metadataApiElementsCopy,metadataCommonMainApiCopy,metadataCommonMainCompileClasspathCopy,metadataCommonMainImplementationCopy,metadataCompileClasspathCopy,metadataImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21=jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.21=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.23=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.20=commonTestImplementationCopy,commonTestImplementationDependenciesMetadataCopy,jvmTestCompileClasspathCopy,jvmTestCompileClasspathCopy2,jvmTestImplementationCopy,jvmTestImplementationDependenciesMetadataCopy,jvmTestRuntimeClasspathCopy,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.21=commonTestImplementationCopy2,jvmTestImplementationCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.17.3=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:atomicfu:0.20.2=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.21.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.23.1=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1=commonMainApiCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1=commonMainApiCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.7.3=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.8.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains:annotations:13.0=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCommonMainCompileClasspath
|
||||
org.jetbrains:annotations:16.0.2=koverJvmReporter
|
||||
org.jetbrains:annotations:23.0.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
|
|
|
@ -14,4 +14,6 @@ interface PreferenceProvider {
|
|||
suspend fun getString(key: PreferenceKey): String?
|
||||
|
||||
fun observe(key: PreferenceKey): Flow<String?>
|
||||
|
||||
suspend fun clearPreferences(): Boolean
|
||||
}
|
||||
|
|
|
@ -18,6 +18,11 @@ class MockPreferenceProvider(
|
|||
// For the mock implementation, does not support observability of changes
|
||||
override fun observe(key: PreferenceKey): Flow<String?> = flow { emit(getString(key)) }
|
||||
|
||||
override suspend fun clearPreferences(): Boolean {
|
||||
map.clear()
|
||||
return true
|
||||
}
|
||||
|
||||
override suspend fun hasKey(key: PreferenceKey) = map.containsKey(key.key)
|
||||
|
||||
override suspend fun putString(
|
||||
|
|
|
@ -59,6 +59,16 @@ class AndroidPreferenceProvider(
|
|||
sharedPreferences.getString(key.key, null)
|
||||
}
|
||||
|
||||
@SuppressLint("ApplySharedPref")
|
||||
override suspend fun clearPreferences() =
|
||||
withContext(dispatcher) {
|
||||
val editor = sharedPreferences.edit()
|
||||
|
||||
editor.clear()
|
||||
|
||||
return@withContext editor.commit()
|
||||
}
|
||||
|
||||
override fun observe(key: PreferenceKey): Flow<String?> =
|
||||
callbackFlow<Unit> {
|
||||
val listener =
|
||||
|
@ -108,7 +118,6 @@ class AndroidPreferenceProvider(
|
|||
|
||||
val mainKey =
|
||||
withContext(singleThreadedDispatcher) {
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
MasterKey.Builder(context).apply {
|
||||
setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
|
||||
}.build()
|
||||
|
@ -116,7 +125,6 @@ class AndroidPreferenceProvider(
|
|||
|
||||
val sharedPreferences =
|
||||
withContext(singleThreadedDispatcher) {
|
||||
@Suppress("BlockingMethodInNonBlockingContext")
|
||||
EncryptedSharedPreferences.create(
|
||||
context,
|
||||
filename,
|
||||
|
|
|
@ -33,7 +33,7 @@ class PercentDecimalExtTest {
|
|||
runTest {
|
||||
val parsed = PercentDecimal(1f).toPercentageWithDecimal()
|
||||
|
||||
assertEquals("100${MonetarySeparators.current(Locale.US).decimal}00", parsed)
|
||||
assertEquals("100${MonetarySeparators.current(Locale.getDefault()).decimal}00", parsed)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -7,13 +7,14 @@ import cash.z.ecc.sdk.fixture.Zip321UriBuildFixture
|
|||
import cash.z.ecc.sdk.fixture.Zip321UriParseFixture
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Ignore
|
||||
import org.junit.Test
|
||||
import kotlin.test.Ignore
|
||||
import kotlin.test.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotEquals
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
@Ignore("Disabled until the issue #397 is addressed")
|
||||
class ZecRequestTest {
|
||||
companion object {
|
||||
private const val URI: String = "zcash:tmXuTnE11JojToagTqxXUn6KvdxDE3iLKbp?amount=1&message=Hello%20world!"
|
||||
|
|
|
@ -1,36 +0,0 @@
|
|||
@file:Suppress("ktlint:standard:filename")
|
||||
|
||||
package cash.z.ecc.sdk.extension
|
||||
|
||||
import cash.z.ecc.android.sdk.model.ZcashNetwork
|
||||
import co.electriccoin.lightwallet.client.model.LightWalletEndpoint
|
||||
|
||||
/*
|
||||
* This set of extension functions suit for default values for the SDK initialization.
|
||||
*/
|
||||
|
||||
fun LightWalletEndpoint.Companion.defaultForNetwork(zcashNetwork: ZcashNetwork): LightWalletEndpoint {
|
||||
return when (zcashNetwork.id) {
|
||||
ZcashNetwork.Mainnet.id -> LightWalletEndpoint.Mainnet
|
||||
ZcashNetwork.Testnet.id -> LightWalletEndpoint.Testnet
|
||||
else -> error("Unknown network id: ${zcashNetwork.id}")
|
||||
}
|
||||
}
|
||||
|
||||
private const val DEFAULT_PORT = 9067
|
||||
|
||||
val LightWalletEndpoint.Companion.Mainnet
|
||||
get() =
|
||||
LightWalletEndpoint(
|
||||
"mainnet.lightwalletd.com",
|
||||
DEFAULT_PORT,
|
||||
isSecure = true
|
||||
)
|
||||
|
||||
val LightWalletEndpoint.Companion.Testnet
|
||||
get() =
|
||||
LightWalletEndpoint(
|
||||
"lightwalletd.testnet.electriccoin.co",
|
||||
DEFAULT_PORT,
|
||||
isSecure = true
|
||||
)
|
|
@ -0,0 +1,30 @@
|
|||
@file:Suppress("ktlint:standard:filename", "MagicNumber")
|
||||
|
||||
package cash.z.ecc.sdk.extension
|
||||
|
||||
import co.electriccoin.lightwallet.client.model.LightWalletEndpoint
|
||||
|
||||
/*
|
||||
* Used for testing purposes only
|
||||
*/
|
||||
|
||||
val LightWalletEndpoint.Companion.Mainnet
|
||||
get() =
|
||||
LightWalletEndpoint(
|
||||
"zec.rocks",
|
||||
443,
|
||||
isSecure = true
|
||||
)
|
||||
|
||||
val LightWalletEndpoint.Companion.Testnet
|
||||
get() =
|
||||
LightWalletEndpoint(
|
||||
"lightwalletd.testnet.electriccoin.co",
|
||||
9067,
|
||||
isSecure = true
|
||||
)
|
||||
|
||||
const val MIN_PORT_NUMBER = 1
|
||||
const val MAX_PORT_NUMBER = 65535
|
||||
|
||||
fun LightWalletEndpoint.isValid() = host.isNotBlank() && port in MIN_PORT_NUMBER..MAX_PORT_NUMBER
|
|
@ -16,9 +16,7 @@ fun PercentDecimal.toPercentageWithDecimal(decimalFormat: DecimalFormat = prepar
|
|||
|
||||
private fun preparePercentDecimalFormat(): DecimalFormat =
|
||||
DecimalFormat().apply {
|
||||
// TODO [#1171]: Remove default MonetarySeparators locale
|
||||
// TODO [#1171]: https://github.com/Electric-Coin-Company/zashi-android/issues/1171
|
||||
val monetarySeparators = MonetarySeparators.current(Locale.US)
|
||||
val monetarySeparators = MonetarySeparators.current(Locale.getDefault())
|
||||
val localizedPattern = "##0${monetarySeparators.decimal}00"
|
||||
runCatching {
|
||||
applyLocalizedPattern(localizedPattern)
|
||||
|
|
|
@ -1,17 +0,0 @@
|
|||
@file:Suppress("ktlint:standard:filename")
|
||||
|
||||
package cash.z.ecc.sdk.extension
|
||||
|
||||
import cash.z.ecc.android.sdk.Synchronizer
|
||||
import cash.z.ecc.android.sdk.model.UnifiedSpendingKey
|
||||
import cash.z.ecc.android.sdk.model.ZecSend
|
||||
|
||||
suspend fun Synchronizer.send(
|
||||
spendingKey: UnifiedSpendingKey,
|
||||
send: ZecSend
|
||||
) = sendToAddress(
|
||||
spendingKey,
|
||||
send.amount,
|
||||
send.destination.address,
|
||||
send.memo.value
|
||||
)
|
|
@ -2,6 +2,7 @@ package cash.z.ecc.sdk.fixture
|
|||
|
||||
import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
|
||||
import cash.z.ecc.android.sdk.model.Memo
|
||||
import cash.z.ecc.android.sdk.model.Proposal
|
||||
import cash.z.ecc.android.sdk.model.WalletAddress
|
||||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import cash.z.ecc.android.sdk.model.ZecSend
|
||||
|
@ -13,9 +14,13 @@ object ZecSendFixture {
|
|||
val AMOUNT = Zatoshi(123)
|
||||
val MEMO = MemoFixture.new()
|
||||
|
||||
// Null until we figure out how to proper test this
|
||||
val PROPOSAL = null
|
||||
|
||||
suspend fun new(
|
||||
address: String = ADDRESS,
|
||||
amount: Zatoshi = AMOUNT,
|
||||
memo: Memo = MEMO
|
||||
) = ZecSend(WalletAddress.Unified.new(address), amount, memo)
|
||||
memo: Memo = MEMO,
|
||||
proposal: Proposal? = PROPOSAL
|
||||
) = ZecSend(WalletAddress.Unified.new(address), amount, memo, proposal)
|
||||
}
|
||||
|
|
|
@ -2,21 +2,20 @@ package cash.z.ecc.sdk.model
|
|||
|
||||
import cash.z.ecc.android.sdk.model.WalletAddress
|
||||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import cash.z.ecc.sdk.fixture.Zip321UriBuildFixture
|
||||
import cash.z.ecc.sdk.fixture.Zip321UriParseFixture
|
||||
|
||||
data class ZecRequest(val address: WalletAddress.Unified, val amount: Zatoshi, val message: ZecRequestMessage) {
|
||||
// TODO [#397]: Waiting for an implementation of Uri parser in SDK project
|
||||
// TODO [#397]: https://github.com/Electric-Coin-Company/zcash-android-wallet-sdk/issues/397
|
||||
suspend fun toUri(): String {
|
||||
return Zip321UriBuildFixture.new(this)
|
||||
TODO("Not implemented yet: Issue #397")
|
||||
}
|
||||
|
||||
companion object {
|
||||
// TODO [#397]: Waiting for an implementation of Uri parser in SDK project
|
||||
// TODO [#397]: https://github.com/Electric-Coin-Company/zcash-android-wallet-sdk/issues/397
|
||||
@Suppress("UNUSED_PARAMETER")
|
||||
suspend fun fromUri(uriString: String): ZecRequest {
|
||||
return Zip321UriParseFixture.new(uriString)
|
||||
TODO("Not implemented yet: Issue #397")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -6,13 +6,12 @@ pluginManagement {
|
|||
|
||||
val googleGroups = listOf(
|
||||
"androidx.navigation",
|
||||
"com.android.tools",
|
||||
"com.android",
|
||||
"com.google.testing.platform"
|
||||
)
|
||||
val googleRegexes = listOf(
|
||||
"androidx.*",
|
||||
"com\\.android.*",
|
||||
"com\\.android\\.tools.*"
|
||||
"androidx\\..*",
|
||||
"com\\.android(\\.|\\:).*"
|
||||
)
|
||||
val wtfGroups = listOf("wtf.emulator")
|
||||
|
||||
|
@ -80,7 +79,7 @@ dependencyResolutionManagement {
|
|||
val googleGroups = listOf(
|
||||
"androidx.benchmark",
|
||||
"androidx.navigation",
|
||||
"com.android.tools",
|
||||
"com.android",
|
||||
"com.google.android.datatransport",
|
||||
"com.google.android.gms",
|
||||
"com.google.android.material",
|
||||
|
@ -90,9 +89,8 @@ dependencyResolutionManagement {
|
|||
"com.google.android.apps.common.testing.accessibility.framework"
|
||||
)
|
||||
val googleRegexes = listOf(
|
||||
"androidx.*",
|
||||
"com\\.android.*",
|
||||
"com\\.android\\.tools.*"
|
||||
"androidx\\..*",
|
||||
"com\\.android(\\.|\\:).*",
|
||||
)
|
||||
val wtfGroups = listOf("wtf.emulator")
|
||||
|
||||
|
@ -146,6 +144,7 @@ dependencyResolutionManagement {
|
|||
val androidxActivityVersion = extra["ANDROIDX_ACTIVITY_VERSION"].toString()
|
||||
val androidxAnnotationVersion = extra["ANDROIDX_ANNOTATION_VERSION"].toString()
|
||||
val androidxAppcompatVersion = extra["ANDROIDX_APPCOMPAT_VERSION"].toString()
|
||||
val androidxBiometricVersion = extra["ANDROIDX_BIOMETRIC_VERSION"].toString()
|
||||
val androidxCameraVersion = extra["ANDROIDX_CAMERA_VERSION"].toString()
|
||||
val androidxComposeCompilerVersion = extra["ANDROIDX_COMPOSE_COMPILER_VERSION"].toString()
|
||||
val androidxComposeMaterial3Version = extra["ANDROIDX_COMPOSE_MATERIAL3_VERSION"].toString()
|
||||
|
@ -194,6 +193,8 @@ dependencyResolutionManagement {
|
|||
library("androidx-activity-compose", "androidx.activity:activity-compose:$androidxActivityVersion")
|
||||
library("androidx-annotation", "androidx.annotation:annotation:$androidxAnnotationVersion")
|
||||
library("androidx-appcompat", "androidx.appcompat:appcompat:$androidxAppcompatVersion")
|
||||
library("androidx-biometric", "androidx.biometric:biometric:$androidxBiometricVersion")
|
||||
library("androidx-biometric-ktx", "androidx.biometric:biometric-ktx:$androidxBiometricVersion")
|
||||
library("androidx-camera", "androidx.camera:camera-camera2:$androidxCameraVersion")
|
||||
library("androidx-camera-lifecycle", "androidx.camera:camera-lifecycle:$androidxCameraVersion")
|
||||
library("androidx-camera-view", "androidx.camera:camera-view:$androidxCameraVersion")
|
||||
|
@ -250,9 +251,16 @@ dependencyResolutionManagement {
|
|||
library("androidx-test-orchestrator", "androidx.test:orchestrator:$androidxTestOrchestratorVersion")
|
||||
library("androidx-test-runner", "androidx.test:runner:$androidxTestRunnerVersion")
|
||||
library("androidx-test-services","androidx.test.services:test-services:$androidxTestServices")
|
||||
library("androidx-uiAutomator", "androidx.test.uiautomator:uiautomator-v18:$androidxUiAutomatorVersion")
|
||||
library("androidx-uiAutomator", "androidx.test.uiautomator:uiautomator:$androidxUiAutomatorVersion")
|
||||
library("kotlinx-coroutines-test", "org.jetbrains.kotlinx:kotlinx-coroutines-test:$kotlinxCoroutinesVersion")
|
||||
// Bundles
|
||||
bundle(
|
||||
"androidx-biometric",
|
||||
listOf(
|
||||
"androidx-biometric",
|
||||
"androidx-biometric-ktx",
|
||||
)
|
||||
)
|
||||
bundle(
|
||||
"androidx-camera",
|
||||
listOf(
|
||||
|
|
|
@ -11,12 +11,28 @@ object AndroidApiVersion {
|
|||
* [sdk].
|
||||
*/
|
||||
@ChecksSdkIntAtLeast(parameter = 0)
|
||||
fun isAtLeast(
|
||||
private fun isAtLeast(
|
||||
@IntRange(from = Build.VERSION_CODES.BASE.toLong()) sdk: Int
|
||||
): Boolean {
|
||||
return Build.VERSION.SDK_INT >= sdk
|
||||
}
|
||||
|
||||
/**
|
||||
* @param sdk SDK version number to test against the current environment.
|
||||
* @return `true` if [android.os.Build.VERSION.SDK_INT] is equal to [sdk].
|
||||
*/
|
||||
private fun isExactly(
|
||||
@IntRange(from = Build.VERSION_CODES.BASE.toLong()) sdk: Int
|
||||
): Boolean {
|
||||
return Build.VERSION.SDK_INT == sdk
|
||||
}
|
||||
|
||||
val isExactlyO = isExactly(Build.VERSION_CODES.O_MR1)
|
||||
|
||||
val isExactlyP = isExactly(Build.VERSION_CODES.P)
|
||||
|
||||
val isExactlyQ = isExactly(Build.VERSION_CODES.Q)
|
||||
|
||||
@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.P)
|
||||
val isAtLeastP = isAtLeast(Build.VERSION_CODES.P)
|
||||
|
||||
|
|
|
@ -8,69 +8,69 @@ org.jetbrains.intellij.deps:coverage-report:1.0.21=koverJvmReporter
|
|||
org.jetbrains.intellij.deps:intellij-coverage-agent:1.0.724=koverJvmAgent,koverJvmReporter
|
||||
org.jetbrains.intellij.deps:intellij-coverage-reporter:1.0.724=koverJvmReporter
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-api:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-build-tools-impl:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.6.20=kotlinCompilerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.21=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.9.23=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.6.20=kotlinKlibCommonizerClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.21=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.9.23=kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.6.10=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.21=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.9.23=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.20=kotlinCompilerPluginClasspathJvmMainCopy,kotlinCompilerPluginClasspathJvmTestCopy,kotlinCompilerPluginClasspathMetadataCommonMainCopy,kotlinCompilerPluginClasspathMetadataMainCopy
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.6.21=kotlinCompilerPluginClasspathJvmMainCopy2,kotlinCompilerPluginClasspathJvmTestCopy2,kotlinCompilerPluginClasspathMetadataCommonMainCopy2,kotlinCompilerPluginClasspathMetadataMainCopy2
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.21=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.9.23=kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.10=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain,metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.6.0=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.0=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.20=commonMainApiCopy,commonMainApiCopy2,commonTestApiCopy,jvmMainApiCopy,jvmTestApiCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCommonMainCompileClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.20=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.8.21=kotlinCompilerPluginClasspathMetadataCommonMain
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.21=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.9.23=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-annotations-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestResolvableDependenciesMetadata
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.6.20=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.21=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test-junit:1.9.23=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.20=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlin:kotlin-test:1.6.21=commonTestImplementationCopy2,jvmTestImplementationCopy2
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.21=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlin:kotlin-test:1.9.23=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.17.3=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:atomicfu:0.20.2=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.21.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:atomicfu:0.23.1=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.6.1=commonTestImplementationCopy,jvmTestImplementationCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.5.0=kotlinBuildToolsApiClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.1=commonMainApiCopy,commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.1=commonMainApiCopy,commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.2=commonMainApiCopy2,jvmTestCompileClasspathCopy2,jvmTestRuntimeClasspathCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4=allSourceSetsRuntimeDependenciesMetadata
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1=metadataCommonMainCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0=allSourceSetsCompileDependenciesMetadata,commonMainApiDependenciesMetadata,commonMainCompileOnlyDependenciesMetadata,commonMainImplementationDependenciesMetadata,commonMainResolvableDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmCompileClasspath,jvmMainApiDependenciesMetadata,jvmMainCompileOnlyDependenciesMetadata,jvmMainImplementationDependenciesMetadata,jvmMainResolvableDependenciesMetadata,jvmRuntimeClasspath,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath,metadataCompileClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.7.3=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm:1.8.0=jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.1=commonTestImplementationCopy,jvmTestCompileClasspathCopy,jvmTestImplementationCopy,jvmTestRuntimeClasspathCopy
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.2=commonTestImplementationCopy2
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.0=allSourceSetsCompileDependenciesMetadata,commonTestApiDependenciesMetadata,commonTestCompileOnlyDependenciesMetadata,commonTestImplementationDependenciesMetadata,commonTestResolvableDependenciesMetadata,jvmTestApiDependenciesMetadata,jvmTestCompileClasspath,jvmTestCompileOnlyDependenciesMetadata,jvmTestImplementationDependenciesMetadata,jvmTestResolvableDependenciesMetadata,jvmTestRuntimeClasspath
|
||||
org.jetbrains:annotations:13.0=commonTestImplementationCopy,jvmTestImplementationCopy,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathJvmMain,kotlinCompilerPluginClasspathJvmTest,kotlinCompilerPluginClasspathMetadataCommonMain,kotlinCompilerPluginClasspathMetadataMain,kotlinKlibCommonizerClasspath,metadataCommonMainCompileClasspath
|
||||
org.jetbrains:annotations:16.0.2=koverJvmReporter
|
||||
org.jetbrains:annotations:23.0.0=jvmCompileClasspath,jvmRuntimeClasspath,jvmTestCompileClasspath,jvmTestRuntimeClasspath
|
||||
|
|
|
@ -50,6 +50,7 @@ dependencies {
|
|||
implementation(libs.androidx.core)
|
||||
implementation(libs.androidx.splash)
|
||||
implementation(libs.bundles.androidx.compose.core)
|
||||
implementation(libs.bundles.androidx.compose.extended)
|
||||
implementation(libs.kotlin.stdlib)
|
||||
implementation(libs.kotlinx.coroutines.android)
|
||||
implementation(libs.kotlinx.coroutines.core)
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
package co.electriccoin.zcash.ui.design.animation
|
||||
|
||||
import androidx.compose.animation.AnimatedContentTransitionScope
|
||||
import androidx.compose.animation.core.TweenSpec
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.ui.unit.IntOffset
|
||||
import androidx.navigation.NavBackStackEntry
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
import kotlin.time.DurationUnit
|
||||
|
||||
object ScreenAnimation {
|
||||
private const val DURATION = 400
|
||||
|
||||
fun AnimatedContentTransitionScope<NavBackStackEntry>.enterTransition() =
|
||||
slideIntoContainer(
|
||||
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
||||
initialOffset = { it },
|
||||
animationSpec = tween(duration = DURATION.milliseconds)
|
||||
)
|
||||
|
||||
fun AnimatedContentTransitionScope<NavBackStackEntry>.exitTransition() =
|
||||
slideOutOfContainer(
|
||||
towards = AnimatedContentTransitionScope.SlideDirection.Start,
|
||||
targetOffset = { it },
|
||||
animationSpec = tween(duration = DURATION.milliseconds)
|
||||
)
|
||||
|
||||
fun AnimatedContentTransitionScope<NavBackStackEntry>.popEnterTransition() =
|
||||
slideIntoContainer(
|
||||
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
||||
initialOffset = { it },
|
||||
animationSpec = tween(duration = DURATION.milliseconds)
|
||||
)
|
||||
|
||||
fun AnimatedContentTransitionScope<NavBackStackEntry>.popExitTransition() =
|
||||
slideOutOfContainer(
|
||||
towards = AnimatedContentTransitionScope.SlideDirection.End,
|
||||
targetOffset = { it },
|
||||
animationSpec = tween(duration = DURATION.milliseconds)
|
||||
)
|
||||
}
|
||||
|
||||
private fun tween(duration: Duration): TweenSpec<IntOffset> =
|
||||
tween(
|
||||
durationMillis = duration.toInt(DurationUnit.MILLISECONDS)
|
||||
)
|
|
@ -7,12 +7,17 @@ import androidx.compose.foundation.gestures.awaitFirstDown
|
|||
import androidx.compose.foundation.gestures.waitForUpOrCancellation
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.material3.Button
|
||||
import androidx.compose.material3.ButtonDefaults
|
||||
import androidx.compose.material3.ButtonDefaults.buttonColors
|
||||
import androidx.compose.material3.CircularProgressIndicator
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -36,6 +41,7 @@ import androidx.compose.ui.text.style.TextAlign
|
|||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.constraintlayout.compose.ConstraintLayout
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
||||
@Preview
|
||||
|
@ -45,53 +51,67 @@ private fun ButtonComposablePreview() {
|
|||
GradientSurface {
|
||||
Column(Modifier.padding(ZcashTheme.dimens.spacingDefault)) {
|
||||
PrimaryButton(onClick = { }, text = "Primary")
|
||||
PrimaryButton(onClick = { }, text = "Primary...", showProgressBar = true)
|
||||
PrimaryButton(onClick = { }, text = "Primary Small", minHeight = ZcashTheme.dimens.buttonHeightSmall)
|
||||
SecondaryButton(onClick = { }, text = "Secondary")
|
||||
TertiaryButton(onClick = { }, text = "Tertiary")
|
||||
TertiaryButton(onClick = { }, text = "Tertiary", enabled = false)
|
||||
NavigationButton(onClick = { }, text = "Navigation")
|
||||
DangerousButton(onClick = { }, text = "Dangerous")
|
||||
@Suppress("MagicNumber")
|
||||
Row {
|
||||
PrimaryButton(onClick = { }, text = "Button 1", modifier = Modifier.weight(0.5f))
|
||||
Spacer(modifier = Modifier.width(24.dp))
|
||||
PrimaryButton(onClick = { }, text = "Button 2", modifier = Modifier.weight(0.5f))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Suppress("LongParameterList")
|
||||
@Suppress("LongParameterList", "LongMethod")
|
||||
fun PrimaryButton(
|
||||
onClick: () -> Unit,
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
buttonColor: Color = MaterialTheme.colorScheme.primary,
|
||||
minWidth: Dp = ZcashTheme.dimens.buttonWidth,
|
||||
minHeight: Dp = ZcashTheme.dimens.buttonHeight,
|
||||
enabled: Boolean = true,
|
||||
showProgressBar: Boolean = false,
|
||||
buttonColor: Color = MaterialTheme.colorScheme.primary,
|
||||
textColor: Color = MaterialTheme.colorScheme.onPrimary,
|
||||
textStyle: TextStyle = ZcashTheme.extendedTypography.buttonText,
|
||||
outerPaddingValues: PaddingValues =
|
||||
PaddingValues(
|
||||
horizontal = ZcashTheme.dimens.spacingNone,
|
||||
vertical = ZcashTheme.dimens.spacingSmall
|
||||
)
|
||||
),
|
||||
contentPaddingValues: PaddingValues = PaddingValues(all = 16.5.dp)
|
||||
) {
|
||||
Button(
|
||||
shape = RectangleShape,
|
||||
enabled = enabled,
|
||||
contentPadding = contentPaddingValues,
|
||||
modifier =
|
||||
modifier.then(Modifier.fillMaxWidth())
|
||||
.padding(outerPaddingValues)
|
||||
.shadow(
|
||||
contentColor = textColor,
|
||||
strokeColor = buttonColor,
|
||||
strokeWidth = 1.dp,
|
||||
offsetX = ZcashTheme.dimens.buttonShadowOffsetX,
|
||||
offsetY = ZcashTheme.dimens.buttonShadowOffsetY,
|
||||
spread = ZcashTheme.dimens.buttonShadowSpread,
|
||||
)
|
||||
.translationClick(
|
||||
// + 6dp to exactly cover the bottom shadow
|
||||
translationX = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp,
|
||||
translationY = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp
|
||||
)
|
||||
.defaultMinSize(ZcashTheme.dimens.buttonWidth, ZcashTheme.dimens.buttonHeight)
|
||||
.border(1.dp, Color.Black),
|
||||
modifier.then(
|
||||
Modifier
|
||||
.padding(outerPaddingValues)
|
||||
.shadow(
|
||||
contentColor = textColor,
|
||||
strokeColor = buttonColor,
|
||||
strokeWidth = 1.dp,
|
||||
offsetX = ZcashTheme.dimens.buttonShadowOffsetX,
|
||||
offsetY = ZcashTheme.dimens.buttonShadowOffsetY,
|
||||
spread = ZcashTheme.dimens.buttonShadowSpread,
|
||||
)
|
||||
.translationClick(
|
||||
// + 6dp to exactly cover the bottom shadow
|
||||
translationX = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp,
|
||||
translationY = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp
|
||||
)
|
||||
.defaultMinSize(minWidth, minHeight)
|
||||
.border(1.dp, Color.Black)
|
||||
),
|
||||
colors =
|
||||
buttonColors(
|
||||
containerColor = buttonColor,
|
||||
|
@ -100,12 +120,50 @@ fun PrimaryButton(
|
|||
),
|
||||
onClick = onClick,
|
||||
) {
|
||||
Text(
|
||||
style = textStyle,
|
||||
textAlign = TextAlign.Center,
|
||||
text = text.uppercase(),
|
||||
color = textColor
|
||||
)
|
||||
ConstraintLayout {
|
||||
val (title, spacer, progress) = createRefs()
|
||||
|
||||
Text(
|
||||
style = textStyle,
|
||||
textAlign = TextAlign.Center,
|
||||
text = text.uppercase(),
|
||||
color = textColor,
|
||||
modifier =
|
||||
Modifier.constrainAs(title) {
|
||||
top.linkTo(parent.top)
|
||||
bottom.linkTo(parent.bottom)
|
||||
start.linkTo(parent.start)
|
||||
end.linkTo(parent.end)
|
||||
}
|
||||
)
|
||||
|
||||
if (showProgressBar) {
|
||||
Spacer(
|
||||
modifier =
|
||||
Modifier
|
||||
.width(12.dp)
|
||||
.constrainAs(spacer) {
|
||||
top.linkTo(parent.top)
|
||||
bottom.linkTo(parent.bottom)
|
||||
start.linkTo(title.end)
|
||||
end.linkTo(progress.start)
|
||||
}
|
||||
)
|
||||
|
||||
CircularProgressIndicator(
|
||||
color = Color.White,
|
||||
strokeWidth = 2.dp,
|
||||
modifier =
|
||||
Modifier
|
||||
.size(18.dp)
|
||||
.constrainAs(progress) {
|
||||
top.linkTo(parent.top)
|
||||
bottom.linkTo(parent.bottom)
|
||||
start.linkTo(spacer.end)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -115,35 +173,43 @@ fun SecondaryButton(
|
|||
onClick: () -> Unit,
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
minWidth: Dp = ZcashTheme.dimens.buttonWidth,
|
||||
minHeight: Dp = ZcashTheme.dimens.buttonHeight,
|
||||
enabled: Boolean = true,
|
||||
buttonColor: Color = MaterialTheme.colorScheme.secondary,
|
||||
textColor: Color = MaterialTheme.colorScheme.onSecondary,
|
||||
outerPaddingValues: PaddingValues =
|
||||
PaddingValues(
|
||||
horizontal = ZcashTheme.dimens.spacingNone,
|
||||
vertical = ZcashTheme.dimens.spacingSmall
|
||||
),
|
||||
enabled: Boolean = true,
|
||||
buttonColor: Color = MaterialTheme.colorScheme.secondary,
|
||||
textColor: Color = MaterialTheme.colorScheme.onSecondary,
|
||||
contentPaddingValues: PaddingValues = PaddingValues(all = 16.5.dp)
|
||||
) {
|
||||
Button(
|
||||
shape = RectangleShape,
|
||||
enabled = enabled,
|
||||
contentPadding = contentPaddingValues,
|
||||
modifier =
|
||||
modifier.then(Modifier.fillMaxWidth())
|
||||
.padding(outerPaddingValues)
|
||||
.shadow(
|
||||
contentColor = textColor,
|
||||
strokeColor = textColor,
|
||||
offsetX = ZcashTheme.dimens.buttonShadowOffsetX,
|
||||
offsetY = ZcashTheme.dimens.buttonShadowOffsetY,
|
||||
spread = ZcashTheme.dimens.buttonShadowSpread,
|
||||
)
|
||||
.translationClick(
|
||||
// + 6dp to exactly cover the bottom shadow
|
||||
translationX = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp,
|
||||
translationY = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp
|
||||
)
|
||||
.defaultMinSize(ZcashTheme.dimens.buttonWidth, ZcashTheme.dimens.buttonHeight)
|
||||
.border(1.dp, Color.Black),
|
||||
modifier.then(
|
||||
Modifier
|
||||
.padding(outerPaddingValues)
|
||||
.shadow(
|
||||
contentColor = textColor,
|
||||
strokeColor = buttonColor,
|
||||
strokeWidth = 1.dp,
|
||||
offsetX = ZcashTheme.dimens.buttonShadowOffsetX,
|
||||
offsetY = ZcashTheme.dimens.buttonShadowOffsetY,
|
||||
spread = ZcashTheme.dimens.buttonShadowSpread,
|
||||
)
|
||||
.translationClick(
|
||||
// + 6dp to exactly cover the bottom shadow
|
||||
translationX = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp,
|
||||
translationY = ZcashTheme.dimens.buttonShadowOffsetX + 6.dp
|
||||
)
|
||||
.defaultMinSize(minWidth, minHeight)
|
||||
.fillMaxWidth()
|
||||
.border(1.dp, Color.Black)
|
||||
),
|
||||
colors =
|
||||
buttonColors(
|
||||
containerColor = buttonColor,
|
||||
|
@ -226,38 +292,6 @@ fun TertiaryButton(
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun DangerousButton(
|
||||
onClick: () -> Unit,
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
outerPaddingValues: PaddingValues =
|
||||
PaddingValues(
|
||||
horizontal = ZcashTheme.dimens.spacingNone,
|
||||
vertical = ZcashTheme.dimens.spacingSmall
|
||||
),
|
||||
) {
|
||||
Button(
|
||||
shape = RectangleShape,
|
||||
onClick = onClick,
|
||||
modifier =
|
||||
modifier.then(
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(outerPaddingValues)
|
||||
.defaultMinSize(ZcashTheme.dimens.buttonWidth, ZcashTheme.dimens.buttonHeight)
|
||||
),
|
||||
colors = buttonColors(containerColor = ZcashTheme.colors.dangerous)
|
||||
) {
|
||||
Text(
|
||||
style = MaterialTheme.typography.labelLarge,
|
||||
textAlign = TextAlign.Center,
|
||||
text = text,
|
||||
color = ZcashTheme.colors.onDangerous
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
fun Modifier.shadow(
|
||||
contentColor: Color = Color.Black,
|
||||
|
@ -311,6 +345,9 @@ fun Modifier.shadow(
|
|||
|
||||
private enum class ButtonState { Pressed, Idle }
|
||||
|
||||
// TODO [#1346]: Rework not-recommended composed{}
|
||||
// TODO [#1346]: https://github.com/Electric-Coin-Company/zashi-android/issues/1346
|
||||
@Suppress("ModifierComposed")
|
||||
fun Modifier.translationClick(
|
||||
translationX: Dp = 0.dp,
|
||||
translationY: Dp = 0.dp
|
||||
|
|
|
@ -38,8 +38,9 @@ private fun ComposablePreview() {
|
|||
@Composable
|
||||
fun ChipGrid(
|
||||
wordList: ImmutableList<String>,
|
||||
onGridClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
onGridClick: () -> Unit
|
||||
allowCopy: Boolean = false,
|
||||
) {
|
||||
val interactionSource = remember { MutableInteractionSource() }
|
||||
|
||||
|
@ -51,13 +52,20 @@ fun ChipGrid(
|
|||
modifier =
|
||||
Modifier
|
||||
.wrapContentWidth()
|
||||
.clickable(
|
||||
interactionSource = interactionSource,
|
||||
// Disable ripple
|
||||
indication = null,
|
||||
onClick = onGridClick
|
||||
)
|
||||
.testTag(CommonTag.CHIP_LAYOUT)
|
||||
.then(
|
||||
if (allowCopy) {
|
||||
Modifier
|
||||
.clickable(
|
||||
interactionSource = interactionSource,
|
||||
// Disable ripple
|
||||
indication = null,
|
||||
onClick = onGridClick
|
||||
)
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
)
|
||||
) {
|
||||
wordList.chunked(CHIP_GRID_COLUMN_SIZE).forEachIndexed { chunkIndex, chunk ->
|
||||
// TODO [#1043]: Correctly align numbers and words on Recovery screen
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
package co.electriccoin.zcash.ui.design.component
|
||||
|
||||
import androidx.compose.foundation.layout.PaddingValues
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.RectangleShape
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.window.DialogProperties
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun LightAlertDialogComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = false) {
|
||||
AppAlertDialog(
|
||||
title = "Light popup",
|
||||
text =
|
||||
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Temporibus autem quibusdam et aut " +
|
||||
"officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et " +
|
||||
"molestiae non recusandae. Duis condimentum augue id magna semper rutrum.",
|
||||
confirmButtonText = "OK",
|
||||
dismissButtonText = "Cancel"
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun DarkAlertDialogComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = true) {
|
||||
AppAlertDialog(
|
||||
title = "Dark no button popup",
|
||||
text =
|
||||
"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Temporibus autem quibusdam et aut " +
|
||||
"officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et " +
|
||||
"molestiae non recusandae. Duis condimentum augue id magna semper rutrum.",
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO [#1276]: Consider adding support for a specific exception in AppAlertDialog
|
||||
// TODO [#1276]: https://github.com/Electric-Coin-Company/zashi-android/issues/1276
|
||||
|
||||
@Composable
|
||||
@Suppress("LongParameterList")
|
||||
fun AppAlertDialog(
|
||||
modifier: Modifier = Modifier,
|
||||
onDismissRequest: (() -> Unit)? = null,
|
||||
confirmButtonText: String? = null,
|
||||
onConfirmButtonClick: (() -> Unit)? = null,
|
||||
dismissButtonText: String? = null,
|
||||
onDismissButtonClick: (() -> Unit)? = null,
|
||||
icon: ImageVector? = null,
|
||||
title: String? = null,
|
||||
text: @Composable (() -> Unit)? = null,
|
||||
properties: DialogProperties = DialogProperties()
|
||||
) {
|
||||
AlertDialog(
|
||||
shape = RectangleShape,
|
||||
onDismissRequest = onDismissRequest?.let { onDismissRequest } ?: {},
|
||||
confirmButton = {
|
||||
confirmButtonText?.let {
|
||||
NavigationButton(
|
||||
text = confirmButtonText,
|
||||
onClick = onConfirmButtonClick ?: {},
|
||||
outerPaddingValues = PaddingValues(all = 0.dp)
|
||||
)
|
||||
}
|
||||
},
|
||||
dismissButton = {
|
||||
dismissButtonText?.let {
|
||||
NavigationButton(
|
||||
text = dismissButtonText,
|
||||
onClick = onDismissButtonClick ?: {},
|
||||
outerPaddingValues = PaddingValues(all = 0.dp)
|
||||
)
|
||||
}
|
||||
},
|
||||
title = title?.let { { Text(text = title) } },
|
||||
text = text,
|
||||
icon = icon?.let { { Icon(imageVector = icon, null) } },
|
||||
properties = properties,
|
||||
modifier = modifier,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
@Suppress("LongParameterList")
|
||||
fun AppAlertDialog(
|
||||
modifier: Modifier = Modifier,
|
||||
onDismissRequest: (() -> Unit)? = null,
|
||||
confirmButtonText: String? = null,
|
||||
onConfirmButtonClick: (() -> Unit)? = null,
|
||||
dismissButtonText: String? = null,
|
||||
onDismissButtonClick: (() -> Unit)? = null,
|
||||
icon: ImageVector? = null,
|
||||
title: String? = null,
|
||||
text: String? = null,
|
||||
properties: DialogProperties = DialogProperties()
|
||||
) {
|
||||
AppAlertDialog(
|
||||
onDismissRequest = onDismissRequest?.let { onDismissRequest } ?: {},
|
||||
modifier = modifier,
|
||||
confirmButtonText = confirmButtonText,
|
||||
title = title,
|
||||
text = { text?.let { Text(text = text) } },
|
||||
icon = icon,
|
||||
properties = properties,
|
||||
onConfirmButtonClick = onConfirmButtonClick,
|
||||
dismissButtonText = dismissButtonText,
|
||||
onDismissButtonClick = onDismissButtonClick
|
||||
)
|
||||
}
|
|
@ -11,6 +11,7 @@ import androidx.compose.material3.LinearProgressIndicator
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.StrokeCap
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
|
@ -23,7 +24,7 @@ private fun CircularScreenProgressIndicatorComposablePreview() {
|
|||
GradientSurface {
|
||||
Column {
|
||||
CircularScreenProgressIndicator()
|
||||
CircularSmallProgressIndicator()
|
||||
CircularMidProgressIndicator()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,9 +49,24 @@ fun CircularScreenProgressIndicator(modifier: Modifier = Modifier) {
|
|||
}
|
||||
|
||||
@Composable
|
||||
fun CircularSmallProgressIndicator(modifier: Modifier = Modifier) {
|
||||
fun CircularMidProgressIndicator(modifier: Modifier = Modifier) {
|
||||
CircularProgressIndicator(
|
||||
color = ZcashTheme.colors.circularProgressBarSmall,
|
||||
color = ZcashTheme.colors.circularProgressBarScreen,
|
||||
strokeWidth = 3.dp,
|
||||
modifier =
|
||||
Modifier
|
||||
.size(ZcashTheme.dimens.circularMidProgressWidth)
|
||||
.then(modifier)
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun CircularSmallProgressIndicator(
|
||||
modifier: Modifier = Modifier,
|
||||
color: Color = ZcashTheme.colors.circularProgressBarSmall,
|
||||
) {
|
||||
CircularProgressIndicator(
|
||||
color = color,
|
||||
strokeWidth = 2.dp,
|
||||
modifier =
|
||||
Modifier
|
||||
|
@ -65,18 +81,18 @@ private fun LinearProgressIndicatorComposablePreview() {
|
|||
ZcashTheme(forceDarkMode = false) {
|
||||
GradientSurface {
|
||||
@Suppress("MagicNumber")
|
||||
LinearProgressIndicator(0.75f)
|
||||
SmallLinearProgressIndicator(0.75f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun LinearProgressIndicator(
|
||||
fun SmallLinearProgressIndicator(
|
||||
progress: Float,
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
LinearProgressIndicator(
|
||||
progress = progress,
|
||||
progress = { progress },
|
||||
color = ZcashTheme.colors.linearProgressBarBackground,
|
||||
trackColor = ZcashTheme.colors.linearProgressBarTrack,
|
||||
strokeCap = StrokeCap.Butt,
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
package co.electriccoin.zcash.ui.design.component
|
||||
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material3.RadioButton
|
||||
import androidx.compose.material3.RadioButtonDefaults
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun ComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = false) {
|
||||
RadioButton(
|
||||
text = "test",
|
||||
selected = true,
|
||||
onClick = {},
|
||||
modifier = Modifier
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun RadioButton(
|
||||
text: String,
|
||||
selected: Boolean,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
testTag: String? = null,
|
||||
) {
|
||||
Row(
|
||||
modifier =
|
||||
Modifier
|
||||
.wrapContentSize()
|
||||
.clip(RoundedCornerShape(ZcashTheme.dimens.regularRippleEffectCorner))
|
||||
.clickable { onClick() }
|
||||
.then(
|
||||
if (testTag != null) {
|
||||
Modifier.testTag(testTag)
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
)
|
||||
.then(modifier),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
RadioButton(
|
||||
selected = selected,
|
||||
onClick = onClick,
|
||||
colors =
|
||||
RadioButtonDefaults.colors(
|
||||
selectedColor = ZcashTheme.colors.radioButtonColor,
|
||||
unselectedColor = ZcashTheme.colors.radioButtonColor,
|
||||
)
|
||||
)
|
||||
Text(
|
||||
text = text,
|
||||
style = ZcashTheme.extendedTypography.radioButton,
|
||||
color = ZcashTheme.colors.radioButtonTextColor,
|
||||
modifier =
|
||||
Modifier.padding(
|
||||
top = 16.dp,
|
||||
bottom = 16.dp,
|
||||
start = 0.dp,
|
||||
end = ZcashTheme.dimens.spacingDefault
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
|
@ -3,6 +3,7 @@
|
|||
package co.electriccoin.zcash.ui.design.component
|
||||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.basicMarquee
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Column
|
||||
|
@ -14,6 +15,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.outlined.AccountBox
|
||||
import androidx.compose.material3.Icon
|
||||
import androidx.compose.material3.LocalTextStyle
|
||||
import androidx.compose.material3.MaterialTheme
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
|
@ -30,6 +32,7 @@ import androidx.compose.ui.text.style.TextDecoration
|
|||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.text.withStyle
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import cash.z.ecc.android.sdk.model.MonetarySeparators
|
||||
import co.electriccoin.zcash.spackle.Twig
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
@ -189,6 +192,7 @@ fun TitleLarge(
|
|||
fun Small(
|
||||
text: String,
|
||||
modifier: Modifier = Modifier,
|
||||
textFontWeight: FontWeight = FontWeight.Normal,
|
||||
maxLines: Int = Int.MAX_VALUE,
|
||||
overflow: TextOverflow = TextOverflow.Clip,
|
||||
textAlign: TextAlign = TextAlign.Start,
|
||||
|
@ -197,6 +201,7 @@ fun Small(
|
|||
Text(
|
||||
text = text,
|
||||
color = color,
|
||||
fontWeight = textFontWeight,
|
||||
maxLines = maxLines,
|
||||
overflow = overflow,
|
||||
textAlign = textAlign,
|
||||
|
@ -222,21 +227,46 @@ fun Tiny(
|
|||
overflow = overflow,
|
||||
textAlign = textAlign,
|
||||
modifier = modifier,
|
||||
style = MaterialTheme.typography.labelSmall,
|
||||
style = MaterialTheme.typography.bodySmall,
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun ListHeader(
|
||||
@Suppress("LongParameterList")
|
||||
fun TextWithIcon(
|
||||
text: String,
|
||||
modifier: Modifier = Modifier
|
||||
iconVector: ImageVector,
|
||||
modifier: Modifier = Modifier,
|
||||
iconContentDescription: String? = null,
|
||||
maxLines: Int = Int.MAX_VALUE,
|
||||
overflow: TextOverflow = TextOverflow.Clip,
|
||||
textAlign: TextAlign = TextAlign.Start,
|
||||
style: TextStyle = LocalTextStyle.current,
|
||||
color: Color = MaterialTheme.colorScheme.onBackground,
|
||||
) {
|
||||
Text(
|
||||
text = text,
|
||||
style = ZcashTheme.extendedTypography.listItem,
|
||||
color = ZcashTheme.colors.onBackgroundHeader,
|
||||
modifier = modifier
|
||||
)
|
||||
Row(
|
||||
modifier =
|
||||
Modifier
|
||||
.wrapContentSize()
|
||||
.then(modifier),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Image(
|
||||
imageVector = iconVector,
|
||||
contentDescription = iconContentDescription
|
||||
)
|
||||
|
||||
Spacer(modifier = Modifier.padding(3.dp))
|
||||
|
||||
Text(
|
||||
text = text,
|
||||
color = color,
|
||||
maxLines = maxLines,
|
||||
overflow = overflow,
|
||||
textAlign = textAlign,
|
||||
style = style,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Suppress("LongParameterList")
|
||||
|
@ -248,6 +278,7 @@ fun Reference(
|
|||
fontWeight: FontWeight = FontWeight.SemiBold,
|
||||
textAlign: TextAlign = TextAlign.Center,
|
||||
textStyle: TextStyle = ZcashTheme.typography.primary.bodyLarge,
|
||||
color: Color = ZcashTheme.colors.reference,
|
||||
imageVector: ImageVector? = null,
|
||||
imageContentDescription: String? = null
|
||||
) {
|
||||
|
@ -273,7 +304,7 @@ fun Reference(
|
|||
style =
|
||||
textStyle.merge(
|
||||
TextStyle(
|
||||
color = ZcashTheme.colors.reference,
|
||||
color = color,
|
||||
textAlign = textAlign,
|
||||
textDecoration = TextDecoration.Underline,
|
||||
fontWeight = fontWeight
|
||||
|
@ -298,9 +329,10 @@ fun StyledBalance(
|
|||
balanceString: String,
|
||||
textStyles: Pair<TextStyle, TextStyle>,
|
||||
modifier: Modifier = Modifier,
|
||||
textColor: Color? = null
|
||||
textColor: Color? = null,
|
||||
prefix: String? = null
|
||||
) {
|
||||
val balanceSplit = splitBalance(balanceString)
|
||||
val balanceSplit = splitBalance(balanceString, prefix)
|
||||
|
||||
val content =
|
||||
buildAnnotatedString {
|
||||
|
@ -338,16 +370,20 @@ fun StyledBalance(
|
|||
}
|
||||
}
|
||||
|
||||
private fun splitBalance(balance: String): Pair<String, String> {
|
||||
Twig.debug { "Balance before split: $balance" }
|
||||
private fun splitBalance(
|
||||
balance: String,
|
||||
prefix: String?
|
||||
): Pair<String, String> {
|
||||
Twig.debug { "Balance before split: $balance, prefix: $prefix" }
|
||||
|
||||
@Suppress("MAGIC_CONSTANT", "MagicNumber")
|
||||
val cutPosition = balance.indexOf(MonetarySeparators.current(Locale.US).decimal) + 4
|
||||
@Suppress("MagicNumber")
|
||||
val cutPosition = balance.indexOf(MonetarySeparators.current(Locale.getDefault()).decimal) + 4
|
||||
val firstPart =
|
||||
balance.substring(
|
||||
startIndex = 0,
|
||||
endIndex = cutPosition
|
||||
)
|
||||
(prefix ?: "") +
|
||||
balance.substring(
|
||||
startIndex = 0,
|
||||
endIndex = cutPosition
|
||||
)
|
||||
val secondPart =
|
||||
balance.substring(
|
||||
startIndex = cutPosition
|
||||
|
|
|
@ -2,8 +2,10 @@ package co.electriccoin.zcash.ui.design.component
|
|||
|
||||
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||
import androidx.compose.foundation.border
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.defaultMinSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.relocation.BringIntoViewRequester
|
||||
import androidx.compose.foundation.text.KeyboardActions
|
||||
|
@ -17,6 +19,7 @@ import androidx.compose.ui.Modifier
|
|||
import androidx.compose.ui.focus.onFocusEvent
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.Shape
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
|
@ -61,57 +64,66 @@ fun FormTextField(
|
|||
withBorder: Boolean = true,
|
||||
bringIntoViewRequester: BringIntoViewRequester? = null,
|
||||
minHeight: Dp = ZcashTheme.dimens.textFieldDefaultHeight,
|
||||
testTag: String? = null
|
||||
) {
|
||||
val coroutineScope = rememberCoroutineScope()
|
||||
|
||||
val composedTextFieldModifier =
|
||||
modifier
|
||||
.defaultMinSize(minHeight = minHeight)
|
||||
.onFocusEvent { focusState ->
|
||||
bringIntoViewRequester?.run {
|
||||
if (focusState.isFocused) {
|
||||
coroutineScope.launch {
|
||||
bringIntoView()
|
||||
Column(modifier = Modifier.then(modifier)) {
|
||||
TextField(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
placeholder =
|
||||
if (enabled) {
|
||||
placeholder
|
||||
} else {
|
||||
null
|
||||
},
|
||||
textStyle = textStyle,
|
||||
keyboardOptions = keyboardOptions,
|
||||
colors = colors,
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxWidth()
|
||||
.defaultMinSize(minHeight = minHeight)
|
||||
.onFocusEvent { focusState ->
|
||||
bringIntoViewRequester?.run {
|
||||
if (focusState.isFocused) {
|
||||
coroutineScope.launch {
|
||||
bringIntoView()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.then(
|
||||
if (withBorder) {
|
||||
modifier.border(width = 1.dp, color = ZcashTheme.colors.textFieldFrame)
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
)
|
||||
|
||||
TextField(
|
||||
value = value,
|
||||
onValueChange = onValueChange,
|
||||
placeholder =
|
||||
if (enabled) {
|
||||
placeholder
|
||||
} else {
|
||||
null
|
||||
},
|
||||
textStyle = textStyle,
|
||||
keyboardOptions = keyboardOptions,
|
||||
colors = colors,
|
||||
modifier = composedTextFieldModifier,
|
||||
leadingIcon = leadingIcon,
|
||||
trailingIcon = trailingIcon,
|
||||
keyboardActions = keyboardActions,
|
||||
shape = shape,
|
||||
enabled = enabled
|
||||
)
|
||||
|
||||
if (!error.isNullOrEmpty()) {
|
||||
Spacer(modifier = Modifier.height(ZcashTheme.dimens.spacingSmall))
|
||||
|
||||
BodySmall(
|
||||
text = error,
|
||||
color = ZcashTheme.colors.textFieldError,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
.then(
|
||||
if (withBorder) {
|
||||
Modifier.border(width = 1.dp, color = ZcashTheme.colors.textFieldFrame)
|
||||
} else {
|
||||
Modifier
|
||||
}
|
||||
)
|
||||
.then(
|
||||
if (testTag.isNullOrEmpty()) {
|
||||
Modifier
|
||||
} else {
|
||||
Modifier.testTag(testTag)
|
||||
}
|
||||
),
|
||||
leadingIcon = leadingIcon,
|
||||
trailingIcon = trailingIcon,
|
||||
keyboardActions = keyboardActions,
|
||||
shape = shape,
|
||||
enabled = enabled
|
||||
)
|
||||
|
||||
if (!error.isNullOrEmpty()) {
|
||||
Spacer(modifier = Modifier.height(ZcashTheme.dimens.spacingSmall))
|
||||
|
||||
BodySmall(
|
||||
text = error,
|
||||
color = ZcashTheme.colors.textFieldError,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,20 +1,22 @@
|
|||
@file:Suppress("TooManyFunctions")
|
||||
|
||||
package co.electriccoin.zcash.ui.design.component
|
||||
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.clickable
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.RowScope
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.icons.Icons
|
||||
import androidx.compose.material.icons.automirrored.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.AccountCircle
|
||||
import androidx.compose.material.icons.filled.ArrowBack
|
||||
import androidx.compose.material.icons.filled.MoreVert
|
||||
import androidx.compose.material3.CenterAlignedTopAppBar
|
||||
import androidx.compose.material3.DropdownMenu
|
||||
|
@ -34,10 +36,14 @@ import androidx.compose.ui.draw.clip
|
|||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextOverflow
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import co.electriccoin.zcash.ui.design.R
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.theme.internal.SecondaryTypography
|
||||
import co.electriccoin.zcash.ui.design.theme.internal.TopAppBarColors
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
|
@ -49,6 +55,34 @@ private fun TopAppBarTextComposablePreview() {
|
|||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TopAppBarTextRestoringComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = false) {
|
||||
GradientSurface {
|
||||
SmallTopAppBar(
|
||||
titleText = "Screen A",
|
||||
backText = "Back",
|
||||
restoringLabel = "[RESTORING YOUR WALLET…]"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TopAppBarTextRestoringLongComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = false) {
|
||||
GradientSurface {
|
||||
SmallTopAppBar(
|
||||
titleText = "Screen A",
|
||||
backText = "Back",
|
||||
restoringLabel = "[RESTORING YOUR WALLET LONG TEXT…]"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TopAppBarLogoComposablePreview() {
|
||||
|
@ -59,6 +93,20 @@ private fun TopAppBarLogoComposablePreview() {
|
|||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TopAppBarLogoRestoringComposablePreview() {
|
||||
ZcashTheme(forceDarkMode = false) {
|
||||
GradientSurface {
|
||||
SmallTopAppBar(
|
||||
showTitleLogo = true,
|
||||
backText = "Back",
|
||||
restoringLabel = "[RESTORING YOUR WALLET…]"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
private fun TopAppBarRegularMenuComposablePreview() {
|
||||
|
@ -213,31 +261,58 @@ private fun TopBarOneVisibleActionMenuExample(
|
|||
}
|
||||
|
||||
@Composable
|
||||
@Suppress("LongParameterList")
|
||||
@Suppress("LongParameterList", "LongMethod")
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
fun SmallTopAppBar(
|
||||
modifier: Modifier = Modifier,
|
||||
titleText: String? = null,
|
||||
showTitleLogo: Boolean = false,
|
||||
backText: String? = null,
|
||||
backContentDescriptionText: String? = null,
|
||||
onBack: (() -> Unit)? = null,
|
||||
backText: String? = null,
|
||||
colors: TopAppBarColors = ZcashTheme.colors.topAppBarColors,
|
||||
hamburgerMenuActions: (@Composable RowScope.() -> Unit)? = null,
|
||||
onBack: (() -> Unit)? = null,
|
||||
regularActions: (@Composable RowScope.() -> Unit)? = null,
|
||||
restoringLabel: String? = null,
|
||||
showTitleLogo: Boolean = false,
|
||||
titleText: String? = null,
|
||||
) {
|
||||
CenterAlignedTopAppBar(
|
||||
title = {
|
||||
if (titleText != null) {
|
||||
Text(
|
||||
text = titleText.uppercase(),
|
||||
style = SecondaryTypography.headlineSmall
|
||||
)
|
||||
} else if (showTitleLogo) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.zashi_text_logo),
|
||||
contentDescription = null,
|
||||
modifier = Modifier.height(ZcashTheme.dimens.topAppBarZcashLogoHeight)
|
||||
)
|
||||
Column(
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
var restoringSpacerHeight: Dp = 0.dp
|
||||
|
||||
if (titleText != null) {
|
||||
Text(
|
||||
text = titleText.uppercase(),
|
||||
style = SecondaryTypography.headlineSmall,
|
||||
color = colors.titleColor,
|
||||
)
|
||||
restoringSpacerHeight = ZcashTheme.dimens.spacingTiny
|
||||
} else if (showTitleLogo) {
|
||||
Icon(
|
||||
painter = painterResource(id = R.drawable.zashi_text_logo),
|
||||
contentDescription = null,
|
||||
tint = colors.titleColor,
|
||||
modifier = Modifier.height(ZcashTheme.dimens.topAppBarZcashLogoHeight)
|
||||
)
|
||||
restoringSpacerHeight = ZcashTheme.dimens.spacingSmall
|
||||
}
|
||||
|
||||
if (restoringLabel != null) {
|
||||
Spacer(modifier = Modifier.height(restoringSpacerHeight))
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
Text(
|
||||
text = restoringLabel.uppercase(),
|
||||
style = ZcashTheme.extendedTypography.restoringTopAppBarStyle,
|
||||
color = colors.subTitleColor,
|
||||
modifier = Modifier.fillMaxWidth(0.75f),
|
||||
textAlign = TextAlign.Center,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
}
|
||||
}
|
||||
},
|
||||
navigationIcon = {
|
||||
|
@ -253,9 +328,10 @@ fun SmallTopAppBar(
|
|||
modifier = Modifier.padding(all = ZcashTheme.dimens.spacingDefault),
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
Image(
|
||||
imageVector = Icons.Filled.ArrowBack,
|
||||
contentDescription = backContentDescriptionText
|
||||
Icon(
|
||||
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
|
||||
contentDescription = backContentDescriptionText,
|
||||
tint = colors.navigationColor,
|
||||
)
|
||||
Spacer(modifier = Modifier.size(size = ZcashTheme.dimens.spacingSmall))
|
||||
Text(text = backText.uppercase())
|
||||
|
@ -267,6 +343,7 @@ fun SmallTopAppBar(
|
|||
regularActions?.invoke(this)
|
||||
hamburgerMenuActions?.invoke(this)
|
||||
},
|
||||
colors = colors.toMaterialTopAppBarColors(),
|
||||
modifier =
|
||||
Modifier
|
||||
.testTag(CommonTag.TOP_APP_BAR)
|
||||
|
|
|
@ -0,0 +1,135 @@
|
|||
@file:Suppress("MatchingDeclarationName")
|
||||
|
||||
package co.electriccoin.zcash.ui.design.component
|
||||
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
import androidx.compose.animation.core.FastOutLinearInEasing
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.slideOutVertically
|
||||
import androidx.compose.foundation.Image
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.Spacer
|
||||
import androidx.compose.foundation.layout.fillMaxHeight
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.height
|
||||
import androidx.compose.foundation.layout.wrapContentSize
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
import androidx.compose.foundation.verticalScroll
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.LaunchedEffect
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.graphics.painter.ColorPainter
|
||||
import androidx.compose.ui.layout.ContentScale
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import co.electriccoin.zcash.ui.design.R
|
||||
import co.electriccoin.zcash.ui.design.component.AnimationConstants.ANIMATION_DURATION
|
||||
import co.electriccoin.zcash.ui.design.component.AnimationConstants.INITIAL_DELAY
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.util.screenHeight
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
object AnimationConstants {
|
||||
const val ANIMATION_DURATION = 700
|
||||
const val INITIAL_DELAY = 1000
|
||||
|
||||
fun together() = (ANIMATION_DURATION + INITIAL_DELAY).toLong()
|
||||
}
|
||||
|
||||
// TODO [#1002]: Welcome screen animation masking
|
||||
// TODO [#1002]: https://github.com/Electric-Coin-Company/zashi-android/issues/1002
|
||||
|
||||
@Composable
|
||||
fun WelcomeAnimationAutostart(
|
||||
modifier: Modifier = Modifier,
|
||||
delay: Duration = INITIAL_DELAY.milliseconds,
|
||||
) {
|
||||
var currentAnimationState by remember { mutableStateOf(true) }
|
||||
|
||||
WelcomeAnimation(
|
||||
animationState = currentAnimationState,
|
||||
modifier = modifier
|
||||
)
|
||||
|
||||
// Let's start the animation automatically in case e.g. authentication is not involved
|
||||
LaunchedEffect(key1 = currentAnimationState) {
|
||||
delay(delay)
|
||||
currentAnimationState = false
|
||||
}
|
||||
}
|
||||
|
||||
private const val LOGO_RELATIVE_LOCATION = 0.2f
|
||||
|
||||
@Composable
|
||||
fun WelcomeAnimation(
|
||||
animationState: Boolean,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
val screenHeight = screenHeight()
|
||||
|
||||
Column(
|
||||
modifier =
|
||||
modifier.then(
|
||||
Modifier
|
||||
.verticalScroll(
|
||||
state = rememberScrollState(),
|
||||
enabled = false
|
||||
)
|
||||
.wrapContentSize()
|
||||
)
|
||||
) {
|
||||
AnimatedVisibility(
|
||||
visible = animationState,
|
||||
exit =
|
||||
slideOutVertically(
|
||||
targetOffsetY = { -it },
|
||||
animationSpec =
|
||||
tween(
|
||||
durationMillis = ANIMATION_DURATION,
|
||||
easing = FastOutLinearInEasing
|
||||
)
|
||||
),
|
||||
) {
|
||||
Box(modifier = Modifier.wrapContentSize()) {
|
||||
Column(modifier = Modifier.wrapContentSize()) {
|
||||
Image(
|
||||
painter = ColorPainter(ZcashTheme.colors.welcomeAnimationColor),
|
||||
contentScale = ContentScale.FillBounds,
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxHeight()
|
||||
.height(screenHeight.overallScreenHeight()),
|
||||
contentDescription = null
|
||||
)
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.chart_line),
|
||||
contentScale = ContentScale.FillBounds,
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
|
||||
Column(
|
||||
modifier =
|
||||
Modifier
|
||||
.fillMaxSize()
|
||||
.height(screenHeight.overallScreenHeight()),
|
||||
horizontalAlignment = Alignment.CenterHorizontally
|
||||
) {
|
||||
Spacer(modifier = Modifier.fillMaxHeight(LOGO_RELATIVE_LOCATION))
|
||||
|
||||
Image(
|
||||
painter = painterResource(id = R.drawable.logo_with_hi),
|
||||
contentDescription = null,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -12,11 +12,14 @@ data class Dimens(
|
|||
// Default spacings:
|
||||
val spacingNone: Dp,
|
||||
val spacingXtiny: Dp,
|
||||
val spacingMin: Dp,
|
||||
val spacingTiny: Dp,
|
||||
val spacingSmall: Dp,
|
||||
val spacingMid: Dp,
|
||||
val spacingDefault: Dp,
|
||||
val spacingLarge: Dp,
|
||||
val spacingXlarge: Dp,
|
||||
val spacingUpLarge: Dp,
|
||||
val spacingBig: Dp,
|
||||
val spacingHuge: Dp,
|
||||
// List of custom spacings:
|
||||
// Button:
|
||||
|
@ -25,11 +28,13 @@ data class Dimens(
|
|||
val buttonShadowSpread: Dp,
|
||||
val buttonWidth: Dp,
|
||||
val buttonHeight: Dp,
|
||||
val buttonHeightSmall: Dp,
|
||||
// Chip
|
||||
val chipShadowElevation: Dp,
|
||||
val chipStroke: Dp,
|
||||
// Progress
|
||||
val circularScreenProgressWidth: Dp,
|
||||
val circularMidProgressWidth: Dp,
|
||||
val circularSmallProgressWidth: Dp,
|
||||
val linearProgressHeight: Dp,
|
||||
// TopAppBar:
|
||||
|
@ -43,12 +48,14 @@ data class Dimens(
|
|||
val layoutStroke: Dp,
|
||||
val regularRippleEffectCorner: Dp,
|
||||
val smallRippleEffectCorner: Dp,
|
||||
val tinyRippleEffectCorner: Dp,
|
||||
// Screen custom spacings:
|
||||
val inScreenZcashLogoHeight: Dp,
|
||||
val inScreenZcashLogoWidth: Dp,
|
||||
val inScreenZcashTextLogoHeight: Dp,
|
||||
val screenHorizontalSpacingBig: Dp,
|
||||
val screenHorizontalSpacingRegular: Dp,
|
||||
val cameraTorchButton: Dp,
|
||||
)
|
||||
|
||||
private val defaultDimens =
|
||||
|
@ -56,19 +63,24 @@ private val defaultDimens =
|
|||
spacingNone = 0.dp,
|
||||
spacingXtiny = 2.dp,
|
||||
spacingTiny = 4.dp,
|
||||
spacingMin = 6.dp,
|
||||
spacingSmall = 8.dp,
|
||||
spacingMid = 12.dp,
|
||||
spacingDefault = 16.dp,
|
||||
spacingLarge = 24.dp,
|
||||
spacingXlarge = 32.dp,
|
||||
spacingUpLarge = 32.dp,
|
||||
spacingBig = 48.dp,
|
||||
spacingHuge = 64.dp,
|
||||
buttonShadowOffsetX = 20.dp,
|
||||
buttonShadowOffsetY = 20.dp,
|
||||
buttonShadowSpread = 10.dp,
|
||||
buttonWidth = 244.dp,
|
||||
buttonHeight = 70.dp,
|
||||
buttonHeight = 56.dp,
|
||||
buttonHeightSmall = 38.dp,
|
||||
chipShadowElevation = 4.dp,
|
||||
chipStroke = 0.5.dp,
|
||||
circularScreenProgressWidth = 48.dp,
|
||||
circularMidProgressWidth = 22.dp,
|
||||
circularSmallProgressWidth = 14.dp,
|
||||
linearProgressHeight = 14.dp,
|
||||
topAppBarZcashLogoHeight = 24.dp,
|
||||
|
@ -79,11 +91,13 @@ private val defaultDimens =
|
|||
divider = 1.dp,
|
||||
regularRippleEffectCorner = 28.dp,
|
||||
smallRippleEffectCorner = 10.dp,
|
||||
tinyRippleEffectCorner = 8.dp,
|
||||
inScreenZcashLogoHeight = 100.dp,
|
||||
inScreenZcashLogoWidth = 60.dp,
|
||||
inScreenZcashTextLogoHeight = 30.dp,
|
||||
screenHorizontalSpacingBig = 64.dp,
|
||||
screenHorizontalSpacingRegular = 32.dp,
|
||||
cameraTorchButton = 20.dp,
|
||||
)
|
||||
|
||||
private val normalDimens = defaultDimens
|
||||
|
|
|
@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.ui.graphics.Brush
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import co.electriccoin.zcash.ui.design.theme.internal.TopAppBarColors
|
||||
|
||||
@Immutable
|
||||
data class ExtendedColors(
|
||||
|
@ -15,22 +16,24 @@ data class ExtendedColors(
|
|||
val callout: Color,
|
||||
val onCallout: Color,
|
||||
val circularProgressBarSmall: Color,
|
||||
val circularProgressBarSmallDark: Color,
|
||||
val circularProgressBarScreen: Color,
|
||||
val linearProgressBarTrack: Color,
|
||||
val linearProgressBarBackground: Color,
|
||||
val chipIndex: Color,
|
||||
val textCommon: Color,
|
||||
val textMedium: Color,
|
||||
val textDisabled: Color,
|
||||
val textFieldHint: Color,
|
||||
val textFieldError: Color,
|
||||
val textFieldWarning: Color,
|
||||
val textFieldFrame: Color,
|
||||
val textDescription: Color,
|
||||
val textDescriptionDark: Color,
|
||||
val textPending: Color,
|
||||
val layoutStroke: Color,
|
||||
val overlay: Color,
|
||||
val highlight: Color,
|
||||
val dangerous: Color,
|
||||
val onDangerous: Color,
|
||||
val reference: Color,
|
||||
val disabledButtonColor: Color,
|
||||
val disabledButtonTextColor: Color,
|
||||
|
@ -43,6 +46,15 @@ data class ExtendedColors(
|
|||
val darkDividerColor: Color,
|
||||
val tabTextColor: Color,
|
||||
val panelBackgroundColor: Color,
|
||||
val cameraDisabledBackgroundColor: Color,
|
||||
val cameraDisabledFrameColor: Color,
|
||||
val radioButtonColor: Color,
|
||||
val radioButtonTextColor: Color,
|
||||
val historyBackgroundColor: Color,
|
||||
val historyRedColor: Color,
|
||||
val historySyncingColor: Color,
|
||||
val topAppBarColors: TopAppBarColors,
|
||||
val transparentTopAppBarColors: TopAppBarColors
|
||||
) {
|
||||
@Composable
|
||||
fun surfaceGradient() =
|
||||
|
|
|
@ -24,15 +24,18 @@ internal object Dark {
|
|||
val textSecondaryButton = Color(0xFF000000)
|
||||
val textTertiaryButton = Color.White
|
||||
val textCommon = Color(0xFFFFFFFF)
|
||||
val textMedium = Color(0xFF353535)
|
||||
val textDisabled = Color(0xFFB7B7B7)
|
||||
val textChipIndex = Color(0xFFFFB900)
|
||||
val textFieldFrame = Color(0xFF231F20)
|
||||
val textFieldError = Color(0xFFFF0000)
|
||||
val textFieldWarning = Color(0xFFF40202)
|
||||
val textFieldHint = Color(0xFFB7B7B7)
|
||||
val textDescription = Color(0xFF777777)
|
||||
val textDescriptionDark = Color(0xFF4D4D4D)
|
||||
val textProgress = Color(0xFF8B8A8A)
|
||||
|
||||
val aboutTextColor = Color.Unspecified
|
||||
val aboutTextColor = Color(0xFF4E4E4E)
|
||||
val screenTitleColor = Color(0xFF040404)
|
||||
val welcomeAnimationColor = Color(0xFF231F20)
|
||||
val complementaryColor = Color(0xFFF4B728)
|
||||
|
@ -41,25 +44,21 @@ internal object Dark {
|
|||
val tabTextColor = Color(0xFF040404)
|
||||
val layoutStroke = Color(0xFFFFFFFF)
|
||||
val panelBackgroundColor = Color(0xFFEAEAEA)
|
||||
val cameraDisabledBackgroundColor = Color(0xFF5E5C5C)
|
||||
val cameraDisabledFrameColor = Color(0xFFFFFFFF)
|
||||
|
||||
val primaryButton = Color(0xFFFFFFFF)
|
||||
val primaryButtonPressed = Color(0xFFFFFFFF)
|
||||
val primaryButtonDisabled = Color(0xFFFFFFFF)
|
||||
|
||||
val secondaryButton = Color(0xFFFFFFFF)
|
||||
val secondaryButtonPressed = Color(0xFFFFFFFF)
|
||||
val secondaryButtonDisabled = Color(0xFFFFFFFF)
|
||||
|
||||
val tertiaryButton = Color.Transparent
|
||||
val tertiaryButtonPressed = Color(0xFFFFFFFF)
|
||||
|
||||
val navigationButton = Color(0xFFFFFFFF)
|
||||
val navigationButtonPressed = Color(0xFFFFFFFF)
|
||||
val radioButtonColor = Color(0xFF070707)
|
||||
val radioButtonTextColor = Color(0xFF4E4E4E)
|
||||
|
||||
val circularProgressBarSmall = Color(0xFF8B8A8A)
|
||||
val circularProgressBarSmallDark = textBodyOnBackground
|
||||
val circularProgressBarScreen = Color(0xFFFFFFFF)
|
||||
val linearProgressBarTrack = Color(0xFFD9D9D9)
|
||||
val linearProgressBarBackground = Light.complementaryColor
|
||||
val linearProgressBarBackground = complementaryColor
|
||||
|
||||
val callout = Color(0xFFFFFFFF)
|
||||
val onCallout = Color(0xFFFFFFFF)
|
||||
|
@ -67,15 +66,19 @@ internal object Dark {
|
|||
val overlay = Color(0x22000000)
|
||||
val highlight = Color(0xFFFFD800)
|
||||
|
||||
val dangerous = Color(0xFFEC0008)
|
||||
val onDangerous = Color(0xFFFFFFFF)
|
||||
|
||||
val reference = Color(0xFFFFFFFF)
|
||||
|
||||
val disabledButtonColor = Color(0xFFB7B7B7)
|
||||
val disabledButtonTextColor = Color(0xFFDDDDDD)
|
||||
|
||||
val buttonShadowColor = Color(0xFFFFFFFF)
|
||||
|
||||
val historyBackgroundColor = Color(0xFFF6F6F6)
|
||||
val historyRedColor = textFieldWarning
|
||||
val historySyncingColor = panelBackgroundColor
|
||||
|
||||
val topAppBarColors = DarkTopAppBarColors()
|
||||
val transparentTopAppBarColors = TransparentTopAppBarColors()
|
||||
}
|
||||
|
||||
internal object Light {
|
||||
|
@ -88,12 +91,15 @@ internal object Light {
|
|||
val textSecondaryButton = Color(0xFF000000)
|
||||
val textTertiaryButton = Color(0xFF000000)
|
||||
val textCommon = Color(0xFF000000)
|
||||
val textMedium = Color(0xFF353535)
|
||||
val textDisabled = Color(0xFFB7B7B7)
|
||||
val textFieldFrame = Color(0xFF231F20)
|
||||
val textFieldError = Color(0xFFCD0002)
|
||||
val textFieldWarning = Color(0xFFF40202)
|
||||
val textFieldHint = Color(0xFFB7B7B7)
|
||||
val textChipIndex = Color(0xFFEE8592)
|
||||
val textDescription = Color(0xFF777777)
|
||||
val textDescriptionDark = Color(0xFF4D4D4D)
|
||||
val textProgress = Color(0xFF8B8A8A)
|
||||
|
||||
val screenTitleColor = Color(0xFF040404)
|
||||
|
@ -105,23 +111,19 @@ internal object Light {
|
|||
val tabTextColor = Color(0xFF040404)
|
||||
val layoutStroke = Color(0xFF000000)
|
||||
val panelBackgroundColor = Color(0xFFEAEAEA)
|
||||
val cameraDisabledBackgroundColor = Color(0xFF5E5C5C)
|
||||
val cameraDisabledFrameColor = Color(0xFFFFFFFF)
|
||||
|
||||
val primaryButton = Color(0xFF000000)
|
||||
val primaryButtonPressed = Color(0xFF000000)
|
||||
val primaryButtonDisabled = Color(0xFF000000)
|
||||
|
||||
val secondaryButton = Color(0xFFFFFFFF)
|
||||
val secondaryButtonPressed = Color(0xFFFFFFFF)
|
||||
val secondaryButtonDisabled = Color(0xFFFFFFFF)
|
||||
|
||||
val tertiaryButton = Color.Transparent
|
||||
val tertiaryButtonPressed = Color(0xFFFFFFFF)
|
||||
|
||||
val navigationButton = Color(0xFFFFFFFF)
|
||||
val navigationButtonPressed = Color(0xFFFFFFFF)
|
||||
val radioButtonColor = Color(0xFF070707)
|
||||
val radioButtonTextColor = Color(0xFF4E4E4E)
|
||||
|
||||
val circularProgressBarSmall = Color(0xFF8B8A8A)
|
||||
val circularProgressBarScreen = Color(0xFF000000)
|
||||
val circularProgressBarSmallDark = textBodyOnBackground
|
||||
val linearProgressBarTrack = Color(0xFFD9D9D9)
|
||||
val linearProgressBarBackground = complementaryColor
|
||||
|
||||
|
@ -131,14 +133,18 @@ internal object Light {
|
|||
val overlay = Color(0x22000000)
|
||||
val highlight = Color(0xFFFFD800)
|
||||
|
||||
val dangerous = Color(0xFFEC0008)
|
||||
val onDangerous = Color(0xFFFFFFFF)
|
||||
|
||||
val reference = Color(0xFF000000)
|
||||
|
||||
val disabledButtonColor = Color(0xFFB7B7B7)
|
||||
val disabledButtonTextColor = Color(0xFFDDDDDD)
|
||||
val buttonShadowColor = Color(0xFF000000)
|
||||
|
||||
val historyBackgroundColor = Color(0xFFF6F6F6)
|
||||
val historyRedColor = textFieldWarning
|
||||
val historySyncingColor = Dark.panelBackgroundColor
|
||||
|
||||
val topAppBarColors = LightTopAppBarColors()
|
||||
val transparentTopAppBarColors = TransparentTopAppBarColors()
|
||||
}
|
||||
|
||||
internal val DarkColorPalette =
|
||||
|
@ -174,22 +180,24 @@ internal val DarkExtendedColorPalette =
|
|||
callout = Dark.callout,
|
||||
onCallout = Dark.onCallout,
|
||||
circularProgressBarSmall = Dark.circularProgressBarSmall,
|
||||
circularProgressBarSmallDark = Dark.circularProgressBarSmallDark,
|
||||
circularProgressBarScreen = Dark.circularProgressBarScreen,
|
||||
linearProgressBarTrack = Dark.linearProgressBarTrack,
|
||||
linearProgressBarBackground = Dark.linearProgressBarBackground,
|
||||
chipIndex = Dark.textChipIndex,
|
||||
textCommon = Dark.textCommon,
|
||||
textMedium = Dark.textMedium,
|
||||
textDisabled = Dark.textDisabled,
|
||||
textFieldFrame = Dark.textFieldFrame,
|
||||
textFieldError = Dark.textFieldError,
|
||||
textFieldWarning = Dark.textFieldWarning,
|
||||
textFieldHint = Dark.textFieldHint,
|
||||
textDescription = Dark.textDescription,
|
||||
textDescriptionDark = Dark.textDescriptionDark,
|
||||
textPending = Dark.textProgress,
|
||||
layoutStroke = Dark.layoutStroke,
|
||||
overlay = Dark.overlay,
|
||||
highlight = Dark.highlight,
|
||||
dangerous = Dark.dangerous,
|
||||
onDangerous = Dark.onDangerous,
|
||||
disabledButtonTextColor = Dark.disabledButtonTextColor,
|
||||
disabledButtonColor = Dark.disabledButtonColor,
|
||||
reference = Dark.reference,
|
||||
|
@ -202,6 +210,15 @@ internal val DarkExtendedColorPalette =
|
|||
darkDividerColor = Dark.darkDividerColor,
|
||||
tabTextColor = Dark.tabTextColor,
|
||||
panelBackgroundColor = Dark.panelBackgroundColor,
|
||||
cameraDisabledBackgroundColor = Dark.cameraDisabledBackgroundColor,
|
||||
cameraDisabledFrameColor = Dark.cameraDisabledFrameColor,
|
||||
radioButtonColor = Dark.radioButtonColor,
|
||||
radioButtonTextColor = Dark.radioButtonTextColor,
|
||||
historyBackgroundColor = Dark.historyBackgroundColor,
|
||||
historyRedColor = Dark.historyRedColor,
|
||||
historySyncingColor = Dark.historySyncingColor,
|
||||
topAppBarColors = Dark.topAppBarColors,
|
||||
transparentTopAppBarColors = Dark.transparentTopAppBarColors
|
||||
)
|
||||
|
||||
internal val LightExtendedColorPalette =
|
||||
|
@ -214,21 +231,23 @@ internal val LightExtendedColorPalette =
|
|||
onCallout = Light.onCallout,
|
||||
circularProgressBarScreen = Light.circularProgressBarScreen,
|
||||
circularProgressBarSmall = Light.circularProgressBarSmall,
|
||||
circularProgressBarSmallDark = Light.circularProgressBarSmallDark,
|
||||
linearProgressBarTrack = Light.linearProgressBarTrack,
|
||||
linearProgressBarBackground = Light.linearProgressBarBackground,
|
||||
chipIndex = Light.textChipIndex,
|
||||
textCommon = Light.textCommon,
|
||||
textMedium = Light.textMedium,
|
||||
textDisabled = Light.textDisabled,
|
||||
textFieldFrame = Light.textFieldFrame,
|
||||
textFieldError = Light.textFieldError,
|
||||
textFieldWarning = Light.textFieldWarning,
|
||||
textFieldHint = Light.textFieldHint,
|
||||
textDescription = Light.textDescription,
|
||||
textDescriptionDark = Light.textDescriptionDark,
|
||||
textPending = Light.textProgress,
|
||||
layoutStroke = Light.layoutStroke,
|
||||
overlay = Light.overlay,
|
||||
highlight = Light.highlight,
|
||||
dangerous = Light.dangerous,
|
||||
onDangerous = Light.onDangerous,
|
||||
disabledButtonTextColor = Light.disabledButtonTextColor,
|
||||
disabledButtonColor = Light.disabledButtonColor,
|
||||
reference = Light.reference,
|
||||
|
@ -241,6 +260,15 @@ internal val LightExtendedColorPalette =
|
|||
darkDividerColor = Light.darkDividerColor,
|
||||
tabTextColor = Light.tabTextColor,
|
||||
panelBackgroundColor = Light.panelBackgroundColor,
|
||||
cameraDisabledBackgroundColor = Light.cameraDisabledBackgroundColor,
|
||||
cameraDisabledFrameColor = Light.cameraDisabledFrameColor,
|
||||
radioButtonColor = Light.radioButtonColor,
|
||||
radioButtonTextColor = Light.radioButtonTextColor,
|
||||
historyBackgroundColor = Light.historyBackgroundColor,
|
||||
historyRedColor = Light.historyRedColor,
|
||||
historySyncingColor = Light.historySyncingColor,
|
||||
topAppBarColors = Light.topAppBarColors,
|
||||
transparentTopAppBarColors = Light.transparentTopAppBarColors
|
||||
)
|
||||
|
||||
@Suppress("CompositionLocalAllowlist")
|
||||
|
@ -255,21 +283,23 @@ internal val LocalExtendedColors =
|
|||
onCallout = Color.Unspecified,
|
||||
circularProgressBarScreen = Color.Unspecified,
|
||||
circularProgressBarSmall = Color.Unspecified,
|
||||
circularProgressBarSmallDark = Color.Unspecified,
|
||||
linearProgressBarTrack = Color.Unspecified,
|
||||
linearProgressBarBackground = Color.Unspecified,
|
||||
chipIndex = Color.Unspecified,
|
||||
textCommon = Color.Unspecified,
|
||||
textMedium = Color.Unspecified,
|
||||
textDisabled = Color.Unspecified,
|
||||
textFieldHint = Color.Unspecified,
|
||||
textFieldError = Color.Unspecified,
|
||||
textFieldWarning = Color.Unspecified,
|
||||
textFieldFrame = Color.Unspecified,
|
||||
textDescription = Color.Unspecified,
|
||||
textDescriptionDark = Color.Unspecified,
|
||||
textPending = Color.Unspecified,
|
||||
layoutStroke = Color.Unspecified,
|
||||
overlay = Color.Unspecified,
|
||||
highlight = Color.Unspecified,
|
||||
dangerous = Color.Unspecified,
|
||||
onDangerous = Color.Unspecified,
|
||||
disabledButtonTextColor = Color.Unspecified,
|
||||
disabledButtonColor = Color.Unspecified,
|
||||
reference = Color.Unspecified,
|
||||
|
@ -282,5 +312,14 @@ internal val LocalExtendedColors =
|
|||
darkDividerColor = Color.Unspecified,
|
||||
tabTextColor = Color.Unspecified,
|
||||
panelBackgroundColor = Color.Unspecified,
|
||||
cameraDisabledBackgroundColor = Color.Unspecified,
|
||||
cameraDisabledFrameColor = Color.Unspecified,
|
||||
radioButtonColor = Color.Unspecified,
|
||||
radioButtonTextColor = Color.Unspecified,
|
||||
historyBackgroundColor = Color.Unspecified,
|
||||
historyRedColor = Color.Unspecified,
|
||||
historySyncingColor = Color.Unspecified,
|
||||
topAppBarColors = DefaultTopAppBarColors(),
|
||||
transparentTopAppBarColors = DefaultTopAppBarColors(),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -0,0 +1,62 @@
|
|||
@file:Suppress("MagicNumber")
|
||||
|
||||
package co.electriccoin.zcash.ui.design.theme.internal
|
||||
|
||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||
import androidx.compose.runtime.Immutable
|
||||
import androidx.compose.ui.graphics.Color
|
||||
|
||||
@Immutable
|
||||
interface TopAppBarColors {
|
||||
val containerColor: Color
|
||||
val navigationColor: Color
|
||||
val titleColor: Color
|
||||
val subTitleColor: Color
|
||||
val actionColor: Color
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
fun toMaterialTopAppBarColors() =
|
||||
androidx.compose.material3.TopAppBarColors(
|
||||
containerColor = containerColor,
|
||||
scrolledContainerColor = containerColor,
|
||||
navigationIconContentColor = navigationColor,
|
||||
titleContentColor = titleColor,
|
||||
actionIconContentColor = actionColor
|
||||
)
|
||||
}
|
||||
|
||||
@Immutable
|
||||
internal data class DefaultTopAppBarColors(
|
||||
override val containerColor: Color = Color.Unspecified,
|
||||
override val navigationColor: Color = Color.Unspecified,
|
||||
override val titleColor: Color = Color.Unspecified,
|
||||
override val subTitleColor: Color = Color.Unspecified,
|
||||
override val actionColor: Color = Color.Unspecified,
|
||||
) : TopAppBarColors
|
||||
|
||||
@Immutable
|
||||
internal data class LightTopAppBarColors(
|
||||
override val containerColor: Color = Color(0xFFFFFFFF),
|
||||
override val navigationColor: Color = Color(0xFF000000),
|
||||
override val titleColor: Color = Color(0xFF000000),
|
||||
override val subTitleColor: Color = Color(0xFF8A8888),
|
||||
override val actionColor: Color = Color(0xFF000000),
|
||||
) : TopAppBarColors
|
||||
|
||||
@Immutable
|
||||
internal data class DarkTopAppBarColors(
|
||||
override val containerColor: Color = Color(0xFF000000),
|
||||
override val navigationColor: Color = Color(0xFFFFFFFF),
|
||||
override val titleColor: Color = Color(0xFFFFFFFF),
|
||||
override val subTitleColor: Color = Color(0xFF8A8888),
|
||||
override val actionColor: Color = Color(0xFFFFFFFF),
|
||||
) : TopAppBarColors
|
||||
|
||||
@Immutable
|
||||
internal data class TransparentTopAppBarColors(
|
||||
override val containerColor: Color = Color(0x00000000),
|
||||
override val navigationColor: Color = Color(0xFFFFFFFF),
|
||||
override val titleColor: Color = Color(0xFFFFFFFF),
|
||||
override val subTitleColor: Color = Color(0xFFFFFFFF),
|
||||
override val actionColor: Color = Color(0xFFFFFFFF),
|
||||
) : TopAppBarColors
|
|
@ -6,10 +6,12 @@ import androidx.compose.runtime.staticCompositionLocalOf
|
|||
import androidx.compose.ui.text.PlatformTextStyle
|
||||
import androidx.compose.ui.text.TextStyle
|
||||
import androidx.compose.ui.text.font.FontFamily
|
||||
import androidx.compose.ui.text.font.FontStyle
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.googlefonts.Font
|
||||
import androidx.compose.ui.text.googlefonts.GoogleFont
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.unit.sp
|
||||
import co.electriccoin.zcash.ui.design.R
|
||||
|
||||
|
@ -102,8 +104,8 @@ internal val SecondaryTypography =
|
|||
headlineSmall =
|
||||
TextStyle(
|
||||
fontFamily = ArchivoFontFamily,
|
||||
fontWeight = FontWeight.SemiBold,
|
||||
fontSize = 18.sp,
|
||||
fontWeight = FontWeight.Bold,
|
||||
fontSize = 16.sp,
|
||||
textAlign = TextAlign.Center
|
||||
),
|
||||
bodyLarge =
|
||||
|
@ -152,9 +154,25 @@ data class BalanceSingleTextStyles(
|
|||
val second: TextStyle,
|
||||
)
|
||||
|
||||
@Immutable
|
||||
data class TransactionItemTextStyles(
|
||||
val titleRegular: TextStyle,
|
||||
val titleRunning: TextStyle,
|
||||
val titleFailed: TextStyle,
|
||||
val addressCollapsed: TextStyle,
|
||||
val valueFirstPart: TextStyle,
|
||||
val valueSecondPart: TextStyle,
|
||||
val content: TextStyle,
|
||||
val contentItalic: TextStyle,
|
||||
val contentMedium: TextStyle,
|
||||
val contentUnderline: TextStyle,
|
||||
val contentLineThrough: TextStyle,
|
||||
val feeFirstPart: TextStyle,
|
||||
val feeSecondPart: TextStyle,
|
||||
)
|
||||
|
||||
@Immutable
|
||||
data class ExtendedTypography(
|
||||
val listItem: TextStyle,
|
||||
// Grouping balances text styles to a wrapper class for BalanceWidget
|
||||
val balanceWidgetStyles: BalanceWidgetTextStyles,
|
||||
// Grouping balances text styles to a wrapper class for single balance use case
|
||||
|
@ -165,11 +183,18 @@ data class ExtendedTypography(
|
|||
val buttonTextSmall: TextStyle,
|
||||
val checkboxText: TextStyle,
|
||||
val securityWarningText: TextStyle,
|
||||
val footnote: TextStyle,
|
||||
val textFieldHint: TextStyle,
|
||||
val textFieldValue: TextStyle,
|
||||
val textFieldBirthday: TextStyle,
|
||||
val textNavTab: TextStyle,
|
||||
val referenceSmall: TextStyle,
|
||||
val radioButton: TextStyle,
|
||||
// Grouping transaction item text styles to a wrapper class
|
||||
val transactionItemStyles: TransactionItemTextStyles,
|
||||
val restoringTopAppBarStyle: TextStyle,
|
||||
val deleteWalletWarnStyle: TextStyle,
|
||||
val updateTitleStyle: TextStyle,
|
||||
)
|
||||
|
||||
@Suppress("CompositionLocalAllowlist")
|
||||
|
@ -185,10 +210,6 @@ val LocalTypographies =
|
|||
val LocalExtendedTypography =
|
||||
staticCompositionLocalOf {
|
||||
ExtendedTypography(
|
||||
listItem =
|
||||
PrimaryTypography.bodyLarge.copy(
|
||||
fontSize = 24.sp
|
||||
),
|
||||
// Note: the order here matters, be careful when reordering
|
||||
balanceWidgetStyles =
|
||||
BalanceWidgetTextStyles(
|
||||
|
@ -229,19 +250,20 @@ val LocalExtendedTypography =
|
|||
)
|
||||
),
|
||||
addressStyle =
|
||||
SecondaryTypography.bodyLarge.copy(
|
||||
// TODO [#1032]: Addresses can be shown with "×" symbols
|
||||
// TODO [#1032]: https://github.com/Electric-Coin-Company/zashi-android/issues/1032
|
||||
),
|
||||
SecondaryTypography.bodyLarge.copy(),
|
||||
aboutText =
|
||||
PrimaryTypography.bodyLarge.copy(
|
||||
fontSize = 14.sp,
|
||||
lineHeight = 20.sp
|
||||
),
|
||||
buttonText = PrimaryTypography.bodySmall,
|
||||
buttonText =
|
||||
PrimaryTypography.bodyMedium.copy(
|
||||
fontWeight = FontWeight.Medium
|
||||
),
|
||||
buttonTextSmall =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 11.sp
|
||||
fontSize = 11.sp,
|
||||
fontWeight = FontWeight.Medium
|
||||
),
|
||||
checkboxText =
|
||||
PrimaryTypography.bodyMedium.copy(
|
||||
|
@ -249,7 +271,13 @@ val LocalExtendedTypography =
|
|||
),
|
||||
securityWarningText =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
lineHeight = 22.32.sp
|
||||
fontSize = 16.sp,
|
||||
fontWeight = FontWeight.Medium
|
||||
),
|
||||
footnote =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 11.sp,
|
||||
fontWeight = FontWeight.Medium
|
||||
),
|
||||
textFieldHint =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
|
@ -269,6 +297,91 @@ val LocalExtendedTypography =
|
|||
referenceSmall =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp
|
||||
),
|
||||
radioButton =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 14.sp,
|
||||
fontWeight = FontWeight.SemiBold
|
||||
),
|
||||
transactionItemStyles =
|
||||
TransactionItemTextStyles(
|
||||
titleRegular =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontWeight = FontWeight.Bold
|
||||
),
|
||||
titleRunning =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontWeight = FontWeight.ExtraBold,
|
||||
fontStyle = FontStyle.Italic
|
||||
),
|
||||
titleFailed =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontWeight = FontWeight.ExtraBold,
|
||||
textDecoration = TextDecoration.LineThrough
|
||||
),
|
||||
addressCollapsed =
|
||||
SecondaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp
|
||||
),
|
||||
valueFirstPart =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp
|
||||
),
|
||||
valueSecondPart =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 8.sp
|
||||
),
|
||||
content =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp
|
||||
),
|
||||
contentItalic =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontStyle = FontStyle.Italic
|
||||
),
|
||||
contentMedium =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontWeight = FontWeight.Medium
|
||||
),
|
||||
contentUnderline =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontStyle = FontStyle.Italic,
|
||||
textDecoration = TextDecoration.Underline
|
||||
),
|
||||
contentLineThrough =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
textDecoration = TextDecoration.LineThrough
|
||||
),
|
||||
feeFirstPart =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 13.sp,
|
||||
fontWeight = FontWeight.SemiBold
|
||||
),
|
||||
feeSecondPart =
|
||||
PrimaryTypography.bodySmall.copy(
|
||||
fontSize = 8.sp,
|
||||
fontWeight = FontWeight.SemiBold
|
||||
),
|
||||
),
|
||||
restoringTopAppBarStyle =
|
||||
SecondaryTypography.labelMedium.copy(
|
||||
fontSize = 12.sp,
|
||||
fontWeight = FontWeight.SemiBold
|
||||
),
|
||||
deleteWalletWarnStyle =
|
||||
PrimaryTypography.bodyLarge.copy(
|
||||
fontWeight = FontWeight.Bold
|
||||
),
|
||||
updateTitleStyle =
|
||||
PrimaryTypography.titleLarge.copy(
|
||||
fontWeight = FontWeight.Bold
|
||||
)
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,54 +1,60 @@
|
|||
package co.electriccoin.zcash.ui.design.util
|
||||
|
||||
import androidx.compose.foundation.layout.ExperimentalLayoutApi
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.navigationBars
|
||||
import androidx.compose.foundation.layout.statusBars
|
||||
import androidx.compose.foundation.layout.asPaddingValues
|
||||
import androidx.compose.foundation.layout.navigationBarsIgnoringVisibility
|
||||
import androidx.compose.foundation.layout.statusBarsIgnoringVisibility
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import co.electriccoin.zcash.spackle.Twig
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
/**
|
||||
* This operation performs calculation of the screen height together with remembering its result for a further calls.
|
||||
* This operation performs calculation of the screen height.
|
||||
*
|
||||
* @param cacheKey The cache defining key. Use a different one for recalculation.
|
||||
*
|
||||
* @return Wrapper object of the calculated heights in density pixels.
|
||||
* @return [ScreenHeight] a wrapper object of the calculated heights in density pixels.
|
||||
*/
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun screenHeight(cacheKey: Any = true): ScreenHeight {
|
||||
val density = LocalDensity.current
|
||||
fun screenHeight(): ScreenHeight {
|
||||
val configuration = LocalConfiguration.current
|
||||
val statusBars = WindowInsets.statusBars
|
||||
val navigationBars = WindowInsets.navigationBars
|
||||
|
||||
val cachedResult =
|
||||
remember(cacheKey) {
|
||||
val contentHeightPx = with(density) { configuration.screenHeightDp.dp.roundToPx() }
|
||||
Twig.debug { "Screen content height in pixels: $contentHeightPx" }
|
||||
val statusBars = WindowInsets.statusBarsIgnoringVisibility.asPaddingValues().calculateTopPadding()
|
||||
Twig.debug { "Screen height: Status bar height raw: $statusBars" }
|
||||
|
||||
val statusBarHeight = statusBars.getTop(density).dp
|
||||
Twig.debug { "Status bar height: $statusBarHeight" }
|
||||
val navigationBars = WindowInsets.navigationBarsIgnoringVisibility.asPaddingValues().calculateBottomPadding()
|
||||
Twig.debug { "Screen height: Navigation bar height raw: $navigationBars" }
|
||||
|
||||
val navigationBarHeight = navigationBars.getBottom(density).dp
|
||||
Twig.debug { "Navigation bar height: $navigationBarHeight" }
|
||||
val contentHeight = configuration.screenHeightDp.dp
|
||||
Twig.debug { "Screen height: Screen content height: $contentHeight" }
|
||||
|
||||
val contentHeight = (contentHeightPx / density.density.roundToInt()).dp
|
||||
Twig.debug { "Screen content height in dps: $contentHeight" }
|
||||
|
||||
ScreenHeight(
|
||||
contentHeight = contentHeight,
|
||||
systemStatusBarHeight = statusBarHeight,
|
||||
systemNavigationBarHeight = navigationBarHeight,
|
||||
)
|
||||
val statusBarHeight =
|
||||
statusBars.run {
|
||||
if (value <= 0f) {
|
||||
24.dp
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
Twig.debug { "Screen total height: $cachedResult" }
|
||||
Twig.debug { "Screen height: Status bar height: $statusBarHeight" }
|
||||
|
||||
return cachedResult
|
||||
val navigationBarHeight =
|
||||
navigationBars.run {
|
||||
if (value <= 0f) {
|
||||
88.dp
|
||||
} else {
|
||||
this
|
||||
}
|
||||
}
|
||||
Twig.debug { "Screen height: Navigation bar height: $navigationBarHeight" }
|
||||
|
||||
return ScreenHeight(
|
||||
contentHeight = contentHeight,
|
||||
systemStatusBarHeight = statusBarHeight,
|
||||
systemNavigationBarHeight = navigationBarHeight
|
||||
)
|
||||
}
|
||||
|
||||
data class ScreenHeight(
|
||||
|
@ -56,7 +62,15 @@ data class ScreenHeight(
|
|||
val systemStatusBarHeight: Dp,
|
||||
val systemNavigationBarHeight: Dp
|
||||
) {
|
||||
fun overallScreenHeight() = contentHeight + systemBarsHeight()
|
||||
fun overallScreenHeight(): Dp {
|
||||
return (contentHeight + systemBarsHeight()).also {
|
||||
Twig.debug { "Screen height: Overall height: $it" }
|
||||
}
|
||||
}
|
||||
|
||||
fun systemBarsHeight() = systemStatusBarHeight + systemNavigationBarHeight
|
||||
fun systemBarsHeight(): Dp {
|
||||
return (systemStatusBarHeight + systemNavigationBarHeight).also {
|
||||
Twig.debug { "Screen height: System bars height: $it" }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="48dp"
|
||||
android:height="48dp"
|
||||
android:viewportWidth="48"
|
||||
android:viewportHeight="48">
|
||||
<path
|
||||
android:fillColor="@android:color/black"
|
||||
android:pathData="M22.55,42V37.8Q19.7,37.3 17.875,35.625Q16.05,33.95 15.25,31.4L18.05,30.25Q18.9,32.65 20.5,33.825Q22.1,35 24.35,35Q26.75,35 28.3,33.8Q29.85,32.6 29.85,30.5Q29.85,28.3 28.475,27.1Q27.1,25.9 23.3,24.65Q19.7,23.5 17.925,21.6Q16.15,19.7 16.15,16.85Q16.15,14.1 17.925,12.25Q19.7,10.4 22.55,10.15V6H25.55V10.15Q27.8,10.4 29.425,11.625Q31.05,12.85 31.9,14.75L29.1,15.95Q28.4,14.35 27.225,13.625Q26.05,12.9 24.15,12.9Q21.85,12.9 20.5,13.95Q19.15,15 19.15,16.8Q19.15,18.7 20.65,19.875Q22.15,21.05 26.2,22.3Q29.6,23.35 31.225,25.325Q32.85,27.3 32.85,30.3Q32.85,33.45 31,35.375Q29.15,37.3 25.55,37.85V42Z"/>
|
||||
</vector>
|
|
@ -1,9 +0,0 @@
|
|||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="3.17dp"
|
||||
android:height="5.57dp"
|
||||
android:viewportWidth="3.17"
|
||||
android:viewportHeight="5.57">
|
||||
<path
|
||||
android:pathData="M1.96,5.57l0,-0.75l1.21,0l0,-0.84l-1.96,0l1.62,-2.18l0.34,-0.44l0,0l0,-0.61l-1.21,0l0,-0.75l-0.75,0l0,0.75l-1.21,0l0,0.84l1.96,0l-1.62,2.12l-0.34,0.44l0,0.67l1.21,0l0,0.75l0.75,0z"
|
||||
android:fillColor="#1d181a"/>
|
||||
</vector>
|
|
@ -57,6 +57,8 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation(libs.zcash.sdk)
|
||||
|
||||
implementation(projects.uiLib)
|
||||
implementation(projects.uiDesignLib)
|
||||
implementation(projects.testLib)
|
||||
|
|
|
@ -2,9 +2,7 @@ package co.electriccoin.zcash.ui.integration.test.screen.scan.view
|
|||
|
||||
import androidx.compose.ui.test.assertHasClickAction
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.assertTextEquals
|
||||
import androidx.compose.ui.test.junit4.createAndroidComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
|
@ -14,6 +12,7 @@ import co.electriccoin.zcash.ui.R
|
|||
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||
import co.electriccoin.zcash.ui.integration.test.common.getPermissionPositiveButtonUiObject
|
||||
import co.electriccoin.zcash.ui.integration.test.common.getStringResource
|
||||
import co.electriccoin.zcash.ui.integration.test.common.getStringResourceWithArgs
|
||||
import co.electriccoin.zcash.ui.integration.test.common.waitForDeviceIdle
|
||||
import co.electriccoin.zcash.ui.screen.scan.ScanTag
|
||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||
|
@ -71,21 +70,10 @@ class ScanViewTest : UiTestPrerequisites() {
|
|||
|
||||
testSetup.grantPermission()
|
||||
|
||||
composeTestRule.onNodeWithContentDescription(
|
||||
getStringResource(R.string.scan_back_content_description)
|
||||
).also {
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_cancel_button).uppercase()).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_hint)).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.TEXT_STATE).also {
|
||||
it.assertIsDisplayed()
|
||||
it.assertTextEquals(getStringResource(R.string.scan_state_scanning))
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.QR_FRAME).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
@ -109,23 +97,19 @@ class ScanViewTest : UiTestPrerequisites() {
|
|||
|
||||
assertEquals(ScanState.Permission, testSetup.getScanState())
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.QR_FRAME).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.CAMERA_VIEW).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_hint)).also {
|
||||
composeTestRule.onNodeWithText(
|
||||
getStringResourceWithArgs(
|
||||
resId = R.string.scan_state_permission,
|
||||
getStringResource(R.string.app_name)
|
||||
)
|
||||
).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.TEXT_STATE).also {
|
||||
it.assertIsDisplayed()
|
||||
it.assertTextEquals(getStringResource(R.string.scan_state_permission))
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_settings_button), ignoreCase = true).also {
|
||||
it.assertIsDisplayed()
|
||||
it.assertHasClickAction()
|
||||
|
|
|
@ -3,6 +3,8 @@ package co.electriccoin.zcash.ui.integration.test.screen.scan.view
|
|||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import cash.z.ecc.android.sdk.type.AddressType
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.integration.test.common.getPermissionNegativeButtonUiObject
|
||||
import co.electriccoin.zcash.ui.integration.test.common.getPermissionPositiveButtonUiObject
|
||||
|
@ -56,7 +58,9 @@ class ScanViewTestSetup(
|
|||
},
|
||||
onScanStateChanged = {
|
||||
scanState.set(it)
|
||||
}
|
||||
},
|
||||
walletRestoringState = WalletRestoringState.NONE,
|
||||
addressValidationResult = AddressType.Unified
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
|||
import co.electriccoin.zcash.ui.fixture.UpdateInfoFixture
|
||||
import co.electriccoin.zcash.ui.integration.test.common.IntegrationTestingActivity
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateChecker
|
||||
import co.electriccoin.zcash.ui.screen.update.AppUpdateCheckerMock
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateInfo
|
||||
import co.electriccoin.zcash.ui.screen.update.model.UpdateState
|
||||
import co.electriccoin.zcash.ui.screen.update.viewmodel.UpdateViewModel
|
||||
|
|
|
@ -31,20 +31,23 @@ android {
|
|||
res.setSrcDirs(
|
||||
setOf(
|
||||
"src/main/res/ui/about",
|
||||
"src/main/res/ui/advanced_settings",
|
||||
"src/main/res/ui/account",
|
||||
"src/main/res/ui/authentication",
|
||||
"src/main/res/ui/balances",
|
||||
"src/main/res/ui/common",
|
||||
"src/main/res/ui/delete_wallet",
|
||||
"src/main/res/ui/export_data",
|
||||
"src/main/res/ui/history",
|
||||
"src/main/res/ui/home",
|
||||
"src/main/res/ui/choose_server",
|
||||
"src/main/res/ui/new_wallet_recovery",
|
||||
"src/main/res/ui/onboarding",
|
||||
"src/main/res/ui/receive",
|
||||
"src/main/res/ui/request",
|
||||
"src/main/res/ui/restore",
|
||||
"src/main/res/ui/scan",
|
||||
"src/main/res/ui/seed_recovery",
|
||||
"src/main/res/ui/send",
|
||||
"src/main/res/ui/send_confirmation",
|
||||
"src/main/res/ui/settings",
|
||||
"src/main/res/ui/support",
|
||||
"src/main/res/ui/update",
|
||||
|
@ -90,6 +93,7 @@ dependencies {
|
|||
implementation(libs.androidx.lifecycle.livedata)
|
||||
implementation(libs.androidx.splash)
|
||||
implementation(libs.androidx.workmanager)
|
||||
implementation(libs.bundles.androidx.biometric)
|
||||
implementation(libs.bundles.androidx.camera)
|
||||
implementation(libs.bundles.androidx.compose.core)
|
||||
implementation(libs.bundles.androidx.compose.extended)
|
||||
|
|
|
@ -11,12 +11,10 @@ import org.junit.Test
|
|||
import kotlin.test.assertTrue
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
import kotlin.time.ExperimentalTime
|
||||
import kotlin.time.TimeMark
|
||||
import kotlin.time.TimeSource
|
||||
|
||||
class FlowExtTest {
|
||||
@OptIn(ExperimentalTime::class)
|
||||
@Test
|
||||
@SmallTest
|
||||
fun throttle_one_sec() =
|
||||
|
@ -40,7 +38,6 @@ class FlowExtTest {
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalTime::class)
|
||||
private fun raceConditionTest(duration: Duration): Boolean =
|
||||
runBlocking {
|
||||
val flow = (0..1000).asFlow().throttle(duration)
|
||||
|
|
|
@ -11,8 +11,8 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
|||
import co.electriccoin.zcash.ui.common.compose.BrightenScreen
|
||||
import co.electriccoin.zcash.ui.common.compose.LocalScreenBrightness
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenBrightness
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
import kotlinx.coroutines.test.runTest
|
||||
|
@ -20,7 +20,6 @@ import org.junit.Rule
|
|||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
class ScreenBrightnessTest : UiTestPrerequisites() {
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
@ -31,19 +30,19 @@ class ScreenBrightnessTest : UiTestPrerequisites() {
|
|||
runTest {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
assertEquals(1, testSetup.getSecureBrightnessCount())
|
||||
assertEquals(ScreenBrightnessState.FULL, testSetup.getSecureBrightnessCount())
|
||||
|
||||
testSetup.mutableScreenBrightnessFlag.update { false }
|
||||
composeTestRule.awaitIdle()
|
||||
assertEquals(0, testSetup.getSecureBrightnessCount())
|
||||
assertEquals(ScreenBrightnessState.NORMAL, testSetup.getSecureBrightnessCount())
|
||||
}
|
||||
|
||||
private class TestSetup(composeTestRule: ComposeContentTestRule) {
|
||||
val mutableScreenBrightnessFlag = MutableStateFlow(true)
|
||||
|
||||
private val screenBrightness = ScreenBrightness()
|
||||
private val screenBrightness = ScreenBrightness
|
||||
|
||||
fun getSecureBrightnessCount() = screenBrightness.referenceCount.value
|
||||
fun getSecureBrightnessCount() = screenBrightness.referenceSwitch.value
|
||||
|
||||
init {
|
||||
runTest {
|
||||
|
|
|
@ -7,14 +7,18 @@ import cash.z.ecc.android.sdk.block.processor.CompactBlockProcessor
|
|||
import cash.z.ecc.android.sdk.model.Account
|
||||
import cash.z.ecc.android.sdk.model.BlockHeight
|
||||
import cash.z.ecc.android.sdk.model.PercentDecimal
|
||||
import cash.z.ecc.android.sdk.model.Proposal
|
||||
import cash.z.ecc.android.sdk.model.TransactionOverview
|
||||
import cash.z.ecc.android.sdk.model.TransactionRecipient
|
||||
import cash.z.ecc.android.sdk.model.TransactionSubmitResult
|
||||
import cash.z.ecc.android.sdk.model.UnifiedSpendingKey
|
||||
import cash.z.ecc.android.sdk.model.WalletBalance
|
||||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import cash.z.ecc.android.sdk.model.ZcashNetwork
|
||||
import cash.z.ecc.android.sdk.type.AddressType
|
||||
import cash.z.ecc.android.sdk.type.ConsensusMatchType
|
||||
import cash.z.ecc.android.sdk.type.ServerValidation
|
||||
import co.electriccoin.lightwallet.client.model.LightWalletEndpoint
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
|
||||
|
@ -78,6 +82,13 @@ internal class MockSynchronizer : CloseableSynchronizer {
|
|||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
||||
override suspend fun createProposedTransactions(
|
||||
proposal: Proposal,
|
||||
usk: UnifiedSpendingKey
|
||||
): Flow<TransactionSubmitResult> {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} yet.")
|
||||
}
|
||||
|
||||
override fun getMemos(transactionOverview: TransactionOverview): Flow<String> {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
@ -118,6 +129,24 @@ internal class MockSynchronizer : CloseableSynchronizer {
|
|||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
||||
override suspend fun proposeShielding(
|
||||
account: Account,
|
||||
shieldingThreshold: Zatoshi,
|
||||
memo: String,
|
||||
transparentReceiver: String?
|
||||
): Proposal? {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} yet.")
|
||||
}
|
||||
|
||||
override suspend fun proposeTransfer(
|
||||
account: Account,
|
||||
recipient: String,
|
||||
amount: Zatoshi,
|
||||
memo: String
|
||||
): Proposal {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} yet.")
|
||||
}
|
||||
|
||||
override suspend fun quickRewind() {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
@ -133,6 +162,13 @@ internal class MockSynchronizer : CloseableSynchronizer {
|
|||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
||||
@Deprecated(
|
||||
"Upcoming SDK 2.1 will create multiple transactions at once for some recipients.",
|
||||
replaceWith =
|
||||
ReplaceWith(
|
||||
"createProposedTransactions(proposeTransfer(usk.account, toAddress, amount, memo), usk)"
|
||||
)
|
||||
)
|
||||
override suspend fun sendToAddress(
|
||||
usk: UnifiedSpendingKey,
|
||||
amount: Zatoshi,
|
||||
|
@ -142,6 +178,13 @@ internal class MockSynchronizer : CloseableSynchronizer {
|
|||
return 1
|
||||
}
|
||||
|
||||
@Deprecated(
|
||||
"Upcoming SDK 2.1 will create multiple transactions at once for some recipients.",
|
||||
replaceWith =
|
||||
ReplaceWith(
|
||||
"proposeShielding(usk.account, shieldingThreshold, memo)?.let { createProposedTransactions(it, usk) }"
|
||||
)
|
||||
)
|
||||
override suspend fun shieldFunds(
|
||||
usk: UnifiedSpendingKey,
|
||||
memo: String
|
||||
|
@ -155,6 +198,13 @@ internal class MockSynchronizer : CloseableSynchronizer {
|
|||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
||||
override suspend fun validateServerEndpoint(
|
||||
context: Context,
|
||||
endpoint: LightWalletEndpoint
|
||||
): ServerValidation {
|
||||
error("Intentionally not implemented in ${MockSynchronizer::class.simpleName} implementation.")
|
||||
}
|
||||
|
||||
override suspend fun getExistingDataDbFilePath(
|
||||
context: Context,
|
||||
network: ZcashNetwork,
|
||||
|
|
|
@ -1,33 +1,20 @@
|
|||
package co.electriccoin.zcash.ui.fixture
|
||||
|
||||
import cash.z.ecc.android.sdk.fixture.WalletFixture
|
||||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import cash.z.ecc.android.sdk.model.ZcashNetwork
|
||||
import cash.z.ecc.android.sdk.model.toZecString
|
||||
import cash.z.ecc.android.sdk.type.AddressType
|
||||
import cash.z.ecc.sdk.fixture.MemoFixture
|
||||
import cash.z.ecc.sdk.fixture.ZatoshiFixture
|
||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanResult
|
||||
import co.electriccoin.zcash.ui.screen.send.model.SendArgumentsWrapper
|
||||
import co.electriccoin.zcash.ui.common.model.SerializableAddress
|
||||
import co.electriccoin.zcash.ui.screen.send.model.SendArguments
|
||||
|
||||
internal object SendArgumentsWrapperFixture {
|
||||
val RECIPIENT_ADDRESS =
|
||||
ScanResult(
|
||||
SerializableAddress(
|
||||
address = WalletFixture.Alice.getAddresses(ZcashNetwork.Testnet).unified,
|
||||
type = AddressType.Unified
|
||||
)
|
||||
val MEMO = MemoFixture.new("Thanks for lunch").value
|
||||
val AMOUNT = ZatoshiFixture.new(1)
|
||||
|
||||
fun amountToFixtureZecString(amount: Zatoshi?) = amount?.toZecString()
|
||||
|
||||
fun new(
|
||||
recipientAddress: ScanResult? = RECIPIENT_ADDRESS,
|
||||
amount: Zatoshi? = AMOUNT,
|
||||
memo: String? = MEMO
|
||||
) = SendArgumentsWrapper(
|
||||
recipientAddress = recipientAddress?.toRecipient(),
|
||||
amount = amountToFixtureZecString(amount),
|
||||
memo = memo
|
||||
)
|
||||
fun new(recipientAddress: SerializableAddress? = RECIPIENT_ADDRESS) =
|
||||
SendArguments(
|
||||
recipientAddress = recipientAddress?.toRecipient(),
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package co.electriccoin.zcash.ui.screen.securitywarning.util
|
||||
package co.electriccoin.zcash.ui.screen.about.util
|
||||
|
||||
import android.content.Intent
|
||||
import androidx.test.filters.SmallTest
|
|
@ -1,7 +1,9 @@
|
|||
package co.electriccoin.zcash.ui.screen.about.view
|
||||
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.common.model.VersionInfo
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.support.model.ConfigInfo
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
@ -23,8 +25,11 @@ class AboutViewTestSetup(
|
|||
ZcashTheme {
|
||||
About(
|
||||
onBack = { onBackCount.incrementAndGet() },
|
||||
configInfo = configInfo,
|
||||
onPrivacyPolicy = {},
|
||||
snackbarHostState = SnackbarHostState(),
|
||||
versionInfo = versionInfo,
|
||||
configInfo = configInfo
|
||||
walletRestoringState = WalletRestoringState.NONE
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,13 @@ package co.electriccoin.zcash.ui.screen.account
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.common.model.WalletSnapshot
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.fixture.BalanceStateFixture
|
||||
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.history.fixture.TransactionHistoryUiStateFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUiState
|
||||
import co.electriccoin.zcash.ui.screen.account.view.Account
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
|
@ -11,10 +16,26 @@ class AccountTestSetup(
|
|||
private val composeTestRule: ComposeContentTestRule,
|
||||
private val walletSnapshot: WalletSnapshot,
|
||||
) {
|
||||
// TODO [#1282]: Update AccountView Tests #1282
|
||||
// TODO [#1282]: https://github.com/Electric-Coin-Company/zashi-android/issues/1282
|
||||
|
||||
val initialTransactionState: TransactionUiState = TransactionHistoryUiStateFixture.new()
|
||||
|
||||
private val onSettingsCount = AtomicInteger(0)
|
||||
private val onReceiveCount = AtomicInteger(0)
|
||||
private val onSendCount = AtomicInteger(0)
|
||||
private val onHistoryCount = AtomicInteger(0)
|
||||
private val onItemClickCount = AtomicInteger(0)
|
||||
private val onItemIdClickCount = AtomicInteger(0)
|
||||
|
||||
fun getOnItemClickCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onItemClickCount.get()
|
||||
}
|
||||
|
||||
fun getOnItemIdClickCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onItemIdClickCount.get()
|
||||
}
|
||||
|
||||
fun getOnSettingsCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
|
@ -31,11 +52,6 @@ class AccountTestSetup(
|
|||
return onSendCount.get()
|
||||
}
|
||||
|
||||
fun getOnHistoryCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onHistoryCount.get()
|
||||
}
|
||||
|
||||
fun getWalletSnapshot(): WalletSnapshot {
|
||||
composeTestRule.waitForIdle()
|
||||
return walletSnapshot
|
||||
|
@ -45,15 +61,17 @@ class AccountTestSetup(
|
|||
@Suppress("TestFunctionName")
|
||||
fun DefaultContent() {
|
||||
Account(
|
||||
walletSnapshot = walletSnapshot,
|
||||
isKeepScreenOnWhileSyncing = false,
|
||||
balanceState = BalanceStateFixture.new(),
|
||||
goSettings = {
|
||||
onSettingsCount.incrementAndGet()
|
||||
},
|
||||
goBalances = {},
|
||||
goHistory = {
|
||||
onHistoryCount.incrementAndGet()
|
||||
transactionsUiState = initialTransactionState,
|
||||
onTransactionItemAction = {
|
||||
onItemClickCount.incrementAndGet()
|
||||
},
|
||||
walletRestoringState = WalletRestoringState.NONE,
|
||||
walletSnapshot = WalletSnapshotFixture.new()
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,24 +1,20 @@
|
|||
package co.electriccoin.zcash.ui.screen.history
|
||||
package co.electriccoin.zcash.ui.screen.account.history
|
||||
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.history.state.TransactionHistorySyncState
|
||||
import co.electriccoin.zcash.ui.screen.history.view.History
|
||||
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUiState
|
||||
import co.electriccoin.zcash.ui.screen.account.view.HistoryContainer
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
class HistoryTestSetup(
|
||||
private val composeTestRule: ComposeContentTestRule,
|
||||
initialHistorySyncState: TransactionHistorySyncState
|
||||
initialHistoryUiState: TransactionUiState
|
||||
) {
|
||||
private val onBackClickCount = AtomicInteger(0)
|
||||
private val onItemClickCount = AtomicInteger(0)
|
||||
private val onItemIdClickCount = AtomicInteger(0)
|
||||
|
||||
fun getOnBackClickCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onBackClickCount.get()
|
||||
}
|
||||
|
||||
fun getOnItemClickCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onItemClickCount.get()
|
||||
|
@ -32,17 +28,13 @@ class HistoryTestSetup(
|
|||
init {
|
||||
composeTestRule.setContent {
|
||||
ZcashTheme {
|
||||
History(
|
||||
transactionState = initialHistorySyncState,
|
||||
onBack = {
|
||||
onBackClickCount.incrementAndGet()
|
||||
},
|
||||
onItemClick = {
|
||||
onItemClickCount.incrementAndGet()
|
||||
},
|
||||
onTransactionIdClick = {
|
||||
HistoryContainer(
|
||||
transactionState = initialHistoryUiState,
|
||||
onTransactionItemAction = {
|
||||
onItemIdClickCount.incrementAndGet()
|
||||
}
|
||||
},
|
||||
walletRestoringState = WalletRestoringState.NONE,
|
||||
walletSnapshot = WalletSnapshotFixture.new()
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,47 @@
|
|||
package co.electriccoin.zcash.ui.screen.account.history.fixture
|
||||
|
||||
import cash.z.ecc.android.sdk.fixture.TransactionOverviewFixture
|
||||
import cash.z.ecc.android.sdk.model.Account
|
||||
import cash.z.ecc.android.sdk.model.TransactionRecipient
|
||||
import cash.z.ecc.android.sdk.type.AddressType
|
||||
import co.electriccoin.zcash.ui.screen.account.ext.TransactionOverviewExt
|
||||
import co.electriccoin.zcash.ui.screen.account.state.TransactionHistorySyncState
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
internal object TransactionHistorySyncStateFixture {
|
||||
val TRANSACTIONS =
|
||||
persistentListOf(
|
||||
TransactionOverviewExt(
|
||||
TransactionOverviewFixture.new(),
|
||||
TransactionRecipient.Account(Account.DEFAULT),
|
||||
AddressType.Shielded
|
||||
),
|
||||
TransactionOverviewExt(
|
||||
TransactionOverviewFixture.new(),
|
||||
TransactionRecipient.Account(Account(1)),
|
||||
AddressType.Transparent
|
||||
),
|
||||
TransactionOverviewExt(
|
||||
TransactionOverviewFixture.new(),
|
||||
null,
|
||||
AddressType.Unified
|
||||
),
|
||||
)
|
||||
val STATE = TransactionHistorySyncState.Syncing(TRANSACTIONS)
|
||||
|
||||
fun new(
|
||||
transactions: ImmutableList<TransactionOverviewExt> = TRANSACTIONS,
|
||||
state: TransactionHistorySyncState = STATE
|
||||
) = when (state) {
|
||||
is TransactionHistorySyncState.Syncing -> {
|
||||
state.copy(transactions)
|
||||
}
|
||||
is TransactionHistorySyncState.Done -> {
|
||||
state.copy(transactions)
|
||||
}
|
||||
TransactionHistorySyncState.Loading -> {
|
||||
state
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,22 @@
|
|||
package co.electriccoin.zcash.ui.screen.account.history.fixture
|
||||
|
||||
import co.electriccoin.zcash.ui.screen.account.fixture.TransactionsFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUi
|
||||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUiState
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
internal object TransactionHistoryUiStateFixture {
|
||||
val TRANSACTIONS = TransactionsFixture.new()
|
||||
val STATE = TransactionUiState.Done(TRANSACTIONS)
|
||||
|
||||
fun new(
|
||||
transactions: ImmutableList<TransactionUi> = TRANSACTIONS,
|
||||
state: TransactionUiState = STATE
|
||||
) = when (state) {
|
||||
is TransactionUiState.Loading -> state
|
||||
is TransactionUiState.Syncing -> state.copy(transactions)
|
||||
is TransactionUiState.Done -> state.copy(transactions)
|
||||
TransactionUiState.DoneEmpty -> state
|
||||
TransactionUiState.SyncingEmpty -> state
|
||||
}
|
||||
}
|
|
@ -1,26 +1,25 @@
|
|||
package co.electriccoin.zcash.ui.screen.history.view
|
||||
package co.electriccoin.zcash.ui.screen.account.history.view
|
||||
|
||||
import androidx.compose.ui.test.assertCountEquals
|
||||
import androidx.compose.ui.test.assertHeightIsAtLeast
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onAllNodesWithTag
|
||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.screen.history.HistoryTag
|
||||
import co.electriccoin.zcash.ui.screen.history.HistoryTestSetup
|
||||
import co.electriccoin.zcash.ui.screen.history.fixture.TransactionHistorySyncStateFixture
|
||||
import co.electriccoin.zcash.ui.screen.history.state.TransactionHistorySyncState
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import co.electriccoin.zcash.ui.screen.account.HistoryTag
|
||||
import co.electriccoin.zcash.ui.screen.account.history.HistoryTestSetup
|
||||
import co.electriccoin.zcash.ui.screen.account.history.fixture.TransactionHistorySyncStateFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.history.fixture.TransactionHistoryUiStateFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUiState
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import kotlin.test.Ignore
|
||||
import kotlin.test.Test
|
||||
|
||||
@Ignore("Disabled because of #1160. Will be resolved as part of #1282.")
|
||||
class HistoryViewTest {
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
@ -28,7 +27,7 @@ class HistoryViewTest {
|
|||
@Test
|
||||
@MediumTest
|
||||
fun check_loading_state() {
|
||||
newTestSetup(TransactionHistorySyncState.Loading)
|
||||
newTestSetup(TransactionUiState.Loading)
|
||||
|
||||
composeTestRule.onNodeWithTag(HistoryTag.PROGRESS).also {
|
||||
it.assertExists()
|
||||
|
@ -39,15 +38,15 @@ class HistoryViewTest {
|
|||
@MediumTest
|
||||
fun check_syncing_state() {
|
||||
newTestSetup(
|
||||
TransactionHistorySyncStateFixture.new(
|
||||
state = TransactionHistorySyncStateFixture.STATE,
|
||||
transactions = TransactionHistorySyncStateFixture.TRANSACTIONS
|
||||
TransactionHistoryUiStateFixture.new(
|
||||
state = TransactionUiState.Syncing(persistentListOf()),
|
||||
transactions = TransactionHistoryUiStateFixture.TRANSACTIONS
|
||||
)
|
||||
)
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
it.assertExists()
|
||||
}
|
||||
// composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
// it.assertExists()
|
||||
// }
|
||||
// No progress bar, as we have some transactions laid out
|
||||
composeTestRule.onNodeWithTag(HistoryTag.PROGRESS).also {
|
||||
it.assertDoesNotExist()
|
||||
|
@ -62,37 +61,37 @@ class HistoryViewTest {
|
|||
@MediumTest
|
||||
fun check_done_state_no_transactions() {
|
||||
newTestSetup(
|
||||
TransactionHistorySyncStateFixture.new(
|
||||
state = TransactionHistorySyncState.Done(persistentListOf()),
|
||||
transactions = persistentListOf()
|
||||
TransactionHistoryUiStateFixture.new(
|
||||
state = TransactionUiState.Syncing(persistentListOf()),
|
||||
transactions = TransactionHistoryUiStateFixture.TRANSACTIONS
|
||||
)
|
||||
)
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
// composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
// it.assertDoesNotExist()
|
||||
// }
|
||||
composeTestRule.onNodeWithTag(HistoryTag.PROGRESS).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
composeTestRule.onNodeWithTag(HistoryTag.TRANSACTION_LIST).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.history_empty)).also {
|
||||
it.assertExists()
|
||||
}
|
||||
// composeTestRule.onNodeWithText(getStringResource(R.string.history_empty)).also {
|
||||
// it.assertExists()
|
||||
// }
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun check_done_state_with_transactions() {
|
||||
newTestSetup(
|
||||
TransactionHistorySyncStateFixture.new(
|
||||
state = TransactionHistorySyncState.Done(persistentListOf()),
|
||||
transactions = TransactionHistorySyncStateFixture.TRANSACTIONS
|
||||
TransactionHistoryUiStateFixture.new(
|
||||
state = TransactionUiState.Syncing(persistentListOf()),
|
||||
transactions = TransactionHistoryUiStateFixture.TRANSACTIONS
|
||||
)
|
||||
)
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
// composeTestRule.onNodeWithText(getStringResource(R.string.history_syncing)).also {
|
||||
// it.assertDoesNotExist()
|
||||
// }
|
||||
composeTestRule.onNodeWithTag(HistoryTag.PROGRESS).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
|
@ -100,35 +99,19 @@ class HistoryViewTest {
|
|||
it.assertExists()
|
||||
it.assertHeightIsAtLeast(1.dp)
|
||||
}
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.history_empty)).also {
|
||||
it.assertDoesNotExist()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun back_click_test() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnBackClickCount())
|
||||
|
||||
composeTestRule.onNodeWithContentDescription(
|
||||
getStringResource(R.string.history_back_content_description)
|
||||
).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(1, testSetup.getOnBackClickCount())
|
||||
// composeTestRule.onNodeWithText(getStringResource(R.string.history_empty)).also {
|
||||
// it.assertDoesNotExist()
|
||||
// }
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun item_click_test() {
|
||||
val testSetup = newTestSetup(TransactionHistorySyncStateFixture.STATE)
|
||||
val testSetup = newTestSetup(TransactionHistoryUiStateFixture.STATE)
|
||||
|
||||
assertEquals(0, testSetup.getOnItemClickCount())
|
||||
|
||||
composeTestRule.onAllNodesWithTag(HistoryTag.TRANSACTION_ITEM, useUnmergedTree = true).also {
|
||||
composeTestRule.onAllNodesWithTag(HistoryTag.TRANSACTION_ITEM_TITLE, useUnmergedTree = true).also {
|
||||
it.assertCountEquals(TransactionHistorySyncStateFixture.TRANSACTIONS.size)
|
||||
|
||||
TransactionHistorySyncStateFixture.TRANSACTIONS.forEachIndexed { index, _ ->
|
||||
|
@ -142,7 +125,7 @@ class HistoryViewTest {
|
|||
@Test
|
||||
@MediumTest
|
||||
fun transaction_id_click_test() {
|
||||
val testSetup = newTestSetup(TransactionHistorySyncStateFixture.STATE)
|
||||
val testSetup = newTestSetup(TransactionHistoryUiStateFixture.STATE)
|
||||
|
||||
assertEquals(0, testSetup.getOnItemIdClickCount())
|
||||
|
||||
|
@ -157,12 +140,10 @@ class HistoryViewTest {
|
|||
assertEquals(TransactionHistorySyncStateFixture.TRANSACTIONS.size, testSetup.getOnItemIdClickCount())
|
||||
}
|
||||
|
||||
private fun newTestSetup(
|
||||
transactionHistorySyncState: TransactionHistorySyncState = TransactionHistorySyncStateFixture.new()
|
||||
): HistoryTestSetup {
|
||||
private fun newTestSetup(state: TransactionUiState = TransactionHistoryUiStateFixture.new()): HistoryTestSetup {
|
||||
return HistoryTestSetup(
|
||||
composeTestRule = composeTestRule,
|
||||
initialHistorySyncState = transactionHistorySyncState
|
||||
initialHistoryUiState = state
|
||||
)
|
||||
}
|
||||
}
|
|
@ -1,22 +1,16 @@
|
|||
package co.electriccoin.zcash.ui.screen.account.view
|
||||
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performScrollTo
|
||||
import androidx.test.filters.MediumTest
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.common.model.WalletSnapshot
|
||||
import co.electriccoin.zcash.ui.design.component.CommonTag
|
||||
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
|
||||
import co.electriccoin.zcash.ui.screen.account.AccountTag
|
||||
import co.electriccoin.zcash.ui.screen.account.AccountTestSetup
|
||||
import co.electriccoin.zcash.ui.screen.send.clickSettingsTopAppBarMenu
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Assert
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
@ -41,22 +35,6 @@ class AccountViewTest : UiTestPrerequisites() {
|
|||
composeTestRule.onNodeWithTag(AccountTag.BALANCE_VIEWS).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.account_button_history), ignoreCase = true).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun click_history_button() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
Assert.assertEquals(0, testSetup.getOnHistoryCount())
|
||||
|
||||
composeTestRule.clickHistory()
|
||||
|
||||
Assert.assertEquals(1, testSetup.getOnHistoryCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -79,10 +57,3 @@ class AccountViewTest : UiTestPrerequisites() {
|
|||
setDefaultContent()
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.clickHistory() {
|
||||
onNodeWithText(getStringResource(R.string.home_button_history), ignoreCase = true).also {
|
||||
it.performScrollTo()
|
||||
it.performClick()
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,10 @@ package co.electriccoin.zcash.ui.screen.balances
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.common.model.WalletSnapshot
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.fixture.BalanceStateFixture
|
||||
import co.electriccoin.zcash.ui.screen.balances.model.ShieldState
|
||||
import co.electriccoin.zcash.ui.screen.balances.view.Balances
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
@ -29,15 +31,19 @@ class BalancesTestSetup(
|
|||
@Suppress("TestFunctionName")
|
||||
fun DefaultContent() {
|
||||
Balances(
|
||||
balanceState = BalanceStateFixture.new(),
|
||||
onSettings = {
|
||||
onSettingsCount.incrementAndGet()
|
||||
},
|
||||
isDetailedStatus = false,
|
||||
isFiatConversionEnabled = isShowFiatConversion,
|
||||
isKeepScreenOnWhileSyncing = false,
|
||||
isUpdateAvailable = false,
|
||||
walletSnapshot = walletSnapshot,
|
||||
isShowingErrorDialog = false,
|
||||
setShowErrorDialog = {},
|
||||
onShielding = {},
|
||||
shieldState = ShieldState.Available
|
||||
shieldState = ShieldState.Available,
|
||||
walletSnapshot = walletSnapshot,
|
||||
walletRestoringState = WalletRestoringState.NONE,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -29,9 +29,10 @@ class WalletDisplayValuesTest {
|
|||
)
|
||||
val values =
|
||||
WalletDisplayValues.getNextValues(
|
||||
getAppContext(),
|
||||
walletSnapshot,
|
||||
false
|
||||
context = getAppContext(),
|
||||
walletSnapshot = walletSnapshot,
|
||||
isUpdateAvailable = false,
|
||||
isDetailedStatus = false
|
||||
)
|
||||
|
||||
assertNotNull(values)
|
||||
|
|
|
@ -3,6 +3,7 @@ package co.electriccoin.zcash.ui.screen.exportdata.view
|
|||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
@ -33,7 +34,7 @@ class ExportPrivateDataViewTestSetup(private val composeTestRule: ComposeContent
|
|||
@Suppress("TestFunctionName")
|
||||
fun DefaultContent() {
|
||||
ExportPrivateData(
|
||||
SnackbarHostState(),
|
||||
snackbarHostState = SnackbarHostState(),
|
||||
onBack = {
|
||||
onBackCount.incrementAndGet()
|
||||
},
|
||||
|
@ -42,7 +43,8 @@ class ExportPrivateDataViewTestSetup(private val composeTestRule: ComposeContent
|
|||
},
|
||||
onConfirm = {
|
||||
onConfirmCount.incrementAndGet()
|
||||
}
|
||||
},
|
||||
walletRestoringState = WalletRestoringState.NONE
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -1,32 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.screen.history.fixture
|
||||
|
||||
import cash.z.ecc.android.sdk.fixture.TransactionOverviewFixture
|
||||
import cash.z.ecc.android.sdk.model.TransactionOverview
|
||||
import co.electriccoin.zcash.ui.screen.history.state.TransactionHistorySyncState
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
internal object TransactionHistorySyncStateFixture {
|
||||
val TRANSACTIONS =
|
||||
persistentListOf(
|
||||
TransactionOverviewFixture.new(),
|
||||
TransactionOverviewFixture.new(),
|
||||
TransactionOverviewFixture.new()
|
||||
)
|
||||
val STATE = TransactionHistorySyncState.Syncing(TRANSACTIONS)
|
||||
|
||||
fun new(
|
||||
transactions: ImmutableList<TransactionOverview> = TRANSACTIONS,
|
||||
state: TransactionHistorySyncState = STATE
|
||||
) = when (state) {
|
||||
is TransactionHistorySyncState.Syncing -> {
|
||||
state.copy(transactions)
|
||||
}
|
||||
is TransactionHistorySyncState.Done -> {
|
||||
state.copy(transactions)
|
||||
}
|
||||
TransactionHistorySyncState.Loading -> {
|
||||
state
|
||||
}
|
||||
}
|
||||
}
|
|
@ -3,23 +3,18 @@ package co.electriccoin.zcash.ui.screen.newwalletrecovery.view
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import cash.z.ecc.sdk.fixture.PersistableWalletFixture
|
||||
import co.electriccoin.zcash.ui.common.model.VersionInfo
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
class NewWalletRecoveryTestSetup(
|
||||
private val composeTestRule: ComposeContentTestRule,
|
||||
private val versionInfo: VersionInfo,
|
||||
) {
|
||||
private val onSeedCopyCount = AtomicInteger(0)
|
||||
|
||||
private val onBirthdayCopyCount = AtomicInteger(0)
|
||||
|
||||
private val onCompleteCallbackCount = AtomicInteger(0)
|
||||
|
||||
fun getOnSeedCopyCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onSeedCopyCount.get()
|
||||
}
|
||||
|
||||
fun getOnBirthdayCopyCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onBirthdayCopyCount.get()
|
||||
|
@ -36,9 +31,10 @@ class NewWalletRecoveryTestSetup(
|
|||
ZcashTheme {
|
||||
NewWalletRecovery(
|
||||
PersistableWalletFixture.new(),
|
||||
onSeedCopy = { onSeedCopyCount.incrementAndGet() },
|
||||
onSeedCopy = { /* Not tested - debug mode feature only */ },
|
||||
onBirthdayCopy = { onBirthdayCopyCount.incrementAndGet() },
|
||||
onComplete = { onCompleteCallbackCount.incrementAndGet() },
|
||||
versionInfo = versionInfo,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
|||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.common.test.CommonTag.WALLET_BIRTHDAY
|
||||
import co.electriccoin.zcash.ui.design.component.CommonTag
|
||||
import co.electriccoin.zcash.ui.fixture.VersionInfoFixture
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import org.junit.Rule
|
||||
import kotlin.test.Test
|
||||
|
@ -21,7 +22,10 @@ class NewWalletRecoveryViewTest : UiTestPrerequisites() {
|
|||
val composeTestRule = createComposeRule()
|
||||
|
||||
private fun newTestSetup(): NewWalletRecoveryTestSetup {
|
||||
return NewWalletRecoveryTestSetup(composeTestRule).apply {
|
||||
return NewWalletRecoveryTestSetup(
|
||||
composeTestRule,
|
||||
VersionInfoFixture.new()
|
||||
).apply {
|
||||
setDefaultContent()
|
||||
}
|
||||
}
|
||||
|
@ -31,14 +35,9 @@ class NewWalletRecoveryViewTest : UiTestPrerequisites() {
|
|||
fun default_ui_state_test() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
assertEquals(0, testSetup.getOnBirthdayCopyCount())
|
||||
assertEquals(0, testSetup.getOnCompleteCount())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_recovery_copy)).also {
|
||||
it.assertExists()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithContentDescription(
|
||||
label = getStringResource(R.string.zcash_logo_content_description)
|
||||
).also {
|
||||
|
@ -69,40 +68,10 @@ class NewWalletRecoveryViewTest : UiTestPrerequisites() {
|
|||
it.assertExists()
|
||||
}
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
assertEquals(0, testSetup.getOnBirthdayCopyCount())
|
||||
assertEquals(0, testSetup.getOnCompleteCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun copy_seed_to_clipboard_from_app_bar_test() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.new_wallet_recovery_copy)).also { menuButton ->
|
||||
menuButton.performClick()
|
||||
}
|
||||
|
||||
assertEquals(1, testSetup.getOnSeedCopyCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun copy_seed_to_clipboard_content_test() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
|
||||
composeTestRule.onNodeWithTag(CommonTag.CHIP_LAYOUT).also {
|
||||
it.performScrollTo()
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(1, testSetup.getOnSeedCopyCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun copy_birthday_to_clipboard_content_test() {
|
||||
|
@ -123,7 +92,6 @@ class NewWalletRecoveryViewTest : UiTestPrerequisites() {
|
|||
fun click_finish_test() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
assertEquals(0, testSetup.getOnBirthdayCopyCount())
|
||||
assertEquals(0, testSetup.getOnCompleteCount())
|
||||
|
||||
|
@ -135,7 +103,6 @@ class NewWalletRecoveryViewTest : UiTestPrerequisites() {
|
|||
it.performClick()
|
||||
}
|
||||
|
||||
assertEquals(0, testSetup.getOnSeedCopyCount())
|
||||
assertEquals(0, testSetup.getOnBirthdayCopyCount())
|
||||
assertEquals(1, testSetup.getOnCompleteCount())
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import co.electriccoin.zcash.test.UiTestPrerequisites
|
|||
import co.electriccoin.zcash.ui.common.compose.LocalScreenSecurity
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenSecurity
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.fixture.VersionInfoFixture
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
|
@ -45,7 +46,8 @@ class NewWalletRecoveryViewsSecuredScreenTest : UiTestPrerequisites() {
|
|||
PersistableWalletFixture.new(),
|
||||
onSeedCopy = {},
|
||||
onBirthdayCopy = {},
|
||||
onComplete = {}
|
||||
onComplete = {},
|
||||
versionInfo = VersionInfoFixture.new()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ package co.electriccoin.zcash.ui.screen.onboarding
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.view.ShortOnboarding
|
||||
import co.electriccoin.zcash.ui.screen.onboarding.view.Onboarding
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
class OnboardingTestSetup(
|
||||
|
@ -26,9 +26,7 @@ class OnboardingTestSetup(
|
|||
@Suppress("TestFunctionName")
|
||||
fun DefaultContent() {
|
||||
ZcashTheme {
|
||||
ShortOnboarding(
|
||||
// It's fine to test the screen UI after the welcome animation
|
||||
showWelcomeAnim = false,
|
||||
Onboarding(
|
||||
// Debug only UI state does not need to be tested
|
||||
isDebugMenuEnabled = false,
|
||||
onImportWallet = { onImportWalletCallbackCount.incrementAndGet() },
|
||||
|
|
|
@ -13,6 +13,7 @@ import co.electriccoin.zcash.ui.test.getStringResource
|
|||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import kotlin.test.Ignore
|
||||
|
||||
class OnboardingViewTest : UiTestPrerequisites() {
|
||||
@get:Rule
|
||||
|
@ -66,6 +67,7 @@ class OnboardingViewTest : UiTestPrerequisites() {
|
|||
|
||||
@Test
|
||||
@MediumTest
|
||||
@Ignore("Disabling this until [SemanticNodeInteraction.performScrollTo] works as expected")
|
||||
fun click_import_wallet() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
|
|
|
@ -5,6 +5,7 @@ import androidx.test.filters.MediumTest
|
|||
import cash.z.ecc.android.sdk.fixture.WalletAddressesFixture
|
||||
import cash.z.ecc.android.sdk.model.WalletAddresses
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState
|
||||
import co.electriccoin.zcash.ui.common.model.VersionInfo
|
||||
import co.electriccoin.zcash.ui.fixture.VersionInfoFixture
|
||||
import kotlinx.coroutines.test.runTest
|
||||
|
@ -27,7 +28,7 @@ class ReceiveViewScreenBrightnessTest : UiTestPrerequisites() {
|
|||
VersionInfoFixture.new(isDebuggable = true)
|
||||
)
|
||||
|
||||
assertEquals(0, testSetup.getScreenBrightnessCount())
|
||||
assertEquals(ScreenBrightnessState.NORMAL, testSetup.getScreenBrightness())
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -41,13 +42,11 @@ class ReceiveViewScreenBrightnessTest : UiTestPrerequisites() {
|
|||
VersionInfoFixture.new(isDebuggable = true)
|
||||
)
|
||||
|
||||
assertEquals(false, testSetup.getOnAdjustBrightness())
|
||||
assertEquals(0, testSetup.getScreenBrightnessCount())
|
||||
assertEquals(ScreenBrightnessState.NORMAL, testSetup.getOnAdjustBrightness())
|
||||
|
||||
composeTestRule.clickAdjustBrightness()
|
||||
|
||||
assertEquals(true, testSetup.getOnAdjustBrightness())
|
||||
assertEquals(1, testSetup.getScreenBrightnessCount())
|
||||
assertEquals(ScreenBrightnessState.FULL, testSetup.getOnAdjustBrightness())
|
||||
}
|
||||
|
||||
private fun newTestSetup(
|
||||
|
|
|
@ -40,12 +40,10 @@ class ReceiveViewScreenTimeoutTest : UiTestPrerequisites() {
|
|||
VersionInfoFixture.new(isDebuggable = true)
|
||||
)
|
||||
|
||||
assertEquals(false, testSetup.getOnAdjustBrightness())
|
||||
assertEquals(0, testSetup.getScreenTimeoutCount())
|
||||
|
||||
composeTestRule.clickAdjustBrightness()
|
||||
|
||||
assertEquals(true, testSetup.getOnAdjustBrightness())
|
||||
assertEquals(1, testSetup.getScreenTimeoutCount())
|
||||
}
|
||||
|
||||
|
|
|
@ -10,12 +10,13 @@ import co.electriccoin.zcash.ui.R
|
|||
import co.electriccoin.zcash.ui.common.compose.LocalScreenBrightness
|
||||
import co.electriccoin.zcash.ui.common.compose.LocalScreenTimeout
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenBrightness
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState
|
||||
import co.electriccoin.zcash.ui.common.compose.ScreenTimeout
|
||||
import co.electriccoin.zcash.ui.common.model.VersionInfo
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.fixture.VersionInfoFixture
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
||||
class ReceiveViewTestSetup(
|
||||
|
@ -25,17 +26,17 @@ class ReceiveViewTestSetup(
|
|||
) {
|
||||
private val onSettingsCount = AtomicInteger(0)
|
||||
private val onAddressDetailsCount = AtomicInteger(0)
|
||||
private val screenBrightness = ScreenBrightness()
|
||||
private val screenBrightness = ScreenBrightness
|
||||
private val screenTimeout = ScreenTimeout()
|
||||
private val onAdjustBrightness = AtomicBoolean(false)
|
||||
private var onAdjustBrightness: ScreenBrightnessState = ScreenBrightnessState.NORMAL
|
||||
|
||||
fun getScreenBrightnessCount() = screenBrightness.referenceCount.value
|
||||
fun getScreenBrightness() = screenBrightness.referenceSwitch.value
|
||||
|
||||
fun getScreenTimeoutCount() = screenTimeout.referenceCount.value
|
||||
|
||||
fun getOnAdjustBrightness(): Boolean {
|
||||
fun getOnAdjustBrightness(): ScreenBrightnessState {
|
||||
composeTestRule.waitForIdle()
|
||||
return onAdjustBrightness.get()
|
||||
return onAdjustBrightness
|
||||
}
|
||||
|
||||
fun getOnSettingsCount(): Int {
|
||||
|
@ -63,11 +64,14 @@ class ReceiveViewTestSetup(
|
|||
onSettingsCount.getAndIncrement()
|
||||
},
|
||||
onAdjustBrightness = {
|
||||
onAdjustBrightness.getAndSet(it)
|
||||
onAdjustBrightness = onAdjustBrightness.getChange()
|
||||
screenTimeout.disableScreenTimeout()
|
||||
},
|
||||
onAddrCopyToClipboard = {},
|
||||
onQrImageShare = {},
|
||||
versionInfo = versionInfo
|
||||
screenBrightnessState = ScreenBrightnessState.NORMAL,
|
||||
versionInfo = versionInfo,
|
||||
walletRestoringState = WalletRestoringState.NONE
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,294 +0,0 @@
|
|||
package co.electriccoin.zcash.ui.screen.request.view
|
||||
|
||||
import androidx.compose.ui.test.assertIsNotEnabled
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||
import androidx.compose.ui.test.onNodeWithText
|
||||
import androidx.compose.ui.test.performClick
|
||||
import androidx.compose.ui.test.performTextClearance
|
||||
import androidx.compose.ui.test.performTextInput
|
||||
import androidx.test.filters.MediumTest
|
||||
import cash.z.ecc.android.sdk.fixture.WalletAddressFixture
|
||||
import cash.z.ecc.android.sdk.model.MonetarySeparators
|
||||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import cash.z.ecc.sdk.fixture.ZecRequestFixture
|
||||
import cash.z.ecc.sdk.model.ZecRequest
|
||||
import cash.z.ecc.sdk.model.ZecRequestMessage
|
||||
import co.electriccoin.zcash.test.UiTestPrerequisites
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.test.getStringResource
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Rule
|
||||
import org.junit.Test
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
import kotlin.test.assertTrue
|
||||
|
||||
class RequestViewTest : UiTestPrerequisites() {
|
||||
@get:Rule
|
||||
val composeTestRule = createComposeRule()
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun create_button_disabled() {
|
||||
@Suppress("UNUSED_VARIABLE")
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
composeTestRule.assertSendDisabled()
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
fun create_request_no_message() =
|
||||
runTest {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
assertEquals(null, testSetup.getLastCreateZecRequest())
|
||||
|
||||
composeTestRule.setValidAmount()
|
||||
|
||||
composeTestRule.clickCreateAndSend()
|
||||
|
||||
assertEquals(1, testSetup.getOnCreateCount())
|
||||
|
||||
testSetup.getLastCreateZecRequest().also {
|
||||
assertNotNull(it)
|
||||
assertEquals(WalletAddressFixture.unified(), it.address)
|
||||
assertEquals(Zatoshi(12345600000), it.amount)
|
||||
assertTrue(it.message.value.isEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
fun create_request_with_message() =
|
||||
runTest {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
assertEquals(null, testSetup.getLastCreateZecRequest())
|
||||
|
||||
composeTestRule.setValidAmount()
|
||||
|
||||
composeTestRule.setValidMessage()
|
||||
|
||||
composeTestRule.clickCreateAndSend()
|
||||
|
||||
assertEquals(1, testSetup.getOnCreateCount())
|
||||
|
||||
testSetup.getLastCreateZecRequest().also {
|
||||
assertNotNull(it)
|
||||
assertEquals(WalletAddressFixture.unified(), it.address)
|
||||
assertEquals(Zatoshi(12345600000), it.amount)
|
||||
assertEquals(ZecRequestFixture.MESSAGE.value, it.message.value)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun check_regex_functionality_valid_inputs() {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
val separators = MonetarySeparators.current()
|
||||
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
assertEquals(null, testSetup.getLastCreateZecRequest())
|
||||
|
||||
composeTestRule.setAmount("123")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(1, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 123,456
|
||||
composeTestRule.setAmount("123${separators.grouping}456")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(2, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 123.
|
||||
composeTestRule.setAmount("123${separators.decimal}")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(3, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 123,456.
|
||||
composeTestRule.setAmount("123${separators.grouping}456${separators.decimal}")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(4, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 123,456.789
|
||||
composeTestRule.setAmount("123${separators.grouping}456${separators.decimal}789")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(5, testSetup.getOnCreateCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun check_regex_functionality_invalid_inputs() {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
val separators = MonetarySeparators.current()
|
||||
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
assertEquals(null, testSetup.getLastCreateZecRequest())
|
||||
|
||||
composeTestRule.setAmount("aaa")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
|
||||
composeTestRule.setAmount("123aaa")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. ,.
|
||||
composeTestRule.setAmount("${separators.grouping}${separators.decimal}")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 123,.
|
||||
composeTestRule.setAmount("123${separators.grouping}${separators.decimal}")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 1,2,3
|
||||
composeTestRule.setAmount("1${separators.grouping}2${separators.grouping}3")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
|
||||
// e.g. 1.2.3
|
||||
composeTestRule.setAmount("1${separators.decimal}2${separators.decimal}3")
|
||||
composeTestRule.clickCreateAndSend()
|
||||
assertEquals(0, testSetup.getOnCreateCount())
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
fun max_message_length() =
|
||||
runTest {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
composeTestRule.setValidAmount()
|
||||
|
||||
composeTestRule.setMessage(
|
||||
buildString {
|
||||
repeat(ZecRequestMessage.MAX_MESSAGE_LENGTH + 1) { number ->
|
||||
append("$number")
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
composeTestRule.clickCreateAndSend()
|
||||
|
||||
assertEquals(1, testSetup.getOnCreateCount())
|
||||
|
||||
testSetup.getLastCreateZecRequest().also {
|
||||
assertNotNull(it)
|
||||
assertEquals(WalletAddressFixture.unified(), it.address)
|
||||
assertEquals(Zatoshi(12345600000), it.amount)
|
||||
assertTrue(it.message.value.isEmpty())
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun back() {
|
||||
val testSetup = TestSetup(composeTestRule)
|
||||
|
||||
assertEquals(0, testSetup.getOnBackCount())
|
||||
|
||||
composeTestRule.clickBack()
|
||||
|
||||
assertEquals(1, testSetup.getOnBackCount())
|
||||
}
|
||||
|
||||
private class TestSetup(private val composeTestRule: ComposeContentTestRule) {
|
||||
private val onBackCount = AtomicInteger(0)
|
||||
private val onCreateCount = AtomicInteger(0)
|
||||
|
||||
@Volatile
|
||||
private var onCreateZecRequest: ZecRequest? = null
|
||||
|
||||
fun getOnBackCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onBackCount.get()
|
||||
}
|
||||
|
||||
fun getOnCreateCount(): Int {
|
||||
composeTestRule.waitForIdle()
|
||||
return onCreateCount.get()
|
||||
}
|
||||
|
||||
fun getLastCreateZecRequest(): ZecRequest? {
|
||||
composeTestRule.waitForIdle()
|
||||
return onCreateZecRequest
|
||||
}
|
||||
|
||||
init {
|
||||
composeTestRule.setContent {
|
||||
ZcashTheme {
|
||||
Request(
|
||||
myAddress = runBlocking { WalletAddressFixture.unified() },
|
||||
goBack = {
|
||||
onBackCount.incrementAndGet()
|
||||
},
|
||||
onCreateAndSend = {
|
||||
onCreateCount.incrementAndGet()
|
||||
onCreateZecRequest = it
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.clickBack() {
|
||||
onNodeWithContentDescription(getStringResource(R.string.request_back_content_description)).also {
|
||||
it.performClick()
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.setValidAmount() {
|
||||
onNodeWithText(getStringResource(R.string.request_amount)).also {
|
||||
val separators = MonetarySeparators.current()
|
||||
it.performTextClearance()
|
||||
it.performTextInput("123${separators.decimal}456")
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.setAmount(amount: String) {
|
||||
onNodeWithText(getStringResource(R.string.request_amount)).also {
|
||||
it.performTextClearance()
|
||||
it.performTextInput(amount)
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.setValidMessage() {
|
||||
onNodeWithText(getStringResource(R.string.request_message)).also {
|
||||
it.performTextClearance()
|
||||
it.performTextInput(ZecRequestFixture.MESSAGE.value)
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.setMessage(message: String) {
|
||||
onNodeWithText(getStringResource(R.string.request_message)).also {
|
||||
it.performTextClearance()
|
||||
it.performTextInput(message)
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.clickCreateAndSend() {
|
||||
onNodeWithText(getStringResource(R.string.request_create), ignoreCase = true).also {
|
||||
it.performClick()
|
||||
}
|
||||
}
|
||||
|
||||
private fun ComposeContentTestRule.assertSendDisabled() {
|
||||
onNodeWithText(getStringResource(R.string.request_create), ignoreCase = true).also {
|
||||
it.assertIsNotEnabled()
|
||||
}
|
||||
}
|
|
@ -2,7 +2,6 @@ package co.electriccoin.zcash.ui.screen.scan.view
|
|||
|
||||
import android.Manifest
|
||||
import androidx.compose.ui.test.assertIsDisplayed
|
||||
import androidx.compose.ui.test.assertTextEquals
|
||||
import androidx.compose.ui.test.junit4.createComposeRule
|
||||
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||
import androidx.compose.ui.test.onNodeWithTag
|
||||
|
@ -33,12 +32,12 @@ class ScanViewBasicTest : UiTestPrerequisites() {
|
|||
|
||||
@Test
|
||||
@MediumTest
|
||||
fun back() {
|
||||
fun cancel() {
|
||||
val testSetup = newTestSetup()
|
||||
|
||||
assertEquals(0, testSetup.getOnBackCount())
|
||||
|
||||
composeTestRule.onNodeWithContentDescription(getStringResource(R.string.scan_back_content_description)).also {
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_cancel_button).uppercase()).also {
|
||||
it.performClick()
|
||||
}
|
||||
|
||||
|
@ -52,7 +51,7 @@ class ScanViewBasicTest : UiTestPrerequisites() {
|
|||
|
||||
// Permission granted ui items (visible):
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_header)).also {
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_cancel_button).uppercase()).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
|
@ -62,12 +61,7 @@ class ScanViewBasicTest : UiTestPrerequisites() {
|
|||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(ScanTag.TEXT_STATE).also {
|
||||
it.assertIsDisplayed()
|
||||
it.assertTextEquals(getStringResource(R.string.scan_state_scanning))
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithText(getStringResource(R.string.scan_hint)).also {
|
||||
composeTestRule.onNodeWithContentDescription(getStringResource(R.string.scan_torch_content_description)).also {
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
|
||||
|
|
|
@ -3,6 +3,8 @@ package co.electriccoin.zcash.ui.screen.scan.view
|
|||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import cash.z.ecc.android.sdk.type.AddressType
|
||||
import co.electriccoin.zcash.ui.common.model.WalletRestoringState
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.scan.model.ScanState
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
|
@ -36,7 +38,9 @@ class ScanViewBasicTestSetup(
|
|||
onOpenSettings = {},
|
||||
onScanStateChanged = {
|
||||
scanState.set(it)
|
||||
}
|
||||
},
|
||||
walletRestoringState = WalletRestoringState.NONE,
|
||||
addressValidationResult = AddressType.Shielded
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -44,11 +44,6 @@ class SecurityWarningViewTest : UiTestPrerequisites() {
|
|||
it.assertHasClickAction()
|
||||
it.assertIsNotEnabled()
|
||||
}
|
||||
|
||||
composeTestRule.onNodeWithTag(SecurityScreenTag.WARNING_TEXT_TAG).also {
|
||||
it.assertExists()
|
||||
it.assertIsDisplayed()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package co.electriccoin.zcash.ui.screen.securitywarning.view
|
||||
|
||||
import androidx.compose.material3.SnackbarHostState
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
@ -34,13 +33,9 @@ class SecurityWarningViewTestSetup(private val composeTestRule: ComposeContentTe
|
|||
@Suppress("TestFunctionName")
|
||||
fun DefaultContent() {
|
||||
SecurityWarning(
|
||||
SnackbarHostState(),
|
||||
onBack = {
|
||||
onBackCount.incrementAndGet()
|
||||
},
|
||||
onPrivacyPolicy = {
|
||||
// Not tested yet. UI testing of clicking on an AnnotatedString Text part is complicated.
|
||||
},
|
||||
onAcknowledged = {
|
||||
onAcknowledged.getAndSet(it)
|
||||
},
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue