diff --git a/.github/workflows/appimage.yml b/.github/workflows/appimage.yml index 459d20749..2d4e47b08 100644 --- a/.github/workflows/appimage.yml +++ b/.github/workflows/appimage.yml @@ -44,9 +44,9 @@ jobs: openjfx-url: 'https://download2.gluonhq.com/openjfx/25/openjfx-25_linux-aarch64_bin-jmods.zip' openjfx-sha: '9ad4ca7b769ca4ee6419f1e99143dd6ff812f8be4fddb46a7d7cacbeea148af4' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} @@ -175,7 +175,7 @@ jobs: gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator-*.AppImage.zsync - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: appimage-${{ matrix.appimage-suffix }} path: | @@ -201,7 +201,7 @@ jobs: if: github.event_name == 'release' && needs.get-version.outputs.versionType == 'stable' steps: - name: Download AppImages - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: path: downloads/ merge-multiple: true @@ -212,7 +212,7 @@ jobs: echo "x64-sha256sum=${X64_SHA256}" >> "$GITHUB_OUTPUT" AARCH64_SHA256=$(sha256sum downloads/cryptomator-*-aarch64.AppImage | cut -d ' ' -f1) echo "aarch64-sha256sum=${AARCH64_SHA256}" >> "$GITHUB_OUTPUT" - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: 'cryptomator/aur-bin' token: ${{ secrets.CRYPTOBOT_PR_TOKEN }} diff --git a/.github/workflows/aur.yml b/.github/workflows/aur.yml index c8957c5de..303ce398c 100644 --- a/.github/workflows/aur.yml +++ b/.github/workflows/aur.yml @@ -48,7 +48,7 @@ jobs: env: AUR_PR_URL: tbd steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: 'cryptomator/aur' token: ${{ secrets.CRYPTOBOT_PR_TOKEN }} diff --git a/.github/workflows/av-whitelist.yml b/.github/workflows/av-whitelist.yml index 90560c87b..4a8aba9af 100644 --- a/.github/workflows/av-whitelist.yml +++ b/.github/workflows/av-whitelist.yml @@ -51,7 +51,7 @@ jobs: - name: Download file run: curl "${INPUT_URL}" -L -o "${{steps.extractName.outputs.fileName}}" --fail-with-body - name: Upload artifact - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: ${{ steps.extractName.outputs.fileName }} path: ${{ steps.extractName.outputs.fileName }} @@ -63,7 +63,7 @@ jobs: if: inputs.kaspersky steps: - name: Download artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: ${{ needs.download-file.outputs.fileName }} path: upload @@ -83,7 +83,7 @@ jobs: if: inputs.avast steps: - name: Download artifact - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: ${{ needs.download-file.outputs.fileName }} path: upload diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a393ace7c..12ab0d3fe 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -22,14 +22,14 @@ jobs: name: Compile and Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} cache: 'maven' - name: Cache SonarCloud packages - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar diff --git a/.github/workflows/check-jdk-updates.yml b/.github/workflows/check-jdk-updates.yml index 3613e546c..9eae6da00 100644 --- a/.github/workflows/check-jdk-updates.yml +++ b/.github/workflows/check-jdk-updates.yml @@ -26,7 +26,7 @@ jobs: run: echo 'JDK_MAJOR_VERSION=${{ env.JDK_VERSION }}'.substring(0,2) >> "$env:GITHUB_ENV" shell: pwsh - name: Checkout latest JDK ${{ env.JDK_MAJOR_VERSION }} - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: java-version: ${{ env.JDK_MAJOR_VERSION}} distribution: ${{ env.JDK_VENDOR }} diff --git a/.github/workflows/debian.yml b/.github/workflows/debian.yml index 5a632ac40..141e76e66 100644 --- a/.github/workflows/debian.yml +++ b/.github/workflows/debian.yml @@ -43,7 +43,7 @@ jobs: env: INPUT_PPAVER: ${{ inputs.ppaver }} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - id: deb-version name: Determine deb-version run: | @@ -60,7 +60,7 @@ jobs: env: DEB_BUILD_DEPENDS: ${{ env.DEB_BUILD_DEPENDS }} - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} @@ -143,7 +143,7 @@ jobs: run: | gpg --batch --quiet --passphrase-fd 0 --pinentry-mode loopback -u 615D449FE6E6A235 --detach-sign -a cryptomator_*_amd64.deb - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: linux-deb-package path: | diff --git a/.github/workflows/dependency-check.yml b/.github/workflows/dependency-check.yml index 22d2a5fc5..4ffcb9ff1 100644 --- a/.github/workflows/dependency-check.yml +++ b/.github/workflows/dependency-check.yml @@ -7,7 +7,7 @@ on: jobs: check-dependencies: - uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@1074588008ae3326a2221ea451783280518f0366 # v3.0.1 + uses: skymatic/workflows/.github/workflows/run-dependency-check.yml@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # v3.0.3 with: runner-os: 'ubuntu-latest' java-distribution: 'temurin' @@ -16,4 +16,4 @@ jobs: nvd-api-key: ${{ secrets.NVD_API_KEY }} ossindex-username: ${{ secrets.OSSINDEX_USERNAME }} ossindex-token: ${{ secrets.OSSINDEX_API_TOKEN }} - slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_URL }} + slack-webhook-url: ${{ secrets.SLACK_WEBHOOK_CRYPTOMATOR_DESKTOP }} diff --git a/.github/workflows/dl-stats.yml b/.github/workflows/dl-stats.yml index 7bca07e5d..bfc53db3c 100644 --- a/.github/workflows/dl-stats.yml +++ b/.github/workflows/dl-stats.yml @@ -53,7 +53,7 @@ jobs: INTERVAL: 900 JSON_DATA: ${{ steps.get-stats.outputs.result }} - name: Upload Results - uses: fjogeleit/http-request-action@c0b95d02a088b47c1f2f4db04fd8af8bd19eee54 # v1.16.6 + uses: fjogeleit/http-request-action@551353b829c3646756b2ec2b3694f819d7957495 # v2.0.0 with: url: 'https://graphite-us-central1.grafana.net/metrics' method: 'POST' diff --git a/.github/workflows/flathub.yml b/.github/workflows/flathub.yml index 179f72de3..e31f4cfdc 100644 --- a/.github/workflows/flathub.yml +++ b/.github/workflows/flathub.yml @@ -43,7 +43,7 @@ jobs: env: FLATHUB_PR_URL: tbd steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: repository: 'flathub/org.cryptomator.Cryptomator' token: ${{ secrets.CRYPTOBOT_PR_TOKEN }} diff --git a/.github/workflows/get-version.yml b/.github/workflows/get-version.yml index deb199794..f75b22a63 100644 --- a/.github/workflows/get-version.yml +++ b/.github/workflows/get-version.yml @@ -35,11 +35,11 @@ jobs: revNum: ${{ steps.versions.outputs.revNum }} type: ${{ steps.versions.outputs.type}} steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: fetch-depth: 0 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} diff --git a/.github/workflows/mac-dmg-x64.yml b/.github/workflows/mac-dmg-x64.yml index be790a063..b1677458e 100644 --- a/.github/workflows/mac-dmg-x64.yml +++ b/.github/workflows/mac-dmg-x64.yml @@ -47,9 +47,9 @@ jobs: openjfx-url: 'https://download2.gluonhq.com/openjfx/25/openjfx-25_osx-x64_bin-jmods.zip' openjfx-sha: '0eba73fb28a24c845175d16fa2f8c081c936ce6de1be9b79eb6119fa32e53d52' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} @@ -283,7 +283,7 @@ jobs: run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db continue-on-error: true - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: dmg-${{ matrix.output-suffix }} path: | diff --git a/.github/workflows/mac-dmg.yml b/.github/workflows/mac-dmg.yml index 4182ab180..8b341b56a 100644 --- a/.github/workflows/mac-dmg.yml +++ b/.github/workflows/mac-dmg.yml @@ -45,9 +45,9 @@ jobs: openjfx-url: 'https://download2.gluonhq.com/openjfx/25/openjfx-25_osx-aarch64_bin-jmods.zip' openjfx-sha: '13f8c0513c40c95881479fbcf0465a29a60217393fb0656f5e4eab78a9442fba' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} @@ -282,7 +282,7 @@ jobs: run: security delete-keychain $RUNNER_TEMP/codesign.keychain-db continue-on-error: true - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: dmg-${{ matrix.output-suffix }} path: | diff --git a/.github/workflows/pullrequest.yml b/.github/workflows/pullrequest.yml index 3ad72f3ae..a0f6beefe 100644 --- a/.github/workflows/pullrequest.yml +++ b/.github/workflows/pullrequest.yml @@ -16,8 +16,8 @@ jobs: name: Compile and Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 - - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} diff --git a/.github/workflows/release-check.yml b/.github/workflows/release-check.yml index ca621c580..897ff8647 100644 --- a/.github/workflows/release-check.yml +++ b/.github/workflows/release-check.yml @@ -19,9 +19,9 @@ jobs: name: Validate commits pushed to release/hotfix branch to fulfill release requirements runs-on: ubuntu-latest steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ env.JAVA_DIST }} java-version: ${{ env.JAVA_VERSION }} @@ -49,7 +49,7 @@ jobs: exit 1 fi - name: Cache NVD DB - uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4.3.0 + uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3 with: path: ~/.m2/repository/org/owasp/dependency-check-data/ key: dependency-check-${{ github.run_id }} diff --git a/.github/workflows/win-exe.yml b/.github/workflows/win-exe.yml index 6b258e154..749cab0c2 100644 --- a/.github/workflows/win-exe.yml +++ b/.github/workflows/win-exe.yml @@ -51,9 +51,9 @@ jobs: java-version: '25.0.1+8' java-package: 'jdk' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ matrix.java-dist }} java-version: ${{ matrix.java-version }} @@ -200,7 +200,7 @@ jobs: client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - name: Sign DLLs with Actalis CodeSigner if: inputs.sign || github.event_name == 'release' - uses: skymatic/workflows/.github/actions/win-sign-action@1074588008ae3326a2221ea451783280518f0366 # no specific version + uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version with: base-dir: 'appdir' file-extensions: 'dll,exe,ps1' @@ -277,7 +277,7 @@ jobs: GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: msi-${{ matrix.arch }} path: | @@ -299,21 +299,21 @@ jobs: java-version: '24.0.1+9' java-package: 'jdk' steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Install wix and extensions run: | dotnet tool install --global wix --version 6.0.0 wix.exe extension add WixToolset.BootstrapperApplications.wixext/6.0.0 --global wix.exe extension add WixToolset.Util.wixext/6.0.0 --global - name: Download .msi - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: name: msi-${{ matrix.arch }} path: dist/win/bundle/resources - name: Strip version info from msi file name run: mv dist/win/bundle/resources/Cryptomator*.msi dist/win/bundle/resources/Cryptomator.msi - name: Setup Java - uses: actions/setup-java@f2beeb24e141e01a676f977032f5a29d81c9e27e # v5.1.0 + uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5.2.0 with: distribution: ${{ matrix.java-dist }} java-version: ${{ matrix.java-version }} @@ -376,7 +376,7 @@ jobs: client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - name: Sign burn engine with Actalis CodeSigner if: inputs.sign || github.event_name == 'release' - uses: skymatic/workflows/.github/actions/win-sign-action@1074588008ae3326a2221ea451783280518f0366 # no specific version + uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version with: base-dir: 'tmp' file-extensions: 'exe' @@ -400,7 +400,7 @@ jobs: client-secret: ${{ secrets.AZURE_CLIENT_SECRET }} - name: Sign installer with Actalis CodeSigner if: inputs.sign || github.event_name == 'release' - uses: skymatic/workflows/.github/actions/win-sign-action@1074588008ae3326a2221ea451783280518f0366 # no specific version + uses: skymatic/workflows/.github/actions/win-sign-action@957d3c2c08c56855fdac41e5afb9a7aca8c30dd9 # no specific version with: base-dir: 'installer' file-extensions: 'exe' @@ -418,7 +418,7 @@ jobs: GPG_PRIVATE_KEY: ${{ secrets.RELEASES_GPG_PRIVATE_KEY }} GPG_PASSPHRASE: ${{ secrets.RELEASES_GPG_PASSPHRASE }} - name: Upload artifacts - uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0 + uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0 with: name: exe-${{ matrix.executable-suffix }} path: | @@ -436,7 +436,7 @@ jobs: download-url-exe-x64: ${{ fromJSON(steps.publish.outputs.assets)[2].browser_download_url }} steps: - name: Download installers - uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0 + uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0 with: merge-multiple: true - name: Publish installers on GitHub Releases diff --git a/CHANGELOG.md b/CHANGELOG.md index 1c70c2ddd..6a071b2fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,10 +15,11 @@ Changes to prior versions can be found on the [Github release page](https://gith * Implemented Flatpak update mechanism * App notifications ([#4069](https://github.com/cryptomator/cryptomator/pull/4069)) * Mark files in-use for Hub vaults ([#4078](https://github.com/cryptomator/cryptomator/pull/4078)) -* Accessibility labels for GUI elements ([#4064](https://github.com/cryptomator/cryptomator/issues/4064), [#4066](https://github.com/cryptomator/cryptomator/pull/4066), [#4055](https://github.com/cryptomator/cryptomator/issues/4055)) +* Accessibility: Adjust app to be used with a screen reader ([#547](https://github.com/cryptomator/cryptomator/issues/547)) * Show Archived Vault Dialog on unlock when Hub returns 410 ([#4081](https://github.com/cryptomator/cryptomator/pull/4081)) * Admin configuration: Allow overwriting certain app properties by external config file ([#4105](https://github.com/cryptomator/cryptomator/pull/4105)) ### Changed * Built using JDK 25 ([#4031](https://github.com/cryptomator/cryptomator/issues/4031)) -* Modernized Template for GitHub Releases \ No newline at end of file +* Modernized Template for GitHub Releases +* Disable user defined app start config on Windows ([#4132](https://github.com/cryptomator/cryptomator/issues/4132)) diff --git a/dist/win/contrib/disableUserConfig.bat b/dist/win/contrib/disableUserConfig.bat new file mode 100644 index 000000000..dd26ca402 --- /dev/null +++ b/dist/win/contrib/disableUserConfig.bat @@ -0,0 +1,12 @@ +@echo off +:: Batch wrapper for PowerShell script to disable user configuration in Cryptomator +:: This is executed as a Custom Action during MSI installation +:: This file must be located in the INSTALLDIR + +:: Change to INSTALLDIR +cd %~dp0 +:: Execute the PowerShell script +powershell.exe -NoLogo -NoProfile -NonInteractive -ExecutionPolicy RemoteSigned -File ".\disableUserConfig.ps1" + +:: Return the exit code from PowerShell +exit /b %ERRORLEVEL% \ No newline at end of file diff --git a/dist/win/contrib/disableUserConfig.ps1 b/dist/win/contrib/disableUserConfig.ps1 new file mode 100644 index 000000000..4ed9a5c51 --- /dev/null +++ b/dist/win/contrib/disableUserConfig.ps1 @@ -0,0 +1,24 @@ +# PowerShell script to disable user configuration +# This script is executed as a Custom Action during MSI installation +# It deletes the file .package, effectively disabling user specific jpackage configuration. +# NOTE: This file must be located in the same directory as set in the MSI property INSTALLDIR + +try { + + # Determine file path + $packageFile = Join-Path $PSScriptRoot 'app\.package' + + #check if file exists + if (Test-Path -Path $packageFile) { + Write-Host "Deleting file: $packageFile" + Remove-Item -Path $packageFile -Force -ErrorAction Stop + } else { + Write-Host "File not found: $packageFile. Skipping deletion." + } + + exit 0 +} +catch { + Write-Error "Error deleting package file: $_" + exit 1 +} \ No newline at end of file diff --git a/dist/win/resources/main.wxs b/dist/win/resources/main.wxs index 0d6f0d8f1..9cd56f746 100644 --- a/dist/win/resources/main.wxs +++ b/dist/win/resources/main.wxs @@ -160,6 +160,10 @@ + + + + @@ -216,9 +220,10 @@ + - + diff --git a/src/main/java/org/cryptomator/ui/controls/NotificationBar.java b/src/main/java/org/cryptomator/ui/controls/InfoBar.java similarity index 67% rename from src/main/java/org/cryptomator/ui/controls/NotificationBar.java rename to src/main/java/org/cryptomator/ui/controls/InfoBar.java index 64a08f220..02efa00f5 100644 --- a/src/main/java/org/cryptomator/ui/controls/NotificationBar.java +++ b/src/main/java/org/cryptomator/ui/controls/InfoBar.java @@ -4,24 +4,27 @@ import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.fxml.FXML; import javafx.geometry.Pos; +import javafx.scene.AccessibleRole; import javafx.scene.control.Button; +import javafx.scene.control.ContentDisplay; import javafx.scene.control.Label; import javafx.scene.layout.HBox; import javafx.scene.layout.Region; import javafx.scene.layout.VBox; +import java.util.ResourceBundle; -public class NotificationBar extends HBox { +public class InfoBar extends HBox { @FXML - private Label notificationLabel; + private Label infoMessage; private final BooleanProperty dismissable = new SimpleBooleanProperty(); private final BooleanProperty notify = new SimpleBooleanProperty(); - public NotificationBar() { + public InfoBar() { setAlignment(Pos.CENTER); - setStyle("-fx-alignment: center;"); + getStyleClass().addAll("info-bar"); Region spacer = new Region(); spacer.setMinWidth(40); @@ -36,14 +39,21 @@ public class NotificationBar extends HBox { vbox.setAlignment(Pos.CENTER); HBox.setHgrow(vbox, javafx.scene.layout.Priority.ALWAYS); - notificationLabel = new Label(); - notificationLabel.getStyleClass().add("notification-label"); - notificationLabel.setStyle("-fx-alignment: center;"); - vbox.getChildren().add(notificationLabel); + infoMessage = new Label(); + infoMessage.setFocusTraversable(true); + infoMessage.setAccessibleRole(AccessibleRole.BUTTON); + vbox.getChildren().add(infoMessage); - Button closeButton = new Button("X"); + var closeGraphic = new FontAwesome5IconView(); + closeGraphic.setGlyph(FontAwesome5Icon.TIMES); + closeGraphic.setGlyphSize(12); + closeGraphic.getStyleClass().add("glyph"); + + Button closeButton = new Button(); + closeButton.setGraphic(closeGraphic); + closeButton.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); + closeButton.setAccessibleText(ResourceBundle.getBundle("i18n.strings").getString("main.notification.closeButton.tooltip")); closeButton.setMinWidth(40); - closeButton.setStyle("-fx-background-color: transparent; -fx-text-fill: white; -fx-font-weight: bold;"); closeButton.visibleProperty().bind(dismissable); closeButton.setOnAction(_ -> { @@ -61,11 +71,11 @@ public class NotificationBar extends HBox { } public String getText() { - return notificationLabel.getText(); + return infoMessage.getText(); } public void setText(String text) { - notificationLabel.setText(text); + infoMessage.setText(text); } public void setStyleClass(String styleClass) { diff --git a/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java b/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java index 9324c8c7b..845da328f 100644 --- a/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java +++ b/src/main/java/org/cryptomator/ui/mainwindow/VaultListCellController.java @@ -16,6 +16,7 @@ import javafx.beans.value.ObservableValue; import javafx.fxml.FXML; import javafx.geometry.Insets; import javafx.scene.layout.HBox; +import java.util.ResourceBundle; // unscoped because each cell needs its own controller public class VaultListCellController implements FxController { @@ -23,9 +24,12 @@ public class VaultListCellController implements FxController { private static final Insets COMPACT_INSETS = new Insets(6, 12, 6, 12); private static final Insets DEFAULT_INSETS = new Insets(12); + private final ResourceBundle resourceBundle; private final ObjectProperty vault = new SimpleObjectProperty<>(); + private final ObservableValue vaultState; private final ObservableValue glyph; private final ObservableValue compactMode; + private final ObservableValue accessibleText; private AutoAnimator spinAnimation; @@ -35,17 +39,21 @@ public class VaultListCellController implements FxController { public HBox vaultListCell; @Inject - VaultListCellController(Settings settings) { - this.glyph = vault.flatMap(Vault::stateProperty).map(this::getGlyphForVaultState); + VaultListCellController(Settings settings, ResourceBundle resourceBundle) { + this.resourceBundle = resourceBundle; + this.vaultState = vault.flatMap(Vault::stateProperty); + this.glyph = vaultState.map(this::getGlyphForVaultState); + this.accessibleText = vaultState.map(this::getAccessibleTextForVaultState); this.compactMode = settings.compactMode; } public void initialize() { this.spinAnimation = AutoAnimator.animate(Animations.createDiscrete360Rotation(vaultStateView)) // - .onCondition(vault.flatMap(Vault::stateProperty).map(VaultState.Value.PROCESSING::equals).orElse(false)) // + .onCondition(vaultState.map(VaultState.Value.PROCESSING::equals).orElse(false)) // .afterStop(() -> vaultStateView.setRotate(0)) // .build(); this.vaultListCell.paddingProperty().bind(compactMode.map(c -> c ? COMPACT_INSETS : DEFAULT_INSETS)); + this.vaultListCell.accessibleTextProperty().bind(accessibleText); } // TODO deduplicate w/ VaultDetailController @@ -62,6 +70,25 @@ public class VaultListCellController implements FxController { } } + private String getAccessibleTextForVaultState(VaultState.Value state) { + var v = vault.get(); + if (state != null && v != null) { + var translationKey = switch (state) { + case LOCKED -> "vault.state.locked"; + case PROCESSING -> "vault.state.processing"; + case UNLOCKED -> "vault.state.unlocked"; + case NEEDS_MIGRATION -> "vault.state.migrationNeeded"; + case MISSING -> "vault.state.missing"; + case VAULT_CONFIG_MISSING, ALL_MISSING, ERROR -> "vault.state.error"; + }; + + var localizedState = resourceBundle.getString(translationKey); + return resourceBundle.getString("main.vaultlist.listEntry").formatted(v.getDisplayName(), localizedState); + } else { + return ""; + } + } + /* Getter/Setter */ public ObservableValue glyphProperty() { diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyCreationController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyCreationController.java index 456de11f4..e67ca87c6 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyCreationController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyCreationController.java @@ -104,7 +104,7 @@ public class RecoveryKeyCreationController implements FxController { descriptionLabel.formatProperty().set(resourceBundle.getString("recoveryKey.recover.description")); cancelButton.setOnAction((_) -> back()); cancelButton.setText(resourceBundle.getString("generic.button.back")); - nextButton.setOnAction((_) -> restoreWithPassword()); + nextButton.setOnAction((_) -> restoreWithPasswordAsync()); } } @@ -137,11 +137,47 @@ public class RecoveryKeyCreationController implements FxController { } @FXML - public void restoreWithPassword() { + public void restoreWithPasswordAsync() { + Task task = RecoveryKeyTasks.createTask(this::restoreWithPassword); + task.setOnScheduled(_ -> { + LOG.debug("Restoring vault configuration with password for {}.", vault.getDisplayablePath()); + }); + + task.setOnSucceeded(_ -> { + LOG.debug("Restored vault configuration for {}.", vault.getDisplayablePath()); + try { + if (!vaultListManager.isAlreadyAdded(vault.getPath())) { + vaultListManager.add(vault.getPath()); + } + window.close(); + dialogs.prepareRecoverPasswordSuccess((Stage) window.getOwner()) // + .setTitleKey("recover.recoverVaultConfig.title") // + .setMessageKey("recoveryKey.recover.resetVaultConfigSuccess.message") // + .setDescriptionKey("recoveryKey.recover.resetMasterkeyFileSuccess.description") + .build().showAndWait(); + } catch (IOException e) { + LOG.error("Failed to add vault to list.", e); + appWindows.showErrorWindow(e, window, null); + } + }); + + task.setOnFailed(_ -> { + if (task.getException() instanceof InvalidPassphraseException e) { + LOG.info("Password invalid", e); + Animations.createShakeWindowAnimation(window).play(); + } else { + LOG.error("Recovery process failed.", task.getException()); + appWindows.showErrorWindow(task.getException(), window, null); + } + }); + + executor.submit(task); + } + + void restoreWithPassword() throws IOException, CryptoException { try (RecoveryDirectory recoveryDirectory = RecoveryDirectory.create(vault.getPath())) { Path recoveryPath = recoveryDirectory.getRecoveryPath(); - Path masterkeyFilePath = vault.getPath().resolve(MASTERKEY_FILENAME); try (Masterkey masterkey = MasterkeyService.load(masterkeyFileAccess, masterkeyFilePath, passwordField.getCharacters())) { @@ -152,23 +188,6 @@ public class RecoveryKeyCreationController implements FxController { } recoveryDirectory.moveRecoveredFile(VAULTCONFIG_FILENAME); - - if (!vaultListManager.isAlreadyAdded(vault.getPath())) { - vaultListManager.add(vault.getPath()); - } - window.close(); - dialogs.prepareRecoverPasswordSuccess((Stage)window.getOwner()) // - .setTitleKey("recover.recoverVaultConfig.title") // - .setMessageKey("recoveryKey.recover.resetVaultConfigSuccess.message") // - .setDescriptionKey("recoveryKey.recover.resetMasterkeyFileSuccess.description") - .build().showAndWait(); - - } catch (InvalidPassphraseException e) { - LOG.info("Password invalid", e); - Animations.createShakeWindowAnimation(window).play(); - } catch (IOException | CryptoException | IllegalStateException e) { - LOG.error("Recovery process failed", e); - appWindows.showErrorWindow(e, window, null); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java index 0c06ba9b2..b57758b67 100644 --- a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyResetPasswordController.java @@ -117,14 +117,46 @@ public class RecoveryKeyResetPasswordController implements FxController { @FXML public void next() { switch (recoverType.get()) { - case RESTORE_ALL -> restorePassword(); + case RESTORE_ALL -> restorePasswordAsync(); case RESTORE_MASTERKEY, RESET_PASSWORD -> resetPassword(); default -> resetPassword(); // Fallback } } @FXML - public void restorePassword() { + public void restorePasswordAsync() { + Task task = RecoveryKeyTasks.createTask(this::restorePassword); + + task.setOnScheduled(_ -> { + LOG.debug("Restoring vault configuration for {}.", vault.getDisplayablePath()); + }); + + task.setOnSucceeded(_ -> { + LOG.debug("Restored vault configuration for {}.", vault.getDisplayablePath()); + try { + if (!vaultListManager.isAlreadyAdded(vault.getPath())) { + vaultListManager.add(vault.getPath()); + } + window.close(); + dialogs.prepareRecoverPasswordSuccess((Stage) window.getOwner()) // + .setTitleKey("recover.recoverVaultConfig.title") // + .setMessageKey("recoveryKey.recover.resetVaultConfigSuccess.message") // + .build().showAndWait(); + } catch (IOException e) { + LOG.error("Failed to add vault to list.", e); + appWindows.showErrorWindow(e, window, null); + } + }); + + task.setOnFailed(_ -> { + LOG.error("Recovery process failed.", task.getException()); + appWindows.showErrorWindow(task.getException(), window, null); + }); + + executor.submit(task); + } + + void restorePassword() throws IOException, CryptoException { try (RecoveryDirectory recoveryDirectory = RecoveryDirectory.create(vault.getPath())) { Path recoveryPath = recoveryDirectory.getRecoveryPath(); MasterkeyService.recoverFromRecoveryKey(recoveryKey.get(), recoveryKeyFactory, recoveryPath, newPasswordController.passwordField.getCharacters()); @@ -135,19 +167,6 @@ public class RecoveryKeyResetPasswordController implements FxController { recoveryDirectory.moveRecoveredFile(MASTERKEY_FILENAME); recoveryDirectory.moveRecoveredFile(VAULTCONFIG_FILENAME); - - if (!vaultListManager.isAlreadyAdded(vault.getPath())) { - vaultListManager.add(vault.getPath()); - } - window.close(); - dialogs.prepareRecoverPasswordSuccess((Stage)window.getOwner()) // - .setTitleKey("recover.recoverVaultConfig.title") // - .setMessageKey("recoveryKey.recover.resetVaultConfigSuccess.message") // - .build().showAndWait(); - - } catch (IOException | CryptoException e) { - LOG.error("Recovery process failed", e); - appWindows.showErrorWindow(e, window, null); } } diff --git a/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyTasks.java b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyTasks.java new file mode 100644 index 000000000..ba6caf249 --- /dev/null +++ b/src/main/java/org/cryptomator/ui/recoverykey/RecoveryKeyTasks.java @@ -0,0 +1,25 @@ +package org.cryptomator.ui.recoverykey; + +import javafx.concurrent.Task; + +final class RecoveryKeyTasks { + + private RecoveryKeyTasks() { + } + + @FunctionalInterface + interface TaskAction { + void run() throws Exception; + } + + static Task createTask(TaskAction action) { + return new Task() { + @Override + protected Void call() throws Exception { + action.run(); + return null; + } + }; + } + +} diff --git a/src/main/resources/css/dark_theme.css b/src/main/resources/css/dark_theme.css index 5b8c717c1..bb23af18c 100644 --- a/src/main/resources/css/dark_theme.css +++ b/src/main/resources/css/dark_theme.css @@ -50,6 +50,7 @@ GREEN_5: PRIMARY; RED_5: #E74C3C; ORANGE_5: #E67E22; + YELLOW_4: #C19F0E; YELLOW_5: #F1C40F; MAIN_BG: GRAY_1; @@ -387,37 +388,62 @@ /******************************************************************************* * * - * NotificationBar * + * InfoBar * * * ******************************************************************************/ +.info-bar { + -fx-alignment: center; + -fx-min-height:24px; + -fx-max-height:24px; + -fx-background-color: -bar-bg; +} -.notification-label { - -fx-text-fill: white; +.info-bar--green { + -bar-bg: GREEN_5; + -button-bg: GREEN_5; + -button-bg-pressed: GREEN_3; +} + +.info-bar--yellow { + -bar-bg: YELLOW_5; + -button-bg: YELLOW_5; + -button-bg-pressed: YELLOW_4; +} + +.info-bar--red { + -bar-bg: RED_5; + -button-bg: RED_5; + -button-bg-pressed: RED_5; +} + +.info-bar .label { + -fx-text-fill: GRAY_9; -fx-font-weight: bold; } -.notification-debug { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: RED_5; +.info-bar--yellow .label { + -fx-text-fill: GRAY_9; + -fx-font-weight: bold; + -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.45) , 2 , 0 , 0 , 1 ); } -.notification-update { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: YELLOW_5; +.info-bar .glyph { + -fx-fill: GRAY_9; } -.notification-support { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: PRIMARY; +.info-bar:hover .label { + -fx-underline:true; } -.notification-debug:hover .notification-label, -.notification-update:hover .notification-label, -.notification-support:hover .notification-label { - -fx-underline:true; +.info-bar .button { + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-padding: 2 2 2 2; +} + +.info-bar .button:armed { + -fx-background-color: -button-bg-pressed; + -fx-background-radius: 8; } /******************************************************************************* diff --git a/src/main/resources/css/light_theme.css b/src/main/resources/css/light_theme.css index 38e476923..dcbee907f 100644 --- a/src/main/resources/css/light_theme.css +++ b/src/main/resources/css/light_theme.css @@ -50,6 +50,7 @@ GREEN_5: PRIMARY; RED_5: #E74C3C; ORANGE_5: #E67E22; + YELLOW_4: #C19F0E; YELLOW_5: #F1C40F; MAIN_BG: GRAY_9; @@ -387,39 +388,64 @@ /******************************************************************************* * * - * NotificationBar * + * InfoBar * * * ******************************************************************************/ +.info-bar { + -fx-alignment: center; + -fx-min-height:24px; + -fx-max-height:24px; + -fx-background-color: -bar-bg; +} -.notification-label { - -fx-text-fill: white; +.info-bar--green { + -bar-bg: GREEN_5; + -button-bg: GREEN_5; + -button-bg-pressed: GREEN_3; +} + +.info-bar--yellow { + -bar-bg: YELLOW_5; + -button-bg: YELLOW_5; + -button-bg-pressed: YELLOW_4; +} + +.info-bar--red { + -bar-bg: RED_5; + -button-bg: RED_5; + -button-bg-pressed: RED_5; +} + +.info-bar .label { + -fx-text-fill: GRAY_9; -fx-font-weight: bold; } -.notification-debug { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: RED_5; +.info-bar--yellow .label { + -fx-text-fill: GRAY_9; + -fx-font-weight: bold; + -fx-effect: dropshadow( gaussian , rgba(0,0,0,0.45) , 2 , 0 , 0 , 1 ); } -.notification-update { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: YELLOW_5; +.info-bar .glyph { + -fx-fill: GRAY_9; } -.notification-support { - -fx-min-height:24px; - -fx-max-height:24px; - -fx-background-color: PRIMARY; -} - -.notification-debug:hover .notification-label, -.notification-update:hover .notification-label, -.notification-support:hover .notification-label { +.info-bar:hover .label { -fx-underline:true; } +.info-bar .button { + -fx-background-color: transparent; + -fx-border-color: transparent; + -fx-padding: 2 2 2 2; +} + +.info-bar .button:armed { + -fx-background-color: -button-bg-pressed; + -fx-background-radius: 8; +} + /******************************************************************************* * * * ScrollBar * diff --git a/src/main/resources/fxml/addvault_existing.fxml b/src/main/resources/fxml/addvault_existing.fxml index 200eae4f9..f3d066e85 100644 --- a/src/main/resources/fxml/addvault_existing.fxml +++ b/src/main/resources/fxml/addvault_existing.fxml @@ -13,7 +13,8 @@ prefWidth="450" prefHeight="450" spacing="24" - alignment="CENTER"> + alignment="CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_new_expert_settings.fxml b/src/main/resources/fxml/addvault_new_expert_settings.fxml index 220444f71..d351d9f1e 100644 --- a/src/main/resources/fxml/addvault_new_expert_settings.fxml +++ b/src/main/resources/fxml/addvault_new_expert_settings.fxml @@ -19,7 +19,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="CENTER_LEFT"> + alignment="CENTER_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_new_location.fxml b/src/main/resources/fxml/addvault_new_location.fxml index 7b3157ffb..4769cbf11 100644 --- a/src/main/resources/fxml/addvault_new_location.fxml +++ b/src/main/resources/fxml/addvault_new_location.fxml @@ -19,7 +19,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="CENTER_LEFT"> + alignment="CENTER_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_new_name.fxml b/src/main/resources/fxml/addvault_new_name.fxml index 0b983c4a0..4c722b1ba 100644 --- a/src/main/resources/fxml/addvault_new_name.fxml +++ b/src/main/resources/fxml/addvault_new_name.fxml @@ -17,7 +17,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="CENTER_LEFT"> + alignment="CENTER_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_new_password.fxml b/src/main/resources/fxml/addvault_new_password.fxml index 68f0200b5..f44050cfa 100644 --- a/src/main/resources/fxml/addvault_new_password.fxml +++ b/src/main/resources/fxml/addvault_new_password.fxml @@ -15,7 +15,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="CENTER_LEFT"> + alignment="CENTER_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_new_recoverykey.fxml b/src/main/resources/fxml/addvault_new_recoverykey.fxml index b04677bc3..afd88e494 100644 --- a/src/main/resources/fxml/addvault_new_recoverykey.fxml +++ b/src/main/resources/fxml/addvault_new_recoverykey.fxml @@ -11,7 +11,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="CENTER_LEFT"> + alignment="CENTER_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/addvault_success.fxml b/src/main/resources/fxml/addvault_success.fxml index 4df28e6e3..cd6c6754a 100644 --- a/src/main/resources/fxml/addvault_success.fxml +++ b/src/main/resources/fxml/addvault_success.fxml @@ -16,7 +16,8 @@ prefWidth="450" prefHeight="450" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/changepassword.fxml b/src/main/resources/fxml/changepassword.fxml index 5a4d60813..88c8e2a1b 100644 --- a/src/main/resources/fxml/changepassword.fxml +++ b/src/main/resources/fxml/changepassword.fxml @@ -13,7 +13,8 @@ fx:controller="org.cryptomator.ui.changepassword.ChangePasswordController" minWidth="400" maxWidth="400" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml b/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml index 7797b41b2..25ec096d4 100644 --- a/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml +++ b/src/main/resources/fxml/convertvault_hubtopassword_convert.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/convertvault_hubtopassword_start.fxml b/src/main/resources/fxml/convertvault_hubtopassword_start.fxml index 27b6911f7..9fff40913 100644 --- a/src/main/resources/fxml/convertvault_hubtopassword_start.fxml +++ b/src/main/resources/fxml/convertvault_hubtopassword_start.fxml @@ -15,7 +15,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/convertvault_hubtopassword_success.fxml b/src/main/resources/fxml/convertvault_hubtopassword_success.fxml index 74e1fc8e6..178699fe9 100644 --- a/src/main/resources/fxml/convertvault_hubtopassword_success.fxml +++ b/src/main/resources/fxml/convertvault_hubtopassword_success.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/error.fxml b/src/main/resources/fxml/error.fxml index 5738a46c7..8426b1258 100644 --- a/src/main/resources/fxml/error.fxml +++ b/src/main/resources/fxml/error.fxml @@ -22,7 +22,8 @@ minHeight="450" prefWidth="450" prefHeight="450" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_auth_flow.fxml b/src/main/resources/fxml/hub_auth_flow.fxml index 40bb9986a..30a421050 100644 --- a/src/main/resources/fxml/hub_auth_flow.fxml +++ b/src/main/resources/fxml/hub_auth_flow.fxml @@ -21,7 +21,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_invalid_license.fxml b/src/main/resources/fxml/hub_invalid_license.fxml index e01443a3f..956d38f77 100644 --- a/src/main/resources/fxml/hub_invalid_license.fxml +++ b/src/main/resources/fxml/hub_invalid_license.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_legacy_register_device.fxml b/src/main/resources/fxml/hub_legacy_register_device.fxml index 1bdd475a7..0b4e547c7 100644 --- a/src/main/resources/fxml/hub_legacy_register_device.fxml +++ b/src/main/resources/fxml/hub_legacy_register_device.fxml @@ -20,7 +20,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_legacy_register_success.fxml b/src/main/resources/fxml/hub_legacy_register_success.fxml index 204f579c1..f1f405035 100644 --- a/src/main/resources/fxml/hub_legacy_register_success.fxml +++ b/src/main/resources/fxml/hub_legacy_register_success.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_no_keychain.fxml b/src/main/resources/fxml/hub_no_keychain.fxml index 031eac956..72d6c590b 100644 --- a/src/main/resources/fxml/hub_no_keychain.fxml +++ b/src/main/resources/fxml/hub_no_keychain.fxml @@ -20,7 +20,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_receive_key.fxml b/src/main/resources/fxml/hub_receive_key.fxml index a180c997e..7400e785e 100644 --- a/src/main/resources/fxml/hub_receive_key.fxml +++ b/src/main/resources/fxml/hub_receive_key.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_register_device.fxml b/src/main/resources/fxml/hub_register_device.fxml index e1a1e39ff..462009764 100644 --- a/src/main/resources/fxml/hub_register_device.fxml +++ b/src/main/resources/fxml/hub_register_device.fxml @@ -20,7 +20,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_register_device_already_exists.fxml b/src/main/resources/fxml/hub_register_device_already_exists.fxml index 9a7c1f3c7..88fe66885 100644 --- a/src/main/resources/fxml/hub_register_device_already_exists.fxml +++ b/src/main/resources/fxml/hub_register_device_already_exists.fxml @@ -11,6 +11,7 @@ + + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_register_failed.fxml b/src/main/resources/fxml/hub_register_failed.fxml index a088c0318..7a50b0704 100644 --- a/src/main/resources/fxml/hub_register_failed.fxml +++ b/src/main/resources/fxml/hub_register_failed.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_register_success.fxml b/src/main/resources/fxml/hub_register_success.fxml index 0211eeba8..34a6c4f21 100644 --- a/src/main/resources/fxml/hub_register_success.fxml +++ b/src/main/resources/fxml/hub_register_success.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_require_account_init.fxml b/src/main/resources/fxml/hub_require_account_init.fxml index b3ca1fb40..db3e5c75c 100644 --- a/src/main/resources/fxml/hub_require_account_init.fxml +++ b/src/main/resources/fxml/hub_require_account_init.fxml @@ -21,7 +21,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/hub_unauthorized_device.fxml b/src/main/resources/fxml/hub_unauthorized_device.fxml index 085798387..07e98cc8e 100644 --- a/src/main/resources/fxml/hub_unauthorized_device.fxml +++ b/src/main/resources/fxml/hub_unauthorized_device.fxml @@ -18,7 +18,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/lock_failed.fxml b/src/main/resources/fxml/lock_failed.fxml index 1c3c4345f..31faa4c4a 100644 --- a/src/main/resources/fxml/lock_failed.fxml +++ b/src/main/resources/fxml/lock_failed.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/lock_forced.fxml b/src/main/resources/fxml/lock_forced.fxml index 14f801fba..66cbf4148 100644 --- a/src/main/resources/fxml/lock_forced.fxml +++ b/src/main/resources/fxml/lock_forced.fxml @@ -19,7 +19,8 @@ maxWidth="500" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/main_window.fxml b/src/main/resources/fxml/main_window.fxml index 327e2c470..37ab65bbb 100644 --- a/src/main/resources/fxml/main_window.fxml +++ b/src/main/resources/fxml/main_window.fxml @@ -3,7 +3,7 @@ - + - - + + styleClass="info-bar--green"/> - diff --git a/src/main/resources/fxml/migration_capability_error.fxml b/src/main/resources/fxml/migration_capability_error.fxml index 239f324a3..9a9af8e40 100644 --- a/src/main/resources/fxml/migration_capability_error.fxml +++ b/src/main/resources/fxml/migration_capability_error.fxml @@ -16,7 +16,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/migration_impossible.fxml b/src/main/resources/fxml/migration_impossible.fxml index 6897d4d4e..ae8eac897 100644 --- a/src/main/resources/fxml/migration_impossible.fxml +++ b/src/main/resources/fxml/migration_impossible.fxml @@ -19,7 +19,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/migration_start.fxml b/src/main/resources/fxml/migration_start.fxml index 547bd7e26..62fc9ac6e 100644 --- a/src/main/resources/fxml/migration_start.fxml +++ b/src/main/resources/fxml/migration_start.fxml @@ -20,7 +20,8 @@ fx:controller="org.cryptomator.ui.migration.MigrationStartController" prefWidth="580" prefHeight="350" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/migration_success.fxml b/src/main/resources/fxml/migration_success.fxml index c04068a9d..e1c8e1a3b 100644 --- a/src/main/resources/fxml/migration_success.fxml +++ b/src/main/resources/fxml/migration_success.fxml @@ -15,7 +15,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/notification.fxml b/src/main/resources/fxml/notification.fxml index 5f82f3113..74ed9b18a 100644 --- a/src/main/resources/fxml/notification.fxml +++ b/src/main/resources/fxml/notification.fxml @@ -16,7 +16,8 @@ xmlns:fx="http://javafx.com/fxml" fx:controller="org.cryptomator.ui.notification.NotificationController" prefHeight="200.0" prefWidth="400.0" maxHeight="200.0" maxWidth="400.0" - styleClass="notification-window"> + styleClass="notification-window" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/quit.fxml b/src/main/resources/fxml/quit.fxml index f0d6ce9b6..c8694761d 100644 --- a/src/main/resources/fxml/quit.fxml +++ b/src/main/resources/fxml/quit.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/quit_forced.fxml b/src/main/resources/fxml/quit_forced.fxml index d2e831d4d..8f72c71b8 100644 --- a/src/main/resources/fxml/quit_forced.fxml +++ b/src/main/resources/fxml/quit_forced.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_create.fxml b/src/main/resources/fxml/recoverykey_create.fxml index e74074f1d..f3140e2de 100644 --- a/src/main/resources/fxml/recoverykey_create.fxml +++ b/src/main/resources/fxml/recoverykey_create.fxml @@ -20,7 +20,8 @@ maxWidth="400" minHeight="175" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_display.fxml b/src/main/resources/fxml/recoverykey_display.fxml index 0d25af99c..769633cb2 100644 --- a/src/main/resources/fxml/recoverykey_display.fxml +++ b/src/main/resources/fxml/recoverykey_display.fxml @@ -14,7 +14,8 @@ minWidth="350" minHeight="280" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_expert_settings.fxml b/src/main/resources/fxml/recoverykey_expert_settings.fxml index 4204d032c..0f5ed38c4 100644 --- a/src/main/resources/fxml/recoverykey_expert_settings.fxml +++ b/src/main/resources/fxml/recoverykey_expert_settings.fxml @@ -22,7 +22,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_onboarding.fxml b/src/main/resources/fxml/recoverykey_onboarding.fxml index b1c701a9d..98982f458 100644 --- a/src/main/resources/fxml/recoverykey_onboarding.fxml +++ b/src/main/resources/fxml/recoverykey_onboarding.fxml @@ -25,7 +25,8 @@ prefWidth="480" minHeight="242" spacing="12" - VBox.vgrow="ALWAYS"> + VBox.vgrow="ALWAYS" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_recover.fxml b/src/main/resources/fxml/recoverykey_recover.fxml index 5a9fddbdf..dad409b35 100644 --- a/src/main/resources/fxml/recoverykey_recover.fxml +++ b/src/main/resources/fxml/recoverykey_recover.fxml @@ -17,7 +17,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_reset_password.fxml b/src/main/resources/fxml/recoverykey_reset_password.fxml index 8c28a1c9f..ba1b2b621 100644 --- a/src/main/resources/fxml/recoverykey_reset_password.fxml +++ b/src/main/resources/fxml/recoverykey_reset_password.fxml @@ -17,7 +17,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_success.fxml b/src/main/resources/fxml/recoverykey_success.fxml index 6aacb38dd..0451a7397 100644 --- a/src/main/resources/fxml/recoverykey_success.fxml +++ b/src/main/resources/fxml/recoverykey_success.fxml @@ -12,7 +12,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_CENTER"> + alignment="TOP_CENTER" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/recoverykey_validate.fxml b/src/main/resources/fxml/recoverykey_validate.fxml index cd599db40..e6a24ec49 100644 --- a/src/main/resources/fxml/recoverykey_validate.fxml +++ b/src/main/resources/fxml/recoverykey_validate.fxml @@ -10,7 +10,8 @@ fx:controller="org.cryptomator.ui.recoverykey.RecoveryKeyValidateController" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/share_vault.fxml b/src/main/resources/fxml/share_vault.fxml index b5466a10d..23362fdae 100644 --- a/src/main/resources/fxml/share_vault.fxml +++ b/src/main/resources/fxml/share_vault.fxml @@ -21,7 +21,8 @@ xmlns="http://javafx.com/javafx" fx:controller="org.cryptomator.ui.sharevault.ShareVaultController" prefWidth="540" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/simple_dialog.fxml b/src/main/resources/fxml/simple_dialog.fxml index 0e9b01776..383405018 100644 --- a/src/main/resources/fxml/simple_dialog.fxml +++ b/src/main/resources/fxml/simple_dialog.fxml @@ -17,7 +17,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/unlock_enter_password.fxml b/src/main/resources/fxml/unlock_enter_password.fxml index 5242826a2..bcf1bfa37 100644 --- a/src/main/resources/fxml/unlock_enter_password.fxml +++ b/src/main/resources/fxml/unlock_enter_password.fxml @@ -18,7 +18,8 @@ minWidth="400" maxWidth="400" minHeight="145" - spacing="12"> + spacing="12" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/unlock_invalid_mount_point.fxml b/src/main/resources/fxml/unlock_invalid_mount_point.fxml index dbf6fad05..dfcb3f68a 100644 --- a/src/main/resources/fxml/unlock_invalid_mount_point.fxml +++ b/src/main/resources/fxml/unlock_invalid_mount_point.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/unlock_requires_restart.fxml b/src/main/resources/fxml/unlock_requires_restart.fxml index 571ea6a32..9c0ed591b 100644 --- a/src/main/resources/fxml/unlock_requires_restart.fxml +++ b/src/main/resources/fxml/unlock_requires_restart.fxml @@ -19,7 +19,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/unlock_select_masterkeyfile.fxml b/src/main/resources/fxml/unlock_select_masterkeyfile.fxml index 60934cdba..6dcfd4252 100644 --- a/src/main/resources/fxml/unlock_select_masterkeyfile.fxml +++ b/src/main/resources/fxml/unlock_select_masterkeyfile.fxml @@ -20,7 +20,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/unlock_success.fxml b/src/main/resources/fxml/unlock_success.fxml index ae1b8185e..029bb96d3 100644 --- a/src/main/resources/fxml/unlock_success.fxml +++ b/src/main/resources/fxml/unlock_success.fxml @@ -21,7 +21,8 @@ maxWidth="400" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/update_reminder.fxml b/src/main/resources/fxml/update_reminder.fxml index 50bb80b5f..0402ad07a 100644 --- a/src/main/resources/fxml/update_reminder.fxml +++ b/src/main/resources/fxml/update_reminder.fxml @@ -18,7 +18,8 @@ prefWidth="500" minHeight="145" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/fxml/vault_detail.fxml b/src/main/resources/fxml/vault_detail.fxml index cfae48d8b..141933b94 100644 --- a/src/main/resources/fxml/vault_detail.fxml +++ b/src/main/resources/fxml/vault_detail.fxml @@ -36,7 +36,7 @@ - + diff --git a/src/main/resources/fxml/vault_list.fxml b/src/main/resources/fxml/vault_list.fxml index a05d834a3..ca30d180e 100644 --- a/src/main/resources/fxml/vault_list.fxml +++ b/src/main/resources/fxml/vault_list.fxml @@ -22,7 +22,7 @@ - + diff --git a/src/main/resources/fxml/wrongfilealert.fxml b/src/main/resources/fxml/wrongfilealert.fxml index 123e84378..8032403ed 100644 --- a/src/main/resources/fxml/wrongfilealert.fxml +++ b/src/main/resources/fxml/wrongfilealert.fxml @@ -23,7 +23,8 @@ minWidth="-Infinity" minHeight="-Infinity" spacing="12" - alignment="TOP_LEFT"> + alignment="TOP_LEFT" + accessibleRole="DIALOG"> diff --git a/src/main/resources/i18n/strings.properties b/src/main/resources/i18n/strings.properties index 897fbd7da..3780b9ef4 100644 --- a/src/main/resources/i18n/strings.properties +++ b/src/main/resources/i18n/strings.properties @@ -18,6 +18,14 @@ generic.button.next=Next generic.button.print=Print generic.button.remove=Remove +## Vault state +vault.state.locked=Locked +vault.state.unlocked=Unlocked +vault.state.missing=Missing +vault.state.migrationNeeded=Migration required +vault.state.processing=Processing +vault.state.error=Error + # Error error.message=An error occurred error.description=Cryptomator didn't expect this to happen. You can look up existing solutions for this error. Or if it has not been reported yet, feel free to do so. @@ -402,6 +410,8 @@ stats.access.total=Total accesses: %d # Main Window ## Vault List +main.vaultlist=Vaults +main.vaultlist.listEntry=Vault %s (%s) main.vaultlist.emptyList.onboardingInstruction=Click here to add a vault main.vaultlist.contextMenu.remove=Remove… main.vaultlist.contextMenu.lock=Lock @@ -416,12 +426,14 @@ main.vaultlist.addVaultBtn.menuItemRecover=Recover Existing Vault… main.vaultlist.addVaultButton.tooltip=Add Vault main.vaultlist.showEventsButton.tooltip=Open Event View main.vaultlist.showPreferencesButton.tooltip=Show Preferences -##Notificaition +##Notification main.notification.updateAvailable=Update is available. main.notification.support=Support Cryptomator. +main.notification.closeButton.tooltip=Close info bar ## Vault Detail ### Welcome main.vaultDetail.welcomeOnboarding=Thanks for choosing Cryptomator to protect your files. If you need any assistance, check out our getting started guides: +main.vaultDetail.storageLocation=Vault storage location ### Locked main.vaultDetail.lockedStatus=LOCKED main.vaultDetail.unlockBtn=Unlock…