From 1f4756dc666a2b1d1052d6e9ec12255d2adbebec Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 17 Jul 2026 11:31:25 +0000
Subject: [PATCH 1/6] Update All v5 dependencies
---
.github/workflows/add_pr_label.yml | 6 +-
.github/workflows/assemble.yml | 6 +-
.github/workflows/check.yml | 4 +-
.../workflows/check_dependency_changes.yml | 10 +--
.github/workflows/check_labels.yml | 4 +-
.github/workflows/code_analysis.yml | 12 +--
.github/workflows/codeql.yml | 6 +-
.github/workflows/create_github_release.yml | 4 +-
.github/workflows/create_release_notes_pr.yml | 4 +-
.github/workflows/finalize_release.yml | 6 +-
.../workflows/generate_dependency_graph.yml | 10 +--
.github/workflows/generate_release_notes.yml | 10 +--
.github/workflows/generate_version_name.yml | 2 +-
.github/workflows/get_dependency_list.yml | 6 +-
.github/workflows/publish_docs.yml | 8 +-
.../workflows/publish_to_maven_central.yml | 16 ++--
.github/workflows/release_acceptance_app.yml | 6 +-
.github/workflows/run_tests.yml | 12 +--
.github/workflows/run_ui_tests.yml | 12 +--
.github/workflows/sonar_cloud.yml | 8 +-
.github/workflows/stale_issues.yml | 2 +-
.github/workflows/update_release_notes.yml | 6 +-
.../update_verification_metadata.yml | 6 +-
.github/workflows/validate_dependencies.yml | 2 +-
.github/workflows/validate_public_api.yml | 8 +-
gradle/libs.versions.toml | 76 +++++++++----------
gradle/verification-metadata.xml | 13 ++++
gradle/wrapper/gradle-wrapper.properties | 2 +-
settings.gradle | 2 +-
29 files changed, 141 insertions(+), 128 deletions(-)
diff --git a/.github/workflows/add_pr_label.yml b/.github/workflows/add_pr_label.yml
index 28985c97bb..62009c0645 100644
--- a/.github/workflows/add_pr_label.yml
+++ b/.github/workflows/add_pr_label.yml
@@ -23,7 +23,7 @@ jobs:
steps:
- name: Checkout to current branch
- uses: actions/checkout@v5
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Get label
id: get_label
@@ -40,10 +40,10 @@ jobs:
steps:
- name: Checkout to current branch
- uses: actions/checkout@v5
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Add label
- uses: actions/github-script@v8
+ uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3 # v9.0.0
env:
LABEL: ${{ needs.get_label.outputs.label }}
with:
diff --git a/.github/workflows/assemble.yml b/.github/workflows/assemble.yml
index 5cd141679e..d34e2a31a0 100644
--- a/.github/workflows/assemble.yml
+++ b/.github/workflows/assemble.yml
@@ -14,16 +14,16 @@ jobs:
labels: ubuntu-latest-8-cores
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: false
diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index 5cb3eba842..34d34c9b10 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -11,10 +11,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
diff --git a/.github/workflows/check_dependency_changes.yml b/.github/workflows/check_dependency_changes.yml
index 70471abc2b..c5816620e7 100644
--- a/.github/workflows/check_dependency_changes.yml
+++ b/.github/workflows/check_dependency_changes.yml
@@ -28,19 +28,19 @@ jobs:
needs: [ get_head_dependency_list, get_base_dependency_list ]
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
sparse-checkout: |
scripts/check_dependency_changes.py
sparse-checkout-cone-mode: false
- name: Download base dependency list artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: "DEPENDENCY_LIST_BASE"
- name: Download head dependency list artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
name: "DEPENDENCY_LIST_HEAD"
@@ -63,7 +63,7 @@ jobs:
fi
- name: Add comment on PR
- uses: thollander/actions-comment-pull-request@v3
+ uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
if: steps.compare_deps.outputs.has_changes == 'true'
with:
file-path: "${{ github.workspace }}/dependency_changes.md"
@@ -71,7 +71,7 @@ jobs:
mode: recreate
- name: Delete comment from PR
- uses: thollander/actions-comment-pull-request@v3
+ uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
if: steps.compare_deps.outputs.has_changes == 'false'
with:
comment-tag: dependency_changes
diff --git a/.github/workflows/check_labels.yml b/.github/workflows/check_labels.yml
index 12a5fcb70f..02e358ae0f 100644
--- a/.github/workflows/check_labels.yml
+++ b/.github/workflows/check_labels.yml
@@ -21,7 +21,7 @@ jobs:
allowed-labels: ${{ steps.get_allowed_labels.outputs.allowed_labels }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Get the list of allowed pull request labels
id: get_allowed_labels
@@ -45,7 +45,7 @@ jobs:
needs: get_allowed_labels
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Validate release notes
env:
diff --git a/.github/workflows/code_analysis.yml b/.github/workflows/code_analysis.yml
index f5689c07f5..893329cf30 100644
--- a/.github/workflows/code_analysis.yml
+++ b/.github/workflows/code_analysis.yml
@@ -12,16 +12,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
@@ -36,16 +36,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml
index 07690d7f27..2b4b4274b9 100644
--- a/.github/workflows/codeql.yml
+++ b/.github/workflows/codeql.yml
@@ -29,16 +29,16 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@v5
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v3
+ uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@v3
+ uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
with:
category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/create_github_release.yml b/.github/workflows/create_github_release.yml
index 09d87c793a..6677a7df71 100644
--- a/.github/workflows/create_github_release.yml
+++ b/.github/workflows/create_github_release.yml
@@ -15,11 +15,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Create a Github release with release notes.
- name: Create Github release
- uses: ncipollo/release-action@v1
+ uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION_NAME: ${{ inputs.version-name }}
diff --git a/.github/workflows/create_release_notes_pr.yml b/.github/workflows/create_release_notes_pr.yml
index 3d79164d10..db7ae528da 100644
--- a/.github/workflows/create_release_notes_pr.yml
+++ b/.github/workflows/create_release_notes_pr.yml
@@ -16,10 +16,10 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Download release notes artifact
- uses: actions/download-artifact@v5
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
env:
VERSION_NAME: ${{ inputs.version-name }}
with:
diff --git a/.github/workflows/finalize_release.yml b/.github/workflows/finalize_release.yml
index de086e445d..964b379dc0 100644
--- a/.github/workflows/finalize_release.yml
+++ b/.github/workflows/finalize_release.yml
@@ -26,11 +26,11 @@ jobs:
needs: update_release_notes
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Publish Github release and the tag
- name: Publish Github release
- uses: ncipollo/release-action@v1
+ uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION_NAME: ${{ inputs.version-name }}
@@ -49,7 +49,7 @@ jobs:
needs: publish_draft_release
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Remove release branch
env:
diff --git a/.github/workflows/generate_dependency_graph.yml b/.github/workflows/generate_dependency_graph.yml
index 58124afa88..4725fd393b 100644
--- a/.github/workflows/generate_dependency_graph.yml
+++ b/.github/workflows/generate_dependency_graph.yml
@@ -11,23 +11,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
- uses: actions/checkout@v5
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Setup Java 17
# https://github.com/marketplace/actions/setup-java-jdk
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
- name: Setup Graphviz
- uses: ts-graphviz/setup-graphviz@v2
+ uses: ts-graphviz/setup-graphviz@b1de5da23ed0a6d14e0aeee8ed52fdd87af2363c # v2.0.2
- name: Generate Dependency Graph
run: ./gradlew dependencyGraph
@@ -40,7 +40,7 @@ jobs:
git commit -am 'Update dependency graph'
- name: Push
- uses: ad-m/github-push-action@master
+ uses: ad-m/github-push-action@881a6320fdb16eb5318c5054f31c218aec2b324c # master
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
branch: ${{ github.ref }}
diff --git a/.github/workflows/generate_release_notes.yml b/.github/workflows/generate_release_notes.yml
index a54c4a974b..d4f5b1ac3f 100644
--- a/.github/workflows/generate_release_notes.yml
+++ b/.github/workflows/generate_release_notes.yml
@@ -18,7 +18,7 @@ jobs:
allowed-labels: ${{ steps.get_allowed_labels.outputs.allowed_labels }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Get the list of allowed pull request labels
id: get_allowed_labels
@@ -42,13 +42,13 @@ jobs:
needs: get_allowed_labels
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
- python-version: '3.13'
+ python-version: '3.14'
- name: Generate release notes
id: generate_release_notes
@@ -64,7 +64,7 @@ jobs:
python scripts/generate_release_notes.py $RELEASE_NOTES_FILE_NAME
- name: Upload release notes artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
env:
VERSION_NAME: ${{ inputs.version-name }}
with:
diff --git a/.github/workflows/generate_version_name.yml b/.github/workflows/generate_version_name.yml
index 71866ca170..38b4522af3 100644
--- a/.github/workflows/generate_version_name.yml
+++ b/.github/workflows/generate_version_name.yml
@@ -17,7 +17,7 @@ jobs:
version-name: ${{ steps.generate_version_name.outputs.version_name }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Generate version name
id: generate_version_name
run: |
diff --git a/.github/workflows/get_dependency_list.yml b/.github/workflows/get_dependency_list.yml
index d65355a934..b477d7d4bf 100644
--- a/.github/workflows/get_dependency_list.yml
+++ b/.github/workflows/get_dependency_list.yml
@@ -19,12 +19,12 @@ jobs:
name: Fetch dependency list
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: ${{ inputs.ref }}
- name: Setup gradle
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
- name: Fetch dependency list
env:
@@ -34,7 +34,7 @@ jobs:
./gradlew dependencyList -q --no-configuration-cache -PoutputFileName=$DEPENDENCY_LIST_FILE_NAME
- name: Upload dependency list artifact
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: "${{ inputs.artifact-name }}"
path: "${{ inputs.artifact-name }}"
diff --git a/.github/workflows/publish_docs.yml b/.github/workflows/publish_docs.yml
index 96bb65661d..3328288f55 100644
--- a/.github/workflows/publish_docs.yml
+++ b/.github/workflows/publish_docs.yml
@@ -15,18 +15,18 @@ jobs:
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
# https://github.com/marketplace/actions/checkout
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
# Setup Java 17
# https://github.com/marketplace/actions/setup-java-jdk
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
@@ -39,7 +39,7 @@ jobs:
# Deploy to GitHub Pages
- name: Deploy GitHub Pages
- uses: JamesIves/github-pages-deploy-action@v4.7.3
+ uses: JamesIves/github-pages-deploy-action@d92aa235d04922e8f08b40ce78cc5442fcfbfa2f # v4.8.0
with:
BRANCH: gh-pages
FOLDER: build/docs/
diff --git a/.github/workflows/publish_to_maven_central.yml b/.github/workflows/publish_to_maven_central.yml
index 41fd73924b..0b5a438f59 100644
--- a/.github/workflows/publish_to_maven_central.yml
+++ b/.github/workflows/publish_to_maven_central.yml
@@ -23,11 +23,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
- python-version: '3.13'
+ python-version: '3.14'
- name: Drop all open OSSRH repositories
env:
@@ -45,10 +45,10 @@ jobs:
labels: ubuntu-latest-8-cores
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
@@ -83,11 +83,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- - uses: actions/setup-python@v6
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
with:
- python-version: '3.13'
+ python-version: '3.14'
# Moved the repository from OSSRH to Central Portal
- name: Move repository to Central Portal
diff --git a/.github/workflows/release_acceptance_app.yml b/.github/workflows/release_acceptance_app.yml
index 0d7ab266dc..d867f420f5 100644
--- a/.github/workflows/release_acceptance_app.yml
+++ b/.github/workflows/release_acceptance_app.yml
@@ -16,16 +16,16 @@ jobs:
steps:
- name: Checkout code
- uses: actions/checkout@v5
+ uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-encryption-key: ${{ secrets.GRADLE_ENCRYPTION_KEY }}
cache-read-only: true
diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml
index e6cd40274a..e4b1f6b2b5 100644
--- a/.github/workflows/run_tests.yml
+++ b/.github/workflows/run_tests.yml
@@ -14,16 +14,16 @@ jobs:
labels: ubuntu-latest-8-cores
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: false
@@ -40,16 +40,16 @@ jobs:
labels: ubuntu-latest-8-cores
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: false
diff --git a/.github/workflows/run_ui_tests.yml b/.github/workflows/run_ui_tests.yml
index 7417b777b2..ef20ab7298 100644
--- a/.github/workflows/run_ui_tests.yml
+++ b/.github/workflows/run_ui_tests.yml
@@ -19,7 +19,7 @@ jobs:
api-level: [ 34 ]
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Enable KVM
run: |
@@ -28,18 +28,18 @@ jobs:
sudo udevadm trigger --name-match=kvm
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: false
- name: AVD cache
- uses: actions/cache@v4
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
id: avd-cache
with:
path: |
@@ -49,7 +49,7 @@ jobs:
- name: Create AVD and generate snapshot for caching
if: steps.avd-cache.outputs.cache-hit != 'true'
- uses: reactivecircus/android-emulator-runner@v2
+ uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # v2.37.0
with:
api-level: ${{ matrix.api-level }}
target: google_apis
@@ -60,7 +60,7 @@ jobs:
script: echo "Generated AVD snapshot for caching."
- name: Run connectedDebugAndroidTest
- uses: reactivecircus/android-emulator-runner@v2
+ uses: reactivecircus/android-emulator-runner@e89f39f1abbbd05b1113a29cf4db69e7540cae5a # v2.37.0
env:
ADYEN_ANDROID_MERCHANT_SERVER_URL: 'https://android-ui-tests.adyen.com/'
ADYEN_ANDROID_CLIENT_KEY: 'test_fakefakefakefakefakefakefakefake'
diff --git a/.github/workflows/sonar_cloud.yml b/.github/workflows/sonar_cloud.yml
index f554bbcd70..1d53fe9d11 100644
--- a/.github/workflows/sonar_cloud.yml
+++ b/.github/workflows/sonar_cloud.yml
@@ -12,23 +12,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: '0'
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
- name: Cache SonarCloud packages
- uses: actions/cache@v4
+ uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
with:
path: ~/.sonar/cache
key: ${{ runner.os }}-sonar
diff --git a/.github/workflows/stale_issues.yml b/.github/workflows/stale_issues.yml
index c274f9b62b..9cb5f69b90 100644
--- a/.github/workflows/stale_issues.yml
+++ b/.github/workflows/stale_issues.yml
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Close stale issues
- uses: actions/stale@v10
+ uses: actions/stale@eb5cf3af3ac0a1aa4c9c45633dd1ae542a27a899 # v10.3.0
with:
any-of-labels: 'Needs more info'
stale-issue-message: 'This issue is now stale because it has been open for 14 days with no activity. Please provide the requested information or the issue will be closed automatically.'
diff --git a/.github/workflows/update_release_notes.yml b/.github/workflows/update_release_notes.yml
index 528c3f4792..9dc9d21483 100644
--- a/.github/workflows/update_release_notes.yml
+++ b/.github/workflows/update_release_notes.yml
@@ -20,7 +20,7 @@ jobs:
updated-release-notes-filepath: ${{ steps.fetch_updated_release_notes_file.outputs.updated-release-notes-filepath }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: "release-notes"
@@ -41,7 +41,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: "release-notes"
@@ -52,7 +52,7 @@ jobs:
# Update Github release with the updated release notes
- name: Update Github release notes
id: update_github_release_notes
- uses: ncipollo/release-action@v1
+ uses: ncipollo/release-action@339a81892b84b4eeb0f6e744e4574d79d0d9b8dd # v1.21.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
VERSION_NAME: ${{ inputs.version-name }}
diff --git a/.github/workflows/update_verification_metadata.yml b/.github/workflows/update_verification_metadata.yml
index 8e2444ce94..4b5ab2018d 100644
--- a/.github/workflows/update_verification_metadata.yml
+++ b/.github/workflows/update_verification_metadata.yml
@@ -16,18 +16,18 @@ jobs:
if: ${{ !contains(github.event.commits[0].message, '[skip update-verification-metadata]') }}
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
token: ${{ secrets.ADYEN_AUTOMATION_BOT_ACCESS_TOKEN }}
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
diff --git a/.github/workflows/validate_dependencies.yml b/.github/workflows/validate_dependencies.yml
index 56b307e6e8..4f2a3cad1f 100644
--- a/.github/workflows/validate_dependencies.yml
+++ b/.github/workflows/validate_dependencies.yml
@@ -12,7 +12,7 @@ jobs:
name: Validate newly added dependencies for release notes
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
fetch-depth: 0
diff --git a/.github/workflows/validate_public_api.yml b/.github/workflows/validate_public_api.yml
index 7a1654d011..0bdb3ba240 100644
--- a/.github/workflows/validate_public_api.yml
+++ b/.github/workflows/validate_public_api.yml
@@ -13,16 +13,16 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v5
+ - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
- name: Set up JDK
- uses: actions/setup-java@v5
+ uses: actions/setup-java@1bcf9fb12cf4aa7d266a90ae39939e61372fe520 # v5.4.0
with:
distribution: 'zulu'
java-version: 17
- name: Gradle cache
- uses: gradle/actions/setup-gradle@v4
+ uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0
with:
cache-read-only: true
@@ -32,7 +32,7 @@ jobs:
bash ./scripts/process_api_changes.sh
- name: Comment on PR
- uses: thollander/actions-comment-pull-request@v3
+ uses: thollander/actions-comment-pull-request@24bffb9b452ba05a4f3f77933840a6a841d1b32b # v3.0.1
with:
file-path: "${{ github.workspace }}/api_changes.md"
comment-tag: api_changes
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index a7d9ec1a07..a2bec63763 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -8,46 +8,46 @@ min-sdk = "21"
version-code = "1"
# Build script
-android-gradle-plugin = "8.8.1"
-kotlin = "1.9.25"
-ksp = "1.9.25-1.0.20"
-dokka = "1.9.20"
-hilt = "2.55"
+android-gradle-plugin = "9.2.1"
+kotlin = "2.4.0"
+ksp = "2.3.9"
+dokka = "2.2.0"
+hilt = "2.60"
compose-compiler = "1.5.15"
# Code quality
detekt = "1.23.8"
-kover = "0.9.3"
-ktlint = "1.5.0"
-sonarqube = "5.1.0.4882"
-binary-compatibility-validator = "0.16.3"
+kover = "0.9.8"
+ktlint = "1.8.0"
+sonarqube = "7.3.1.8318"
+binary-compatibility-validator = "0.18.1"
# Android dependencies
-activity = "1.10.1"
-annotation = "1.9.1"
-appcompat = "1.7.0"
-autofill = "1.3.0-rc01"
-browser = "1.8.0"
-coroutines = "1.9.0"
-fragment = "1.8.6"
-lifecycle = "2.8.7"
-material = "1.12.0"
+activity = "1.13.0"
+annotation = "1.10.0"
+appcompat = "1.7.1"
+autofill = "1.3.0"
+browser = "1.10.0"
+coroutines = "1.11.0"
+fragment = "1.8.9"
+lifecycle = "2.11.0"
+material = "1.14.0"
recyclerview = "1.4.0"
constraintlayout = "2.2.1"
# Compose dependencies
-compose-activity = "1.10.1"
-compose-bom = "2025.03.00"
-compose-hilt = "1.2.0"
-compose-viewmodel = "2.8.7"
+compose-activity = "1.13.0"
+compose-bom = "2026.06.01"
+compose-hilt = "1.4.0"
+compose-viewmodel = "2.11.0"
# Adyen dependencies
adyen3ds2 = "2.2.27"
# External dependencies
-cash-app-pay = "2.5.0"
-okhttp = "4.12.0"
-play-services-wallet = "19.4.0"
+cash-app-pay = "2.6.0"
+okhttp = "5.4.0"
+play-services-wallet = "20.0.0"
twint = "8.0.0"
wechat-pay = "6.8.0"
@@ -55,26 +55,26 @@ wechat-pay = "6.8.0"
leak-canary = "2.14"
moshi-adapters = "1.15.2"
moshi-kotlin-adapter = "1.15.2"
-okhttp-logging = "4.12.0"
+okhttp-logging = "5.4.0"
preference = "1.2.1"
-retrofit2 = "2.11.0"
+retrofit2 = "3.0.0"
# Tests
arch-core-testing = "2.2.0"
barista = "4.3.0"
-espresso = "3.6.1"
-json = "20250107"
+espresso = "3.7.0"
+json = "20250517"
jose4j = "0.9.6"
-junit-jupiter = "5.12.2"
+junit-jupiter = "6.1.1"
konsist = "0.17.3"
-lint = "31.8.0"
-mockito-kotlin = "5.4.0"
-mockito = "5.17.0"
-robolectric = "4.14.1"
-test-ext = "1.2.1"
-test-rules = "1.6.1"
-turbine = "1.2.0"
-uiautomator = "2.3.0"
+lint = "32.2.1"
+mockito-kotlin = "6.3.0"
+mockito = "5.23.0"
+robolectric = "4.16.1"
+test-ext = "1.3.0"
+test-rules = "1.7.0"
+turbine = "1.2.1"
+uiautomator = "2.4.0"
[libraries]
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 8d042870f6..6dca67562d 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -17115,11 +17115,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 37f853b1c8..a351597e62 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/settings.gradle b/settings.gradle
index 3d70a6c328..07232174a0 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -8,7 +8,7 @@ pluginManagement {
plugins {
// this has to be declared here directly because settings.gradle cannot reference version catalogs
- id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0"
+ id("org.gradle.toolchains.foojay-resolver-convention") version "1.0.0"
}
// Apply local.gradle if it exists (used for local testing configurations)
From 6f3e26883476f5018db1fc3e13598aae351a8ea8 Mon Sep 17 00:00:00 2001
From: josephj
Date: Fri, 17 Jul 2026 18:03:09 +0200
Subject: [PATCH 2/6] Migrate v5 build to AGP 9 and Dokka 2
---
.github/release_notes_dependency_list.toml | 3 +
.github/workflows/get_dependency_list.yml | 2 +-
.github/workflows/publish_docs.yml | 2 +-
3ds2/build.gradle | 1 -
ach/build.gradle | 1 -
action-core/build.gradle | 1 -
action/build.gradle | 1 -
await/build.gradle | 1 -
bacs/build.gradle | 1 -
bcmc/build.gradle | 1 -
blik/build.gradle | 1 -
boleto/build.gradle | 1 -
build.gradle | 170 ++++++++++++++++++++-
card-scanning/build.gradle | 1 -
card/build.gradle | 1 -
cashapppay/build.gradle | 1 -
checkout-core/build.gradle | 1 -
components-compose/build.gradle | 8 +-
components-core/build.gradle | 1 -
config/gradle/dokka.gradle | 34 ++++-
config/module/template/build.gradle | 1 -
convenience-stores-jp/build.gradle | 1 -
cse/build.gradle | 1 -
dotpay/build.gradle | 1 -
drop-in-compose/build.gradle | 7 +-
drop-in/build.gradle | 1 -
econtext/build.gradle | 1 -
entercash/build.gradle | 1 -
eps/build.gradle | 1 -
example-app/build.gradle | 6 +-
example-app/ci.local.gradle | 5 +-
giftcard/build.gradle | 1 -
googlepay/build.gradle | 1 -
gradle.properties | 5 +-
gradle/libs.versions.toml | 50 +++---
gradle/wrapper/gradle-wrapper.properties | 2 +-
ideal/build.gradle | 1 -
instant/build.gradle | 1 -
issuer-list/build.gradle | 1 -
mbway/build.gradle | 1 -
meal-voucher-fr/build.gradle | 1 -
molpay/build.gradle | 1 -
online-banking-core/build.gradle | 1 -
online-banking-cz/build.gradle | 1 -
online-banking-jp/build.gradle | 1 -
online-banking-pl/build.gradle | 1 -
online-banking-sk/build.gradle | 1 -
openbanking/build.gradle | 1 -
paybybank-us/build.gradle | 1 -
paybybank/build.gradle | 1 -
payeasy/build.gradle | 1 -
payto/build.gradle | 1 -
qr-code/build.gradle | 1 -
redirect/build.gradle | 1 -
sepa/build.gradle | 1 -
sessions-core/build.gradle | 1 -
seven-eleven/build.gradle | 1 -
test-core/build.gradle | 1 -
twint-action/build.gradle | 1 -
twint/build.gradle | 1 -
ui-core/build.gradle | 1 -
upi/build.gradle | 1 -
voucher/build.gradle | 1 -
wechatpay/build.gradle | 1 -
64 files changed, 237 insertions(+), 109 deletions(-)
diff --git a/.github/release_notes_dependency_list.toml b/.github/release_notes_dependency_list.toml
index 0d11248b74..c538183d27 100644
--- a/.github/release_notes_dependency_list.toml
+++ b/.github/release_notes_dependency_list.toml
@@ -9,6 +9,7 @@
"androidx.compose:compose-bom" = "[AndroidX Compose BoM](https://developer.android.com/develop/ui/compose/bom/bom-mapping)"
"androidx.constraintlayout:constraintlayout" = "[AndroidX ConstraintLayout](https://developer.android.com/jetpack/androidx/releases/constraintlayout#{})"
"androidx.fragment:fragment-ktx" = "[AndroidX Fragment](https://developer.android.com/jetpack/androidx/releases/fragment#{})"
+"androidx.lifecycle:lifecycle-runtime-compose" = "[AndroidX Lifecycle Runtime Compose](https://developer.android.com/jetpack/androidx/releases/lifecycle#{})"
"androidx.lifecycle:lifecycle-runtime-ktx" = "[AndroidX Lifecycle Runtime](https://developer.android.com/jetpack/androidx/releases/lifecycle#{})"
"androidx.lifecycle:lifecycle-viewmodel-compose" = "[AndroidX Lifecycle ViewModel Compose](https://developer.android.com/jetpack/androidx/releases/lifecycle#{})"
"androidx.lifecycle:lifecycle-viewmodel-ktx" = "[AndroidX Lifecycle ViewModel](https://developer.android.com/jetpack/androidx/releases/lifecycle#{})"
@@ -69,6 +70,7 @@
"jacoco" = ""
"org.bitbucket.b_c:jose4j" = ""
"org.jetbrains.dokka" = ""
+"org.jetbrains.dokka-javadoc" = ""
"org.jetbrains.kotlinx.binary-compatibility-validator" = ""
"org.jetbrains.kotlinx.kover" = ""
"org.jetbrains.kotlinx:kotlinx-coroutines-test" = ""
@@ -88,3 +90,4 @@
"kotlin-parcelize" = ""
"org.jetbrains.kotlin.android" = ""
"org.jetbrains.kotlin:kotlin-parcelize-runtime" = ""
+"org.jetbrains.kotlin.plugin.compose" = ""
diff --git a/.github/workflows/get_dependency_list.yml b/.github/workflows/get_dependency_list.yml
index b477d7d4bf..3fa1744893 100644
--- a/.github/workflows/get_dependency_list.yml
+++ b/.github/workflows/get_dependency_list.yml
@@ -31,7 +31,7 @@ jobs:
ARTIFACT_NAME: ${{ inputs.artifact-name }}
run: |
DEPENDENCY_LIST_FILE_NAME=$(echo "${ARTIFACT_NAME}")
- ./gradlew dependencyList -q --no-configuration-cache -PoutputFileName=$DEPENDENCY_LIST_FILE_NAME
+ ./gradlew dependencyList -q --no-configuration-cache --no-parallel -PoutputFileName=$DEPENDENCY_LIST_FILE_NAME
- name: Upload dependency list artifact
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
diff --git a/.github/workflows/publish_docs.yml b/.github/workflows/publish_docs.yml
index 3328288f55..7df88b7172 100644
--- a/.github/workflows/publish_docs.yml
+++ b/.github/workflows/publish_docs.yml
@@ -35,7 +35,7 @@ jobs:
# Generate kdocs
- name: Generate Dokka HTML documentation
- run: ./gradlew dokkaHtmlMultiModule
+ run: ./gradlew dokkaGenerate
# Deploy to GitHub Pages
- name: Deploy GitHub Pages
diff --git a/3ds2/build.gradle b/3ds2/build.gradle
index abccc27aa7..54819af2e9 100644
--- a/3ds2/build.gradle
+++ b/3ds2/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/ach/build.gradle b/ach/build.gradle
index 11b02cd4b7..e9ccc84906 100644
--- a/ach/build.gradle
+++ b/ach/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
// Maven artifact
diff --git a/action-core/build.gradle b/action-core/build.gradle
index a7746a1f28..f6b1d47108 100644
--- a/action-core/build.gradle
+++ b/action-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/action/build.gradle b/action/build.gradle
index 40f2fec0b0..ffa4133c03 100644
--- a/action/build.gradle
+++ b/action/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/await/build.gradle b/await/build.gradle
index d4fce540a3..edb471a1fa 100644
--- a/await/build.gradle
+++ b/await/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/bacs/build.gradle b/bacs/build.gradle
index d13952589b..cd288b3d3f 100644
--- a/bacs/build.gradle
+++ b/bacs/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/bcmc/build.gradle b/bcmc/build.gradle
index 7bab02254a..86061c1cde 100644
--- a/bcmc/build.gradle
+++ b/bcmc/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/blik/build.gradle b/blik/build.gradle
index 7e1232ec50..def1a47f52 100644
--- a/blik/build.gradle
+++ b/blik/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/boleto/build.gradle b/boleto/build.gradle
index fad366b0d1..413664ed62 100644
--- a/boleto/build.gradle
+++ b/boleto/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/build.gradle b/build.gradle
index 2073aeb5c8..1110a756a5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,21 +1,23 @@
import com.android.build.gradle.LibraryPlugin
-import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPluginWrapper
+import kotlinx.validation.ApiValidationExtension
+import kotlinx.validation.KotlinApiBuildTask
+import kotlinx.validation.KotlinApiCompareTask
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
alias libs.plugins.android.application apply false
alias libs.plugins.android.library apply false
- alias libs.plugins.jetbrains.kotlin.android apply false
+ alias libs.plugins.kotlin.compose apply false
alias libs.plugins.kover apply false
alias libs.plugins.ksp apply false
alias libs.plugins.hilt apply false
alias libs.plugins.detekt
alias libs.plugins.dokka
+ alias libs.plugins.dokka.javadoc apply false
alias libs.plugins.sonarqube
alias libs.plugins.binary.compatibility.validator
}
-apply from: "config/gradle/dokkaRoot.gradle"
apply from: "config/gradle/sonarcloud.gradle"
apply from: "config/gradle/apiValidator.gradle"
apply from: "config/gradle/dependencyList.gradle"
@@ -29,6 +31,69 @@ ext {
checkoutRedirectScheme = "adyencheckout"
}
+dokka {
+ dokkaPublications {
+ html {
+ outputDirectory.set(layout.buildDirectory.dir("docs"))
+ }
+ }
+}
+
+dependencies {
+ dokka(project(':3ds2'))
+ dokka(project(':ach'))
+ dokka(project(':action'))
+ dokka(project(':action-core'))
+ dokka(project(':await'))
+ dokka(project(':bacs'))
+ dokka(project(':bcmc'))
+ dokka(project(':blik'))
+ dokka(project(':boleto'))
+ dokka(project(':card'))
+ dokka(project(':card-scanning'))
+ dokka(project(':cashapppay'))
+ dokka(project(':checkout-core'))
+ dokka(project(':components-compose'))
+ dokka(project(':components-core'))
+ dokka(project(':convenience-stores-jp'))
+ dokka(project(':cse'))
+ dokka(project(':dotpay'))
+ dokka(project(':drop-in'))
+ dokka(project(':drop-in-compose'))
+ dokka(project(':econtext'))
+ dokka(project(':entercash'))
+ dokka(project(':eps'))
+ dokka(project(':giftcard'))
+ dokka(project(':googlepay'))
+ dokka(project(':ideal'))
+ dokka(project(':instant'))
+ dokka(project(':issuer-list'))
+ dokka(project(':mbway'))
+ dokka(project(':meal-voucher-fr'))
+ dokka(project(':molpay'))
+ dokka(project(':online-banking-core'))
+ dokka(project(':online-banking-cz'))
+ dokka(project(':online-banking-jp'))
+ dokka(project(':online-banking-pl'))
+ dokka(project(':online-banking-sk'))
+ dokka(project(':openbanking'))
+ dokka(project(':paybybank'))
+ dokka(project(':paybybank-us'))
+ dokka(project(':payeasy'))
+ dokka(project(':payto'))
+ dokka(project(':qr-code'))
+ dokka(project(':redirect'))
+ dokka(project(':seven-eleven'))
+ dokka(project(':sepa'))
+ dokka(project(':sessions-core'))
+ dokka(project(':twint'))
+ dokka(project(':twint-action'))
+ dokka(project(':ui-core'))
+ dokka(project(':upi'))
+ dokka(project(':voucher'))
+ dokka(project(':wechatpay'))
+}
+
subprojects {
def javaVersion = 11
@@ -63,11 +128,101 @@ subprojects {
dependencies {
lintChecks project(':lint')
}
- }
- plugins.withType(KotlinAndroidPluginWrapper).configureEach {
- kotlin {
- jvmToolchain(javaVersion)
+ def apiValidation = rootProject.extensions.findByType(ApiValidationExtension)
+ if (apiValidation != null && !apiValidation.ignoredProjects.contains(project.name)) {
+ dependencies.add(
+ "bcv-rt-jvm-cp",
+ "org.jetbrains.kotlin:kotlin-metadata-jvm:${libs.versions.kotlin.get()}"
+ )
+
+ afterEvaluate {
+ def projectName = project.name
+ def dumpFileName = "${projectName}.api"
+ def apiDirName = "api"
+ def apiBuild = tasks.register("apiBuild", KotlinApiBuildTask) {
+ description = "Builds Kotlin API for 'release' compilation of ${projectName}"
+ inputClassesDirs.from(tasks.named("compileReleaseKotlin").map { it.outputs.files })
+ inputClassesDirs.from(tasks.named("compileReleaseJavaWithJavac").map { it.outputs.files })
+ outputApiFile.set(layout.buildDirectory.file("${apiDirName}/${dumpFileName}"))
+ runtimeClasspath.from(configurations.named("bcv-rt-jvm-cp-resolver"))
+
+ doLast {
+ def apiFile = outputApiFile.get().asFile
+ if (!apiFile.exists()) return
+ def result = new StringBuilder()
+ def skip = false
+ apiFile.eachLine { line ->
+ if (!skip && line.contains("class ") && line.contains('ComposableSingletons$')) {
+ skip = true
+ } else if (skip && line == "}") {
+ skip = false
+ } else if (!skip) {
+ result.append(line).append('\n')
+ }
+ }
+ apiFile.text = result.toString()
+ .replaceAll(/(?m)^\tpublic(?: final)? fun describeContents \(\)I\n/, "")
+ .replaceAll(/(?m)^\tpublic(?: final)? fun writeToParcel \(Landroid\/os\/Parcel;I\)V\n/, "")
+ .replaceAll(/\n{3,}/, "\n\n")
+ }
+ }
+
+ def apiCheckFile = layout.buildDirectory.file("${apiDirName}/check/${dumpFileName}")
+ def apiCheckSource = tasks.register("apiCheckSource") {
+ def goldenApiFile = file("${apiDirName}/${dumpFileName}")
+ inputs.file(goldenApiFile)
+ outputs.file(apiCheckFile)
+ doLast {
+ def filteredApiFile = apiCheckFile.get().asFile
+ def result = new StringBuilder()
+ def skip = false
+ goldenApiFile.eachLine { line ->
+ if (!skip && line.contains("class ") && line.contains('\$Creator : android/os/Parcelable\$Creator')) {
+ skip = true
+ } else if (skip && line == "}") {
+ skip = false
+ } else if (!skip) {
+ result.append(line).append('\n')
+ }
+ }
+ filteredApiFile.parentFile.mkdirs()
+ filteredApiFile.text = result.toString()
+ .replaceAll(/(?m)^\tpublic(?: final)? fun describeContents \(\)I\n/, "")
+ .replaceAll(/(?m)^\tpublic(?: final)? fun writeToParcel \(Landroid\/os\/Parcel;I\)V\n/, "")
+ .replaceAll(/\n{3,}/, "\n\n")
+ }
+ }
+
+ def apiCheck = tasks.register("apiCheck", KotlinApiCompareTask) {
+ group = "verification"
+ description = "Checks signatures of public API against the golden value in API folder for ${projectName}"
+ dependsOn(apiCheckSource)
+ projectApiFile.set(apiCheckFile)
+ generatedApiFile.set(apiBuild.flatMap { it.outputApiFile })
+ }
+
+ tasks.register("apiDump") {
+ group = "other"
+ description = "Syncs the API file for ${projectName}"
+ dependsOn(apiBuild)
+ def fromProvider = apiBuild.flatMap { it.outputApiFile }
+ def toFile = file("${apiDirName}/${dumpFileName}")
+ inputs.file(fromProvider)
+ outputs.file(toFile)
+ doLast {
+ def source = fromProvider.get().asFile
+ if (source.exists()) {
+ toFile.parentFile.mkdirs()
+ toFile.bytes = source.bytes
+ } else {
+ toFile.delete()
+ }
+ }
+ }
+
+ tasks.named("check") { dependsOn(apiCheck) }
+ }
}
}
@@ -75,6 +230,7 @@ subprojects {
kotlinOptions {
freeCompilerArgs += [
'-opt-in=kotlin.RequiresOptIn',
+ '-jvm-default=disable',
]
}
}
diff --git a/card-scanning/build.gradle b/card-scanning/build.gradle
index 04dfcc10f0..a2fb3a130b 100644
--- a/card-scanning/build.gradle
+++ b/card-scanning/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
}
// Maven artifact
diff --git a/card/build.gradle b/card/build.gradle
index 9b1e040098..e5f58bd971 100644
--- a/card/build.gradle
+++ b/card/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/cashapppay/build.gradle b/cashapppay/build.gradle
index aaa0167f39..541a28eaf3 100644
--- a/cashapppay/build.gradle
+++ b/cashapppay/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/checkout-core/build.gradle b/checkout-core/build.gradle
index ab2fee0f5c..06f4c63ae6 100644
--- a/checkout-core/build.gradle
+++ b/checkout-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/components-compose/build.gradle b/components-compose/build.gradle
index f46433e8b4..f46758ffb1 100644
--- a/components-compose/build.gradle
+++ b/components-compose/build.gradle
@@ -8,7 +8,7 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
+ alias libs.plugins.kotlin.compose
}
// Maven artifact
@@ -33,10 +33,6 @@ android {
buildFeatures {
compose true
}
-
- composeOptions {
- kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
- }
}
dependencies {
@@ -46,5 +42,7 @@ dependencies {
api project(':ui-core')
implementation platform(libs.compose.bom)
+ implementation libs.compose.ui.main
+ implementation libs.compose.lifecycle.runtime
implementation libs.compose.viewmodel
}
diff --git a/components-core/build.gradle b/components-core/build.gradle
index 5b50e5c1d1..d9d9cab713 100644
--- a/components-core/build.gradle
+++ b/components-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/config/gradle/dokka.gradle b/config/gradle/dokka.gradle
index 4f5db35fd3..1a3bff9bd8 100644
--- a/config/gradle/dokka.gradle
+++ b/config/gradle/dokka.gradle
@@ -7,15 +7,43 @@
*/
// only apply dokka if module supports kotlin
-project.plugins.withId("kotlin-android") {
+project.plugins.withId("com.android.library") {
// cannot reference the plugins declared in the version catalogs here because it requires the use of the `plugins` block instead of the `apply plugin` command
// the `plugins` block cannot be used in gradle files such as this one, which are imported into other gradle files with the `apply from` command
apply plugin: "org.jetbrains.dokka"
+ apply plugin: "org.jetbrains.dokka-javadoc"
+ def projectName = project.name
+ def mainSourceDir = file("src/main/java")
+
+ dokka {
+ moduleName.set(projectName)
+
+ dokkaPublications.configureEach {
+ suppressInheritedMembers.set(true)
+ failOnWarning.set(false)
+ }
+
+ dokkaSourceSets.configureEach {
+ sourceLink {
+ localDirectory.set(mainSourceDir)
+ remoteUrl("https://github.com/Adyen/adyen-android/tree/main/${projectName}/src/main/java")
+ remoteLineSuffix.set("#L")
+ }
+ }
+
+ pluginsConfiguration {
+ html {
+ footerMessage.set("Copyright (c) ${java.time.Year.now()} Adyen N.V.")
+ }
+ }
+ }
+
+ def dokkaJavadoc = tasks.named("dokkaGeneratePublicationJavadoc")
tasks.register("javadocJar", Jar) {
- dependsOn tasks.named("dokkaJavadoc")
+ dependsOn(dokkaJavadoc)
archiveClassifier.set('javadoc')
- from dokkaJavadoc.outputDirectory
+ from(dokkaJavadoc.flatMap { it.outputDirectory })
}
}
diff --git a/config/module/template/build.gradle b/config/module/template/build.gradle
index b020885605..0d2b97927a 100644
--- a/config/module/template/build.gradle
+++ b/config/module/template/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
}
ext.mavenArtifactId = "#module_name"
diff --git a/convenience-stores-jp/build.gradle b/convenience-stores-jp/build.gradle
index a07267a3fe..17a1553753 100644
--- a/convenience-stores-jp/build.gradle
+++ b/convenience-stores-jp/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/cse/build.gradle b/cse/build.gradle
index 8f9532efec..8492307889 100644
--- a/cse/build.gradle
+++ b/cse/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/dotpay/build.gradle b/dotpay/build.gradle
index 5c156c8495..1dad4191ac 100644
--- a/dotpay/build.gradle
+++ b/dotpay/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/drop-in-compose/build.gradle b/drop-in-compose/build.gradle
index ccc7432407..f86ae57b84 100644
--- a/drop-in-compose/build.gradle
+++ b/drop-in-compose/build.gradle
@@ -8,7 +8,7 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
+ alias libs.plugins.kotlin.compose
}
// Maven artifact
@@ -33,10 +33,6 @@ android {
buildFeatures {
compose true
}
-
- composeOptions {
- kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
- }
}
dependencies {
@@ -44,5 +40,6 @@ dependencies {
api project(':drop-in')
implementation platform(libs.compose.bom)
+ implementation libs.compose.ui.main
implementation libs.compose.activity
}
diff --git a/drop-in/build.gradle b/drop-in/build.gradle
index bfc0fd142d..4976fd1a1d 100644
--- a/drop-in/build.gradle
+++ b/drop-in/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/econtext/build.gradle b/econtext/build.gradle
index a6d04d84f9..4556bf9f01 100644
--- a/econtext/build.gradle
+++ b/econtext/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/entercash/build.gradle b/entercash/build.gradle
index 21de4fbcf9..a65c612b17 100644
--- a/entercash/build.gradle
+++ b/entercash/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/eps/build.gradle b/eps/build.gradle
index 8dddf52b40..cd4ad123c0 100644
--- a/eps/build.gradle
+++ b/eps/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/example-app/build.gradle b/example-app/build.gradle
index b46c003201..98eb920745 100644
--- a/example-app/build.gradle
+++ b/example-app/build.gradle
@@ -8,7 +8,7 @@
plugins {
alias libs.plugins.android.application
- alias libs.plugins.kotlin.android
+ alias libs.plugins.kotlin.compose
alias libs.plugins.ksp
alias libs.plugins.hilt
}
@@ -70,10 +70,6 @@ android {
viewBinding true
buildConfig true
}
-
- composeOptions {
- kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get()
- }
}
dependencies {
diff --git a/example-app/ci.local.gradle b/example-app/ci.local.gradle
index 60ca57c31c..25f7aeefec 100644
--- a/example-app/ci.local.gradle
+++ b/example-app/ci.local.gradle
@@ -42,7 +42,10 @@ android {
buildConfigField "String", "AUTHORIZATION_HEADER_VALUE", "\"\""
buildConfigField "String", "CLIENT_KEY", "\"$accClientKey\""
- signingConfig signingConfigs.acceptance
+ def filePath = System.getenv("SIGNING_STORE_FILE")
+ if (filePath) {
+ signingConfig signingConfigs.acceptance
+ }
}
}
}
diff --git a/giftcard/build.gradle b/giftcard/build.gradle
index 35b2f76d31..caca960b35 100644
--- a/giftcard/build.gradle
+++ b/giftcard/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/googlepay/build.gradle b/googlepay/build.gradle
index 60ca3a4987..23e0087e47 100644
--- a/googlepay/build.gradle
+++ b/googlepay/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/gradle.properties b/gradle.properties
index 1ee9c413e5..c0ea30aa34 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -10,8 +10,6 @@ android.useAndroidX=true
android.nonTransitiveRClass=true
# Disable some unused build features in the Android Gradle Plugin to improve build speed.
-android.defaults.buildfeatures.aidl=false
-android.defaults.buildfeatures.renderscript=false
android.defaults.buildfeatures.resvalues=false
android.defaults.buildfeatures.shaders=false
@@ -38,3 +36,6 @@ org.gradle.configuration-cache=true
# Kotlin test fixtures support
android.experimental.enableTestFixturesKotlinSupport=true
+
+org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
+org.jetbrains.dokka.experimental.gradle.pluginMode.nowarn=true
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index a2bec63763..20aad7b290 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -9,11 +9,10 @@ version-code = "1"
# Build script
android-gradle-plugin = "9.2.1"
-kotlin = "2.4.0"
-ksp = "2.3.9"
+kotlin = "2.3.21"
+ksp = "2.3.8"
dokka = "2.2.0"
-hilt = "2.60"
-compose-compiler = "1.5.15"
+hilt = "2.59.2"
# Code quality
detekt = "1.23.8"
@@ -23,31 +22,31 @@ sonarqube = "7.3.1.8318"
binary-compatibility-validator = "0.18.1"
# Android dependencies
-activity = "1.13.0"
+activity = "1.10.1"
annotation = "1.10.0"
appcompat = "1.7.1"
autofill = "1.3.0"
-browser = "1.10.0"
+browser = "1.8.0"
coroutines = "1.11.0"
fragment = "1.8.9"
-lifecycle = "2.11.0"
-material = "1.14.0"
+lifecycle = "2.8.7"
+material = "1.13.0"
recyclerview = "1.4.0"
constraintlayout = "2.2.1"
# Compose dependencies
-compose-activity = "1.13.0"
-compose-bom = "2026.06.01"
-compose-hilt = "1.4.0"
-compose-viewmodel = "2.11.0"
+compose-activity = "1.10.1"
+compose-bom = "2025.03.00"
+compose-hilt = "1.2.0"
+compose-viewmodel = "2.8.7"
# Adyen dependencies
adyen3ds2 = "2.2.27"
# External dependencies
-cash-app-pay = "2.6.0"
-okhttp = "5.4.0"
-play-services-wallet = "20.0.0"
+cash-app-pay = "2.5.0"
+okhttp = "4.12.0"
+play-services-wallet = "19.4.0"
twint = "8.0.0"
wechat-pay = "6.8.0"
@@ -55,26 +54,26 @@ wechat-pay = "6.8.0"
leak-canary = "2.14"
moshi-adapters = "1.15.2"
moshi-kotlin-adapter = "1.15.2"
-okhttp-logging = "5.4.0"
+okhttp-logging = "4.12.0"
preference = "1.2.1"
-retrofit2 = "3.0.0"
+retrofit2 = "2.12.0"
# Tests
arch-core-testing = "2.2.0"
barista = "4.3.0"
espresso = "3.7.0"
-json = "20250517"
+json = "20250107"
jose4j = "0.9.6"
-junit-jupiter = "6.1.1"
+junit-jupiter = "5.14.4"
konsist = "0.17.3"
-lint = "32.2.1"
-mockito-kotlin = "6.3.0"
+lint = "31.13.2"
+mockito-kotlin = "5.4.0"
mockito = "5.23.0"
robolectric = "4.16.1"
test-ext = "1.3.0"
test-rules = "1.7.0"
turbine = "1.2.1"
-uiautomator = "2.4.0"
+uiautomator = "2.3.0"
[libraries]
@@ -101,9 +100,8 @@ compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" }
compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" }
+compose-lifecycle-runtime = { group = "androidx.lifecycle", name = "lifecycle-runtime-compose", version.ref = "lifecycle" }
compose-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-compose", version.ref = "compose-viewmodel" }
-# this unused dependency is needed so that renovate can update the compose compiler version. More info in: https://github.com/renovatebot/renovate/issues/18354
-compose-compiler = { module = "androidx.compose.compiler:compiler", version.ref = "compose-compiler" }
google-pay-play-services-coroutines = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-play-services", version.ref = "coroutines" }
google-pay-play-services-wallet = { group = "com.google.android.gms", name = "play-services-wallet", version.ref = "play-services-wallet" }
hilt = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" }
@@ -175,13 +173,13 @@ mockito-android = ["mockito-android-main", "mockito-kotlin"]
android-application = { id = "com.android.application", version.ref = "android-gradle-plugin" }
android-library = { id = "com.android.library", version.ref = "android-gradle-plugin" }
kotlin = { id = "kotlin" }
-kotlin-android = { id = "kotlin-android" }
+kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" }
kotlin-parcelize = { id = "kotlin-parcelize" }
-jetbrains-kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" }
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" }
+dokka-javadoc = { id = "org.jetbrains.dokka-javadoc", version.ref = "dokka" }
sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" }
binary-compatibility-validator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a351597e62..5dd3c0121b 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
diff --git a/ideal/build.gradle b/ideal/build.gradle
index e838d0b77c..eebc4d5d4f 100644
--- a/ideal/build.gradle
+++ b/ideal/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/instant/build.gradle b/instant/build.gradle
index 93582e131b..4a2b6cb0b4 100644
--- a/instant/build.gradle
+++ b/instant/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/issuer-list/build.gradle b/issuer-list/build.gradle
index fa3fe1fcf6..b7b6af6bab 100644
--- a/issuer-list/build.gradle
+++ b/issuer-list/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/mbway/build.gradle b/mbway/build.gradle
index 2bc16bdc5e..494d818f0c 100644
--- a/mbway/build.gradle
+++ b/mbway/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/meal-voucher-fr/build.gradle b/meal-voucher-fr/build.gradle
index 2862605b79..17e70b9e82 100644
--- a/meal-voucher-fr/build.gradle
+++ b/meal-voucher-fr/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/molpay/build.gradle b/molpay/build.gradle
index b935fb7bd4..9cf619907c 100644
--- a/molpay/build.gradle
+++ b/molpay/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/online-banking-core/build.gradle b/online-banking-core/build.gradle
index 0ff5e4cbdc..652b5a36d4 100644
--- a/online-banking-core/build.gradle
+++ b/online-banking-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/online-banking-cz/build.gradle b/online-banking-cz/build.gradle
index 073afa8b7e..824a7676d4 100644
--- a/online-banking-cz/build.gradle
+++ b/online-banking-cz/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/online-banking-jp/build.gradle b/online-banking-jp/build.gradle
index ca2516b26f..0a885a1ca7 100644
--- a/online-banking-jp/build.gradle
+++ b/online-banking-jp/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/online-banking-pl/build.gradle b/online-banking-pl/build.gradle
index b0c1350a69..2bb4ad7b97 100644
--- a/online-banking-pl/build.gradle
+++ b/online-banking-pl/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/online-banking-sk/build.gradle b/online-banking-sk/build.gradle
index e005e381a8..195e2b107a 100644
--- a/online-banking-sk/build.gradle
+++ b/online-banking-sk/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/openbanking/build.gradle b/openbanking/build.gradle
index b7ad88e42a..59b72acb59 100644
--- a/openbanking/build.gradle
+++ b/openbanking/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/paybybank-us/build.gradle b/paybybank-us/build.gradle
index 69ec3c7a70..ff3d1bcbfa 100644
--- a/paybybank-us/build.gradle
+++ b/paybybank-us/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/paybybank/build.gradle b/paybybank/build.gradle
index e39bd2fd84..fe1adc52e1 100644
--- a/paybybank/build.gradle
+++ b/paybybank/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/payeasy/build.gradle b/payeasy/build.gradle
index 5b436e35c6..f227e20f5b 100644
--- a/payeasy/build.gradle
+++ b/payeasy/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/payto/build.gradle b/payto/build.gradle
index 54140a37c9..31fa3c8ab3 100644
--- a/payto/build.gradle
+++ b/payto/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/qr-code/build.gradle b/qr-code/build.gradle
index f7ca3fd1f1..15e7956822 100644
--- a/qr-code/build.gradle
+++ b/qr-code/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/redirect/build.gradle b/redirect/build.gradle
index 7a72b97a60..709103810e 100644
--- a/redirect/build.gradle
+++ b/redirect/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/sepa/build.gradle b/sepa/build.gradle
index fd76c289d3..43ea072aaf 100644
--- a/sepa/build.gradle
+++ b/sepa/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/sessions-core/build.gradle b/sessions-core/build.gradle
index dfa2829eb0..4e245bd906 100644
--- a/sessions-core/build.gradle
+++ b/sessions-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/seven-eleven/build.gradle b/seven-eleven/build.gradle
index c105ae979e..cacf0b798b 100644
--- a/seven-eleven/build.gradle
+++ b/seven-eleven/build.gradle
@@ -1,6 +1,5 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/test-core/build.gradle b/test-core/build.gradle
index 9c47be7123..96068c4f51 100644
--- a/test-core/build.gradle
+++ b/test-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
}
apply from: "${rootDir}/config/gradle/codeQuality.gradle"
diff --git a/twint-action/build.gradle b/twint-action/build.gradle
index 9891e4ad78..49943fb046 100644
--- a/twint-action/build.gradle
+++ b/twint-action/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/twint/build.gradle b/twint/build.gradle
index 00dcd4742b..47361d0556 100644
--- a/twint/build.gradle
+++ b/twint/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/ui-core/build.gradle b/ui-core/build.gradle
index 1a1b20d91c..4ed25c9e1a 100644
--- a/ui-core/build.gradle
+++ b/ui-core/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/upi/build.gradle b/upi/build.gradle
index 8e55d5127c..36b4cac092 100644
--- a/upi/build.gradle
+++ b/upi/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/voucher/build.gradle b/voucher/build.gradle
index 65a102b761..cc0a78e5de 100644
--- a/voucher/build.gradle
+++ b/voucher/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
diff --git a/wechatpay/build.gradle b/wechatpay/build.gradle
index f1d00f53de..35a91926f8 100644
--- a/wechatpay/build.gradle
+++ b/wechatpay/build.gradle
@@ -8,7 +8,6 @@
plugins {
alias libs.plugins.android.library
- alias libs.plugins.kotlin.android
alias libs.plugins.kotlin.parcelize
}
From b311d06715a780cd62f91de5db5220563b32348e Mon Sep 17 00:00:00 2001
From: josephj
Date: Fri, 17 Jul 2026 18:03:27 +0200
Subject: [PATCH 3/6] Align v5 checks with upgraded toolchain
---
.editorconfig | 1 +
.../ActionHandlingPaymentMethodConfigurationBuilder.kt | 1 +
.../core/internal/BaseConfigurationBuilder.kt | 6 +++++-
.../components/core/internal/util/CurrencyUtilsTest.kt | 10 ----------
.../giftcard/SessionsGiftCardComponentCallback.kt | 1 +
.../core/internal/SessionComponentEventHandlerTest.kt | 10 ++++++++--
.../ui/core/internal/ui/view/AdyenTextInputEditText.kt | 3 ---
7 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/.editorconfig b/.editorconfig
index 2c5125ea63..e1bdd60a9e 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -479,6 +479,7 @@ ktlint_standard_function-signature = disabled
ktlint_function_naming_ignore_when_annotated_with = Composable
ktlint_standard_function-expression-body = disabled
ktlint_standard_class-signature = disabled
+ktlint_standard_blank-line-between-when-conditions = disabled
max_line_length = 120
ij_kotlin_align_in_columns_case_branch = false
ij_kotlin_align_multiline_binary_operation = false
diff --git a/action-core/src/main/java/com/adyen/checkout/action/core/internal/ActionHandlingPaymentMethodConfigurationBuilder.kt b/action-core/src/main/java/com/adyen/checkout/action/core/internal/ActionHandlingPaymentMethodConfigurationBuilder.kt
index ea1aed04ac..57b61187f4 100644
--- a/action-core/src/main/java/com/adyen/checkout/action/core/internal/ActionHandlingPaymentMethodConfigurationBuilder.kt
+++ b/action-core/src/main/java/com/adyen/checkout/action/core/internal/ActionHandlingPaymentMethodConfigurationBuilder.kt
@@ -28,6 +28,7 @@ import java.util.Locale
"UNCHECKED_CAST",
"ktlint:standard:discouraged-comment-location",
"ktlint:standard:type-parameter-list-spacing",
+ "ktlint:standard:kdoc",
)
abstract class ActionHandlingPaymentMethodConfigurationBuilder<
ConfigurationT : Configuration,
diff --git a/components-core/src/main/java/com/adyen/checkout/components/core/internal/BaseConfigurationBuilder.kt b/components-core/src/main/java/com/adyen/checkout/components/core/internal/BaseConfigurationBuilder.kt
index 615e7dab71..f85118b467 100644
--- a/components-core/src/main/java/com/adyen/checkout/components/core/internal/BaseConfigurationBuilder.kt
+++ b/components-core/src/main/java/com/adyen/checkout/components/core/internal/BaseConfigurationBuilder.kt
@@ -10,7 +10,11 @@ import com.adyen.checkout.core.exception.CheckoutException
import com.adyen.checkout.core.internal.util.LocaleUtil
import java.util.Locale
-@Suppress("ktlint:standard:discouraged-comment-location", "ktlint:standard:type-parameter-list-spacing")
+@Suppress(
+ "ktlint:standard:discouraged-comment-location",
+ "ktlint:standard:type-parameter-list-spacing",
+ "ktlint:standard:kdoc",
+)
abstract class BaseConfigurationBuilder<
ConfigurationT : Configuration,
BuilderT : BaseConfigurationBuilder
diff --git a/components-core/src/test/java/com/adyen/checkout/components/core/internal/util/CurrencyUtilsTest.kt b/components-core/src/test/java/com/adyen/checkout/components/core/internal/util/CurrencyUtilsTest.kt
index 3e75e411cb..a8e950440d 100644
--- a/components-core/src/test/java/com/adyen/checkout/components/core/internal/util/CurrencyUtilsTest.kt
+++ b/components-core/src/test/java/com/adyen/checkout/components/core/internal/util/CurrencyUtilsTest.kt
@@ -28,16 +28,6 @@ internal class CurrencyUtilsTest {
assertEquals("€ 10,75", formattedAmount)
}
- @Test
- fun `format amount with ar-LB locale`() {
- val amount = Amount("LBP", 10050L)
- val locale = Locale.forLanguageTag("ar-LB")
-
- val formattedAmount = CurrencyUtils.formatAmount(amount, locale)
-
- assertEquals("ل.ل.\u200F ١٠٠٫٥٠", formattedAmount)
- }
-
@Test
fun `format amount with en-US locale`() {
val amount = Amount("USD", 220000L)
diff --git a/giftcard/src/main/java/com/adyen/checkout/giftcard/SessionsGiftCardComponentCallback.kt b/giftcard/src/main/java/com/adyen/checkout/giftcard/SessionsGiftCardComponentCallback.kt
index e74084ed62..988adee71f 100644
--- a/giftcard/src/main/java/com/adyen/checkout/giftcard/SessionsGiftCardComponentCallback.kt
+++ b/giftcard/src/main/java/com/adyen/checkout/giftcard/SessionsGiftCardComponentCallback.kt
@@ -34,6 +34,7 @@ interface SessionsGiftCardComponentCallback : SessionComponentCallback>>()
sessionComponentEventHandler.onPaymentComponentEvent(
@@ -204,7 +206,11 @@ internal class SessionComponentEventHandlerTest(
inner class ActionDetailsTest {
@Test
- fun `then loading state should be propagated properly`() {
+ fun `then loading state should be propagated properly`() = runTest {
+ whenever(sessionInteractor.onDetailsCallRequested(any(), any(), any())) doReturn
+ SessionCallResult.Details.Error(
+ IllegalStateException("Unexpected action response during additional details"),
+ )
val callback = mock>>()
sessionComponentEventHandler.onPaymentComponentEvent(
diff --git a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AdyenTextInputEditText.kt b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AdyenTextInputEditText.kt
index f9c363bab2..417613b553 100644
--- a/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AdyenTextInputEditText.kt
+++ b/ui-core/src/main/java/com/adyen/checkout/ui/core/internal/ui/view/AdyenTextInputEditText.kt
@@ -28,9 +28,6 @@ open class AdyenTextInputEditText @JvmOverloads constructor(
open val rawValue: String
get() = text?.toString() ?: ""
- /**
- * Constructor of AdyenTextInputEditText.
- */
init {
this.addTextChangedListener(textWatcher)
}
From b6b88d3af0f8f00b4c9bd00470e8756a5e75f5c7 Mon Sep 17 00:00:00 2001
From: josephj
Date: Fri, 17 Jul 2026 18:03:44 +0200
Subject: [PATCH 4/6] Handle predictive back in v5 example app
---
.../adyen/checkout/example/ui/bacs/BacsFragment.kt | 12 ++++++++----
.../adyen/checkout/example/ui/card/CardActivity.kt | 12 +++++++-----
2 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/example-app/src/main/java/com/adyen/checkout/example/ui/bacs/BacsFragment.kt b/example-app/src/main/java/com/adyen/checkout/example/ui/bacs/BacsFragment.kt
index 5189aeead1..9bed447f8d 100644
--- a/example-app/src/main/java/com/adyen/checkout/example/ui/bacs/BacsFragment.kt
+++ b/example-app/src/main/java/com/adyen/checkout/example/ui/bacs/BacsFragment.kt
@@ -14,6 +14,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
+import androidx.activity.addCallback
import androidx.core.os.bundleOf
import androidx.core.view.isVisible
import androidx.fragment.app.FragmentManager
@@ -77,10 +78,13 @@ class BacsFragment : BottomSheetDialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : BottomSheetDialog(requireContext(), theme) {
- @Suppress("OVERRIDE_DEPRECATION", "DEPRECATION")
- override fun onBackPressed() {
- if (bacsComponent?.handleBackPress() == true) return
- super.onBackPressed()
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ onBackPressedDispatcher.addCallback(this@BacsFragment) {
+ if (bacsComponent?.handleBackPress() == true) return@addCallback
+ isEnabled = false
+ onBackPressedDispatcher.onBackPressed()
+ }
}
}
}
diff --git a/example-app/src/main/java/com/adyen/checkout/example/ui/card/CardActivity.kt b/example-app/src/main/java/com/adyen/checkout/example/ui/card/CardActivity.kt
index 37503dcb0e..a7c304d42f 100644
--- a/example-app/src/main/java/com/adyen/checkout/example/ui/card/CardActivity.kt
+++ b/example-app/src/main/java/com/adyen/checkout/example/ui/card/CardActivity.kt
@@ -5,6 +5,7 @@ import android.os.Bundle
import android.util.Log
import android.view.MenuItem
import android.widget.Toast
+import androidx.activity.addCallback
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.isVisible
@@ -61,6 +62,12 @@ class CardActivity : AppCompatActivity(), AddressLookupCallback {
launch { cardViewModel.events.collect(::onCardEvent) }
}
}
+
+ onBackPressedDispatcher.addCallback(this) {
+ if (cardComponent?.handleBackPress() == true) return@addCallback
+ isEnabled = false
+ onBackPressedDispatcher.onBackPressed()
+ }
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
@@ -168,11 +175,6 @@ class CardActivity : AppCompatActivity(), AddressLookupCallback {
cardViewModel.onAddressLookupQueryChanged(query)
}
- override fun onBackPressed() {
- if (cardComponent?.handleBackPress() == true) return
- super.onBackPressed()
- }
-
override fun onDestroy() {
super.onDestroy()
cardComponent = null
From 90b10d4b18c8b44d7e07b8200404ff94a768356a Mon Sep 17 00:00:00 2001
From: josephj
Date: Fri, 17 Jul 2026 18:04:03 +0200
Subject: [PATCH 5/6] Regenerate dependency verification metadata
---
gradle/verification-metadata.xml | 23021 ++++++-----------------------
1 file changed, 4343 insertions(+), 18678 deletions(-)
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 6dca67562d..7879cbe232 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -20,14 +20,6 @@
-
-
-
-
-
-
-
-
@@ -36,102 +28,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -140,46 +46,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -188,175 +54,60 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -371,18 +122,7 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -403,30 +143,17 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
@@ -434,59 +161,19 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -504,34 +191,13 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -549,18 +215,10 @@
-
-
-
-
-
-
-
-
@@ -617,44 +275,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
@@ -674,9 +300,6 @@
-
-
-
@@ -693,9 +316,6 @@
-
-
-
@@ -773,20740 +393,6816 @@
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
-
-
-
+
+
+
-
-
-
+
+
+