diff --git a/.codecov.yml b/.codecov.yml index 61780c6b2e57..12a1858aaa9b 100644 --- a/.codecov.yml +++ b/.codecov.yml @@ -2,6 +2,8 @@ codecov: branch: master ci: - drone.nextcloud.com + notify: + after_n_builds: 2 coverage: precision: 2 @@ -15,6 +17,8 @@ coverage: comment: layout: "header, diff, changes, uncovered, tree" behavior: default + require_changes: true + after_n_builds: 2 github_checks: annotations: false diff --git a/.github/workflows/analysis.yml b/.github/workflows/analysis.yml index 1f99e39fed4a..07b8e4ea4135 100644 --- a/.github/workflows/analysis.yml +++ b/.github/workflows/analysis.yml @@ -28,12 +28,12 @@ jobs: echo "::set-output name=pr::${{ github.event.pull_request.number }}" echo "::set-output name=repo::${{ github.event.pull_request.head.repo.full_name }}" fi - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 with: repository: ${{ steps.get-vars.outputs.repo }} ref: ${{ steps.get-vars.outputs.branch }} - name: Set up JDK 11 - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3 with: distribution: "temurin" java-version: 11 diff --git a/.github/workflows/assembleFlavors.yml b/.github/workflows/assembleFlavors.yml index 6bec7e95458c..1bb38f0940d9 100644 --- a/.github/workflows/assembleFlavors.yml +++ b/.github/workflows/assembleFlavors.yml @@ -15,9 +15,9 @@ jobs: matrix: flavor: [ Generic, Gplay, Huawei ] steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: set up JDK 11 - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3 with: distribution: "temurin" java-version: 11 diff --git a/.github/workflows/autoApproveDependabot.yml b/.github/workflows/autoApproveDependabot.yml index 8deb91bf1683..160c7f8e680e 100644 --- a/.github/workflows/autoApproveDependabot.yml +++ b/.github/workflows/autoApproveDependabot.yml @@ -1,16 +1,30 @@ -name: Auto approve +# synced from @nextcloud/android-config +name: Auto approve dependabot + on: - pull_request_target: - branches: [ master, stable-* ] + pull_request_target: + branches: + - main + - master + - stable-* permissions: - pull-requests: write + contents: read + +concurrency: + group: dependabot-approve-${{ github.head_ref || github.run_id }} + cancel-in-progress: true jobs: - auto-approve: - runs-on: ubuntu-latest - steps: - - uses: hmarr/auto-approve-action@de8ae18c173c131e182d4adf2c874d8d2308a85b # v3.1.0 - if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' - with: - github-token: "${{ secrets.GITHUB_TOKEN }}" + auto-approve: + name: Auto approve dependabot + runs-on: ubuntu-latest + if: github.actor == 'dependabot[bot]' + permissions: + # needed to approve the PR + pull-requests: write + + steps: + - uses: hmarr/auto-approve-action@44888193675f29a83e04faf4002fa8c0b537b1e4 # v3.2.1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/autoApproveSync.yml b/.github/workflows/autoApproveSync.yml index 707ef9b80b6f..fb714467423a 100644 --- a/.github/workflows/autoApproveSync.yml +++ b/.github/workflows/autoApproveSync.yml @@ -1,19 +1,29 @@ # synced from @nextcloud/android-config -name: Auto approve +name: Auto approve sync on: pull_request_target: branches: - master - main + types: + - opened + - reopened + - synchronize + - labeled + +concurrency: + group: sync-approve-${{ github.head_ref || github.run_id }} + cancel-in-progress: true permissions: pull-requests: write jobs: auto-approve: + name: Auto approve sync runs-on: ubuntu-latest + if: ${{ contains(github.event.pull_request.labels.*.name, 'sync') && github.actor == 'nextcloud-android-bot' }} steps: - - uses: hmarr/auto-approve-action@de8ae18c173c131e182d4adf2c874d8d2308a85b # v3.1.0 - if: ${{ contains(github.event.pull_request.labels.*.name, 'sync') && github.actor == 'nextcloud-android-bot' }} + - uses: hmarr/auto-approve-action@44888193675f29a83e04faf4002fa8c0b537b1e4 # v3.2.1 with: github-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 63f970d6ca49..d614731360a4 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,9 +15,9 @@ jobs: matrix: task: [ detekt, spotlessKotlinCheck ] steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Set up JDK 11 - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3 with: distribution: "temurin" java-version: 11 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index f158b1e9c4f4..3cda0501eaea 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -26,24 +26,24 @@ jobs: language: [ 'java' ] steps: - name: Checkout repository - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Set Swap Space uses: pierotofy/set-swap-space@49819abfb41bd9b44fb781159c033dba90353a7c # v1.0 with: swap-size-gb: 10 - name: Initialize CodeQL - uses: github/codeql-action/init@a34ca99b4610d924e04c68db79e503e1f79f9f02 # v2.1.39 + uses: github/codeql-action/init@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 with: languages: ${{ matrix.language }} - name: Set up JDK - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3.9.0 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3.11.0 with: distribution: "temurin" - java-version: 11 + java-version: 17 - name: Assemble run: | mkdir -p "$HOME/.gradle" echo "org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError" > "$HOME/.gradle/gradle.properties" ./gradlew assembleDebug - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@a34ca99b4610d924e04c68db79e503e1f79f9f02 # v2.1.39 + uses: github/codeql-action/analyze@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 diff --git a/.github/workflows/command-rebase.yml b/.github/workflows/command-rebase.yml index 02f5d21dd01b..f0409dabc615 100644 --- a/.github/workflows/command-rebase.yml +++ b/.github/workflows/command-rebase.yml @@ -23,7 +23,7 @@ jobs: steps: - name: Add reaction on start - uses: peter-evans/create-or-update-comment@5adcb0bb0f9fb3f95ef05400558bdb3f329ee808 # v2 + uses: peter-evans/create-or-update-comment@3383acd359705b10cb1eeef05c0e88c056ea4666 # v2 with: token: ${{ secrets.COMMAND_BOT_PAT }} repository: ${{ github.event.repository.full_name }} @@ -31,7 +31,7 @@ jobs: reaction-type: "+1" - name: Checkout the latest code - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 with: fetch-depth: 0 token: ${{ secrets.COMMAND_BOT_PAT }} @@ -42,7 +42,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.COMMAND_BOT_PAT }} - name: Add reaction on failure - uses: peter-evans/create-or-update-comment@5adcb0bb0f9fb3f95ef05400558bdb3f329ee808 # v2 + uses: peter-evans/create-or-update-comment@3383acd359705b10cb1eeef05c0e88c056ea4666 # v2 if: failure() with: token: ${{ secrets.COMMAND_BOT_PAT }} diff --git a/.github/workflows/detectSnapshot.yml b/.github/workflows/detectSnapshot.yml index d1c3c754edbd..265b2e7462a3 100644 --- a/.github/workflows/detectSnapshot.yml +++ b/.github/workflows/detectSnapshot.yml @@ -12,6 +12,6 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Detect SNAPSHOT run: scripts/analysis/detectSNAPSHOT.sh diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 0e649b2e9e6e..be44c9e6a213 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -1,8 +1,10 @@ +# synced from @nextcloud/android-config name: "Validate Gradle Wrapper" - on: pull_request: branches: [ master, stable-* ] + push: + branches: [ master, stable-* ] # Declare default permissions as read only. permissions: read-all @@ -12,5 +14,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 - - uses: gradle/wrapper-validation-action@55e685c48d84285a5b0418cd094606e199cca3b6 # v1 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + - uses: gradle/wrapper-validation-action@8d49e559aae34d3e0eb16cde532684bc9702762b # v1.0.6 diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 7c228a5d0a6f..80ff7a1275da 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -15,10 +15,10 @@ jobs: - name: Check if secrets are available run: echo "::set-output name=ok::${{ secrets.KS_PASS != '' }}" id: check-secrets - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 if: ${{ steps.check-secrets.outputs.ok == 'true' }} - name: set up JDK 11 - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3 if: ${{ steps.check-secrets.outputs.ok == 'true' }} with: distribution: "temurin" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 000000000000..6585f8be680c --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,38 @@ +# synced from @nextcloud/android-config +name: Scorecard supply-chain security +on: + branch_protection_rule: + schedule: + - cron: '32 23 * * 4' + push: + branches: [ "main", "master" ] + +# Declare default permissions as read only. +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + + steps: + - name: "Checkout code" + uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@80e868c13c90f172d68d1f4501dee99e2479f7af # v2.1.3 + with: + results_file: results.sarif + results_format: sarif + publish_results: false + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@29b1f65c5e92e24fe6b6647da1eaabe529cec70f # v2.3.3 + with: + sarif_file: results.sarif diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml deleted file mode 100644 index 95fde377743a..000000000000 --- a/.github/workflows/scorecards-analysis.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Scorecards supply-chain security -on: - # Only the default branch is supported. - branch_protection_rule: - schedule: - - cron: '33 1 * * 5' - push: - branches: [ master ] - -# Declare default permissions as read only. -permissions: read-all - -jobs: - analysis: - name: Scorecards analysis - runs-on: ubuntu-latest - permissions: - # Needed to upload the results to code-scanning dashboard. - security-events: write - actions: read - contents: read - - steps: - - name: "Checkout code" - uses: actions/checkout@v3 # v2.4.0 - with: - persist-credentials: false - - - name: "Run analysis" - uses: ossf/scorecard-action@e3e75cf2ffbf9364bbff86cdbdf52b23176fe492 # v1.0.1 - with: - results_file: results.sarif - results_format: sarif - # Read-only PAT token. To create it, - # follow the steps in https://github.com/ossf/scorecard-action#pat-token-creation. - repo_token: ${{ secrets.SCORECARD_READ_TOKEN }} - # Publish the results to enable scorecard badges. For more details, see - # https://github.com/ossf/scorecard-action#publishing-results. - # For private repositories, `publish_results` will automatically be set to `false`, - # regardless of the value entered here. - publish_results: false - - # Upload the results as artifacts (optional). - - name: "Upload artifact" - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v2.3.1 - with: - name: SARIF file - path: results.sarif - retention-days: 5 - - # Upload the results to GitHub's code scanning dashboard. - - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@5f532563584d71fdef14ee64d17bafb34f751ce5 # v1.0.26 - with: - sarif_file: results.sarif diff --git a/.github/workflows/screenShotTest.yml b/.github/workflows/screenShotTest.yml index 72de508c9b11..0ebcab45dc1f 100644 --- a/.github/workflows/screenShotTest.yml +++ b/.github/workflows/screenShotTest.yml @@ -18,17 +18,17 @@ jobs: color: [ blue ] api-level: [ 27 ] steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3 - name: Gradle cache - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 # v3 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*') }}-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} - name: AVD cache - uses: actions/cache@58c146cc91c5b9e778e71775dfe9bf1442ad9a12 # v3 + uses: actions/cache@88522ab9f39a2ea568f7027eddc7d8d8bc9d59c8 # v3 id: avd-cache with: path: | @@ -36,14 +36,14 @@ jobs: ~/.android/adb* key: avd-${{ matrix.api-level }} - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + - uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3 with: distribution: "temurin" java-version: 11 - name: create AVD and generate snapshot for caching if: steps.avd-cache.outputs.cache-hit != 'true' - uses: reactivecircus/android-emulator-runner@50986b1464923454c95e261820bc626f38490ec0 # v2 + uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b # v2 with: api-level: ${{ matrix.api-level }} force-avd-creation: false @@ -69,7 +69,7 @@ jobs: run: scripts/deleteOldComments.sh "${{ matrix.color }}-${{ matrix.scheme }}" "Screenshot" ${{github.event.number}} - name: Run screenshot tests - uses: reactivecircus/android-emulator-runner@50986b1464923454c95e261820bc626f38490ec0 # v2 + uses: reactivecircus/android-emulator-runner@d94c3fbe4fe6a29e4a5ba47c12fb47677c73656b # v2 with: api-level: ${{ matrix.api-level }} force-avd-creation: false diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index a959af77b0ad..d996914db8cc 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -14,7 +14,7 @@ jobs: issues: write pull-requests: write steps: - - uses: actions/stale@6f05e4244c9a0b2ed3401882b05d701dd0a7289b # v7.0.0 + - uses: actions/stale@1160a2240286f5da8ec72b1c0816ce2481aabf84 # v8.0.0 with: days-before-stale: 28 days-before-close: 14 diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index a83c444cda74..aae4f1cac95f 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -14,9 +14,9 @@ jobs: test: runs-on: ubuntu-latest steps: - - uses: actions/checkout@755da8c3cf115ac066823e79a1e1788f8940201b # v3 + - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2 - name: Set up JDK 11 - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b # v3 + uses: actions/setup-java@5ffc13f4174014e2d4d4572b3d74c3fa61aeb2c2 # v3.11.0 with: distribution: "temurin" java-version: 11 @@ -26,7 +26,7 @@ jobs: if: ${{ always() }} run: scripts/deleteOldComments.sh "test" "Unit" ${{github.event.number}} - name: Run unit tests with coverage - uses: gradle/gradle-build-action@3fbe033aaae657f011f88f29be9e65ed26bd29ef # v2 + uses: gradle/gradle-build-action@749f47bda3e44aa060e82d7b3ef7e40d953bd629 # v2.4.2 with: arguments: jacocoTestGplayDebugUnitTest - name: Upload failing results @@ -35,7 +35,7 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: scripts/uploadReport.sh "${{ secrets.LOG_USERNAME }}" "${{ secrets.LOG_PASSWORD }}" ${{github.event.number}} "test" "Unit" ${{github.event.number}} - name: Upload coverage to codecov - uses: codecov/codecov-action@d9f34f8cd5cb3b3eb79b3e4b5dae3a16df499a70 # v3 + uses: codecov/codecov-action@894ff025c7b54547a9a2a1e9f228beae737ad3c2 # v3.1.3 with: token: ${{ secrets.CODECOV_TOKEN }} flags: unit diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d13bbf17392..852e35262af6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,19 @@ +## 3.24.1 (February 21, 2022) + +- Fix crash in previous version when connecting to old server versions + +Minimum: NC 16 Server, Android 6.0 Marshmallow + +## 3.24.0 (February 13, 2022) + +- Several performance optimizations by @starypatyk +- Support multi-page document scanning and exporting to PDF +- Many small bugfixes and improvements + +Minimum: NC 16 Server, Android 6.0 Marshmallow + +For a full list, please see https://github.com/nextcloud/android/milestone/78 + ## 3.23.1 (December 21, 2022) - Bug fixes diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 980a2167baa4..511c4066e123 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -319,7 +319,7 @@ A good practice is to not include the word `menu` as part of the name because th ## Translations -We manage translations via [Transifex](https://www.transifex.com/nextcloud/nextcloud/android/). So just request joining the translation team for Android on the site and start translating. All translations will then be automatically pushed to this repository, there is no need for any pull request for translations. +We manage translations via [Transifex](https://app.transifex.com/nextcloud/nextcloud/android/). So just request joining the translation team for Android on the site and start translating. All translations will then be automatically pushed to this repository, there is no need for any pull request for translations. If you need to change a translation, do not change it, but give it new key. This way the translation stays backward compatible as we automatically backport translated strings to last versions. diff --git a/README.md b/README.md index b26701ac3c3c..5bf764cecdf2 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ height="80">](https://f-droid.org/packages/com.nextcloud.client/) If you want to [contribute](https://nextcloud.com/contribute/) to Nextcloud, you are very welcome: * our forum at https://help.nextcloud.com -* for translations of the app on [Transifex](https://www.transifex.com/nextcloud/nextcloud/android/) +* for translations of the app on [Transifex](https://app.transifex.com/nextcloud/nextcloud/android/) * opening issues and PRs (including a corresponding issue) ## Contribution Guidelines & License :scroll: diff --git a/app/build.gradle b/app/build.gradle index 7b0ffbfbc2b5..8590b2f4ccb4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,9 +3,9 @@ import org.gradle.internal.jvm.Jvm buildscript { dependencies { - classpath 'com.android.tools.build:gradle:7.4.0' + classpath "com.android.tools.build:gradle:$androidPluginVersion" classpath 'com.hiya:jacoco-android:0.2' - classpath 'com.github.spotbugs.snom:spotbugs-gradle-plugin:5.0.13' + classpath 'com.github.spotbugs.snom:spotbugs-gradle-plugin:5.0.14' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.22.0" classpath "commons-httpclient:commons-httpclient:3.1@jar" // remove after entire switch to lib v2 @@ -17,7 +17,7 @@ buildscript { } plugins { - id "com.diffplug.spotless" version "6.14.0" + id "com.diffplug.spotless" version "6.17.0" } apply plugin: 'com.android.application' @@ -247,13 +247,13 @@ dependencies { implementation 'com.google.android.material:material:1.8.0' implementation 'com.jakewharton:disklrucache:2.0.2' implementation "androidx.appcompat:appcompat:$appCompatVersion" - implementation 'androidx.webkit:webkit:1.5.0' + implementation 'androidx.webkit:webkit:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' - implementation 'androidx.exifinterface:exifinterface:1.3.5' + implementation 'androidx.exifinterface:exifinterface:1.3.6' implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1" implementation "androidx.work:work-runtime:$workRuntime" implementation "androidx.work:work-runtime-ktx:$workRuntime" - implementation "androidx.fragment:fragment-ktx:1.5.5" + implementation "androidx.fragment:fragment-ktx:1.5.7" implementation 'com.github.albfernandez:juniversalchardet:2.0.3' // need this version for Android <7 compileOnly 'com.google.code.findbugs:annotations:3.0.1u2' implementation 'commons-io:commons-io:2.11.0' @@ -271,8 +271,8 @@ dependencies { exclude group: "com.android.support" } implementation 'com.caverock:androidsvg:1.4' - implementation 'androidx.annotation:annotation:1.5.0' - implementation 'com.vanniktech:emoji-google:0.9.0' + implementation 'androidx.annotation:annotation:1.6.0' + implementation 'com.vanniktech:emoji-google:0.16.0' implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido:$fidoVersion" implementation "com.github.nextcloud-deps.hwsecurity:hwsecurity-fido2:$fidoVersion" @@ -283,7 +283,7 @@ dependencies { qaImplementation project(':appscan') spotbugsPlugins 'com.h3xstream.findsecbugs:findsecbugs-plugin:1.12.0' - spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.4.7' + spotbugsPlugins 'com.mebigfatguy.fb-contrib:fb-contrib:7.6.0' implementation "com.google.dagger:dagger:$daggerVersion" implementation "com.google.dagger:dagger-android:$daggerVersion" @@ -296,7 +296,7 @@ dependencies { implementation "com.google.android.exoplayer:exoplayer:$exoplayerVersion" implementation "com.google.android.exoplayer:extension-okhttp:$exoplayerVersion" - implementation 'me.zhanghai.android.fastscroll:library:1.1.8' + implementation 'me.zhanghai.android.fastscroll:library:1.2.0' // Shimmer animation implementation 'io.github.elye:loaderviewlibrary:3.0.0' @@ -326,9 +326,9 @@ dependencies { testImplementation 'junit:junit:4.13.2' testImplementation "org.mockito:mockito-core:$mockitoVersion" testImplementation "androidx.test:core:$androidxTestVersion" - testImplementation 'org.json:json:20220924' + testImplementation 'org.json:json:20230227' testImplementation "org.mockito.kotlin:mockito-kotlin:$mockitoKotlinVersion" - testImplementation 'androidx.arch.core:core-testing:2.1.0' + testImplementation 'androidx.arch.core:core-testing:2.2.0' testImplementation "io.mockk:mockk:$mockkVersion" testImplementation "io.mockk:mockk-android:$mockkVersion" @@ -354,7 +354,7 @@ dependencies { androidTestImplementation "org.mockito:mockito-core:$mockitoVersion" androidTestImplementation("org.mockito:mockito-android:$mockitoVersion") androidTestImplementation "io.mockk:mockk-android:$mockkVersion" - androidTestImplementation 'androidx.arch.core:core-testing:2.0.1' + androidTestImplementation 'androidx.arch.core:core-testing:2.2.0' androidTestImplementation "com.facebook.testing.screenshot:core:0.15.0" // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests @@ -367,9 +367,9 @@ dependencies { implementation "com.github.stateless4j:stateless4j:2.6.0" // upon each update first test: new registration, receive push - gplayImplementation "com.google.firebase:firebase-messaging:23.1.1" + gplayImplementation "com.google.firebase:firebase-messaging:23.1.2" - implementation 'com.github.nextcloud.android-common:ui:0.4.0' + implementation 'com.github.nextcloud.android-common:ui:0.7.0' implementation "androidx.room:room-runtime:$roomVersion" kapt "androidx.room:room-compiler:$roomVersion" diff --git a/app/screenshots/gplay/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png b/app/screenshots/gplay/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png index b832e03338e5..2a30157743b1 100644 Binary files a/app/screenshots/gplay/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png and b/app/screenshots/gplay/debug/com.nextcloud.client.AuthenticatorActivityIT_login.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png new file mode 100644 index 000000000000..587ec2f2d624 Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showEmpty.png differ diff --git a/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png new file mode 100644 index 000000000000..79989311e27c Binary files /dev/null and b/app/screenshots/gplay/debug/com.owncloud.android.ui.fragment.GalleryFragmentIT_showGallery.png differ diff --git a/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java b/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java index 7a2fc2d38534..9d80c9da2048 100644 --- a/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java +++ b/app/src/androidTest/java/com/nextcloud/client/account/UserAccountManagerImplTest.java @@ -7,6 +7,7 @@ import com.nextcloud.client.preferences.AppPreferences; import com.nextcloud.client.preferences.AppPreferencesImpl; import com.owncloud.android.AbstractOnServerIT; +import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.accounts.AccountUtils; import org.junit.Before; @@ -48,4 +49,25 @@ public void updateOneAccount() { // assume that userId == loginname (as we manually set it) assertEquals(userId, accountManager.getUserData(account, AccountUtils.Constants.KEY_USER_ID)); } + + @Test + public void checkName() { + UserAccountManagerImpl sut = new UserAccountManagerImpl(targetContext, accountManager); + + Account owner = new Account("John@nextcloud.local", "nextcloud"); + Account account1 = new Account("John@nextcloud.local", "nextcloud"); + Account account2 = new Account("john@nextcloud.local", "nextcloud"); + + OCFile file1 = new OCFile("/test1.pdf"); + file1.setOwnerId("John"); + + assertTrue(sut.accountOwnsFile(file1, owner)); + assertTrue(sut.accountOwnsFile(file1, account1)); + assertTrue(sut.accountOwnsFile(file1, account2)); + + file1.setOwnerId("john"); + assertTrue(sut.accountOwnsFile(file1, owner)); + assertTrue(sut.accountOwnsFile(file1, account1)); + assertTrue(sut.accountOwnsFile(file1, account2)); + } } diff --git a/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt b/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt index 93fa3c0dd0b9..e06adbecbce9 100644 --- a/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt +++ b/app/src/androidTest/java/com/nextcloud/client/jobs/BackgroundJobManagerTest.kt @@ -122,7 +122,8 @@ class BackgroundJobManagerTest { Data.Builder().build(), listOf(BackgroundJobManagerImpl.formatTimeTag(1581820284000)), Data.Builder().build(), - 1 + 1, + 0 ) } diff --git a/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java b/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java index 69c0e18e986e..67ad5238e148 100644 --- a/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java +++ b/app/src/androidTest/java/com/owncloud/android/datamodel/FileDataStorageManagerIT.java @@ -104,20 +104,20 @@ public void testFolderContent() throws IOException { assertTrue(new UploadFileRemoteOperation(getDummyFile("chunkedFile.txt").getAbsolutePath(), "/1/1/chunkedFile.txt", "text/plain", - String.valueOf(System.currentTimeMillis() / 1000)) + System.currentTimeMillis() / 1000) .execute(client).isSuccess()); assertTrue(new UploadFileRemoteOperation(getDummyFile("chunkedFile.txt").getAbsolutePath(), "/1/1/chunkedFile2.txt", "text/plain", - String.valueOf(System.currentTimeMillis() / 1000)) + System.currentTimeMillis() / 1000) .execute(client).isSuccess()); File imageFile = getFile("imageFile.png"); assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(), "/1/1/imageFile.png", "image/png", - String.valueOf(System.currentTimeMillis() / 1000)) + System.currentTimeMillis() / 1000) .execute(client).isSuccess()); // sync @@ -166,7 +166,7 @@ public void testPhotoSearch() throws IOException { assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(), remotePath, "image/png", - String.valueOf(System.currentTimeMillis() / 1000)) + System.currentTimeMillis() / 1000) .execute(client).isSuccess()); assertNull(sut.getFileByDecryptedRemotePath(remotePath)); @@ -240,7 +240,7 @@ public void testGallerySearch() throws IOException { assertTrue(new UploadFileRemoteOperation(imageFile.getAbsolutePath(), imagePath, "image/png", - String.valueOf((System.currentTimeMillis() - 10000) / 1000)) + (System.currentTimeMillis() - 10000) / 1000) .execute(client).isSuccess()); // Check that file does not yet exist in local database @@ -251,7 +251,7 @@ public void testGallerySearch() throws IOException { assertTrue(new UploadFileRemoteOperation(videoFile.getAbsolutePath(), videoPath, "video/mpeg", - String.valueOf((System.currentTimeMillis() + 10000) / 1000)) + (System.currentTimeMillis() + 10000) / 1000) .execute(client).isSuccess()); // Check that file does not yet exist in local database diff --git a/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt index cd6b2659b29b..b83327aef49c 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt @@ -32,8 +32,10 @@ import com.owncloud.android.AbstractIT import com.owncloud.android.datamodel.ImageDimension import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.ThumbnailsCacheManager +import com.owncloud.android.datamodel.ThumbnailsCacheManager.InitDiskCacheTask import com.owncloud.android.datamodel.ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.utils.ScreenshotTest import org.junit.After import org.junit.Assert.assertNotNull import org.junit.Before @@ -46,16 +48,14 @@ class GalleryFragmentIT : AbstractIT() { val testActivityRule = IntentsTestRule(TestActivity::class.java, true, false) lateinit var activity: TestActivity - val random = Random() + val random = Random(1) @Before fun before() { activity = testActivityRule.launchActivity(null) - createImage(10000001, true, 700, 300) - createImage(10000002, true, 500, 300) - - createImage(10000007, true, 300, 400) + // initialise thumbnails cache on background thread + InitDiskCacheTask().execute() } @After @@ -65,15 +65,32 @@ class GalleryFragmentIT : AbstractIT() { super.after() } + @ScreenshotTest @Test + fun showEmpty() { + val sut = GalleryFragment() + activity.addFragment(sut) + + waitForIdleSync() + + screenshot(activity) + } + + @Test + @ScreenshotTest fun showGallery() { + createImage(10000001, 700, 300) + createImage(10000002, 500, 300) + createImage(10000007, 300, 400) + val sut = GalleryFragment() activity.addFragment(sut) - longSleep() + waitForIdleSync() + screenshot(activity) } - private fun createImage(id: Int, createPreview: Boolean = true, width: Int? = null, height: Int? = null) { + private fun createImage(id: Int, width: Int? = null, height: Int? = null) { val defaultSize = ThumbnailsCacheManager.getThumbnailDimension().toFloat() val file = OCFile("/$id.png").apply { fileId = id.toLong() @@ -85,13 +102,9 @@ class GalleryFragmentIT : AbstractIT() { storageManager.saveFile(this) } - if (!createPreview) { - return - } - // create dummy thumbnail - var w: Int - var h: Int + val w: Int + val h: Int if (width == null || height == null) { if (random.nextBoolean()) { // portrait @@ -110,7 +123,7 @@ class GalleryFragmentIT : AbstractIT() { val bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888) Canvas(bitmap).apply { drawRGB(random.nextInt(256), random.nextInt(256), random.nextInt(256)) - drawCircle(w / 2f, h / 2f, Math.min(w, h) / 2f, Paint().apply { color = Color.BLACK }) + drawCircle(w / 2f, h / 2f, w.coerceAtMost(h) / 2f, Paint().apply { color = Color.BLACK }) } ThumbnailsCacheManager.addBitmapToCache(PREFIX_RESIZED_IMAGE + file.remoteId, bitmap) diff --git a/app/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java b/app/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java index d346008e8b67..41046243a9e3 100644 --- a/app/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java +++ b/app/src/androidTest/java/com/owncloud/android/util/EncryptionTestIT.java @@ -26,8 +26,8 @@ import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; -import com.nextcloud.test.RetryTestRule; import com.nextcloud.test.RandomStringGenerator; +import com.nextcloud.test.RetryTestRule; import com.owncloud.android.datamodel.DecryptedFolderMetadata; import com.owncloud.android.datamodel.EncryptedFolderMetadata; import com.owncloud.android.lib.common.utils.Log_OC; @@ -56,6 +56,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Random; import java.util.Set; @@ -87,6 +88,7 @@ import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; @RunWith(AndroidJUnit4.class) public class EncryptionTestIT { @@ -406,6 +408,58 @@ public void bigMetadata() throws Exception { } } + @Test + public void filedrop() throws Exception { + DecryptedFolderMetadata decryptedFolderMetadata1 = generateFolderMetadata(); + + // add filedrop + Map filesdrop = new HashMap<>(); + + DecryptedFolderMetadata.Data data = new DecryptedFolderMetadata.Data(); + data.setKey("9dfzbIYDt28zTyZfbcll+g=="); + data.setFilename("test2.txt"); + data.setVersion(1); + + DecryptedFolderMetadata.DecryptedFile file = new DecryptedFolderMetadata.DecryptedFile(); + file.setInitializationVector("hnJLF8uhDvDoFK4ajuvwrg=="); + file.setEncrypted(data); + file.setMetadataKey(0); + file.setAuthenticationTag("qOQZdu5soFO77Y7y4rAOVA=="); + + filesdrop.put("eie8iaeiaes8e87td6", file); + + decryptedFolderMetadata1.setFiledrop(filesdrop); + + // encrypt + EncryptedFolderMetadata encryptedFolderMetadata1 = encryptFolderMetadata( + decryptedFolderMetadata1, + privateKey + ); + EncryptionUtils.encryptFileDropFiles(decryptedFolderMetadata1, encryptedFolderMetadata1, cert); + + // serialize + String encryptedJson = serializeJSON(encryptedFolderMetadata1); + + // de-serialize + EncryptedFolderMetadata encryptedFolderMetadata2 = deserializeJSON(encryptedJson, + new TypeToken() { + }); + + // decrypt + DecryptedFolderMetadata decryptedFolderMetadata2 = decryptFolderMetaData( + encryptedFolderMetadata2, privateKey); + + // compare + assertFalse(compareJsonStrings(serializeJSON(decryptedFolderMetadata1), + serializeJSON(decryptedFolderMetadata2))); + + assertEquals(decryptedFolderMetadata1.getFiles().size() + decryptedFolderMetadata1.getFiledrop().size(), + decryptedFolderMetadata2.getFiles().size()); + + // no filedrop content means null + assertNull(decryptedFolderMetadata2.getFiledrop()); + } + private void addFile(DecryptedFolderMetadata decryptedFolderMetadata, int counter) { // Add new file // Always generate new diff --git a/app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java b/app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java index eff92e2a01d6..592b201810af 100644 --- a/app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java +++ b/app/src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java @@ -2,7 +2,9 @@ * Nextcloud Android client application * * @author Chris Narkiewicz + * @author TSI-mc * Copyright (C) 2019 Chris Narkiewicz + * Copyright (C) 2023 TSI-mc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -340,7 +342,7 @@ public void resetOwnCloudAccount() { @Override public boolean accountOwnsFile(OCFile file, Account account) { final String ownerId = file.getOwnerId(); - return TextUtils.isEmpty(ownerId) || account.name.split("@")[0].equals(ownerId); + return TextUtils.isEmpty(ownerId) || account.name.split("@")[0].equalsIgnoreCase(ownerId); } @Override diff --git a/app/src/main/java/com/nextcloud/client/di/AppComponent.java b/app/src/main/java/com/nextcloud/client/di/AppComponent.java index 4ad4bfadeb4c..bcf57fb1ae37 100644 --- a/app/src/main/java/com/nextcloud/client/di/AppComponent.java +++ b/app/src/main/java/com/nextcloud/client/di/AppComponent.java @@ -33,6 +33,7 @@ import com.owncloud.android.MainApp; import com.owncloud.android.media.MediaControlView; import com.owncloud.android.ui.ThemeableSwitchPreference; +import com.owncloud.android.ui.whatsnew.ProgressIndicator; import com.owncloud.android.utils.FilesUploadHelper; import javax.inject.Singleton; @@ -68,6 +69,8 @@ public interface AppComponent { void inject(FilesUploadHelper filesUploadHelper); + void inject(ProgressIndicator progressIndicator); + @Component.Builder interface Builder { @BindsInstance diff --git a/app/src/main/java/com/nextcloud/client/media/NextcloudExoPlayer.kt b/app/src/main/java/com/nextcloud/client/media/NextcloudExoPlayer.kt index c4764a7378d7..f27fca1785f7 100644 --- a/app/src/main/java/com/nextcloud/client/media/NextcloudExoPlayer.kt +++ b/app/src/main/java/com/nextcloud/client/media/NextcloudExoPlayer.kt @@ -29,6 +29,7 @@ import com.google.android.exoplayer2.upstream.DefaultDataSource import com.nextcloud.common.NextcloudClient object NextcloudExoPlayer { + private const val FIVE_SECONDS_IN_MILLIS = 5000L /** * Creates an [ExoPlayer] that uses [NextcloudClient] for HTTP connections, thus respecting redirections, @@ -44,6 +45,10 @@ object NextcloudExoPlayer { okHttpDataSourceFactory ) ) - return ExoPlayer.Builder(context).setMediaSourceFactory(mediaSourceFactory).build() + return ExoPlayer + .Builder(context) + .setMediaSourceFactory(mediaSourceFactory) + .setSeekForwardIncrementMs(FIVE_SECONDS_IN_MILLIS) + .build() } } diff --git a/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java b/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java index 759b0b815f63..898291198433 100644 --- a/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java +++ b/app/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java @@ -34,6 +34,7 @@ import android.view.ViewGroup; import android.widget.LinearLayout; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; import com.nextcloud.client.account.UserAccountManager; import com.nextcloud.client.appinfo.AppInfo; import com.nextcloud.client.di.Injectable; @@ -47,6 +48,7 @@ import com.owncloud.android.ui.activity.FileDisplayActivity; import com.owncloud.android.ui.adapter.FeaturesViewAdapter; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.theme.ViewThemeUtils; import javax.inject.Inject; @@ -66,13 +68,18 @@ public class FirstRunActivity extends BaseActivity implements ViewPager.OnPageCh @Inject AppInfo appInfo; @Inject OnboardingService onboarding; + @Inject ViewThemeUtils.Factory viewThemeUtilsFactory; + private FirstRunActivityBinding binding; + private ViewThemeUtils defaultViewThemeUtils; @Override protected void onCreate(Bundle savedInstanceState) { enableAccountHandling = false; super.onCreate(savedInstanceState); + defaultViewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground(); + defaultViewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY); this.binding = FirstRunActivityBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); @@ -81,9 +88,7 @@ protected void onCreate(Bundle savedInstanceState) { setSlideshowSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE); - binding.login.setBackgroundColor(getResources().getColor(R.color.login_btn_tint)); - binding.login.setTextColor(getResources().getColor(R.color.primary)); - + defaultViewThemeUtils.material.colorMaterialButtonFilledOnPrimary(binding.login); binding.login.setOnClickListener(v -> { if (getIntent().getBooleanExtra(EXTRA_ALLOW_CLOSE, false)) { Intent authenticatorActivityIntent = new Intent(this, AuthenticatorActivity.class); @@ -95,8 +100,7 @@ protected void onCreate(Bundle savedInstanceState) { }); - binding.signup.setBackgroundColor(getResources().getColor(R.color.primary)); - binding.signup.setTextColor(getResources().getColor(R.color.login_text_color)); + defaultViewThemeUtils.material.colorMaterialButtonOutlinedOnPrimary(binding.signup); binding.signup.setVisibility(isProviderOrOwnInstallationVisible ? View.VISIBLE : View.GONE); binding.signup.setOnClickListener(v -> { Intent authenticatorActivityIntent = new Intent(this, AuthenticatorActivity.class); @@ -110,7 +114,7 @@ protected void onCreate(Bundle savedInstanceState) { } }); - binding.hostOwnServer.setTextColor(getResources().getColor(R.color.login_text_color)); + defaultViewThemeUtils.platform.colorTextView(binding.hostOwnServer, ColorRole.ON_PRIMARY); binding.hostOwnServer.setVisibility(isProviderOrOwnInstallationVisible ? View.VISIBLE : View.GONE); if (!isProviderOrOwnInstallationVisible) { @@ -230,9 +234,9 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { public static FeatureItem[] getFirstRun() { return new FeatureItem[]{ - new FeatureItem(R.drawable.logo, R.string.first_run_1_text, R.string.empty, true, false), - new FeatureItem(R.drawable.first_run_files, R.string.first_run_2_text, R.string.empty, true, false), - new FeatureItem(R.drawable.first_run_groupware, R.string.first_run_3_text, R.string.empty, true, false), - new FeatureItem(R.drawable.first_run_talk, R.string.first_run_4_text, R.string.empty, true, false)}; + new FeatureItem(R.drawable.logo, R.string.first_run_1_text, R.string.empty, true, false), + new FeatureItem(R.drawable.first_run_files, R.string.first_run_2_text, R.string.empty, true, false), + new FeatureItem(R.drawable.first_run_groupware, R.string.first_run_3_text, R.string.empty, true, false), + new FeatureItem(R.drawable.first_run_talk, R.string.first_run_4_text, R.string.empty, true, false)}; } } diff --git a/app/src/main/java/com/nextcloud/client/onboarding/WhatsNewActivity.java b/app/src/main/java/com/nextcloud/client/onboarding/WhatsNewActivity.java index e5721b2be676..dd43cb5f2fb6 100644 --- a/app/src/main/java/com/nextcloud/client/onboarding/WhatsNewActivity.java +++ b/app/src/main/java/com/nextcloud/client/onboarding/WhatsNewActivity.java @@ -29,11 +29,14 @@ import android.widget.ImageButton; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; import com.nextcloud.client.appinfo.AppInfo; import com.nextcloud.client.di.Injectable; import com.nextcloud.client.preferences.AppPreferences; import com.owncloud.android.BuildConfig; import com.owncloud.android.R; +import com.owncloud.android.databinding.WhatsNewActivityBinding; import com.owncloud.android.ui.adapter.FeaturesViewAdapter; import com.owncloud.android.ui.adapter.FeaturesWebViewAdapter; import com.owncloud.android.ui.whatsnew.ProgressIndicator; @@ -49,24 +52,24 @@ */ public class WhatsNewActivity extends FragmentActivity implements ViewPager.OnPageChangeListener, Injectable { - private ImageButton mForwardFinishButton; - private Button mSkipButton; - private ProgressIndicator mProgress; - private ViewPager mPager; @Inject AppPreferences preferences; @Inject AppInfo appInfo; @Inject OnboardingService onboarding; - @Inject ViewThemeUtils viewThemeUtils; + @Inject ViewThemeUtils.Factory viewThemeUtilsFactory; + private ViewThemeUtils viewThemeUtils; + + private WhatsNewActivityBinding binding; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.whats_new_activity); + binding = WhatsNewActivityBinding.inflate(getLayoutInflater()); + setContentView(binding.getRoot()); - int fontColor = getResources().getColor(R.color.login_text_color); + viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground(); + viewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY); - mProgress = findViewById(R.id.progressIndicator); - mPager = findViewById(R.id.contentPanel); + String[] urls = getResources().getStringArray(R.array.whatsnew_urls); boolean showWebView = urls.length > 0; @@ -74,24 +77,23 @@ protected void onCreate(Bundle savedInstanceState) { if (showWebView) { FeaturesWebViewAdapter featuresWebViewAdapter = new FeaturesWebViewAdapter(getSupportFragmentManager(), urls); - mProgress.setNumberOfSteps(featuresWebViewAdapter.getCount()); - mPager.setAdapter(featuresWebViewAdapter); + binding.progressIndicator.setNumberOfSteps(featuresWebViewAdapter.getCount()); + binding.contentPanel.setAdapter(featuresWebViewAdapter); } else { FeaturesViewAdapter featuresViewAdapter = new FeaturesViewAdapter(getSupportFragmentManager(), onboarding.getWhatsNew()); - mProgress.setNumberOfSteps(featuresViewAdapter.getCount()); - mPager.setAdapter(featuresViewAdapter); + binding.progressIndicator.setNumberOfSteps(featuresViewAdapter.getCount()); + binding.contentPanel.setAdapter(featuresViewAdapter); } - mPager.addOnPageChangeListener(this); + binding.contentPanel.addOnPageChangeListener(this); - mForwardFinishButton = findViewById(R.id.forward); - viewThemeUtils.platform.colorImageButton(mForwardFinishButton, fontColor); + viewThemeUtils.platform.colorImageView(binding.forward, ColorRole.ON_PRIMARY); - mForwardFinishButton.setOnClickListener(view -> { - if (mProgress.hasNextStep()) { - mPager.setCurrentItem(mPager.getCurrentItem() + 1, true); - mProgress.animateToStep(mPager.getCurrentItem() + 1); + binding.forward.setOnClickListener(view -> { + if (binding.progressIndicator.hasNextStep()) { + binding.contentPanel.setCurrentItem(binding.contentPanel.getCurrentItem() + 1, true); + binding.progressIndicator.animateToStep(binding.contentPanel.getCurrentItem() + 1); } else { onFinish(); finish(); @@ -99,21 +101,20 @@ protected void onCreate(Bundle savedInstanceState) { updateNextButtonIfNeeded(); }); - mForwardFinishButton.setBackground(null); + binding.forward.setBackground(null); - mSkipButton = findViewById(R.id.skip); - mSkipButton.setTextColor(fontColor); - mSkipButton.setOnClickListener(view -> { + viewThemeUtils.platform.colorTextView(binding.skip, ColorRole.ON_PRIMARY); + binding.skip.setOnClickListener(view -> { onFinish(); finish(); }); - TextView tv = findViewById(R.id.welcomeText); + viewThemeUtils.platform.colorTextView(binding.welcomeText, ColorRole.ON_PRIMARY); if (showWebView) { - tv.setText(R.string.app_name); + binding.welcomeText.setText(R.string.app_name); } else { - tv.setText(String.format(getString(R.string.whats_new_title), appInfo.getVersionName())); + binding.welcomeText.setText(String.format(getString(R.string.whats_new_title), appInfo.getVersionName())); } updateNextButtonIfNeeded(); @@ -126,12 +127,12 @@ public void onBackPressed() { } private void updateNextButtonIfNeeded() { - if (!mProgress.hasNextStep()) { - mForwardFinishButton.setImageResource(R.drawable.ic_ok); - mSkipButton.setVisibility(View.INVISIBLE); + if (!binding.progressIndicator.hasNextStep()) { + binding.forward.setImageResource(R.drawable.ic_ok); + binding.skip.setVisibility(View.INVISIBLE); } else { - mForwardFinishButton.setImageResource(R.drawable.arrow_right); - mSkipButton.setVisibility(View.VISIBLE); + binding.forward.setImageResource(R.drawable.arrow_right); + binding.skip.setVisibility(View.VISIBLE); } } @@ -146,7 +147,7 @@ public void onPageScrolled(int position, float positionOffset, int positionOffse @Override public void onPageSelected(int position) { - mProgress.animateToStep(position + 1); + binding.progressIndicator.animateToStep(position + 1); updateNextButtonIfNeeded(); } diff --git a/app/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java b/app/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java index b15157c88db3..5af380eeedf5 100644 --- a/app/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java +++ b/app/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java @@ -92,7 +92,6 @@ public final class AppPreferencesImpl implements AppPreferences { private static final String PREF__PIN_BRUTE_FORCE_COUNT = "pin_brute_force_count"; private static final String PREF__UID_PID = "uid_pid"; - private static final String PREF__CALENDAR_AUTOMATIC_BACKUP = "calendar_automatic_backup"; private static final String PREF__CALENDAR_LAST_BACKUP = "calendar_last_backup"; private static final String PREF__PDF_ZOOM_TIP_SHOWN = "pdf_zoom_tip_shown"; diff --git a/app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt b/app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt index 42fd49aab712..33465df7d975 100644 --- a/app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/ui/SetStatusDialogFragment.kt @@ -61,6 +61,8 @@ import com.owncloud.android.utils.theme.ViewThemeUtils import com.vanniktech.emoji.EmojiManager import com.vanniktech.emoji.EmojiPopup import com.vanniktech.emoji.google.GoogleEmojiProvider +import com.vanniktech.emoji.installDisableKeyboardInput +import com.vanniktech.emoji.installForceSingleEmoji import java.util.Calendar import java.util.Locale import javax.inject.Inject @@ -172,18 +174,15 @@ class SetStatusDialogFragment : binding.setStatus.setOnClickListener { setStatusMessage() } binding.emoji.setOnClickListener { popup.show() } - popup = EmojiPopup.Builder - .fromRootView(view) - .setOnEmojiClickListener { _, _ -> - popup.dismiss() - binding.emoji.clearFocus() - val imm: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as - InputMethodManager - imm.hideSoftInputFromWindow(binding.emoji.windowToken, 0) - } - .build(binding.emoji) - binding.emoji.disableKeyboardInput(popup) - binding.emoji.forceSingleEmoji() + popup = EmojiPopup(view, binding.emoji, onEmojiClickListener = { _ -> + popup.dismiss() + binding.emoji.clearFocus() + val imm: InputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as + InputMethodManager + imm.hideSoftInputFromWindow(binding.emoji.windowToken, 0) + }) + binding.emoji.installForceSingleEmoji() + binding.emoji.installDisableKeyboardInput(popup) val adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_item) adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item) diff --git a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index 5fa62dfca531..ee9851c87e40 100644 --- a/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/app/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -5,9 +5,11 @@ * @author David A. Velasco * @author masensio * @author Mario Danic + * @author TSI-mc * Copyright (C) 2012 Bartek Przybylski * Copyright (C) 2015 ownCloud Inc. * Copyright (C) 2017 Mario Danic + * Copyright (C) 2023 TSI-mc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -76,6 +78,7 @@ import com.blikoon.qrcodescanner.QrCodeActivity; import com.google.android.material.snackbar.Snackbar; import com.nextcloud.android.common.ui.color.ColorUtil; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; import com.nextcloud.client.account.User; import com.nextcloud.client.account.UserAccountManager; import com.nextcloud.client.device.DeviceInfo; @@ -239,7 +242,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity @Inject OnboardingService onboarding; @Inject DeviceInfo deviceInfo; @Inject PassCodeManager passCodeManager; - @Inject ViewThemeUtils viewThemeUtils; + @Inject ViewThemeUtils.Factory viewThemeUtilsFactory; @Inject ColorUtil colorUtil; private boolean onlyAdd = false; @@ -247,6 +250,8 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity private int primaryColor = R.color.primary; private boolean strictMode = false; + private ViewThemeUtils viewThemeUtils; + @VisibleForTesting public AccountSetupBinding getAccountSetupBinding() { return accountSetupBinding; @@ -260,6 +265,9 @@ public AccountSetupBinding getAccountSetupBinding() { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground(); + viewThemeUtils.platform.themeStatusBar(this, ColorRole.PRIMARY); + Uri data = getIntent().getData(); boolean directLogin = data != null && data.toString().startsWith(getString(R.string.login_data_own_scheme)); @@ -349,6 +357,7 @@ private static String getWebLoginUserAgent() { @SuppressFBWarnings("ANDROID_WEB_VIEW_JAVASCRIPT") @SuppressLint("SetJavaScriptEnabled") private void initWebViewLogin(String baseURL, boolean useGenericUserAgent) { + viewThemeUtils.platform.colorCircularProgressBar(accountSetupWebviewBinding.loginWebviewProgressBar, ColorRole.ON_PRIMARY_CONTAINER); accountSetupWebviewBinding.loginWebview.setVisibility(View.GONE); accountSetupWebviewBinding.loginWebview.getSettings().setAllowFileAccess(false); @@ -539,10 +548,15 @@ private void initOverallUi() { accountSetupBinding.hostUrlInputHelperText.setText( String.format(getString(R.string.login_url_helper_text), getString(R.string.app_name))); + viewThemeUtils.platform.colorTextView(accountSetupBinding.hostUrlInputHelperText, ColorRole.ON_PRIMARY); + viewThemeUtils.platform.colorTextView(accountSetupBinding.serverStatusText, ColorRole.ON_PRIMARY); + viewThemeUtils.platform.colorTextView(accountSetupBinding.authStatusText, ColorRole.ON_PRIMARY); + viewThemeUtils.material.colorTextInputLayout(accountSetupBinding.hostUrlContainer, ColorRole.ON_PRIMARY); + viewThemeUtils.platform.colorEditTextOnPrimary(accountSetupBinding.hostUrlInput); + if (deviceInfo.hasCamera(this)) { accountSetupBinding.scanQr.setOnClickListener(v -> onScan()); - viewThemeUtils.platform.colorDrawable(accountSetupBinding.scanQr.getDrawable(), - getResources().getColor(R.color.login_text_color)); + viewThemeUtils.platform.tintDrawable(this, accountSetupBinding.scanQr.getDrawable(), ColorRole.ON_PRIMARY); } else { accountSetupBinding.scanQr.setVisibility(View.GONE); } @@ -1368,6 +1382,8 @@ public void onRequestPermissionsResult(int requestCode, * server. */ private void showServerStatus() { + if (accountSetupBinding == null) return; + if (mServerStatusIcon == NO_ICON && EMPTY_STRING.equals(mServerStatusText)) { accountSetupBinding.serverStatusText.setVisibility(View.INVISIBLE); } else { diff --git a/app/src/main/java/com/owncloud/android/datamodel/DecryptedFolderMetadata.java b/app/src/main/java/com/owncloud/android/datamodel/DecryptedFolderMetadata.java index 2fd3960c5029..49792c450c7a 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/DecryptedFolderMetadata.java +++ b/app/src/main/java/com/owncloud/android/datamodel/DecryptedFolderMetadata.java @@ -24,6 +24,8 @@ import java.util.HashMap; import java.util.Map; +import androidx.annotation.VisibleForTesting; + /** * Decrypted class representation of metadata json of folder metadata. */ @@ -31,6 +33,8 @@ public class DecryptedFolderMetadata { private Metadata metadata; private Map files; + private Map filedrop; + public DecryptedFolderMetadata() { this.metadata = new Metadata(); this.files = new HashMap<>(); @@ -57,6 +61,15 @@ public void setFiles(Map files) { this.files = files; } + @VisibleForTesting + public void setFiledrop(Map filedrop) { + this.filedrop = filedrop; + } + + public Map getFiledrop() { + return filedrop; + } + public static class Metadata { private Map metadataKeys; // each keys is encrypted on its own, decrypt on use private Sharing sharing; diff --git a/app/src/main/java/com/owncloud/android/datamodel/EncryptedFolderMetadata.java b/app/src/main/java/com/owncloud/android/datamodel/EncryptedFolderMetadata.java index 12f18c63677c..228d9b186e7d 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/EncryptedFolderMetadata.java +++ b/app/src/main/java/com/owncloud/android/datamodel/EncryptedFolderMetadata.java @@ -30,9 +30,14 @@ public class EncryptedFolderMetadata { private DecryptedFolderMetadata.Metadata metadata; private Map files; - public EncryptedFolderMetadata(DecryptedFolderMetadata.Metadata metadata, Map files) { + private Map filedrop; + + public EncryptedFolderMetadata(DecryptedFolderMetadata.Metadata metadata, + Map files, + Map filesdrop) { this.metadata = metadata; this.files = files; + this.filedrop = filesdrop; } public DecryptedFolderMetadata.Metadata getMetadata() { @@ -40,7 +45,11 @@ public DecryptedFolderMetadata.Metadata getMetadata() { } public Map getFiles() { - return this.files; + return files; + } + + public Map getFiledrop() { + return filedrop; } public void setMetadata(DecryptedFolderMetadata.Metadata metadata) { @@ -58,19 +67,19 @@ public static class EncryptedFile { private int metadataKey; public String getEncrypted() { - return this.encrypted; + return encrypted; } public String getInitializationVector() { - return this.initializationVector; + return initializationVector; } public String getAuthenticationTag() { - return this.authenticationTag; + return authenticationTag; } public int getMetadataKey() { - return this.metadataKey; + return metadataKey; } public void setEncrypted(String encrypted) { diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index 214ea0a4a48d..d1289b84e1ce 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -602,7 +602,7 @@ public boolean isHidden() { public long getLocalId() { if (localId > 0) { return localId; - } else if (remoteId != null) { + } else if (remoteId != null && remoteId.length() > 8) { return Long.parseLong(remoteId.substring(0, 8).replaceAll("^0*", "")); } else { return -1; diff --git a/app/src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java b/app/src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java index 6281daf3c613..595425089719 100644 --- a/app/src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java @@ -40,6 +40,7 @@ public class CreateShareViaLinkOperation extends SyncOperation { private String path; private String password; + private int permissions = OCShare.NO_PERMISSION; public CreateShareViaLinkOperation(String path, String password, FileDataStorageManager storageManager) { super(storageManager); @@ -48,6 +49,11 @@ public CreateShareViaLinkOperation(String path, String password, FileDataStorage this.password = password; } + public CreateShareViaLinkOperation(String path, FileDataStorageManager storageManager, int permissions) { + this(path, null, storageManager); + this.permissions = permissions; + } + @Override protected RemoteOperationResult run(OwnCloudClient client) { CreateShareRemoteOperation createOp = new CreateShareRemoteOperation(path, @@ -55,7 +61,7 @@ protected RemoteOperationResult run(OwnCloudClient client) { "", false, password, - OCShare.NO_PERMISSION); + permissions); createOp.setGetShareDetails(true); RemoteOperationResult result = createOp.execute(client); diff --git a/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java b/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java index 6435ea1369c2..8c6e3f11deac 100644 --- a/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java @@ -68,7 +68,8 @@ public class CreateShareWithShareeOperation extends SyncOperation { * @param shareeName User or group name of the target sharee. * @param shareType Type of share determines type of sharee; {@link ShareType#USER} and {@link ShareType#GROUP} * are the only valid values for the moment. - * @param permissions Share permissions key as detailed in https://doc.owncloud.org/server/8.2/developer_manual/core/ocs-share-api.html + * @param permissions Share permissions key as detailed in + * https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-share-api.html#create-a-new-share * . */ public CreateShareWithShareeOperation(String path, diff --git a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java index 2c6eba756eb5..b6df79022b08 100644 --- a/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java @@ -420,13 +420,12 @@ private RemoteOperationResult fetchAndSyncRemoteFolder(OwnCloudClient client) { return result; } - private void removeLocalFolder() { if (mStorageManager.fileExists(mLocalFolder.getFileId())) { String currentSavePath = FileStorageUtils.getSavePath(user.getAccountName()); mStorageManager.removeFolder( - mLocalFolder, - true, + mLocalFolder, + true, mLocalFolder.isDown() && mLocalFolder.getStoragePath().startsWith(currentSavePath) ); } diff --git a/app/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java b/app/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java index 5f3019472606..3656b8696f4e 100644 --- a/app/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/RemoveRemoteEncryptedFileOperation.java @@ -156,13 +156,13 @@ protected RemoteOperationResult run(OwnCloudClient client) { // return success return result; } catch (NoSuchAlgorithmException | - IOException | - InvalidKeyException | - InvalidAlgorithmParameterException | - NoSuchPaddingException | - BadPaddingException | - IllegalBlockSizeException | - InvalidKeySpecException e) { + IOException | + InvalidKeyException | + InvalidAlgorithmParameterException | + NoSuchPaddingException | + BadPaddingException | + IllegalBlockSizeException | + InvalidKeySpecException e) { result = new RemoteOperationResult(e); Log_OC.e(TAG, "Remove " + remotePath + ": " + result.getLogMessage(), e); diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index 947716ddc2d1..98a8e310f1da 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -51,7 +51,6 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult; import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.lib.common.utils.Log_OC; -import com.owncloud.android.lib.resources.e2ee.UnlockFileRemoteOperation; import com.owncloud.android.lib.resources.files.ChunkedFileUploadRemoteOperation; import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation; import com.owncloud.android.lib.resources.files.ReadFileRemoteOperation; @@ -419,18 +418,6 @@ protected RemoteOperationResult run(OwnCloudClient client) { mFile.setParentId(parent.getFileId()); - // try to unlock folder with stored token, e.g. when upload needs to be resumed or app crashed - // the parent folder should exist as it is a resume of a broken upload - if (mFolderUnlockToken != null && !mFolderUnlockToken.isEmpty()) { - UnlockFileRemoteOperation unlockFileOperation = new UnlockFileRemoteOperation(parent.getLocalId(), - mFolderUnlockToken); - RemoteOperationResult unlockFileOperationResult = unlockFileOperation.execute(client); - - if (!unlockFileOperationResult.isSuccess()) { - return unlockFileOperationResult; - } - } - // check if any parent is encrypted encryptedAncestor = FileStorageUtils.checkEncryptionStatus(parent, getStorageManager()); mFile.setEncrypted(encryptedAncestor); @@ -470,10 +457,15 @@ private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile pare } /***** E2E *****/ - token = EncryptionUtils.lockFolder(parentFile, client); - // immediately store it - mUpload.setFolderUnlockToken(token); - uploadsStorageManager.updateUpload(mUpload); + // we might have an old token from interrupted upload + if (mFolderUnlockToken != null && !mFolderUnlockToken.isEmpty()) { + token = mFolderUnlockToken; + } else { + token = EncryptionUtils.lockFolder(parentFile, client); + // immediately store it + mUpload.setFolderUnlockToken(token); + uploadsStorageManager.updateUpload(mUpload); + } // Update metadata Pair metadataPair = EncryptionUtils.retrieveMetadata(parentFile, @@ -503,7 +495,7 @@ private RemoteOperationResult encryptedUpload(OwnCloudClient client, OCFile pare } // Get the last modification date of the file from the file system - String lastModifiedTimestamp = Long.toString(originalFile.lastModified() / 1000); + long lastModifiedTimestamp = originalFile.lastModified() / 1000; Long creationTimestamp = FileUtil.getCreationTimestamp(originalFile); @@ -767,7 +759,7 @@ private RemoteOperationResult normalUpload(OwnCloudClient client) { } // Get the last modification date of the file from the file system - String lastModifiedTimestamp = Long.toString(originalFile.lastModified() / 1000); + long lastModifiedTimestamp = originalFile.lastModified() / 1000; final Long creationTimestamp = FileUtil.getCreationTimestamp(originalFile); @@ -1172,6 +1164,7 @@ public void cancel(ResultCode cancellationReason) { Log_OC.d(TAG, "Cancelling upload during upload preparations."); mCancellationRequested.set(true); } else { + mCancellationRequested.set(true); Log_OC.e(TAG, "No upload in progress. This should not happen."); } } else { diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 67b2535c6d66..4d280abb8eb4 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -564,7 +564,7 @@ private String createFile(Document targetFolder, String displayName, String mime newFilePath, mimeType, "", - String.valueOf(System.currentTimeMillis() / 1000), + System.currentTimeMillis() / 1000, FileUtil.getCreationTimestamp(emptyFile), false) .execute(client); diff --git a/app/src/main/java/com/owncloud/android/services/OperationsService.java b/app/src/main/java/com/owncloud/android/services/OperationsService.java index 35db51a57972..ce6ca4697eb2 100644 --- a/app/src/main/java/com/owncloud/android/services/OperationsService.java +++ b/app/src/main/java/com/owncloud/android/services/OperationsService.java @@ -54,6 +54,7 @@ import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.RestoreFileVersionRemoteOperation; import com.owncloud.android.lib.resources.files.model.FileVersion; +import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation; import com.owncloud.android.operations.CheckCurrentCredentialsOperation; @@ -110,6 +111,7 @@ public class OperationsService extends Service { public static final String EXTRA_IN_BACKGROUND = "IN_BACKGROUND"; public static final String ACTION_CREATE_SHARE_VIA_LINK = "CREATE_SHARE_VIA_LINK"; + public static final String ACTION_CREATE_SECURE_FILE_DROP = "CREATE_SECURE_FILE_DROP"; public static final String ACTION_CREATE_SHARE_WITH_SHAREE = "CREATE_SHARE_WITH_SHAREE"; public static final String ACTION_UNSHARE = "UNSHARE"; public static final String ACTION_UPDATE_PUBLIC_SHARE = "UPDATE_PUBLIC_SHARE"; @@ -519,6 +521,13 @@ private Pair newOperation(Intent operationIntent) { } break; + case ACTION_CREATE_SECURE_FILE_DROP: + remotePath = operationIntent.getStringExtra(EXTRA_REMOTE_PATH); + operation = new CreateShareViaLinkOperation(remotePath, + fileDataStorageManager, + OCShare.CREATE_PERMISSION_FLAG); + break; + case ACTION_UPDATE_PUBLIC_SHARE: shareId = operationIntent.getLongExtra(EXTRA_SHARE_ID, -1); diff --git a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java index 68b92f32a912..f838d3a6f473 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java @@ -6,11 +6,12 @@ * @author Andy Scherzinger * @author Chris Narkiewicz * @author TSI-mc + * @author Archontis E. Kostis * Copyright (C) 2011 Bartek Przybylski * Copyright (C) 2016 ownCloud Inc. * Copyright (C) 2018 Andy Scherzinger * Copyright (C) 2019 Chris Narkiewicz - * Copyright (C) 2022 TSI-mc + * Copyright (C) 2023 TSI-mc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -250,7 +251,25 @@ protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.Theme_ownCloud_Toolbar_Drawer); super.onCreate(savedInstanceState); - /// Load of saved instance state + loadSavedInstanceState(savedInstanceState); + + /// USER INTERFACE + initLayout(); + initUI(); + initTaskRetainerFragment(); + + if (Intent.ACTION_VIEW.equals(getIntent().getAction())) { + handleOpenFileViaIntent(getIntent()); + } + + mPlayerConnection = new PlayerServiceConnection(this); + + checkStoragePath(); + + initSyncBroadcastReceiver(); + } + + private void loadSavedInstanceState(Bundle savedInstanceState) { if (savedInstanceState != null) { mWaitingToPreview = savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW); mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS); @@ -262,24 +281,22 @@ protected void onCreate(Bundle savedInstanceState) { mSyncInProgress = false; mWaitingToSend = null; } + } - /// USER INTERFACE - + private void initLayout() { // Inflate and set the layout view binding = FilesBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); + } - // setup toolbar + private void initUI() { setupHomeSearchToolbarWithSortAndListButtons(); - mMenuButton.setOnClickListener(v -> openDrawer()); - mSwitchAccountButton.setOnClickListener(v -> showManageAccountsDialog()); - - fastScrollUtils.fixAppBarForFastScroll(binding.appbar.appbar, binding.rootLayout); + } - + private void initTaskRetainerFragment() { // Init Fragment without UI to retain AsyncTask across configuration changes FragmentManager fm = getSupportFragmentManager(); TaskRetainerFragment taskRetainerFragment = @@ -289,16 +306,6 @@ protected void onCreate(Bundle savedInstanceState) { fm.beginTransaction() .add(taskRetainerFragment, TaskRetainerFragment.FTAG_TASK_RETAINER_FRAGMENT).commit(); } // else, Fragment already created and retained across configuration change - - if (Intent.ACTION_VIEW.equals(getIntent().getAction())) { - handleOpenFileViaIntent(getIntent()); - } - - mPlayerConnection = new PlayerServiceConnection(this); - - checkStoragePath(); - - initSyncBroadcastReceiver(); } private void checkStoragePath() { @@ -2002,7 +2009,7 @@ public void startSyncFolderOperation(final OCFile folder, final boolean ignoreET // the execution is slightly delayed to allow the activity get the window focus if it's being started // or if the method is called from a dialog that is being dismissed - if (TextUtils.isEmpty(searchQuery)) { + if (TextUtils.isEmpty(searchQuery) && getUser().isPresent()) { getHandler().postDelayed( new Runnable() { @Override diff --git a/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt b/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt index f61953b42fc7..b05365dd9f97 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt +++ b/app/src/main/java/com/owncloud/android/ui/activity/TextEditorWebView.kt @@ -60,24 +60,24 @@ class TextEditorWebView : EditorWebView() { val editor = editorUtils.getEditor(user.get(), file.mimeType) if (editor != null && editor.id == "onlyoffice") { - getWebView().settings.userAgentString = generateOnlyOfficeUserAgent() + webView.settings.userAgentString = generateOnlyOfficeUserAgent() } - getWebView().addJavascriptInterface(MobileInterface(), "DirectEditingMobileInterface") + webView.addJavascriptInterface(MobileInterface(), "DirectEditingMobileInterface") if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) { WebSettingsCompat.setForceDarkStrategy( - getWebView().settings, + webView.settings, WebSettingsCompat.DARK_STRATEGY_WEB_THEME_DARKENING_ONLY ) } if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK) && PlatformThemeUtil.isDarkMode(this)) { - WebSettingsCompat.setForceDark(getWebView().settings, WebSettingsCompat.FORCE_DARK_ON) + WebSettingsCompat.setForceDark(webView.settings, WebSettingsCompat.FORCE_DARK_ON) } - getWebView().setDownloadListener { url, _, _, _, _ -> downloadFile(Uri.parse(url)) } + webView.setDownloadListener { url, _, _, _, _ -> downloadFile(Uri.parse(url)) } - loadUrl(intent.getStringExtra(ExternalSiteWebView.EXTRA_URL)) + loadUrl(null) } override fun loadUrl(url: String?) { diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java index fd07bf988e23..97796d4b681a 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java @@ -24,6 +24,7 @@ import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.ui.fragment.FileDetailActivitiesFragment; import com.owncloud.android.ui.fragment.FileDetailSharingFragment; +import com.owncloud.android.utils.EncryptionUtils; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; @@ -34,8 +35,8 @@ * File details pager adapter. */ public class FileDetailTabAdapter extends FragmentStatePagerAdapter { - private OCFile file; - private User user; + private final OCFile file; + private final User user; private FileDetailSharingFragment fileDetailSharingFragment; private FileDetailActivitiesFragment fileDetailActivitiesFragment; @@ -71,9 +72,15 @@ public FileDetailActivitiesFragment getFileDetailActivitiesFragment() { @Override public int getCount() { if (file.isEncrypted()) { - return 1; // sharing not allowed for encrypted files, thus only show first tab (activities) + if (EncryptionUtils.supportsSecureFiledrop(file, user)) { + return 2; + } else { + // sharing not allowed for encrypted files, thus only show first tab (activities) + return 1; + } } else { - return 2; // show activities and sharing tab + // unencrypted files/folders + return 2; } } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt index 624532c8699d..2a7945ba36a5 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt @@ -195,14 +195,14 @@ class GalleryAdapter( if (finalSortedList.isEmpty()) { photoFragment.setEmptyListMessage(SearchType.GALLERY_SEARCH) - } - - files = finalSortedList - .groupBy { firstOfMonth(it.modificationTimestamp) } - .map { GalleryItems(it.key, transformToRows(it.value)) } - .sortedBy { it.date }.reversed() + } else { + files = finalSortedList + .groupBy { firstOfMonth(it.modificationTimestamp) } + .map { GalleryItems(it.key, transformToRows(it.value)) } + .sortedBy { it.date }.reversed() - Handler(Looper.getMainLooper()).post { notifyDataSetChanged() } + Handler(Looper.getMainLooper()).post { notifyDataSetChanged() } + } } private fun transformToRows(list: List): List { diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java b/app/src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java index 4c03f82e3d7f..25d13ccd2ea6 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/LinkShareViewHolder.java @@ -76,22 +76,28 @@ public void bind(OCShare publicShare, ShareeListAdapterListener listener) { String text = String.format(context.getString(R.string.share_link_with_label), publicShare.getLabel()); binding.name.setText(text); } else { - binding.name.setText(R.string.share_link); + if (SharingMenuHelper.isSecureFileDrop(publicShare)) { + binding.name.setText(context.getResources().getString(R.string.share_permission_secure_file_drop)); + } else { + binding.name.setText(R.string.share_link); + } } viewThemeUtils.platform.colorImageViewBackgroundAndIcon(binding.icon); } String permissionName = SharingMenuHelper.getPermissionName(context, publicShare); - setPermissionName(permissionName); + setPermissionName(publicShare, permissionName); binding.copyLink.setOnClickListener(v -> listener.copyLink(publicShare)); binding.overflowMenu.setOnClickListener(v -> listener.showSharingMenuActionSheet(publicShare)); - binding.shareByLinkContainer.setOnClickListener(v -> listener.showPermissionsDialog(publicShare)); + if (!SharingMenuHelper.isSecureFileDrop(publicShare)) { + binding.shareByLinkContainer.setOnClickListener(v -> listener.showPermissionsDialog(publicShare)); + } } - private void setPermissionName(String permissionName) { - if (!TextUtils.isEmpty(permissionName)) { + private void setPermissionName(OCShare publicShare, String permissionName) { + if (!TextUtils.isEmpty(permissionName) && !SharingMenuHelper.isSecureFileDrop(publicShare)) { binding.permissionName.setText(permissionName); binding.permissionName.setVisibility(View.VISIBLE); viewThemeUtils.androidx.colorPrimaryTextViewElement(binding.permissionName); diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/NewSecureFileDropViewHolder.kt b/app/src/main/java/com/owncloud/android/ui/adapter/NewSecureFileDropViewHolder.kt new file mode 100644 index 000000000000..117c2f5a45f7 --- /dev/null +++ b/app/src/main/java/com/owncloud/android/ui/adapter/NewSecureFileDropViewHolder.kt @@ -0,0 +1,38 @@ +/* + * + * Nextcloud Android client application + * + * @author Tobias Kaminsky + * Copyright (C) 2020 Tobias Kaminsky + * Copyright (C) 2020 Nextcloud GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ +package com.owncloud.android.ui.adapter + +import android.view.View +import androidx.recyclerview.widget.RecyclerView +import com.owncloud.android.databinding.FileDetailsShareSecureFileDropAddNewItemBinding + +internal class NewSecureFileDropViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + private var binding: FileDetailsShareSecureFileDropAddNewItemBinding? = null + + constructor(binding: FileDetailsShareSecureFileDropAddNewItemBinding) : this(binding.root) { + this.binding = binding + } + + fun bind(listener: ShareeListAdapterListener) { + binding!!.addNewSecureFileDrop.setOnClickListener { v: View? -> listener.createSecureFileDrop() } + } +} diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 592aba8e61ab..d71566d5a538 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -3,10 +3,11 @@ * * @author Tobias Kaminsky * @author Chris Narkiewicz - * + * @author TSI-mc * Copyright (C) 2018 Tobias Kaminsky * Copyright (C) 2018 Nextcloud * Copyright (C) 2020 Chris Narkiewicz + * Copyright (C) 2023 TSI-mc * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE @@ -206,9 +207,9 @@ public int getItemPosition(@NonNull OCFile file) { return position; } - public void setFavoriteAttributeForItemID(String fileId, boolean favorite, boolean removeFromList) { + public void setFavoriteAttributeForItemID(String remotePath, boolean favorite, boolean removeFromList) { for (OCFile file : mFiles) { - if (file.getRemoteId().equals(fileId)) { + if (file.getRemotePath().equals(remotePath)) { file.setFavorite(favorite); if (removeFromList) { @@ -220,7 +221,7 @@ public void setFavoriteAttributeForItemID(String fileId, boolean favorite, boole } for (OCFile file : mFilesAll) { - if (file.getRemoteId().equals(fileId)) { + if (file.getRemotePath().equals(remotePath)) { file.setFavorite(favorite); mStorageManager.saveFile(file); @@ -234,7 +235,13 @@ public void setFavoriteAttributeForItemID(String fileId, boolean favorite, boole } FileSortOrder sortOrder = preferences.getSortOrderByFolder(currentDirectory); - mFiles = sortOrder.sortCloudFiles(mFiles); + if (searchType == SearchType.SHARED_FILTER) { + Collections.sort(mFiles, + (o1, o2) -> Long.compare(o2.getFirstShareTimestamp(), o1.getFirstShareTimestamp()) + ); + } else { + mFiles = sortOrder.sortCloudFiles(mFiles); + } new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged); } @@ -788,7 +795,10 @@ private void parseVirtuals(List objects, SearchType searchType) { } if (!onlyMedia || MimeTypeUtil.isImage(ocFile) || MimeTypeUtil.isVideo(ocFile)) { - mFiles.add(ocFile); + //handling duplicates for favorites section + if (mFiles.isEmpty() || !mFiles.contains(ocFile)) { + mFiles.add(ocFile); + } } ContentValues cv = new ContentValues(); @@ -977,4 +987,27 @@ public int getFilesCount() { public void notifyItemChanged(@NonNull OCFile file) { notifyItemChanged(getItemPosition(file)); } + + public void replaceFileByRemotePath(@NonNull OCFile newFile, boolean notify) { + final String remotePath = newFile.getRemotePath(); + for (OCFile file : mFiles) { + if (file.getRemotePath().equals(remotePath)) { + final int index = mFiles.indexOf(file); + mFiles.set(index, newFile); + break; + } + } + + for (OCFile file : mFilesAll) { + if (file.getRemotePath().equals(remotePath)) { + final int index = mFilesAll.indexOf(file); + mFilesAll.set(index, newFile); + break; + } + } + + if (notify) { + notifyItemChanged(getItemPosition(newFile)); + } + } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt index 3cd53bdcd748..a5f44e1a9587 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt @@ -45,6 +45,7 @@ import com.owncloud.android.ui.fragment.SearchType import com.owncloud.android.ui.interfaces.OCFileListFragmentInterface import com.owncloud.android.utils.BitmapUtils import com.owncloud.android.utils.DisplayUtils +import com.owncloud.android.utils.EncryptionUtils import com.owncloud.android.utils.MimeTypeUtil import com.owncloud.android.utils.theme.ViewThemeUtils @@ -237,7 +238,11 @@ class OCFileListDelegate( bindGridMetadataViews(file, gridViewHolder) // shares - val shouldHideShare = gridView || hideItemOptions || file.isFolder && !file.canReshare() || file.isEncrypted || + val shouldHideShare = gridView || + hideItemOptions || + file.isFolder && !file.canReshare() || + !file.isFolder && file.isEncrypted || + file.isEncrypted && !EncryptionUtils.supportsSecureFiledrop(file, user) || searchType == SearchType.FAVORITE_SEARCH if (shouldHideShare) { gridViewHolder.shared.visibility = View.GONE diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java index d6a8e303d061..615f28bad81f 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapter.java @@ -35,6 +35,7 @@ import com.owncloud.android.databinding.FileDetailsShareInternalShareLinkBinding; import com.owncloud.android.databinding.FileDetailsShareLinkShareItemBinding; import com.owncloud.android.databinding.FileDetailsSharePublicLinkAddNewItemBinding; +import com.owncloud.android.databinding.FileDetailsShareSecureFileDropAddNewItemBinding; import com.owncloud.android.databinding.FileDetailsShareShareItemBinding; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; @@ -62,19 +63,22 @@ public class ShareeListAdapter extends RecyclerView.Adapter shares, ShareeListAdapterListener listener, String userId, User user, - final ViewThemeUtils viewThemeUtils) { + final ViewThemeUtils viewThemeUtils, + boolean encrypted) { this.fileActivity = fileActivity; this.shares = shares; this.listener = listener; this.userId = userId; this.user = user; this.viewThemeUtils = viewThemeUtils; + this.encrypted = encrypted; avatarRadiusDimension = fileActivity.getResources().getDimension(R.dimen.user_icon_radius); @@ -99,11 +103,19 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int fileActivity, viewThemeUtils); case NEW_PUBLIC_LINK: - return new NewLinkShareViewHolder( - FileDetailsSharePublicLinkAddNewItemBinding.inflate(LayoutInflater.from(fileActivity), - parent, - false) - ); + if (encrypted) { + return new NewSecureFileDropViewHolder( + FileDetailsShareSecureFileDropAddNewItemBinding.inflate(LayoutInflater.from(fileActivity), + parent, + false) + ); + } else { + return new NewLinkShareViewHolder( + FileDetailsSharePublicLinkAddNewItemBinding.inflate(LayoutInflater.from(fileActivity), + parent, + false) + ); + } case INTERNAL: return new InternalShareViewHolder( FileDetailsShareInternalShareLinkBinding.inflate(LayoutInflater.from(fileActivity), parent, false), @@ -135,6 +147,9 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi } else if (holder instanceof NewLinkShareViewHolder) { NewLinkShareViewHolder newLinkShareViewHolder = (NewLinkShareViewHolder) holder; newLinkShareViewHolder.bind(listener); + } else if (holder instanceof NewSecureFileDropViewHolder) { + NewSecureFileDropViewHolder newSecureFileDropViewHolder = (NewSecureFileDropViewHolder) holder; + newSecureFileDropViewHolder.bind(listener); } else { ShareViewHolder userViewHolder = (ShareViewHolder) holder; userViewHolder.bind(share, listener, this, userId, avatarRadiusDimension); @@ -202,9 +217,11 @@ protected final void sortShares() { shares.addAll(users); // add internal share link at end - final OCShare ocShare = new OCShare(); - ocShare.setShareType(ShareType.INTERNAL); - shares.add(ocShare); + if (!encrypted) { + final OCShare ocShare = new OCShare(); + ocShare.setShareType(ShareType.INTERNAL); + shares.add(ocShare); + } } public List getShares() { diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapterListener.java b/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapterListener.java index 4e3c51496522..5fc70e8f4e7d 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapterListener.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/ShareeListAdapterListener.java @@ -36,6 +36,8 @@ public interface ShareeListAdapterListener { void createPublicShareLink(); + void createSecureFileDrop(); + void requestPasswordForShare(OCShare share, boolean askForPassword); void showPermissionsDialog(OCShare share); diff --git a/app/src/main/java/com/owncloud/android/ui/asynctasks/GallerySearchTask.java b/app/src/main/java/com/owncloud/android/ui/asynctasks/GallerySearchTask.java index 830273d97e78..383a5be1e009 100644 --- a/app/src/main/java/com/owncloud/android/ui/asynctasks/GallerySearchTask.java +++ b/app/src/main/java/com/owncloud/android/ui/asynctasks/GallerySearchTask.java @@ -24,6 +24,7 @@ import android.os.AsyncTask; import com.nextcloud.client.account.User; +import com.owncloud.android.BuildConfig; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.lib.common.operations.RemoteOperationResult; @@ -37,10 +38,12 @@ import com.owncloud.android.utils.FileStorageUtils; import java.lang.ref.WeakReference; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Map; import androidx.lifecycle.Lifecycle; @@ -51,19 +54,16 @@ public class GallerySearchTask extends AsyncTask photoFragmentWeakReference; private final FileDataStorageManager storageManager; private final int limit; - private final long startDate; private final long endDate; public GallerySearchTask(GalleryFragment photoFragment, User user, FileDataStorageManager storageManager, - long startDate, long endDate, int limit) { this.user = user; this.photoFragmentWeakReference = new WeakReference<>(photoFragment); this.storageManager = storageManager; - this.startDate = startDate; this.endDate = endDate; this.limit = limit; } @@ -85,25 +85,26 @@ protected GallerySearchTask.Result doInBackground(Void... voids) { false, ocCapability); - searchRemoteOperation.setLimit(limit); - searchRemoteOperation.setStartDate(startDate); searchRemoteOperation.setEndDate(endDate); + //workaround to keep SearchRemoteOperation functioning correctly even if we don't actively use startDate + searchRemoteOperation.setStartDate(0L); + if (photoFragment.getContext() != null) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); Log_OC.d(this, - "Start gallery search with " + new Date(startDate * 1000L) + - " - " + new Date(endDate * 1000L) + - " with limit: " + limit); - + "Start gallery search since " + + dateFormat.format(new Date(endDate * 1000L)) + + " with limit: " + + limit); RemoteOperationResult result = searchRemoteOperation.execute(user, photoFragment.getContext()); if (result.isSuccess()) { - boolean emptySearch = parseMedia(startDate, endDate, result.getData()); long lastTimeStamp = findLastTimestamp(result.getData()); - - + //query the local storage based on the lastTimeStamp retrieved, not by 1970-01-01 + boolean emptySearch = parseMedia(lastTimeStamp, this.endDate, result.getData()); return new Result(result.isSuccess(), emptySearch, lastTimeStamp); } else { return new Result(false, false, -1); @@ -118,15 +119,7 @@ protected GallerySearchTask.Result doInBackground(Void... voids) { protected void onPostExecute(GallerySearchTask.Result result) { if (photoFragmentWeakReference.get() != null) { GalleryFragment photoFragment = photoFragmentWeakReference.get(); - - photoFragment.setLoading(false); photoFragment.searchCompleted(result.emptySearch, result.lastTimestamp); - - if (result.success && photoFragment.getLifecycle().getCurrentState().isAtLeast(Lifecycle.State.RESUMED)) { - photoFragment.showAllGalleryItems(); - } else { - photoFragment.setEmptyListMessage(SearchType.GALLERY_SEARCH); - } } } @@ -142,56 +135,78 @@ private long findLastTimestamp(ArrayList remoteFiles) { } private boolean parseMedia(long startDate, long endDate, List remoteFiles) { - // retrieve all between startDate and endDate - Map localFilesMap = RefreshFolderOperation.prefillLocalFilesMap(null, - storageManager.getGalleryItems(startDate * 1000L, - endDate * 1000L)); - List filesToAdd = new ArrayList<>(); - List filesToUpdate = new ArrayList<>(); - - OCFile localFile; + + List localFiles = storageManager.getGalleryItems(startDate * 1000L, endDate * 1000L); + + if (BuildConfig.DEBUG) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + Log_OC.d(this, + "parseMedia - start: " + + dateFormat.format(new Date(startDate * 1000L)) + + " - " + + dateFormat.format(new Date(endDate * 1000L))); + + for (OCFile localFile : localFiles) { + Log_OC.d(this, + "local file: modified: " + + dateFormat.format(new Date(localFile.getModificationTimestamp())) + + " path: " + + localFile.getRemotePath()); + } + } + + Map localFilesMap = RefreshFolderOperation.prefillLocalFilesMap(null, localFiles); + + long filesAdded = 0, filesUpdated = 0, filesDeleted = 0, unchangedFiles = 0; + for (Object file : remoteFiles) { OCFile ocFile = FileStorageUtils.fillOCFile((RemoteFile) file); - localFile = localFilesMap.remove(ocFile.getRemotePath()); + if (BuildConfig.DEBUG) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + Log_OC.d(this, + "remote file: modified: " + + dateFormat.format(new Date(ocFile.getModificationTimestamp())) + + " path: " + + ocFile.getRemotePath()); + } + + OCFile localFile = localFilesMap.remove(ocFile.getRemotePath()); if (localFile == null) { // add new file - filesToAdd.add(ocFile); + storageManager.saveFile(ocFile); + filesAdded++; } else if (!localFile.getEtag().equals(ocFile.getEtag())) { // update file ocFile.setLastSyncDateForData(System.currentTimeMillis()); - filesToUpdate.add(ocFile); + storageManager.saveFile(ocFile); + filesUpdated++; + } else { + unchangedFiles++; } } - // add new files - for (OCFile file : filesToAdd) { - storageManager.saveFile(file); - } - - // update existing files - for (OCFile file : filesToUpdate) { - storageManager.saveFile(file); - } - // existing files to remove + filesDeleted = localFilesMap.values().size(); + for (OCFile file : localFilesMap.values()) { + if (BuildConfig.DEBUG) { + Log_OC.d(this, "Gallery Sync: File deleted " + file.getRemotePath()); + } + storageManager.removeFile(file, true, true); } - Log_OC.d(this, "Gallery search result:" + - " new: " + filesToAdd.size() + - " updated: " + filesToUpdate.size() + - " deleted: " + localFilesMap.size()); - - return didNotFindNewResults(filesToAdd, filesToUpdate, localFilesMap.values()); - } - - private boolean didNotFindNewResults(List filesToAdd, - List filesToUpdate, - Collection filesToRemove) { - return filesToAdd.isEmpty() && filesToUpdate.isEmpty() && filesToRemove.isEmpty(); + if (BuildConfig.DEBUG) { + Log_OC.d(this, "Gallery search result:" + + " new: " + filesAdded + + " updated: " + filesUpdated + + " deleted: " + filesDeleted + + " unchanged: " + unchangedFiles); + } + final long totalFiles = filesAdded + filesUpdated + filesDeleted + unchangedFiles; + return totalFiles <= 0; } public static class Result { @@ -205,4 +220,4 @@ public Result(boolean success, boolean emptySearch, long lastTimestamp) { this.lastTimestamp = lastTimestamp; } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java index f78292c4ff57..c92ca58c85b9 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseRichDocumentsTemplateDialogFragment.java @@ -3,8 +3,10 @@ * Nextcloud Android client application * * @author Tobias Kaminsky + * @author TSI-mc * Copyright (C) 2019 Tobias Kaminsky * Copyright (C) 2019 Nextcloud GmbH + * Copyright (C) 2023 TSI-mc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by @@ -64,6 +66,7 @@ import java.lang.ref.WeakReference; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Set; import javax.inject.Inject; @@ -85,6 +88,8 @@ public class ChooseRichDocumentsTemplateDialogFragment extends DialogFragment im private static final String DOT = "."; public static final int SINGLE_TEMPLATE = 1; + private Set fileNames; + @Inject CurrentAccountProvider currentAccount; @Inject ClientFactory clientFactory; @Inject ViewThemeUtils viewThemeUtils; @@ -155,7 +160,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { parentFolder = arguments.getParcelable(ARG_PARENT_FOLDER); List folderContent = fileDataStorageManager.getFolderContent(parentFolder, false); - Set fileNames = Sets.newHashSetWithExpectedSize(folderContent.size()); + fileNames = Sets.newHashSetWithExpectedSize(folderContent.size()); for (OCFile file : folderContent) { fileNames.add(file.getFileName()); @@ -187,31 +192,14 @@ public void beforeTextChanged(CharSequence s, int start, int count, int after) { } - /** - * When user enters an already taken file name, a message is shown. Otherwise, the - * message is ensured to be hidden. - */ @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - String newFileName = ""; - if (binding.filename.getText() != null) { - newFileName = binding.filename.getText().toString().trim(); - } - - if (fileNames.contains(newFileName)) { - binding.filenameContainer.setError(getText(R.string.file_already_exists)); - positiveButton.setEnabled(false); - } else if (binding.filenameContainer.getError() != null) { - binding.filenameContainer.setError(null); - // Called to remove extra padding - binding.filenameContainer.setErrorEnabled(false); - positiveButton.setEnabled(true); - } + // not needed } @Override public void afterTextChanged(Editable s) { - + checkEnablingCreateButton(); } }); @@ -296,11 +284,28 @@ private void prefillFilenameIfEmpty(Template template) { } private void checkEnablingCreateButton() { - Template selectedTemplate = adapter.getSelectedTemplate(); - String name = binding.filename.getText().toString(); - - positiveButton.setEnabled(selectedTemplate != null && !name.isEmpty() && - !name.equalsIgnoreCase(DOT + selectedTemplate.getExtension())); + if (positiveButton != null) { + Template selectedTemplate = adapter.getSelectedTemplate(); + String name = Objects.requireNonNull(binding.filename.getText()).toString(); + boolean isNameJustExtension = selectedTemplate != null && name.equalsIgnoreCase( + DOT + selectedTemplate.getExtension()); + boolean isNameEmpty = name.isEmpty() || isNameJustExtension; + boolean state = selectedTemplate != null && !isNameEmpty && !fileNames.contains(name); + + positiveButton.setEnabled(selectedTemplate != null && !name.isEmpty() && + !name.equalsIgnoreCase(DOT + selectedTemplate.getExtension())); + positiveButton.setEnabled(state); + positiveButton.setClickable(state); + binding.filenameContainer.setErrorEnabled(!state); + + if (!state) { + if (isNameEmpty) { + binding.filenameContainer.setError(getText(R.string.filename_empty)); + } else { + binding.filenameContainer.setError(getText(R.string.file_already_exists)); + } + } + } } private static class CreateFileFromTemplateTask extends AsyncTask { diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt index 9262cb706fcf..9b61a2061b0d 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ChooseTemplateDialogFragment.kt @@ -3,10 +3,12 @@ * * @author Tobias Kaminsky * @author Chris Narkiewicz + * @author TSI-mc * * Copyright (C) 2018 Tobias Kaminsky * Copyright (C) 2018 Nextcloud GmbH. * Copyright (C) 2019 Chris Narkiewicz + * Copyright (C) 20223TSI-mc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -327,7 +329,7 @@ class ChooseTemplateDialogFragment : DialogFragment(), View.OnClickListener, Tem val fragment = chooseTemplateDialogFragmentWeakReference.get() if (fragment != null && fragment.isAdded) { if (url.isEmpty()) { - DisplayUtils.showSnackMessage(fragment.binding.list, "Error creating file from template") + DisplayUtils.showSnackMessage(fragment.binding.list, R.string.error_creating_file_from_template) } else { val editorWebView = Intent(MainApp.getAppContext(), TextEditorWebView::class.java) editorWebView.putExtra(ExternalSiteWebView.EXTRA_TITLE, "Text") diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java b/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java index d2783447d031..921219106661 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java @@ -45,6 +45,7 @@ import com.owncloud.android.utils.theme.ViewThemeUtils; import java.util.List; +import java.util.Objects; import java.util.Set; import javax.inject.Inject; @@ -194,19 +195,19 @@ public void onClick(DialogInterface dialog, int which) { .getText().toString().trim(); if (TextUtils.isEmpty(newFolderName)) { - DisplayUtils.showSnackMessage(getActivity(), R.string.filename_empty); + DisplayUtils.showSnackMessage(requireActivity(), R.string.filename_empty); return; } if (!FileUtils.isValidName(newFolderName)) { - DisplayUtils.showSnackMessage(getActivity(), R.string.filename_forbidden_charaters_from_server); + DisplayUtils.showSnackMessage(requireActivity(), R.string.filename_forbidden_charaters_from_server); return; } String path = mParentFolder.getDecryptedRemotePath() + newFolderName + OCFile.PATH_SEPARATOR; - ((ComponentsGetter) getActivity()).getFileOperationsHelper().createFolder(path); + ((ComponentsGetter) requireActivity()).getFileOperationsHelper().createFolder(path); } } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java b/app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java index c991646b1544..5f3551eeccad 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java +++ b/app/src/main/java/com/owncloud/android/ui/dialog/SendShareDialog.java @@ -163,7 +163,7 @@ public View onCreateView(@NonNull LayoutInflater inflater, List sendButtonDataList = setupSendButtonData(sendIntent); - if ("off".equalsIgnoreCase(getContext().getString(R.string.send_files_to_other_apps))) { + if ("off".equalsIgnoreCase(requireContext().getString(R.string.send_files_to_other_apps))) { sharePeopleText.setVisibility(View.GONE); } @@ -184,13 +184,13 @@ public void onStart() { private void shareByLink() { if (file.isSharedViaLink()) { - ((FileActivity) getActivity()).getFileOperationsHelper().getFileWithLink(file, viewThemeUtils); + ((FileActivity) requireActivity()).getFileOperationsHelper().getFileWithLink(file, viewThemeUtils); } else if (sharingPublicPasswordEnforced || sharingPublicAskForPassword) { // password enforced by server, request to the user before trying to create requestPasswordForShareViaLink(); } else { // create without password if not enforced by server or we don't know if enforced; - ((FileActivity) getActivity()).getFileOperationsHelper().shareFileViaPublicShare(file, null); + ((FileActivity) requireActivity()).getFileOperationsHelper().shareFileViaPublicShare(file, null); } this.dismiss(); @@ -235,11 +235,11 @@ private SendButtonAdapter.ClickListener setupSendButtonClickListener(Intent send // Obtain the file if (file.isDown()) { sendIntent.setComponent(new ComponentName(packageName, activityName)); - getActivity().startActivity(Intent.createChooser(sendIntent, getString(R.string.send))); + requireActivity().startActivity(Intent.createChooser(sendIntent, getString(R.string.send))); } else { // Download the file Log_OC.d(TAG, file.getRemotePath() + ": File must be downloaded"); - ((SendShareDialog.SendShareDialogDownloader) getActivity()).downloadFile(file, packageName, - activityName); + ((SendShareDialog.SendShareDialogDownloader) requireActivity()) + .downloadFile(file, packageName, activityName); } } diff --git a/app/src/main/java/com/owncloud/android/ui/events/FavoriteEvent.java b/app/src/main/java/com/owncloud/android/ui/events/FavoriteEvent.java index 490db2ccbf37..82a74eaf1114 100644 --- a/app/src/main/java/com/owncloud/android/ui/events/FavoriteEvent.java +++ b/app/src/main/java/com/owncloud/android/ui/events/FavoriteEvent.java @@ -25,11 +25,9 @@ public class FavoriteEvent { public final String remotePath; public final boolean shouldFavorite; - public final String remoteId; - public FavoriteEvent(String remotePath, boolean shouldFavorite, String remoteId) { + public FavoriteEvent(String remotePath, boolean shouldFavorite) { this.remotePath = remotePath; this.shouldFavorite = shouldFavorite; - this.remoteId = remoteId; } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java index 4377b02b02b0..52e74cf3abaa 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FeatureFragment.java @@ -14,6 +14,7 @@ import android.widget.LinearLayout; import android.widget.TextView; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; import com.nextcloud.client.di.Injectable; import com.owncloud.android.R; import com.owncloud.android.features.FeatureItem; @@ -29,7 +30,8 @@ public class FeatureFragment extends Fragment implements Injectable { private FeatureItem item; - @Inject ViewThemeUtils viewThemeUtils; + @Inject ViewThemeUtils.Factory viewThemeUtilsFactory; + private ViewThemeUtils viewThemeUtils; static public FeatureFragment newInstance(FeatureItem item) { FeatureFragment f = new FeatureFragment(); @@ -41,6 +43,7 @@ static public FeatureFragment newInstance(FeatureItem item) { @Override public void onCreate(@Nullable Bundle savedInstanceState) { + viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground(); super.onCreate(savedInstanceState); item = getArguments() != null ? (FeatureItem) getArguments().getParcelable("feature") : null; } @@ -51,18 +54,19 @@ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.whats_new_element, container, false); - int fontColor = getResources().getColor(R.color.login_text_color); ImageView whatsNewImage = view.findViewById(R.id.whatsNewImage); if (item.shouldShowImage()) { final Drawable image = ResourcesCompat.getDrawable(getResources(), item.getImage(), null); - whatsNewImage.setImageDrawable(viewThemeUtils.platform.colorDrawable(image, fontColor)); + if (image != null) { + whatsNewImage.setImageDrawable(viewThemeUtils.platform.tintDrawable(requireContext(), image, ColorRole.ON_PRIMARY)); + } } TextView whatsNewTitle = view.findViewById(R.id.whatsNewTitle); if (item.shouldShowTitleText()) { whatsNewTitle.setText(item.getTitleText()); - whatsNewTitle.setTextColor(fontColor); + viewThemeUtils.platform.colorTextView(whatsNewTitle, ColorRole.ON_PRIMARY); whatsNewTitle.setVisibility(View.VISIBLE); } else { whatsNewTitle.setVisibility(View.GONE); @@ -74,14 +78,14 @@ public View onCreateView(@NonNull LayoutInflater inflater, String[] texts = getText(item.getContentText()).toString().split("\n"); for (String text : texts) { - TextView textView = generateTextView(text, getContext(), - item.shouldContentCentered(), fontColor, true); + TextView textView = generateTextView(text, requireContext(), + item.shouldContentCentered(), true); linearLayout.addView(textView); } } else { TextView textView = generateTextView(getText(item.getContentText()).toString(), - getContext(), item.shouldContentCentered(), fontColor, false); + requireContext(), item.shouldContentCentered(), false); linearLayout.addView(textView); } @@ -93,30 +97,30 @@ public View onCreateView(@NonNull LayoutInflater inflater, } private TextView generateTextView(String text, Context context, - boolean shouldContentCentered, int fontColor, + boolean shouldContentCentered, boolean showBulletPoints) { int standardMargin = context.getResources().getDimensionPixelSize(R.dimen.standard_margin); int doubleMargin = context.getResources() - .getDimensionPixelSize(R.dimen.standard_double_margin); + .getDimensionPixelSize(R.dimen.standard_double_margin); int zeroMargin = context.getResources().getDimensionPixelSize(R.dimen.zero); TextView textView = new TextView(context); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams( - ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.setMargins(doubleMargin, standardMargin, doubleMargin, zeroMargin); textView.setTextAppearance(context, R.style.NextcloudTextAppearanceMedium); textView.setLayoutParams(layoutParams); if (showBulletPoints) { - BulletSpan bulletSpan = new BulletSpan(standardMargin, fontColor); + BulletSpan bulletSpan = new BulletSpan(standardMargin); SpannableString spannableString = new SpannableString(text); spannableString.setSpan(bulletSpan, 0, spannableString.length(), - Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setText(spannableString); } else { textView.setText(text); } - textView.setTextColor(fontColor); + viewThemeUtils.platform.colorTextView(textView, ColorRole.ON_PRIMARY); if (!shouldContentCentered) { textView.setGravity(Gravity.START); diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 67731fb931cd..30c40cba4728 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -70,6 +70,7 @@ import com.owncloud.android.ui.dialog.RenameFileDialogFragment; import com.owncloud.android.ui.events.FavoriteEvent; import com.owncloud.android.utils.DisplayUtils; +import com.owncloud.android.utils.EncryptionUtils; import com.owncloud.android.utils.MimeTypeUtil; import com.owncloud.android.utils.theme.ViewThemeUtils; @@ -272,12 +273,14 @@ private void setupViewPager() { binding.tabLayout.removeAllTabs(); binding.tabLayout.addTab(binding.tabLayout.newTab().setText(R.string.drawer_item_activities).setIcon(R.drawable.ic_activity)); - viewThemeUtils.material.themeTabLayout(binding.tabLayout); - if (!getFile().isEncrypted()) { + + if (!getFile().isEncrypted() || EncryptionUtils.supportsSecureFiledrop(getFile(), user)) { binding.tabLayout.addTab(binding.tabLayout.newTab().setText(R.string.share_dialog_title).setIcon(R.drawable.shared_via_users)); } + viewThemeUtils.material.themeTabLayout(binding.tabLayout); + final FileDetailTabAdapter adapter = new FileDetailTabAdapter(getFragmentManager(), getFile(), user); binding.pager.setAdapter(adapter); binding.pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(binding.tabLayout) { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java index 401a23a2b371..cde91289f708 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java @@ -163,7 +163,8 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, this, userId, user, - viewThemeUtils)); + viewThemeUtils, + file.isEncrypted())); binding.sharesList.setLayoutManager(new LinearLayoutManager(getContext())); setupView(); @@ -193,18 +194,22 @@ public void onAttach(@NonNull Context context) { private void setupView() { setShareWithYou(); - FileDetailSharingFragmentHelper.setupSearchView( - (SearchManager) fileActivity.getSystemService(Context.SEARCH_SERVICE), - binding.searchView, - fileActivity.getComponentName()); - viewThemeUtils.androidx.themeToolbarSearchView(binding.searchView); - - if (file.canReshare()) { - binding.searchView.setQueryHint(getResources().getString(R.string.share_search)); + if (file.isEncrypted()) { + binding.searchContainer.setVisibility(View.GONE); } else { - binding.searchView.setQueryHint(getResources().getString(R.string.reshare_not_allowed)); - binding.searchView.setInputType(InputType.TYPE_NULL); - disableSearchView(binding.searchView); + FileDetailSharingFragmentHelper.setupSearchView( + (SearchManager) fileActivity.getSystemService(Context.SEARCH_SERVICE), + binding.searchView, + fileActivity.getComponentName()); + viewThemeUtils.androidx.themeToolbarSearchView(binding.searchView); + + if (file.canReshare()) { + binding.searchView.setQueryHint(getResources().getString(R.string.share_search)); + } else { + binding.searchView.setQueryHint(getResources().getString(R.string.reshare_not_allowed)); + binding.searchView.setInputType(InputType.TYPE_NULL); + disableSearchView(binding.searchView); + } } } @@ -277,6 +282,11 @@ public void createPublicShareLink() { } } + @Override + public void createSecureFileDrop() { + fileOperationsHelper.shareFolderViaSecureFileDrop(file); + } + private void showSendLinkTo(OCShare publicShare) { if (file.isSharedViaLink()) { if (TextUtils.isEmpty(publicShare.getShareLink())) { @@ -425,6 +435,19 @@ public void refreshSharesFromDB() { ShareType.PUBLIC_LINK, ""); +// +// boolean supportsSecureFiledrop = file.isEncrypted() && +// capabilities.getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_26); +// +// if (publicShares.isEmpty() && +// containsNoNewPublicShare(adapter.getShares()) && +// (!file.isEncrypted() || supportsSecureFiledrop)) { +// final OCShare ocShare = new OCShare(); +// ocShare.setShareType(ShareType.NEW_PUBLIC_LINK); +// publicShares.add(ocShare); +// } else { +// adapter.removeNewPublicShare(); +// } if (publicShares.isEmpty() && containsNoNewPublicShare(adapter.getShares())) { final OCShare ocShare = new OCShare(); diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java index aea75ca074b7..f71c25855380 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingMenuBottomSheetDialog.java @@ -31,6 +31,7 @@ import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.lib.resources.shares.ShareType; import com.owncloud.android.ui.activity.FileActivity; +import com.owncloud.android.ui.fragment.util.SharingMenuHelper; import com.owncloud.android.utils.theme.ViewThemeUtils; /** @@ -41,7 +42,6 @@ public class FileDetailSharingMenuBottomSheetDialog extends BottomSheetDialog { private final FileDetailsSharingMenuBottomSheetActions actions; private final OCShare ocShare; private final ViewThemeUtils viewThemeUtils; - public FileDetailSharingMenuBottomSheetDialog(FileActivity fileActivity, FileDetailsSharingMenuBottomSheetActions actions, OCShare ocShare, @@ -88,6 +88,11 @@ private void updateUI() { binding.menuShareAddAnotherLink.setVisibility(View.GONE); binding.menuShareSendLink.setVisibility(View.GONE); } + + if (SharingMenuHelper.isSecureFileDrop(ocShare)) { + binding.menuShareAdvancedPermissions.setVisibility(View.GONE); + binding.menuShareAddAnotherLink.setVisibility(View.GONE); + } } private void setupClickListener() { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java index 8e9c3edf75a0..8cde64eb1969 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java @@ -35,6 +35,7 @@ import android.view.View; import android.view.ViewGroup; +import com.owncloud.android.BuildConfig; import com.owncloud.android.R; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; @@ -65,10 +66,8 @@ public class GalleryFragment extends OCFileListFragment implements GalleryFragme private boolean photoSearchQueryRunning = false; private AsyncTask photoSearchTask; - private long startDate; private long endDate; - private long daySpan = 30; - private int limit = 300; + private int limit = 150; private GalleryAdapter mAdapter; private static final int SELECT_LOCATION_REQUEST_CODE = 212; @@ -80,6 +79,15 @@ public class GalleryFragment extends OCFileListFragment implements GalleryFragme private final int maxColumnSizePortrait = 2; private int columnSize; + protected void setPhotoSearchQueryRunning(boolean value) { + this.photoSearchQueryRunning = value; + this.setLoading(value); // link the photoSearchQueryRunning variable with UI progress loading + } + + public boolean isPhotoSearchQueryRunning() { + return this.photoSearchQueryRunning; + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -191,7 +199,7 @@ public CommonOCFileListAdapterInterface getCommonAdapter() { @Override public void onResume() { super.onResume(); - setLoading(photoSearchQueryRunning); + setLoading(this.isPhotoSearchQueryRunning()); final FragmentActivity activity = getActivity(); if (activity instanceof FileDisplayActivity) { FileDisplayActivity fileDisplayActivity = ((FileDisplayActivity) activity); @@ -218,50 +226,31 @@ private void handleSearchEvent() { } private void searchAndDisplay() { - // first: always search from now to -30 days - if (!photoSearchQueryRunning) { - photoSearchQueryRunning = true; - - startDate = (System.currentTimeMillis() / 1000) - 30 * 24 * 60 * 60; + if (!this.isPhotoSearchQueryRunning() && this.endDate <= 0) { + // fix an issue when the method is called after loading the gallery and pressing play on a movie (--> endDate <= 0) + // to avoid reloading the gallery, check if endDate has already a value which is not -1 or 0 (which generally means some kind of reset/init) endDate = System.currentTimeMillis() / 1000; - + this.setPhotoSearchQueryRunning(true); runGallerySearchTask(); } } - @SuppressLint("NotifyDataSetChanged") public void searchCompleted(boolean emptySearch, long lastTimeStamp) { - photoSearchQueryRunning = false; - mAdapter.notifyDataSetChanged(); + this.setPhotoSearchQueryRunning(false); - if (mAdapter.isEmpty()) { - setEmptyListMessage(SearchType.GALLERY_SEARCH); + if (lastTimeStamp > -1) { + endDate = lastTimeStamp; } - if (emptySearch && mAdapter.getItemCount() > 0) { - Log_OC.d(this, "End gallery search"); - return; - } - if (daySpan == 30) { - daySpan = 90; - } else if (daySpan == 90) { - daySpan = 180; - } else if (daySpan == 180) { - daySpan = 999; - } else if (daySpan == 999 && limit > 0) { - limit = -1; // no limit - } else { - Log_OC.d(this, "End gallery search"); - return; + if (mAdapter.isEmpty()) { + setEmptyListMessage(SearchType.GALLERY_SEARCH); } - if (lastTimeStamp > -1) { - endDate = lastTimeStamp; + if(!emptySearch) { + this.showAllGalleryItems(); } - startDate = endDate - (daySpan * 24 * 60 * 60); - - runGallerySearchTask(); + Log_OC.d(this, "End gallery search"); } @Override @@ -282,7 +271,7 @@ public void onCreateOptionsMenu(Menu menu, @NonNull MenuInflater inflater) { public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection - if (item.getItemId() == R.id.action_three_dot_icon && !photoSearchQueryRunning + if (item.getItemId() == R.id.action_three_dot_icon && !this.isPhotoSearchQueryRunning() && galleryFragmentBottomSheetDialog != null) { showBottomSheet(); return true; @@ -309,7 +298,9 @@ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent d } private void searchAndDisplayAfterChangingFolder() { - mAdapter.clear(); + //TODO: Fix folder change, it seems it doesn't work at all + this.endDate = System.currentTimeMillis() / 1000; + this.setPhotoSearchQueryRunning(true); runGallerySearchTask(); } @@ -318,46 +309,51 @@ private void runGallerySearchTask() { photoSearchTask = new GallerySearchTask(this, accountManager.getUser(), mContainerActivity.getStorageManager(), - startDate, endDate, limit) .execute(); } } - @Override - public boolean isLoading() { - return photoSearchQueryRunning; - } - private void loadMoreWhenEndReached(@NonNull RecyclerView recyclerView, int dy) { if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { GridLayoutManager gridLayoutManager = (GridLayoutManager) recyclerView.getLayoutManager(); // scroll down - if (dy > 0 && !photoSearchQueryRunning) { - int visibleItemCount = gridLayoutManager.getChildCount(); + if (dy > 0 && !this.isPhotoSearchQueryRunning()) { int totalItemCount = gridLayoutManager.getItemCount(); int lastVisibleItem = gridLayoutManager.findLastCompletelyVisibleItemPosition(); + int visibleItemCount = gridLayoutManager.getChildCount(); if (lastVisibleItem == RecyclerView.NO_POSITION) { return; } - if ((totalItemCount - visibleItemCount) <= (lastVisibleItem + MAX_ITEMS_PER_ROW) - && (totalItemCount - visibleItemCount) > 0) { - // Almost reached the end, continue to load new photos - OCFile lastFile = mAdapter.getItem(lastVisibleItem - 1); + OCFile lastFile = mAdapter.getItem(lastVisibleItem - 1); + if (lastFile == null) { + return; + } + long lastItemTimestamp = lastFile.getModificationTimestamp() / 1000; + + // if we have already older media in the gallery then retrieve file in chronological order to fill the gap + if (lastItemTimestamp < this.endDate) { - if (lastFile == null) { - return; + if (BuildConfig.DEBUG) { + Log_OC.d(this, "Gallery swipe: retrieve items to check the chronology"); } - daySpan = 30; - endDate = lastFile.getModificationTimestamp() / 1000; - startDate = endDate - (daySpan * 24 * 60 * 60); + this.setPhotoSearchQueryRunning(true); + runGallerySearchTask(); + } else if ((totalItemCount - visibleItemCount) <= (lastVisibleItem + MAX_ITEMS_PER_ROW) //no more files in the gallery, retrieve the next ones + && (totalItemCount - visibleItemCount) > 0) { + + if (BuildConfig.DEBUG) { + Log_OC.d(this, "Gallery swipe: retrieve items because end of gallery display"); + } - photoSearchQueryRunning = true; + // Almost reached the end, continue to load new photos + endDate = lastItemTimestamp; + this.setPhotoSearchQueryRunning(true); runGallerySearchTask(); } } @@ -366,7 +362,7 @@ private void loadMoreWhenEndReached(@NonNull RecyclerView recyclerView, int dy) @Override public void updateMediaContent(GalleryFragmentBottomSheetDialog.MediaState mediaState) { - showAllGalleryItems(); + showAllGalleryItems(); } @Override @@ -402,4 +398,4 @@ private void updateSubtitle(GalleryFragmentBottomSheetDialog.MediaState mediaSta protected void setGridViewColumns(float scaleFactor) { // do nothing } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java index 7b1726e98d33..d86dd12b323e 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -1605,7 +1605,8 @@ public void onMessageEvent(FavoriteEvent event) { if (remoteOperationResult.isSuccess()) { boolean removeFromList = currentSearchType == SearchType.FAVORITE_SEARCH && !event.shouldFavorite; - mAdapter.setFavoriteAttributeForItemID(event.remoteId, event.shouldFavorite, removeFromList); + setEmptyListMessage(SearchType.FAVORITE_SEARCH); + mAdapter.setFavoriteAttributeForItemID(event.remotePath, event.shouldFavorite, removeFromList); } } catch (ClientFactory.CreationException e) { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt b/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt index 102a400619d1..9ff9f5f7a5a0 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/SharedListFragment.kt @@ -101,6 +101,8 @@ class SharedListFragment : OCFileListFragment(), Injectable { isSharedWithSharee = partialFile.isSharedWithSharee sharees = partialFile.sharees } + adapter.replaceFileByRemotePath(savedFile, false) + savedFile } } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/util/GalleryFastScrollViewHelper.kt b/app/src/main/java/com/owncloud/android/ui/fragment/util/GalleryFastScrollViewHelper.kt index 4a971e604813..59d1bdbd43ea 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/util/GalleryFastScrollViewHelper.kt +++ b/app/src/main/java/com/owncloud/android/ui/fragment/util/GalleryFastScrollViewHelper.kt @@ -238,7 +238,7 @@ class GalleryFastScrollViewHelper( return if (position == RecyclerView.NO_POSITION) { null } else { - popupTextProvider.getPopupText(position) + popupTextProvider.getPopupText(position).toString() } } diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java b/app/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java index 793971664dda..6e1ca9bb8f99 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/util/SharingMenuHelper.java @@ -122,11 +122,21 @@ public static boolean isFileDrop(OCShare share) { return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == CREATE_PERMISSION_FLAG; } + public static boolean isSecureFileDrop(OCShare share) { + if (share.getPermissions() == NO_PERMISSION) { + return false; + } + + return (share.getPermissions() & ~SHARE_PERMISSION_FLAG) == CREATE_PERMISSION_FLAG + READ_PERMISSION_FLAG; + } + public static String getPermissionName(Context context, OCShare share) { if (SharingMenuHelper.isUploadAndEditingAllowed(share)) { return context.getResources().getString(R.string.share_permission_can_edit); } else if (SharingMenuHelper.isReadOnly(share)) { return context.getResources().getString(R.string.share_permission_view_only); + } else if (SharingMenuHelper.isSecureFileDrop(share)) { + return context.getResources().getString(R.string.share_permission_secure_file_drop); } else if (SharingMenuHelper.isFileDrop(share)) { return context.getResources().getString(R.string.share_permission_file_drop); } diff --git a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java index e1baf6c70052..229d4786d986 100755 --- a/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java +++ b/app/src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java @@ -11,7 +11,7 @@ * Copyright (C) 2015 ownCloud Inc. * Copyright (C) 2018 Andy Scherzinger * Copyright (C) 2020 Chris Narkiewicz - * Copyright (C) 2021 TSI-mc + * Copyright (C) 2023 TSI-mc * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -500,6 +500,15 @@ public void shareFileViaPublicShare(OCFile file, String password) { } } + public void shareFolderViaSecureFileDrop(@NonNull OCFile file) { + fileActivity.showLoadingDialog(fileActivity.getString(R.string.wait_a_moment)); + Intent service = new Intent(fileActivity, OperationsService.class); + service.setAction(OperationsService.ACTION_CREATE_SECURE_FILE_DROP); + service.putExtra(OperationsService.EXTRA_ACCOUNT, fileActivity.getAccount()); + service.putExtra(OperationsService.EXTRA_REMOTE_PATH, file.getRemotePath()); + mWaitingForOpId = fileActivity.getOperationsServiceBinder().queueNewOperation(service); + } + public void getFileWithLink(@NonNull OCFile file, final ViewThemeUtils viewThemeUtils) { List shares = fileActivity.getStorageManager().getSharesByPathAndType(file.getRemotePath(), ShareType.PUBLIC_LINK, @@ -791,7 +800,9 @@ public void sendShareFile(OCFile file, boolean hideNcSharingOptions) { OCCapability capability = fileActivity.getStorageManager().getCapability(fileActivity.getAccount().name); SendShareDialog mSendShareDialog = SendShareDialog.newInstance(file, hideNcSharingOptions, capability); mSendShareDialog.setFileOperationsHelper(this); - mSendShareDialog.show(ft, "TAG_SEND_SHARE_DIALOG"); + if (fm.findFragmentByTag("TAG_SEND_SHARE_DIALOG") == null) { + mSendShareDialog.show(ft, "TAG_SEND_SHARE_DIALOG"); + } } public void sendFiles(Set files) { @@ -906,7 +917,7 @@ public void toggleFavoriteFiles(Collection files, boolean shouldBeFavori public void toggleFavoriteFile(OCFile file, boolean shouldBeFavorite) { if (file.isFavorite() != shouldBeFavorite) { - EventBus.getDefault().post(new FavoriteEvent(file.getRemotePath(), shouldBeFavorite, file.getRemoteId())); + EventBus.getDefault().post(new FavoriteEvent(file.getRemotePath(), shouldBeFavorite)); } } diff --git a/app/src/main/java/com/owncloud/android/ui/whatsnew/ProgressIndicator.java b/app/src/main/java/com/owncloud/android/ui/whatsnew/ProgressIndicator.java index 2ee02844ba68..ac8ac025604e 100644 --- a/app/src/main/java/com/owncloud/android/ui/whatsnew/ProgressIndicator.java +++ b/app/src/main/java/com/owncloud/android/ui/whatsnew/ProgressIndicator.java @@ -1,5 +1,5 @@ -/** - * Nextcloud Android client application +/* + * Nextcloud Android client application * * @author Bartosz Przybylski * Copyright (C) 2015 Bartosz Przybylski @@ -23,7 +23,6 @@ package com.owncloud.android.ui.whatsnew; import android.content.Context; -import android.graphics.PorterDuff; import android.graphics.drawable.TransitionDrawable; import android.util.AttributeSet; import android.view.Gravity; @@ -32,7 +31,12 @@ import android.widget.ImageView; import android.widget.LinearLayout; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; +import com.owncloud.android.MainApp; import com.owncloud.android.R; +import com.owncloud.android.utils.theme.ViewThemeUtils; + +import javax.inject.Inject; import androidx.core.content.res.ResourcesCompat; @@ -46,6 +50,9 @@ public class ProgressIndicator extends FrameLayout { protected int mNumberOfSteps = -1; protected int mCurrentStep = -1; + @Inject ViewThemeUtils.Factory viewThemeUtilsFactory; + private ViewThemeUtils viewThemeUtils; + public ProgressIndicator(Context context) { super(context); setup(); @@ -61,20 +68,18 @@ public ProgressIndicator(Context context, AttributeSet attrs, int defStyleAttr) setup(); } + public boolean hasNextStep() { return mNumberOfSteps > mCurrentStep; } public void setNumberOfSteps(int steps) { - int fontColor = getResources().getColor(R.color.login_text_color); mNumberOfSteps = steps; mDotsContainer.removeAllViews(); for (int i = 0; i < steps; ++i) { ImageView iv = new ImageView(getContext()); - iv.setImageDrawable(ResourcesCompat.getDrawable(getContext().getResources(), - R.drawable.whats_new_progress_transition, - null)); - iv.setColorFilter(fontColor, PorterDuff.Mode.SRC_ATOP); + iv.setImageDrawable(ResourcesCompat.getDrawable(getContext().getResources(), R.drawable.whats_new_progress_transition, null)); + viewThemeUtils.platform.colorImageView(iv, ColorRole.ON_PRIMARY); mDotsContainer.addView(iv); } animateToStep(1); @@ -86,18 +91,20 @@ public void animateToStep(int step) { } if (mCurrentStep != -1) { - ImageView prevDot = (ImageView) mDotsContainer.getChildAt(mCurrentStep-1); - TransitionDrawable transition = (TransitionDrawable)prevDot.getDrawable(); + ImageView prevDot = (ImageView) mDotsContainer.getChildAt(mCurrentStep - 1); + TransitionDrawable transition = (TransitionDrawable) prevDot.getDrawable(); transition.resetTransition(); } mCurrentStep = step; - ImageView dot = (ImageView)mDotsContainer.getChildAt(step-1); - TransitionDrawable transition = (TransitionDrawable)dot.getDrawable(); + ImageView dot = (ImageView) mDotsContainer.getChildAt(step - 1); + TransitionDrawable transition = (TransitionDrawable) dot.getDrawable(); transition.startTransition(500); } private void setup() { + MainApp.getAppComponent().inject(this); + viewThemeUtils = viewThemeUtilsFactory.withPrimaryAsBackground(); mDotsContainer = new LinearLayout(getContext()); mDotsContainer.setGravity(Gravity.CENTER); FrameLayout.LayoutParams params = generateDefaultLayoutParams(); diff --git a/app/src/main/java/com/owncloud/android/utils/EncryptionUtils.java b/app/src/main/java/com/owncloud/android/utils/EncryptionUtils.java index 7b3b535ac1e6..d215d3e542c6 100644 --- a/app/src/main/java/com/owncloud/android/utils/EncryptionUtils.java +++ b/app/src/main/java/com/owncloud/android/utils/EncryptionUtils.java @@ -44,6 +44,7 @@ import com.owncloud.android.lib.resources.e2ee.StoreMetadataRemoteOperation; import com.owncloud.android.lib.resources.e2ee.UnlockFileRemoteOperation; import com.owncloud.android.lib.resources.e2ee.UpdateMetadataRemoteOperation; +import com.owncloud.android.lib.resources.status.NextcloudVersion; import com.owncloud.android.operations.UploadException; import org.apache.commons.httpclient.HttpStatus; @@ -147,18 +148,22 @@ public static String serializeJSON(Object data) { * @return EncryptedFolderMetadata encrypted folder metadata */ public static EncryptedFolderMetadata encryptFolderMetadata(DecryptedFolderMetadata decryptedFolderMetadata, - String privateKey) - throws NoSuchAlgorithmException, InvalidKeyException, - InvalidAlgorithmParameterException, NoSuchPaddingException, BadPaddingException, - IllegalBlockSizeException, InvalidKeySpecException { + String privateKey + ) + throws NoSuchAlgorithmException, InvalidKeyException, + InvalidAlgorithmParameterException, NoSuchPaddingException, BadPaddingException, + IllegalBlockSizeException, InvalidKeySpecException { HashMap files = new HashMap<>(); + HashMap filesdrop = new HashMap<>(); EncryptedFolderMetadata encryptedFolderMetadata = new EncryptedFolderMetadata(decryptedFolderMetadata - .getMetadata(), files); + .getMetadata(), + files, + filesdrop); // Encrypt each file in "files" for (Map.Entry entry : decryptedFolderMetadata - .getFiles().entrySet()) { + .getFiles().entrySet()) { String key = entry.getKey(); DecryptedFolderMetadata.DecryptedFile decryptedFile = entry.getValue(); @@ -168,8 +173,8 @@ public static EncryptedFolderMetadata encryptFolderMetadata(DecryptedFolderMetad encryptedFile.setAuthenticationTag(decryptedFile.getAuthenticationTag()); byte[] decryptedMetadataKey = EncryptionUtils.decodeStringToBase64Bytes(EncryptionUtils.decryptStringAsymmetric( - decryptedFolderMetadata.getMetadata().getMetadataKeys().get(encryptedFile.getMetadataKey()), - privateKey)); + decryptedFolderMetadata.getMetadata().getMetadataKeys().get(encryptedFile.getMetadataKey()), + privateKey)); // encrypt String dataJson = EncryptionUtils.serializeJSON(decryptedFile.getEncrypted()); @@ -181,21 +186,42 @@ public static EncryptedFolderMetadata encryptFolderMetadata(DecryptedFolderMetad return encryptedFolderMetadata; } + @VisibleForTesting + public static void encryptFileDropFiles(DecryptedFolderMetadata decryptedFolderMetadata, EncryptedFolderMetadata encryptedFolderMetadata, String cert) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, CertificateException { + final Map filesdrop = encryptedFolderMetadata.getFiledrop(); + for (Map.Entry entry : decryptedFolderMetadata + .getFiledrop().entrySet()) { + String key = entry.getKey(); + DecryptedFolderMetadata.DecryptedFile decryptedFile = entry.getValue(); + + EncryptedFolderMetadata.EncryptedFile encryptedFile = new EncryptedFolderMetadata.EncryptedFile(); + encryptedFile.setInitializationVector(decryptedFile.getInitializationVector()); + encryptedFile.setMetadataKey(decryptedFile.getMetadataKey()); + encryptedFile.setAuthenticationTag(decryptedFile.getAuthenticationTag()); + + // encrypt + String dataJson = EncryptionUtils.serializeJSON(decryptedFile.getEncrypted()); + encryptedFile.setEncrypted(EncryptionUtils.encryptStringAsymmetric(dataJson, cert)); + + filesdrop.put(key, encryptedFile); + } + } + /* * decrypt folder metaData with private key */ public static DecryptedFolderMetadata decryptFolderMetaData(EncryptedFolderMetadata encryptedFolderMetadata, String privateKey) - throws NoSuchAlgorithmException, InvalidKeyException, - InvalidAlgorithmParameterException, NoSuchPaddingException, BadPaddingException, - IllegalBlockSizeException, InvalidKeySpecException { + throws NoSuchAlgorithmException, InvalidKeyException, + InvalidAlgorithmParameterException, NoSuchPaddingException, BadPaddingException, + IllegalBlockSizeException, InvalidKeySpecException { HashMap files = new HashMap<>(); DecryptedFolderMetadata decryptedFolderMetadata = new DecryptedFolderMetadata( - encryptedFolderMetadata.getMetadata(), files); + encryptedFolderMetadata.getMetadata(), files); for (Map.Entry entry : encryptedFolderMetadata - .getFiles().entrySet()) { + .getFiles().entrySet()) { String key = entry.getKey(); EncryptedFolderMetadata.EncryptedFile encryptedFile = entry.getValue(); @@ -205,18 +231,45 @@ public static DecryptedFolderMetadata decryptFolderMetaData(EncryptedFolderMetad decryptedFile.setAuthenticationTag(encryptedFile.getAuthenticationTag()); byte[] decryptedMetadataKey = EncryptionUtils.decodeStringToBase64Bytes( - EncryptionUtils.decryptStringAsymmetric(decryptedFolderMetadata.getMetadata() - .getMetadataKeys().get(encryptedFile.getMetadataKey()), privateKey)); + EncryptionUtils.decryptStringAsymmetric(decryptedFolderMetadata.getMetadata() + .getMetadataKeys().get(encryptedFile.getMetadataKey()), + privateKey)); // decrypt String dataJson = EncryptionUtils.decryptStringSymmetric(encryptedFile.getEncrypted(), decryptedMetadataKey); decryptedFile.setEncrypted(EncryptionUtils.deserializeJSON(dataJson, - new TypeToken() { - })); + new TypeToken() { + })); files.put(key, decryptedFile); } + Map fileDrop = encryptedFolderMetadata.getFiledrop(); + + if (fileDrop != null) { + for (Map.Entry entry : fileDrop.entrySet()) { + String key = entry.getKey(); + EncryptedFolderMetadata.EncryptedFile encryptedFile = entry.getValue(); + + DecryptedFolderMetadata.DecryptedFile decryptedFile = new DecryptedFolderMetadata.DecryptedFile(); + decryptedFile.setInitializationVector(encryptedFile.getInitializationVector()); + decryptedFile.setMetadataKey(encryptedFile.getMetadataKey()); + decryptedFile.setAuthenticationTag(encryptedFile.getAuthenticationTag()); + + // decrypt + String dataJson = EncryptionUtils.decryptStringAsymmetric(encryptedFile.getEncrypted(), privateKey); + + decryptedFile.setEncrypted(EncryptionUtils.deserializeJSON(dataJson, + new TypeToken() { + })); + + files.put(key, decryptedFile); + + // remove from filedrop + fileDrop.remove(key); + } + } + return decryptedFolderMetadata; } @@ -226,8 +279,10 @@ public static DecryptedFolderMetadata decryptFolderMetaData(EncryptedFolderMetad * @return decrypted metadata or null */ public static @Nullable - DecryptedFolderMetadata downloadFolderMetadata(OCFile folder, OwnCloudClient client, - Context context, User user) { + DecryptedFolderMetadata downloadFolderMetadata(OCFile folder, + OwnCloudClient client, + Context context, + User user) { RemoteOperationResult getMetadataOperationResult = new GetMetadataRemoteOperation(folder.getLocalId()) .execute(client); @@ -241,11 +296,48 @@ DecryptedFolderMetadata downloadFolderMetadata(OCFile folder, OwnCloudClient cli String privateKey = arbitraryDataProvider.getValue(user.getAccountName(), EncryptionUtils.PRIVATE_KEY); EncryptedFolderMetadata encryptedFolderMetadata = EncryptionUtils.deserializeJSON( - serializedEncryptedMetadata, new TypeToken() { - }); + serializedEncryptedMetadata, new TypeToken() { + }); try { - return EncryptionUtils.decryptFolderMetaData(encryptedFolderMetadata, privateKey); + int filesDropCountBefore = 0; + if (encryptedFolderMetadata.getFiledrop() != null) { + filesDropCountBefore = encryptedFolderMetadata.getFiledrop().size(); + } + DecryptedFolderMetadata decryptedFolderMetadata = EncryptionUtils.decryptFolderMetaData( + encryptedFolderMetadata, + privateKey); + + boolean transferredFiledrop = filesDropCountBefore > 0 && decryptedFolderMetadata.getFiles().size() == + encryptedFolderMetadata.getFiles().size() + filesDropCountBefore; + + if (transferredFiledrop) { + // lock folder + String token = EncryptionUtils.lockFolder(folder, client); + + // upload metadata + EncryptedFolderMetadata encryptedFolderMetadataNew = encryptFolderMetadata(decryptedFolderMetadata, + privateKey); + + String serializedFolderMetadata = EncryptionUtils.serializeJSON(encryptedFolderMetadataNew); + + EncryptionUtils.uploadMetadata(folder, + serializedFolderMetadata, + token, + client, + true); + + // unlock folder + RemoteOperationResult unlockFolderResult = EncryptionUtils.unlockFolder(folder, client, token); + + if (!unlockFolderResult.isSuccess()) { + Log_OC.e(TAG, unlockFolderResult.getMessage()); + + return null; + } + } + + return decryptedFolderMetadata; } catch (Exception e) { Log_OC.e(TAG, e.getMessage()); return null; @@ -287,13 +379,14 @@ public static byte[] decodeStringToBase64Bytes(String string) { /** * @param ocFile file do crypt * @param encryptionKeyBytes key, either from metadata or {@link EncryptionUtils#generateKey()} - * @param iv initialization vector, either from metadata or {@link EncryptionUtils#randomBytes(int)} + * @param iv initialization vector, either from metadata or + * {@link EncryptionUtils#randomBytes(int)} * @return encryptedFile with encryptedBytes and authenticationTag */ public static EncryptedFile encryptFile(OCFile ocFile, byte[] encryptionKeyBytes, byte[] iv) - throws NoSuchAlgorithmException, - InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, - BadPaddingException, IllegalBlockSizeException, IOException { + throws NoSuchAlgorithmException, + InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException, IOException { File file = new File(ocFile.getStoragePath()); return encryptFile(file, encryptionKeyBytes, iv); @@ -302,13 +395,14 @@ public static EncryptedFile encryptFile(OCFile ocFile, byte[] encryptionKeyBytes /** * @param file file do crypt * @param encryptionKeyBytes key, either from metadata or {@link EncryptionUtils#generateKey()} - * @param iv initialization vector, either from metadata or {@link EncryptionUtils#randomBytes(int)} + * @param iv initialization vector, either from metadata or + * {@link EncryptionUtils#randomBytes(int)} * @return encryptedFile with encryptedBytes and authenticationTag */ public static EncryptedFile encryptFile(File file, byte[] encryptionKeyBytes, byte[] iv) - throws NoSuchAlgorithmException, - InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, - BadPaddingException, IllegalBlockSizeException, IOException { + throws NoSuchAlgorithmException, + InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException, IOException { Cipher cipher = Cipher.getInstance(AES_CIPHER); @@ -323,7 +417,7 @@ public static EncryptedFile encryptFile(File file, byte[] encryptionKeyBytes, by byte[] cryptedBytes = cipher.doFinal(fileBytes); String authenticationTag = encodeBytesToBase64String(Arrays.copyOfRange(cryptedBytes, - cryptedBytes.length - (128 / 8), cryptedBytes.length)); + cryptedBytes.length - (128 / 8), cryptedBytes.length)); return new EncryptedFile(cryptedBytes, authenticationTag); } @@ -336,9 +430,9 @@ public static EncryptedFile encryptFile(File file, byte[] encryptionKeyBytes, by * @return decrypted byte[] */ public static byte[] decryptFile(File file, byte[] encryptionKeyBytes, byte[] iv, byte[] authenticationTag) - throws NoSuchAlgorithmException, - InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, - BadPaddingException, IllegalBlockSizeException, IOException { + throws NoSuchAlgorithmException, + InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException, IOException { Cipher cipher = Cipher.getInstance(AES_CIPHER); @@ -352,7 +446,7 @@ public static byte[] decryptFile(File file, byte[] encryptionKeyBytes, byte[] iv // check authentication tag byte[] extractedAuthenticationTag = Arrays.copyOfRange(fileBytes, - fileBytes.length - (128 / 8), fileBytes.length); + fileBytes.length - (128 / 8), fileBytes.length); if (!Arrays.equals(extractedAuthenticationTag, authenticationTag)) { throw new SecurityException("Tag not correct"); @@ -372,16 +466,16 @@ public EncryptedFile(byte[] encryptedBytes, String authenticationTag) { } /** - * Encrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding - * Asymmetric encryption, with private and public key + * Encrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding Asymmetric encryption, with private + * and public key * * @param string String to encrypt * @param cert contains public key in it * @return encrypted string */ public static String encryptStringAsymmetric(String string, String cert) - throws NoSuchAlgorithmException, - NoSuchPaddingException, InvalidKeyException, + throws NoSuchAlgorithmException, + NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, CertificateException { @@ -418,17 +512,17 @@ public static String encryptStringAsymmetric(String string, PublicKey publicKey) /** - * Decrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding - * Asymmetric encryption, with private and public key + * Decrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding Asymmetric encryption, with private + * and public key * * @param string string to decrypt * @param privateKeyString private key * @return decrypted string */ public static String decryptStringAsymmetric(String string, String privateKeyString) - throws NoSuchAlgorithmException, - NoSuchPaddingException, InvalidKeyException, - BadPaddingException, IllegalBlockSizeException, + throws NoSuchAlgorithmException, + NoSuchPaddingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException { Cipher cipher = Cipher.getInstance(RSA_CIPHER); @@ -513,17 +607,17 @@ private static String encryptStringSymmetric(String string, /** - * Decrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding - * Asymmetric encryption, with private and public key + * Decrypt string with RSA algorithm, ECB mode, OAEPWithSHA-256AndMGF1 padding Asymmetric encryption, with private + * and public key * * @param string string to decrypt * @param encryptionKeyBytes key from metadata * @return decrypted string */ public static String decryptStringSymmetric(String string, byte[] encryptionKeyBytes) - throws NoSuchAlgorithmException, - InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, - BadPaddingException, IllegalBlockSizeException { + throws NoSuchAlgorithmException, + InvalidAlgorithmParameterException, NoSuchPaddingException, InvalidKeyException, + BadPaddingException, IllegalBlockSizeException { Cipher cipher = Cipher.getInstance(AES_CIPHER); @@ -557,8 +651,8 @@ public static String decryptStringSymmetric(String string, byte[] encryptionKeyB * Encrypt private key with symmetric AES encryption, GCM mode mode and no padding * * @param privateKey byte64 encoded string representation of private key - * @param keyPhrase key used for encryption, e.g. 12 random words {@link EncryptionUtils#getRandomWords(int, - * Context)} + * @param keyPhrase key used for encryption, e.g. 12 random words + * {@link EncryptionUtils#getRandomWords(int, Context)} * @return encrypted string, bytes first encoded base64, IV separated with "|", then to string */ public static String encryptPrivateKey(String privateKey, String keyPhrase) @@ -619,8 +713,8 @@ private static String encryptPrivateKey(String privateKey, String keyPhrase, Str */ @SuppressFBWarnings("UCPM_USE_CHARACTER_PARAMETERIZED_METHOD") public static String decryptPrivateKey(String privateKey, String keyPhrase) throws NoSuchPaddingException, - NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, - IllegalBlockSizeException, InvalidKeySpecException, InvalidAlgorithmParameterException { + NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, + IllegalBlockSizeException, InvalidKeySpecException, InvalidAlgorithmParameterException { String[] strings; @@ -650,14 +744,14 @@ public static String decryptPrivateKey(String privateKey, String keyPhrase) thro String pemKey = decodeBase64BytesToString(decrypted); return pemKey.replaceAll("\n", "").replace("-----BEGIN PRIVATE KEY-----", "") - .replace("-----END PRIVATE KEY-----", ""); + .replace("-----END PRIVATE KEY-----", ""); } public static String privateKeyToPEM(PrivateKey privateKey) { String privateKeyString = encodeBytesToBase64String(privateKey.getEncoded()); return "-----BEGIN PRIVATE KEY-----\n" + privateKeyString.replaceAll("(.{65})", "$1\n") - + "\n-----END PRIVATE KEY-----"; + + "\n-----END PRIVATE KEY-----"; } /* @@ -884,4 +978,10 @@ public static boolean isMatchingKeys(KeyPair keyPair, String publicKeyString) th return modulusPrivate.compareTo(modulusPublic) == 0; } + + public static boolean supportsSecureFiledrop(OCFile file, User user) { + return file.isEncrypted() && + file.isFolder() && + user.getServer().getVersion().isNewerOrEqual(NextcloudVersion.nextcloud_26); + } } diff --git a/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java b/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java index 00032956e2eb..a53b6d99f35e 100644 --- a/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java +++ b/app/src/main/java/com/owncloud/android/utils/ErrorMessageAdapter.java @@ -324,9 +324,13 @@ String getMessageForDownloadFileOperation( new File(operation.getSavePath()).getName()); } else { - if (result.getCode() == ResultCode.FILE_NOT_FOUND) { - return res.getString(R.string.downloader_download_file_not_found); - + switch (result.getCode()) { + case FILE_NOT_FOUND: + return res.getString(R.string.downloader_download_file_not_found); + case CANNOT_CREATE_FILE: + return res.getString(R.string.download_cannot_create_file); + case INVALID_LOCAL_FILE_NAME: + return res.getString(R.string.download_download_invalid_local_file_name); } } return null; diff --git a/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java b/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java index ae44e5208dfe..bbe24d7f6224 100644 --- a/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java +++ b/app/src/main/java/com/owncloud/android/utils/FileStorageUtils.java @@ -466,7 +466,7 @@ public static boolean checkEncryptionStatus(OCFile file, FileDataStorageManager return true; } - while (!OCFile.ROOT_PATH.equals(file.getDecryptedRemotePath())) { + while (file != null && !OCFile.ROOT_PATH.equals(file.getDecryptedRemotePath())) { if (file.isEncrypted()) { return true; } diff --git a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java index f60568204e68..6ce1f69a05c5 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -1,7 +1,9 @@ /* * ownCloud Android client application *

+ * @author TSI-mc * Copyright (C) 2016 ownCloud Inc. + * Copyright (C) 2023 TSI-mc *

* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -150,7 +152,7 @@ public static Drawable getFolderTypeIcon(boolean isSharedViaUsers, if (WebdavEntry.MountType.GROUP == mountType || isGroupFolder) { drawableId = R.drawable.folder_group; - } else if (isSharedViaLink) { + } else if (isSharedViaLink && !isEncrypted) { drawableId = R.drawable.folder_shared_link; } else if (isSharedViaUsers) { drawableId = R.drawable.folder_shared_users; @@ -490,6 +492,10 @@ private static void populateMimeTypeIconMapping() { MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-visio.template", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.document.macroEnabled.12", R.drawable.file_doc); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.ms-word.template.macroEnabled.12", R.drawable.file_doc); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.formula", R.drawable.file_analytics); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.formula-template", R.drawable.file_analytics); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.graphics", R.drawable.file_analytics); + MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.graphics-template", R.drawable.file_analytics); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation", R.drawable.file_ppt); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.presentation-template", R.drawable.file_ppt); MIMETYPE_TO_ICON_MAPPING.put("application/vnd.oasis.opendocument.spreadsheet", R.drawable.file_xls); diff --git a/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProvider.kt b/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProvider.kt index 09bae795877f..f74d78a670f6 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProvider.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProvider.kt @@ -35,4 +35,10 @@ interface MaterialSchemesProvider { * Color schemes for when there's no logged in user */ fun getDefaultMaterialSchemes(): MaterialSchemes + + /** + * Color schemes for views where we want the primary color to be the background, and to be unchanged + * (for brand purposes). For example, this includes the login screen and the first run activity + */ + fun getMaterialSchemesForPrimaryBackground(): MaterialSchemes } diff --git a/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProviderImpl.kt b/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProviderImpl.kt index 929dc6959fe8..00396b62418a 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProviderImpl.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/MaterialSchemesProviderImpl.kt @@ -74,6 +74,11 @@ internal class MaterialSchemesProviderImpl @Inject constructor( return MaterialSchemes.fromColor(primaryColor) } + override fun getMaterialSchemesForPrimaryBackground(): MaterialSchemes { + val primaryColor = ContextCompat.getColor(context, R.color.primary) + return MaterialSchemes.withPrimaryAsBackground(primaryColor) + } + companion object { private val TAG = MaterialSchemesProviderImpl::class.java.simpleName } diff --git a/app/src/main/java/com/owncloud/android/utils/theme/ViewThemeUtils.kt b/app/src/main/java/com/owncloud/android/utils/theme/ViewThemeUtils.kt index 8bb94cf4cbb6..75487330ecb8 100644 --- a/app/src/main/java/com/owncloud/android/utils/theme/ViewThemeUtils.kt +++ b/app/src/main/java/com/owncloud/android/utils/theme/ViewThemeUtils.kt @@ -64,5 +64,9 @@ class ViewThemeUtils @Inject constructor( fun withDefaultSchemes(): ViewThemeUtils { return withSchemes(schemesProvider.getDefaultMaterialSchemes()) } + + fun withPrimaryAsBackground(): ViewThemeUtils { + return withSchemes(schemesProvider.getMaterialSchemesForPrimaryBackground()) + } } } diff --git a/app/src/main/res/drawable/file_analytics.xml b/app/src/main/res/drawable/file_analytics.xml new file mode 100644 index 000000000000..80bdea45fe7c --- /dev/null +++ b/app/src/main/res/drawable/file_analytics.xml @@ -0,0 +1,28 @@ + + + + diff --git a/app/src/main/res/layout/file_details_share_secure_file_drop_add_new_item.xml b/app/src/main/res/layout/file_details_share_secure_file_drop_add_new_item.xml new file mode 100644 index 000000000000..2d856eb83ab3 --- /dev/null +++ b/app/src/main/res/layout/file_details_share_secure_file_drop_add_new_item.xml @@ -0,0 +1,58 @@ + + + + + + + + + + diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 07512e8a5fd4..0a65f9d956c7 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -32,6 +32,7 @@ النشاط إضافة رابط مشاركة آخر إضافة رابط مشاركة عام جديد + أضف ملف ألاصل أضفه إلى %1$s الإعدادات المتقدمة السماح بإعادة المشاركة @@ -93,6 +94,7 @@ اختر مجلد عن بُعد… اختر قالب وادخل اسم الملف اختر أي من أياً من الملفات التالية التي تريد الإحتفاظ بها! + أختر عنصر الواجهه فشلت عملية إزالة التنبيهات. مسح رسالة الحالة مسح رسالة الحالة بعد @@ -204,7 +206,9 @@ تراجع تجاهل الإشعار عدم الإزعاج + أُنجز غير واضح + لا يمكن إنشاء ملف محلي حمّل آخر إصدار الخاص بالمطورين تعذر تنزيل %1$s فشل التنزيل، قم بتسجيل الدخول مرة أخرى @@ -264,6 +268,7 @@ خطأ في استيراد الملف خطأ في استيراد القوالب خطأ في تشغيل الكاميرا + خطأ في استخدام المسح الضوئي للمستند الحسابات إسم المهمة التقدم diff --git a/app/src/main/res/values-b+en+001/strings.xml b/app/src/main/res/values-b+en+001/strings.xml index 1e61216d41bb..8f655142f6e6 100644 --- a/app/src/main/res/values-b+en+001/strings.xml +++ b/app/src/main/res/values-b+en+001/strings.xml @@ -32,6 +32,7 @@ Activity Add another link Add new public share link + Add new secure file drop Add to %1$s Advanced Settings Allow resharing @@ -209,7 +210,15 @@ Dismiss notification Displays your 12 word passphrase Do not disturb + Multiple images + PDF file + Choose export type + PDF generation failed + Generating PDF… + Done Don\'t clear + Cannot create local file + Invalid filename for local file Download latest dev version Could not download %1$s Download failed, log in again @@ -270,8 +279,10 @@ Report issue to tracker? (requires a GitHub account) Error retrieving file Error retrieving templates - Error showing setup encryption dialogue! + Error showing encryption setup dialog! Error starting camera + Error starting document scan + Error using document scanning Accounts Job name Progress @@ -622,6 +633,7 @@ Retrieving file… Failed to load document! Login via QR code + Scan page Protecting your data self-hosted productivity Browse and share @@ -673,6 +685,7 @@ Password-protected Can edit File drop + Secure file drop View only Share Permissions %1$s (remote) diff --git a/app/src/main/res/values-b+es+419/strings.xml b/app/src/main/res/values-b+es+419/strings.xml deleted file mode 100644 index 133768911dbb..000000000000 --- a/app/src/main/res/values-b+es+419/strings.xml +++ /dev/null @@ -1,464 +0,0 @@ - - - %1$s aplicación Android - Acerca de - versión %1$s - Falla al crear cuenta - Icono de cuenta - ¡Cuenta no encontrada! - Borrar cargas fallidas - Editar - Borrar todas las notificaciones - Enviar/Compartir - Vista de cuadrícula - Vista de lista - Copiar - Nueva carpeta - Mover - Abrir con - Buscar - Detalles - Enviar - Configuraciones - Ordenar - Usuario activo - Aún no hay actividades - Aún no hay eventos como adiciones, cambios y acciones. - Enviar - Enviar liga a... - Actividad - Agregar otra liga - Agregar nuevo enlace público para compartir - Agregar a %1$s - Permitir volver a compartir - Buscar en %s - ¡Cuenta asociada no encontrada! - Acceso fallido: %1$s - Ya existe una cuenta en el dispositivo para el mismo usuario y servidor - El usuario ingresado no corresponde con el usuario de esta cuenta - Versión del servidor no reconocida - Conexión establecida - Dirección del servidor https://... - El formato de dirección para el servidor es erróneo - El servidor no se encontró - No hay conexión de red - Conexión segura no disponible. - La configuración del servidor está mal formada. - Autorización no exitosa - Acceso denegado por el servidor de autorización - La conexión segura se está redirigiendo a través de una ruta insegura. - Conexión segura establecida - Falla en la inicialización de SSL - No fue posible verificar la identidad del servidor SSL - Probando conexión - El servidor tardó demasiado en responder - Nombre de usuario o contraseña incorrecto - ¡Se presentó un error desconocido! - No fue posible encontrar el servidor - %1$s no soporta cuentas múltiples - No fue posible establecer la conexión - /CargaAutomática - Crear nueva configuración de carpeta personalizada - Configurar una carpeta personalizada - Avatar - Cerrar - Deshabilitar - Calendario - Se presentó un problema al cargar el certificado. - Casilla de verificación - Texto copiado desde %1$s - No se ha recibido texto para copiar al portapapeles - Se presentó un error inesperado al copiar al portapapeles - Atrás - Cancelar - Cancelar sincronización - Selecciona una cuenta - Confirmar - Copiar - Borrar - Error - Memoria insuficiente - Error desconocido - Cargando... - Siguiente - No - OK - Pendiente - Eliminar - Renombrar - Guardar - Seleccionar - Enviar - Compartir - Omitir - - Probar la versión de desarrollo - Esto incluye todas las últimas funcionalidades y es lo más nuevo. Fallas/errores pueden ocurrir y si es el caso, por favor repórtanoslo. - foro - Ayuda a otros en - Contribuye activamente - la aplicación - Traducir - Obten la liberación de desarrollo directamente - Obten la liberación de desarrollo de la tienda de aplicaciones F-Droid - Obten el candidato a liberación de la tienda de aplicaciones F-Droid - Obten el candidato a liberación de la tienda de Google Play - Candidato a lanzamiento - El candidato a lanzamiento (RC) es una foto del lanzamiento más próximo y se espera que sea estable. Hacer preubas en tu configuración individual puede ayudarnos a asegurar ésto. Anótate para probar en la Play store o consulta manualmente la sección de \"Versión\" de F-Droid. - ¿Encontraste una falla? ¿Hay algo raro? - Ayúdanos probando - Reporta un tema en GitHub - ¿Te interesaría ayudarnos a probar lo que viene en la siguiente versión? - ¿Realmente deseas elminiar %1$s? - ¿Realmente deseas borrar los elementos seleccionados? - ¿Realmente quieres eliminar %1$s y sus contenidos? - ¿Reamente deseas eliminar los elementos seleccionados y sus contenidos? - Sólo local - No se han otorgado privilegios, nada fue importado. - Contactos - Respaldar ahora - El respaldo está calendarizado y deberá iniciar en breve - La importación está calendarizada y deberá iniciar en breve - No se encontraron archivos - ¡No fue posible encontrar tu último respaldo! - Copiado al portapapeles - Se presentó un error al intentar copiar este archivo o carpeta - No es posible copiar una carpeta dentro de una de sus sub carpetas - El archivo ya existe en la carpeta destino - Copiar liga - Crear - No fue posible crear la carpeta - Desconocido - Cerrar sesión - ¿Borrar la cuenta %s y borrar todos los archivos localeS?\n\nEl borrado no se puede deshacer - Deseleccionar todo - No hay una nueva versión disponible. - Cerrar - Este algoritmo de verificación no está disponible en tu teléfono - Deshabilitar - Descartar - No fue posible descargar %1$s - Falla en la descarga - El archivo ya no se encuentra disponible en el servidor - %1$d%% Descargando %2$s - %1$s descargado - Descargado - Aún no ha descargado - Actividades - Todos los archivos - Favoritos - Inicio - Notificaciones - Disponibles sin conexión - Modificado recientemente - Compartido - Archivos borrados - Cargas - Cerrar sesión - %1$s de %2$s usados - Carga automática - Establecer como encriptado - Cerrar - %1$s no pudo ser copiado a la carpeta local %2$s - Error crítico: No se pueden realizar operaciones - Cuentas - Ususario - Trabajos en segundo plano - Descargar - Cargar - Agregar a tus favoritos - Hacer favorito - Borrar - Archivo - Carga algún contenido o sincroniza con tus dispositivos. - Aún no hay nada marcado como favorito - No hay archivos aquí - No hay resultados en esta carpeta - No hay resultados - No hay nada aquí. Puedes agregar una carpeta. - ¿Tal vez está dentro de una carpeta diferente? - Aún no hay nada compartido - carpeta - Cargando... - No se cuenta con una aplicación que maneje este tipo de achivo. - hace algunos segundos - Terminado - Reemplazar - Usar - Archivo no encontrado - Renombrar - Descargar - Exportar - No se ha seleccionado algún archivo - Caracteres inválidos: / \\ < > : \" | ? * - Nombre del archivo - Crear - No hay carpetas aquí - Seleccionar - No se te permite %s - para copiar este archivo - para crear este archivo - para borrar este archivo - para mover este archivo - para renombrar este archivo - Cargando archivos... - Algunos archivos no se pudieron mover - Local: %1$s - Mover todos - Remoto: %1$s - Se han movido todos los archivos - Adelante - Nombre - Contraseña - Cargar archivos sólo con el dispositivo conectado a la toma de corriente - /Cargas Automáticas - Invisible - Liga - Permitir carga y edición - Permitir carga - Vista de lista - No hay archivos en esta carpeta - No se encontró el archivo en sistema de archivos local - No hay más carpetas. -  %1$s bitácora de aplicación Android - Iniciar sesión - Actualizar - Cargando... - Bitácoras - Borrar datos - Las configuraciones, base de datos y certificados del servior de los datos de %1$s serán borrados permanentemente.\n\nLos archivos descargados se mantendrán sin cambios.\n\nEste proceso puede tomar algo de tiempo. - Administrar espacio - No fue posible leer el archivo de medios - El archivo de medios tiene una codificación incorrecta - El intento de reproducir el archivo sobrepasó el tiempo de espera - Codec no soportado - Botón de avanzar rápido - Reproductor de músca %1$s - Botón de reproducir o pausar - Botón de rebobinar - %1$s (reproduciendo) - Más reciente primero - Más antiguo primero - A - Z - Z - A - Más grande primero - Más pequeño primero - Más - Se presentó un error al intentar mover este archivo o carpeta - No es posible mover una carpeta dentro de una de sus sub carpetas - El archivo ya existe en la carpeta de destino - foto - Enviar - Descargas - Cargas - No hay notificaciones - Por favor verifica más tarde. - 1 hora - Ingresa tu código de seguridad - El código de seguridad será solicitado cada vez que inicie la aplicación - Por favor ingresa tu código de seguridad - Los códigos de seguridad no son iguales - Por favor reingresa el código de seguridad - Elimina tu código de seguirdad - Código de seguirdad eliminado - Código de seguridad almacenado - Código de seguridad incorrecto - Se requieren permisos adicionales para cargar y descargar archivos. - 389 KB - marcadordeposición.txt - 12:23:45 - Este es un marcador de posición - 2012/05/18 12:23 PM - Borrado - mantenido en la carpeta original - movido a la capreta de la aplicación - Agregar cuenta - Sincronizar calendario & contactos - No ha sido instalado ni F-Droid o Google Play - Configuración de la sincronizacion del calendario & contactos - Acerca de - Detalles - Desarrollo - General - Más - GNU Licencia Pública General, versión 2 - Ayuda - Excención de responsabilidad - Almacenar en sub carpetas con base en el año y mes - Usar sub carpetas - Licencia - Ninguno - Administrar cuentas - Mostrar archivos ocultos - Obtener el código fuente - Carpeta local - Carpeta remota - Tema - Obscuro - Claro - Vista previa de imagen - No existe un archivo local a previsualizar - No es posible mostrar la imagen - Disculpa - Privacidad - Las notificaciones push están deshabilitadas debido a dependencias de servicios propietarios de Google Play. - No hay notificaciones push debido a un incio de sesión caduco. Por favor vuelve a ingresar a tu cuenta. - En este momento las notificaciones push no están disponibles. - ¡Prueba %1$s en tu dispositivo! - Quiero invitarte a usar %1$s en tu dispositivo\nDescargalo aquí:%2$s - %1$s ó %2$s - Volver a cargar - Falla al eliminar - Eliminar - Eliminado - Ingresa un nombre nuevo - No se permite volver a compartir - No está permitido recompartir - Seleccionar todo - Enviar - Establecer Como - Usar imagen como - Compartir - Compartiendo - Compartir %1$s - %1$s (grupo) - Compartir liga - Debes ingresar una contraseña - para compartir este archivo - Ingresa una contraseña - Establecer fecha de expiración - Establecer contraseña - Puede editar - %1$s (remoto) - Ajustes - Compartir liga - Ordenar por - Más reciente primero - Más antiguo primero - A - Z - Z - A - Más pequeño primero - Más grande primero - Ocultar - Detalles - La identidad del servidor no pudo ser verificada - País: - Nombre común: - Ubicación: - Organización: - Unidad organizacional: - Estado: - Huella digital: - Emitido por: - Firma: - Algoritmo: - Emitido para: - Validez: - De: - Para: - - No hay información acerca del error - No fue posible guardar el certificado - El certificado no puede ser mostrado. - ¿Quieres confiar en este certificado de todas formas? - - El certificado del servidor expiró - - El certificado del servidor no es de confianza - - Las fechas del certificado del servidor están en el futuro - - La URL no corresponde con el nombre del servidor en el certificado - Predeterminado - Descargas - \"%1$s\" ha sido compartido contigo - %1$s ha compartido \"%2$s\" contigo - Se encontraron conflictos - La carpeta %1$s ya no existe - Contraseña equivocada para %1$s - Falla en archivos mantenidos-en-sincronización. - Falla en la sincronización - Los contenidos del archivo ya han sido sincronizados - A partir de la versión 1.3.16, los archivos cargados desde este dispositivo serán copiados a la carpeta local %1$spara prevenir perdidas de datos cuando un archivo se sincroniza entre múltiples cuentas. \n\nDerivado de este cambio, todos los archivos cargados con versiones anteriores de la aplicación fueron copiados a la carpeta %2$s. Sin embargo, un error evitó que se completara esta operación durante la sincronizacion de la cuenta. Puedes dejar el(los) archivo(s) como está(n) y eliminar la liga a %3$s, o bien, mover el(los) archivo(s) a la carpeta%1$s y mantener la liga a %4$s.\n\nSe enlistan a continuación los archivos locales así como los archivos remotos en %5$s a donde estaban ligados - Algunos archivos locales se han perdido - Obteniendo la versión más reciente del archivo. - Botón de status de sincronización - Archivos - Botón de configuración - Configurar carpetas - Las cargas instantaneas se han mejorado por completo. Re-configura tu carga automática desde el menú principal.\n\nDisfruta la nueva y mejorada carga automática. - Preferencias para cargas automáticas - Para %1$s - Tipo - Etiquetas - Probar la conexión del servidor - 30 minutos - Esta semana - Miniatura - Hoy - Archivos borrados - No hay archivos borrados - para dejar de compartir este archivo - para actualizar este recurso compartido - Nombre de archivo - Tipo de archivo - Archivo de acceso directo a Google Maps(%s) - Archivo de acceso directo a Internet(%s) - Archivo snippet de texto(.txt) - Ingresa el nombre y el tipo del archivo a cargar - Cargar archivos - Botón de cargar elemento - Borrar - No hay cargas disponibles - Carga algún contenido o activa la carga automática - El espacio insuficiente evita que se copien los archivos seleccionados dentro de la carpeta %1$s. ¿Te gustaría moverlos ahí en su lugar? - Error desconocido - Seleccionar - Cargar - La información recibida no contiene un archivo válido. - %1$s no tiene permitido leer un archivo recibido - No fue posible copiar el archivo a una carpeta temporal. Por favor intenta enviarlo de nuevo. - El archivo seleccionado para cargar no fue encontrado. Por favor verifica si el archivo existe. - No hay un archivo a cargar - Nombre de la carpeta - Selecciona la carpeta de cargas - No fue posible cargar %1$s - Falla en la carga - Opción de carga: - Mantener el archivo en la carpeta de origen - Borrar el archivo de la carpeta de origen - para cargar a esta carpeta - %1$d%% Cargando %2$s - Cargando... - %1$s cargado - Salir - Ajustes - No existen cuentas %1$s en tu dispositivo. Por favor configura una cuenta primero. - No se encontró la cuenta - Actual - Cargado - Esperando para cargar - Cargas - Cancelado - Conflicto - Error de conexión - Error de credenciales - Error de archivo - Error de carpeta - No se encontró el archivo local - Error de permisos - La aplicación ha sido terminada - Completado - Error desconocido - Esperando a salir de modo de conservación de energía - Aguardando la recarga del dispositivo - Ususario - Dirección - Correo electrónico - Número telefónico - Twitter - Sitio web - Error al extraer la información del usuario - Usuario - Descargar - Verificando credenciales almacenadas - Copiando el archivo desde almacenamiento privado - Imagen de qué es nuevo - Saltar - Enviar correo electrónico - diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml index 1fccd64e0f5e..d0965737b58d 100644 --- a/app/src/main/res/values-bg-rBG/strings.xml +++ b/app/src/main/res/values-bg-rBG/strings.xml @@ -32,6 +32,7 @@ Активност Добави още една връзка Добавете нова връзка за публично споделяне + Добавяне на ново, защитено пускане на файлове Добави към %1$s Допълнителни настройки Може да споделя повторно @@ -210,7 +211,15 @@ Спри известията Показва вашата парола, която се състои от 12 думи Не безпокой + Множество снимки + PDF файл + Избор на тип експортиране + PDF генерирането е неуспешно + Генериране на PDF... + Завършено Не изчиствай + Не е възможно създаването на локален файл + Невалидно име на локален файл Сваляне на най-новата dev версия %1$sне може да бъде изтеглен Неуспешно качване, нужно е да се впишете отново @@ -273,6 +282,8 @@ Грешка при извличане на шаблони Грешка при показване на диалогов прозорец за настройка на криптирането! Грешка при стартирането на камерата + Грешка при стартирането на сканиране на документ + Грешка при използване на сканирането на документи Профили Име на процеса Прогрес @@ -623,6 +634,7 @@ Извличане на файл... Неуспешно зареждане на документ Логване с QR код + Сканиране на страница Защита на вашите данни Продуктивност на самостоятелно хостване Преглеждане и споделяне @@ -673,7 +685,8 @@ Задайте парола Защитена с парола Може да редактира - Изпускане/Преместване/ на файл + Пускане/Преместване/ на файл + Защитено пускане на файлове Само изглед Права за споделяне %1$s (отдалечен) diff --git a/app/src/main/res/values-br/strings.xml b/app/src/main/res/values-br/strings.xml index 881674c2995a..7ed59539de85 100644 --- a/app/src/main/res/values-br/strings.xml +++ b/app/src/main/res/values-br/strings.xml @@ -182,6 +182,8 @@ Arrest Arrest ar gemenadennoù Na rannit ket + Graet + Dibosupl kroui ur restr diabarzh Pellgargañ ar stumm arnodañ diwezhañ Ne oa ket posuple pellgargañ %1$s Pellgargañ c\'hwitet, kit-tre adarre diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 72fb787c6ac8..a4ac72242130 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -209,7 +209,9 @@ Descarta la notificació Mostra la vostra contrasenya de 12 paraules No molesteu + Fet No esborrar + No s\'ha pogut crear el fitxer local Baixa la darrera versió de desenvolupament No s\'ha pogut baixar%1$s La baixada ha fallat, torneu a iniciar la sessió @@ -270,8 +272,8 @@ Informa d\'un problema al seguidor? (requereix un compte de GitHub) S\'ha produït un error mentre es recuperava el fitxer S\'ha produït un error recuperant les plantilles - S\'ha produït un error en mostrar el diàleg de configuració de xifratge S\'ha produït un error iniciant la càmera + S\'ha produït un error en utilitzar l\'exploració del document Comptes Nom de la tasca Progrés diff --git a/app/src/main/res/values-cs-rCZ/strings.xml b/app/src/main/res/values-cs-rCZ/strings.xml index 7b6690dd61e1..2adfa5991250 100644 --- a/app/src/main/res/values-cs-rCZ/strings.xml +++ b/app/src/main/res/values-cs-rCZ/strings.xml @@ -14,7 +14,7 @@ Poslat/nasdílet Zobrazení v mřížce Zobrazení v seznamu - Obnovit kontakty a kalednář + Obnovit kontakty a kalendář Zkopírovat Nová složka Přesunout @@ -32,6 +32,7 @@ Aktivita Přidat další odkaz Přidat nový veřejný odkaz na sdílení + Přidat nové bezpečné předání souborů Přidat k %1$s Pokročilá nastavení Povolit sdílet dál dalším @@ -88,11 +89,11 @@ Kalendáře Došlo k problému s načtením certifikátu. Seznam změn ve vývojářské verzi - Vraťte se sem později nebo načtěte znovu + Vraťte se sem později nebo načtěte znovu. Zatržítko Zvolte místní složku… Zvolte umístění - Zvolte federovanou složku… + Zvolte vzdálenou složku… Vyberte šablonu a zadejte název pro soubor Zvolte který soubor ponechat! Zvolte ovládací prvek @@ -141,17 +142,17 @@ Získat kandidáta na vydání aplikace z F-Droid Získat kandidáta na vydání z Google Play store Kandidát na vydání - Kandidát na vydání (RC) je zachyceným stavem nadcházejícího vydání a očekává se, že bude stabilní. Testování vašeho individuálního nastavení by to mohlo pomoci to zajistit. Přihlaste se k testování v katalogu aplikací Play nebo se podívejte do F-Droid v části „Verze“ a přihlaste se ručně. + Kandidát na vydání (RC) je zachyceným stavem nadcházejícího vydání a očekává se, že bude stabilní. Testování vašeho individuálního nastavení by to mohlo pomoci to zajistit. Přihlaste se k testování v katalogu aplikací Play nebo se podívejte ručně do F-Droid v části „Verze“. Našli jste chybu? Něco podivného? Pomozte testováním Nahlásit problém prostřednictvím portálu Github Chcete nám pomoci zkoušet nadcházející verzi? Nastavit Odebrat lokální šifrování - Opravdu chcete odstranit %1$s? - Opravdu chcete odstranit vybrané položky? - Opravdu chcete odstranit %1$s a jeho obsah? - Opravdu chcete odstranit vybrané položky a jejich obsah? + Opravdu chcete %1$s odstranit? + Opravdu chcete vybrané položky odstranit? + Opravdu chcete %1$s a jeho obsah odstranit? + Opravdu chcete vybrané položky a jejich obsah odstranit? Pouze místní Chyba při vytváření dialogu ke konfliktu! Kolidující soubor %1$s @@ -207,9 +208,17 @@ Vypnout Zavřít Zahodit upozornění - Zobrazí vaší 12 slovnou heslovou frázi + Zobrazí vaši 12 slovnou heslovou frázi Nerušit + Vícero obrázků + PDF soubor + Zvolte typ exportu + Vytvoření PDF se nezdařilo + Vytváření PDF… + Hotovo Nikdy + Nedaří se vytvořit místní soubor + Neplatný název pro místní soubor Stáhnout si nejnovější vývojářskou verzi Nepodařilo se stáhnout %1$s Stahování se nezdařilo, přihlaste se znovu @@ -248,7 +257,7 @@ Tato složka není prázdná. Vytváření nových klíčů… Všech 12 slov dohromady tvoří velmi silné heslo, které pouze vám umožní prohlížet a používat vaše zašifrované soubory. Poznamenejte si ho a někam bezpečně uložte. - End-to-end šifrování zakázáno na serveru. + Šifrování mezi koncovými body vypnuto na serveru. Poznamenejte si někam své 12 slovné šifrovací heslo Heslo… Získávání klíčů… @@ -265,13 +274,15 @@ %1$s zhavarovalo Chyba při vytváření souboru ze šablony Chyba při zobrazování akcí ohledně souboru. - Chyba při změně stavu zámku souboru + Chyba při měnění stavu zámku souboru Hlášení Nahlásit problém? (vyžaduje GitHub účet) Chyba při získávání souboru Chyba při získávání šablon - Chyba při zobrazování dialogu por nastavení šifrování! + Chyba při zobrazování dialogu pro nastavení šifrování! Chyba při spouštění kamery + Chyba při spouštění skenu dokumentu + Chyb při použití skenování dokumentů Účty Název úlohy Průběh @@ -283,8 +294,8 @@ Zrušit všechny úlohy Odstranit neaktivní úlohy Naplánovat testovací úlohu - Spustit zkušební úlohu - Zastavit zkušební úlohu + Spustit testovací úlohu + Zastavit testovací úlohu Migrace (přechod na novější verzi aplikace) Předvolby Vývojářský testovací režim @@ -292,7 +303,7 @@ Zařadit do fronty testovacího stahování Zařadit do fronty testovacího nahrávání Popis umístění na protějšku - Přenesení + Přenos Stáhnout Nahrát Přidat nebo nahrát @@ -313,18 +324,18 @@ Zde budou zobrazeny soubory a složky, které označíte jako oblíbené. Nenalezeny žádné obrázky či videa Nejsou zde žádné soubory - V této složce nebylo nic nalezeno + V této složce nic nenalezeno Žádné výsledky Nic tu není. Můžete přidat složku. Stažené soubory a složky se zobrazí zde. Nenalezeny žádné soubory změněné za uplynulých 7 dnů - Zkusit hledat v jiné složce? - Zde budou zobrazeny vámi sdílené soubory a složky. - Zatím nebylo nic sdíleno + Možná se nachází v jiné složce? + Zde budou zobrazeny vámi nasdílené soubory a složky. + Zatím nic nenasdíleno Na váš dotaz nic nenalezeno složka Načítání… - Není nastaveno pomocí jaké aplikace otevírat tento typ souboru. + Není nastaveno pomocí které aplikace otevírat tento typ souboru. před několika sekundami Vyžadována oprávnění Oprávnění k úložišti @@ -332,8 +343,8 @@ Aby %1$s mohlo nahrávat soubory na server, potřebuje oprávnění pro správu souborů. Je možné zvolit plný přístup k veškerým souborům nebo přístup pouze pro čtení k fotkám a videím. Prověřování cílového umístění… Čištění… - Aktualizuje se složka úložiště - Datová složka už existuje. Vyberte z následujících možností: + Aktualizuje se složka pro ukládání dat + Složka s daty už existuje. Vyberte z následujících možností: Nextcloud složka už existuje Je zapotřebí více místa Ze zdrojového souboru se nedaří číst @@ -346,7 +357,7 @@ Příprava migrace… Obnovování nastavení účtu… Ukládání nastavení účtu… - Opravdu chcete změnit adresář úložiště na %1$s?\n\nPoznámka: Všechna data bude třeba znovu stáhnout. + Opravdu chcete změnit složku pro ukládání dat na %1$s?\n\nPoznámka: Všechna data bude třeba znovu stáhnout. Zdrojová složka není čitelná! Aktualizace rejstříku… Použít @@ -360,7 +371,7 @@ Exportovat Soubor přejmenován %1$s při nahrávání Synchronizovat - Nebyl vybrán žádný soubor + Nevybrán žádný soubor Soubor je třeba nějak nazvat Zakázané znaky: / \\ < > : \" | ? * Název souboru obsahuje přinejmenším jeden neplatný znak @@ -388,17 +399,17 @@ Všechny soubory byly přesunuty Vpřed 4 hodiny - Z tohoto názvu vznikne skrytý soubor + Tímto názvem vznikne skrytý soubor Jméno Poznámka Heslo Server není k dispozici Hostovat svůj vlastní server - ikona pro prázdný seznam + Ikona pro prázdný seznam Ikona ovládacího prvku nástěnky Ikona položky ovládacího prvku ve složce %1$s - Také nahrát existující soubory + Také nahrát už existující soubory Nahrávat pouze při nabíjení /InstantUpload Neplatná URL adresa @@ -409,12 +420,12 @@ Název odkazu Povolit nahrávání a úpravy Upravování - Přetažení souboru (pouze nahrání) + Předání souboru (pouze nahrání) Pouze prohlížet Zobrazit jako seznam Načíst další výsledky V této složce nejsou žádné soubory. - Soubor nenalezen na souborovém systému + Soubor nenalezen na místním souborovém systému %1$s/%2$s Nejsou zde žádné další složky. Najít složku @@ -434,7 +445,7 @@ Načítání… Záznamy událostí: %1$d kB, žádný filtr Záznamy událostí - Na serveru probíhá údržba + Server se nachází v režimu údržby Vyčistit data Nastavení, databáze a certifikáty serverů z dat %1$s budou natrvalo smazány. \n\nStažené soubory zůstanou beze změny.\n\nTento proces může chvíli trvat. Spravovat úložný prostor @@ -461,9 +472,9 @@ Soubor už v cílové složce existuje Soubor se nedaří přesunout – zkontrolujte zda existuje. Přesunout do… - Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena. + Při čekání na server se vyskytla chyba. Operace proto nemohla být dokončena. Při připojování k serveru došlo k chybě - Při čekání na odpověď serveru se vyskytla chyba, operace nemohla být dokončena. + Při čekání na server se vyskytla chyba. Operace proto nemohla být dokončena. Operace nemohla být dokončena, protože server není dostupný. Nový komentář… Zjištěna nová složka s médii %1$s. @@ -472,13 +483,13 @@ Nové upozornění Byla vytvořena nová verze Žádné akce pro tohoto uživatele - Není k dispozici aplikace pro práci s odkazy - Neexistuje žádný kalednář - Není k dispozici aplikace pro práci s e-maily + Není k dispozici žádná aplikace pro práci s odkazy + Neexistuje žádný kalendář + Není k dispozici žádná aplikace pro práci s e-maily Žádné položky Povolen je pouze jeden účet - Není k dispozice aplikace pro práci s PDF - Není k dispozici žádná aplikace pro odesílání vybraných souborů + Není k dispozice žádná aplikace pro práci s PDF + Není k dispozici žádná aplikace pro odeslání vybraných souborů Vyberte alespoň jedno oprávnění pro sdílení. Poslat Poznámku se nepodařilo odeslat @@ -492,7 +503,7 @@ Obecná oznámení Průběh přehrávače hudby Přehrávač médií - Zobrazit push upozornění poslaná serverem: Zmínění v komentářích, příjem nových vzdálených sdílení, oznámení vydané správcem, atd. + Zobrazit push upozornění poslaná serverem: Zmínění v komentářích, příjem nových vzdálených sdílení, oznámení vydaná správcem, atd. Push upozorňování Zobrazuje ukazatel postupu nahrávání Nahrané @@ -503,7 +514,7 @@ 1 hodina Online Stav online - Verze aplikace na straně serveru už je příliš stará na to, aby šla nadále používat – přejděte na novou! + Verze aplikace na straně serveru už je příliš stará na to, aby šla nadále používat – přejděte na novější! Další nabídka Zadejte svůj bezpečnostní kód Bezpečnostní kód bude vyžadován při každém spuštění aplikace @@ -518,14 +529,14 @@ Povolit Odepřít Vyžadována dodatečná oprávnění pro nahrávání a stahování souborů. - Nenalezena aplikace pro nastavení obrázku + Nenalezena žádná aplikace pro nastavení obrázku Připnout na domovskou obrazovku Otevřít %1$s 389 KB jen_jako_vypln.txt 12:23:45 Toto je zástupný text - 2012/05/18 12:23 odp. + 2012/05/18 12:23 vypnout přepnout Zákaz kontroly úspory energie může způsobit nahrávání souborů i v případě nízkého stavu nabití akumulátoru! @@ -552,10 +563,10 @@ Každodenní záloha vašeho kalendáře a kontaktů Neočekávaná chyba při nastavování DAVx5 (dříve známého jako DAVdroid) Šifrování mezi koncovými body je nastaveno! - E2E mnemotechnické - Pro zobrazení mnemotechnické, zapněte přihlašovací údaje zařízení. + E2E mnemotechnická + Pokud chcete zobrazit mnemotechnickou, zapněte přihlašovací údaje zařízení. Zobrazit upozornění ze skenování médií - Upozorňovat na nové složky s médii + Upozorňovat na nově nalezené složky s médii GNU General Public License, verze 2 Nápověda Imprint @@ -573,15 +584,15 @@ Přihlašovací údaje zařízení Bezpečnostní kód Spravovat účty - Doporučit kamarádovi + Doporučit přátelům Odebrat šifrování lokálně Nastavit šifrování mezi koncovými body Zobrazit skryté soubory Získat zdrojové kódy - Složka úložiště + Složka pro ukládání dat Spravovat složky pro automatické nahrávání Místní složka - Federovaná složka + Vzdálená složka Motiv vzhledu Tmavý Světlý @@ -603,15 +614,15 @@ Načíst znovu (vzdálené) Nepodařilo se najít soubor! - Na tomto klientovi je možné šifrování mezi koncovými body odebrat lokálně - Na tomto klientovi je možné odebrat šifrování mezi koncovými body. Šifrované soubory zůstanou na serveru, ale už nadále nebudou synchronizovány s tímto počítačem. + Je možné šifrování mezi koncovými body odebrat lokálně na tomto klientovi + Je možné šifrování mezi koncovými body odebrat lokálně na tomto klientovi. Šifrované soubory zůstanou na serveru, ale už nadále nebudou synchronizovány s tímto počítačem. Odstranění se nezdařilo Upozornění se nepodařilo odebrat. Odebrat Smazáno Zadejte nový název - Nepodařilo se přejmenovat místní kopii, zkuste použít jiný název - Přejmenování není možné, název už je použit + Nepodařilo se přejmenovat místní kopii – zkuste použít jiný název + Přejmenování není možné – název už je použit Příjemcům tohoto sdílení není dovoleno ho nasdílet dál dalším Příjemcům tohoto sdílení není dovoleno ho nasdílet dál dalším Zmenšená verze obrázku není k dispozici. Stáhnout obrázek v plné velikosti? @@ -622,6 +633,7 @@ Získávání souboru… Dokument se nepodařilo načíst! Přihlášení prostřednictvím QR kódu + Naskenovat stránku Ochrana vašich dat nástroje pro produktivitu, hostované u vás Procházet a sdílet @@ -648,22 +660,22 @@ Použít obrázek jako Nastavit stav Nastavit stavovou zprávu - V průběhu nastavování šifrování mezi koncovými body obdržíte 12 slovnou mnemotechnickou frázi, které bude zapotřebí pro otevírání souborů na ostatních zařízeních. Ta bude uložena pouze na tomto zařízení a je možné ji na této obrazovce znovu zobrazit. Prosím poznamenejte si jí na bezpečné místo! - Sdílet - Sdílet a zkopírovat odkaz + V průběhu nastavování šifrování mezi koncovými body obdržíte náhodnou 12 slovnou mnemotechnickou frázi, které bude zapotřebí pro otevírání souborů na ostatních zařízeních. Ta bude uložena pouze na tomto zařízení a je možné ji na této obrazovce znovu zobrazit. Prosím poznamenejte si jí na bezpečné místo! + Nasdílet + Nasdílet a zkopírovat odkaz Sdílení %1$s Platnost skončí %1$s - Sdílet %1$s + Nasdílet %1$s %1$s (skupina) - Sdílet vnitřní odkaz + Interní odkaz na sdílení Sdílení interním odkazem funguje pouze pro uživatele, kteří mají k tomuto souboru přístup Sdílení interním odkazem funguje pouze pro uživatele, kteří mají k této složce přístup na %1$s Odkaz na sdílení Je třeba zadat heslo - Při pokusu o sdílení tohoto souboru či složky došlo k chybě. - Nedaří se sdílet – zkontrolujte zda soubor existuje. + Při pokusu o nasdílení tohoto souboru či složky došlo k chybě. + Nedaří se nasdílet – zkontrolujte zda soubor existuje. pro sdílení tohoto souboru Zadejte nepovinné heslo Zadejte heslo @@ -672,12 +684,13 @@ Nastavit heslo Chráněno heslem Může upravovat - Upuštění souboru + Předání souboru + Bezpečné předání souborů Pouze prohlížet Oprávnění pro sdílení %1$s (vzdálený) %1$s (konverzace) - Jméno, identifikátor v rámci sdruženého cloudu, nebo e-mailová adresa… + Jméno, identifikátor v rámci federovaného cloudu, nebo e-mailová adresa… Odeslat nový e-mail Poznámka pro příjemce Nastavení @@ -686,11 +699,11 @@ Poslat odkaz Zrušit nastavení Sdílet s… - Avatar od sdíleného uživatele + Avatar uživatele, který nasdílel sdílet sdílené - sdílet odkazem - Sdílí s vámi %1$s + nasdíleno odkazem + Nasdílel(a) vám %1$s Přidání sdílejícího se nezdařilo Zobrazit fotky Zobrazit videa @@ -726,7 +739,7 @@ Chcete i tak tomuto certifikátu důvěřovat? - Certifikátu serveru skončila platnost - Certifikát serveru není důvěryhodný - - certifikát serveru ještě nezačal platit (datum začátku platnosti je v budoucnosti) + - Certifikát serveru ještě nezačal platit (datum začátku platnosti je v budoucnosti) - URL adresa neodpovídá názvu hostitele v certifikátu Stavová zpráva Kamera @@ -740,37 +753,16 @@ Plný přístup Média pouze pro čtení Obrázky - U vás hostovaná platforma pro produktivitu, která ponechává kontrolu vám - -Funkce: -* Snadno použitelné moderní rozhraní, s motivem vzhledu sladěným s tím nastaveným na serveru -* Nahrávání souborů na vámi využívaný Nextcloud server -* Jejich sdílení s ostatními -* Udržování vašich oblíbených souborů a složek synchronizovaných -* Vyhledávání napříč všemi složkami na vámi využívaném serveru -* Automatické nahrávání fotek a videí pořízených vaším zařízením -* Budete v obraze díky upozorněním -* Podpora vícero účtů -* Zabezpečení přístupu k vašim datům otiskem prstu nebo PIN kódem -* Propojení s aplikací DAVx5 (dříve známé jako DAVdroid) pro snadné nastavení synchronizace kalendáře a kontaktů - - -Veškeré problémy prosíme hlaste na https://github.com/nextcloud/android/issues, diskutovat lze na https://help.nextcloud.com/c/clients/android - -Ještě Nextcloud neznáte? Je to server pro komunikaci, synchronizaci a sdílení vašich dat. Jedná se o svobodný software, který můžete provozovat sami, nebo si jako službu koupit u jiné společnosti. Díky tomu máte kontrolu nad svými fotkami, kalendářem, kontakty i dokumenty a vším ostatním. - -Další informace o Nextcloud naleznete na https://nextcloud.com - Kompletní privátní řešení pro všechy vaše soubory, fotky, kalendáře a kontakty. -Toto je oficiální vývojová verze aktualizovaná denně. Obsahuje nejnovější fukce, ale může být nestabilní a ohrozit vaše data. Je pro uživatele, kteří jsou ochotni testovat a hlásit chyby na které narazí. Nepoužívejte ji pro svoje produkční prostředí. -Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nainstalovány souběžně. + Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše.\n\nFunkce:\n* Snadno použitelné moderní rozhraní, s motivem vzhledu sladěným s tím nastaveným na serveru\n* Nahrávání souborů na vámi využívaný Nextcloud server\n* Jejich sdílení s ostatními\n* Udržování vašich oblíbených souborů a složek synchronizovaných\n* Vyhledávání napříč všemi složkami na vámi využívaném serveru\n* Automatické nahrávání fotek a videí pořízených vaším zařízením\n* Budete v obraze díky upozorněním\n* Podpora vícero účtů\n* Zabezpečení přístupu k vašim datům otiskem prstu nebo PIN kódem\n* Propojení s aplikací DAVx5 (dříve známé jako DAVdroid) pro snadné nastavení synchronizace kalendáře a kontaktů\n\nVeškeré problémy prosíme hlaste na https://github.com/nextcloud/android/issues, diskutovat lze na https://help.nextcloud.com/c/clients/android\n\nJeště Nextcloud neznáte? Je to server pro komunikaci, synchronizaci a sdílení vašich dat. Jedná se o svobodný software, který můžete provozovat sami, nebo si jako službu koupit u jiné společnosti. Díky tomu máte kontrolu nad svými fotkami, kalendářem, kontakty i dokumenty a vším ostatním.\n\nVíce o Nextcloud naleznete na https://nextcloud.com + Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše.\nToto je oficiální vývojová verze, sloužící jako denně aktualizovaná ukázka nových nevyzkoušených funkcí, což může způsobovat nestabilitu a ztráty dat. Je určeno pro uživatele, kteří jsou ochotní testovat a hlásit chyby na které narazí. Nepoužívejte pro svou produktivní práci!\n\nJak vývojová tak produkční verze jsou k dispozici na F-droid a mohou být nainstalovány souběžně. Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše (vývojová verze) - Proudově vysílat s… + Proudově vysílat pomocí… Vnitřní proudové vysílání není možné Médium si namísto toho stáhněte nebo použijte externí aplikaci. Přísný režim: připojení přes HTTP není povoleno! Bylo vám nasdíleno „%1$s“ - %1$s s vámi sdílí „%2$s“ + %1$s vám nasdílel(a) „%2$s“ Pouze fotky Fotky a videa Pouze videa @@ -784,7 +776,7 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Synchronizace se nezdařila, přihlaste se znovu Obsah souboru už je synchronizován Synchronizaci složky %1$s se nedaří dokončit - Od verze 1.3.16, soubory nahrané z tohoto zařízení jsou zkopírovány do místní složky %1$s, aby se zabránilo ztrátě dat, když je jeden soubor synchronizován s vícero účty.\n\nKvůli této změně byly všechny soubory, nahrané starší verzí zkopírovány do složky %2$s. Nicméně, chyba při synchronizaci účtu zabránila dokončení této operace. Buď tyto soubory můžete ponechat, jak jsou a smazat odkaz na %3$s, nebo je přesunout do složky %1$s ponechat odkaz na %4$s.\n\nNíže jsou vypsány místní soubory a vzdálené soubory v %5$s na který byly odkazovány. + Od verze 1.3.16, soubory nahrané z tohoto zařízení jsou zkopírovány do místní složky %1$s, aby se zabránilo ztrátě dat, pokud je jeden a ten samý soubor synchronizován s vícero účty.\n\nKvůli této změně byly všechny soubory, nahrané starší verzí zkopírovány do složky %2$s. Nicméně, chyba při synchronizaci účtu zabránila dokončení této operace. Buď tyto soubory můžete ponechat, jak jsou a smazat odkaz na %3$s, nebo je přesunout do složky %1$s ponechat odkaz na %4$s.\n\nNíže jsou vypsány místní soubory a vzdálené soubory v %5$s na které bylo odkazováno. Některé místní soubory byly zapomenuty Stahuje se nejnovější verzi souboru. Zvolte, co synchronizovat @@ -815,20 +807,20 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Odsud je možné obnovit smazané soubory. Soubor %1$s se nepodařilo smazat! Soubor %1$s se nepodařilo obnovit! - Načtení obsahu koše se nezdařilo! + Načítání obsahu koše se nezdařilo! Soubory se nepodařilo natrvalo smazat! Odemknout soubor Existuje nepřečtený komentář Zrušit šifrování Odebrat z oblíbených Při pokusu o zrušení sdílení tohoto souboru či složky došlo k chybě. - Nedaří se ukončit sdílení – kontrolujte zda soubor existuje. + Nedaří se zrušit sdílení – zkontrolujte zda soubor existuje. pro zrušení sdílení tohoto souboru Zrušení sdílení se nezdařilo Přístup prostřednictvím nedůvěryhodné domény. Více informací naleznete v dokumentaci. - Došlo k chybě při pokusu o aktualizaci sdílení. - Nedaří se aktualizovat. Ověřte že soubor existuje. - pro aktualizaci tohoto sdílení + Došlo k chybě při pokusu o změnu sdílení. + Nedaří se změnit – zkontrolujte zda soubor existuje. + pro změnu tohoto sdílení Změna sdílení se nezdařila Nedaří se vytvořit místní soubor Nahrát z… @@ -839,7 +831,7 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Soubor s odkazem do map Google (%s) Soubor s odkazem na webovou stránku (%s) Soubor textového úryvku (.txt) - Název a typ vstupního souboru k nahrání + Zadejte název a typ souboru k nahrání Nahrát soubory Tlačítko akce Nahrát položku Smazat @@ -849,16 +841,16 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Místní úložiště je plné Soubor se nepodařilo zkopírovat na místní úložiště Uzamčení složky se nezdařilo - Šifrování je možné pouze pro systém Android verze 5.0 a novější + Šifrování je možné pouze na systému Android verze 5.0 a novějším Pro zkopírování vybraných souborů do složky %1$s není dostatek volného místa. Chcete je tam namísto toho přesunout? Naskenovat dokument kamerou - Konflikt synchronizace, vyřešte ručně + Konflikt synchronizace – vyřešte ručně Neznámá chyba Vybrat Nahrát Obdržená data neobsahují platný soubor. %1$s nemá oprávnění číst přijatý soubor - Došlo k chybě při kopírování souboru do dočasné složky. Zkuste zopakovat odeslání. + Soubor se nepodařilo zkopírovat do dočasné složky. Zkuste zopakovat odeslání. Soubor označený k nahrání nebyl nalezen. Zkontrolujte zda soubor existuje. Soubor se nedaří nahrát Žádný soubor k nahrání @@ -868,22 +860,22 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Nahrání se nezdařilo, znovu se přihlaste Konflikt při nahrávání souboru Zvolte kterou verzi %1$s ponechat - Odesílání se nezdařilo + Nahrání se nezdařilo Předvolba nahrávání: Přesunout soubor do složky %1$s - zdrojová složka je pouze pro čtení, soubor bude pouze nahrán + zdrojová složka je pouze pro čtení – soubor proto bude pouze nahrán Ponechat soubor ve zdrojové složce - Nahrát a vymazat ze zdroje + Vymazat soubor ze zdrojové složky pro nahrávání do této složky %1$d%% Odesílání %2$s Nahrávání… %1$s nahráno Ukončit Nastavení - Na tomto přístroji nejsou žádné %1$s účty. Nejdříve zadejte účet. + Na tomto přístroji nejsou žádné %1$s účty. Nejdříve takový zadejte. Nenalezen žádný účet Aktuální - Neúspěšný/čekající restart + Neúspěšné / čekající na restart Nahráno Čeká se na nahrání Nahrání @@ -896,7 +888,7 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Místní soubor nenalezen Chyba oprávnění Nedůvěryhodný certifikát serveru - Získávání verze serveru… + Zjišťování verze serveru… Aplikace ukončena Dokončeno Neznámá chyba @@ -910,12 +902,12 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Telefonní číslo Twitter Webové stránky - Chyba při příjmu informací o uživateli + Chyba při načítání informací o uživateli Osobní údaje nejsou nastaveny - Na své profilové stránce přidejte jméno, obrázek a kontaktní údaje. + Na stránce se svým profilem přidejte jméno, obrázek a kontaktní údaje. Uživatelské jméno Stáhnout - ikona překryvu videa + Ikona překryvu videa Chvilku strpení… Ověřování uložených přihlašovacích údajů Kopírování souboru ze soukromého úložiště @@ -926,8 +918,8 @@ Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nain Ovládací prvky jsou k dispozici pouze na %1$s 25 a novějším Není k dispozici Odeslat e-mail - Složka úložiště neexistuje! - Toto může být způsobeno obnovením ze zálohy na jiném zařízení. Náhradně vráceno do výchozího stavu. Zkontrolujte nastavení a upravte popis umístění úložiště. + Složka pro ukládání dat neexistuje! + Toto může být způsobeno obnovením ze zálohy na jiném zařízení. Náhradně vráceno do výchozího stavu. Zkontrolujte nastavení a upravte popis umístění složky pro ukládání dat. Nedaří se synchronizovat %1$d soubor (konflikty: %2$d) Nedaří se synchronizovat %1$d soubory (konflikty: %2$d) diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index d61d6c3be992..f92f35c6cbd6 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -10,7 +10,7 @@ Fjern fejlede uploads Redigér Ryd alle notifikationer - Tom papirkurv + Tøm papirkurv Send/Del Grid visning List visning @@ -87,7 +87,7 @@ Kalendere Der er et problem med lagring af certificering. Changelog udviklingsversion - Afkrydsningsfeldt + Afkrydsningsfelt Vælg lokal mappe... Vælg placering Vælg ekstern mappe... @@ -138,7 +138,7 @@ Hent kanditat til frigivelse fra F-Droid app Hent kanditat til frigivelse fra Google Play store Release candidate - Denne kandidat til frigivelse (RC) er et snapshot af den kommende version og forventes at være stabil. Testing af dit individuelle miljø kunne hjælpe med at sikre dette. Indkriv dig til testing på Play store eller led manuelt in \"Version\"s afdelingen af F-Droid. + Denne kandidat til frigivelse (RC) er et snapshot af den kommende version og forventes at være stabil. Testing af dit individuelle miljø kan hjælpe med at sikre dette. Indskriv dig til testing i Play Store eller led manuelt i \"Version\"s afdelingen af F-Droid. Fundet en bug? Mærkværdighed? Hjælp med at test Rapporter et problem på Github @@ -190,7 +190,7 @@ Fjern konto Slet konto %s og slet alle filer lokalt?\n\nDu kan ikke fortryde en sletning. Slet poster - Slet Link + Slet link Fravælg alle Destinations filnavn Ny version tilgængelig. @@ -204,7 +204,11 @@ Afvis Fjern notifikation Forstyr ikke + PDF fil + Genererer PDF… + Færdig Ryd ikke + Kan ikke oprette filen lokalt Hent seneste udiklingsversion Kunne ikke hente %1$s Overførelse fejlede, log ind igen @@ -264,6 +268,7 @@ Fejl ved modtagelse af fil Fejl ved indlæsning af modeller Fejl ved start af kamera + Fejl ved brug af dokumentscanning Konti Job navn Progress @@ -499,7 +504,7 @@ Passcode\'erne er ikke ens Indtast venligst dit kodeord igen Slet din adgangskode - Passcode slettet + Adgangskode slettet Passcode blev gendannet Ukorrekt passcode Tryk på en side for at zoome ind @@ -535,7 +540,7 @@ Udvikling Generel Mere - Daglig backup af din kalender &kontakter + Daglig backup af din kalender & kontakter E2E mnemonic For at vise mnemonic venligst aktiver enhedens brugeroplysninger Vis media scan notifikationer @@ -582,6 +587,7 @@ Enheds legitimationsoplysninger er sat op Prøv %1$s på din enhed! Jeg ønsker at invitere dig til at bruge %1$s på din smartphone!\nHent den her: %2$s %1$s eller %2$s + Genopfrisk indhold Genindlæs (fjernt) Kunne ikke finde fil! @@ -830,8 +836,8 @@ Enheds legitimationsoplysninger er sat op Upload muligheder Flyt file til %1$s mappe Oprindelsesfolder er skrivebeskyttet; fil bliver kun sendt - Behold filen i source-mappen - Slet filen fra source-mappen + Behold filen i kilde-mappen + Slet filen fra kilde-mappen til at overføre til denne mappe %1$d%% Uploader %2$s Sender... diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 90651aa4ade5..370342829f21 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -32,6 +32,7 @@ Aktivitäten Weiteren Link hinzufügen Öffentlichen Link zum Teilen hinzufügen + Neue sichere Dateiablage hinzufügen Hinzufügen zu %1$s Erweiterte Einstellungen Weiterteilen erlauben @@ -209,7 +210,15 @@ Benachrichtigung verwerfen Zeigt Ihre 12-Wörter-Passphrase an Bitte nicht stören + Mehrere Bilder + PDF-Datei + Exporttyp wählen + PDF-Erstellung fehlgeschlagen + Erstelle PDF… + Fertig Nicht löschen + Datei kann lokal nicht erstellt werden + Ungültiger Dateiname für lokale Datei Die neueste Entwicklerversion herunterladen Konnte %1$s nicht herunterladen Herunterladen fehlgeschlagen, erneute Anmeldung erforderlich @@ -270,8 +279,10 @@ Problem melden? (benötigt ein GitHub-Konto) Fehler beim Abruf der Datei Fehler beim Laden der Vorlagen - Fehler beim Anzeigen des Setup-Verschlüsselungsdialogs! + Fehler beim Anzeigen des Setup-Dialogs für Verschlüsselung! Fehler beim Starten der Kamera + Start des Dokumentenscans fehlgeschlagen + Fehler beim Scannen von Dokumenten Konten Aufgabenname Fortschritt @@ -622,6 +633,7 @@ Abrufen der Datei… Laden des Dokuments fehlgeschlagen! Anmelden mit QR-Code + Seite scannen Schützt Ihre Daten Selbst gehostete Produktivität Durchsuchen und teilen @@ -673,6 +685,7 @@ Passwortgeschützt Kann bearbeiten Dateiablage + Sichere Dateiablage Nur anzeigen Berechtigungen zum Teilen %1$s (remote) diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index a208bd594406..5a856aa325f5 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -147,6 +147,7 @@ Ανέφερε ένα ζήτημα στο GitHub Σας ενδιαφέρει να μας βοηθήσετε να δοκιμάσουμε την επόμενη έκδοση; Ρύθμιση + Αφαίρεση τοπικής κρυπτογράφησης Θέλετε σίγουρα να διαγράψετε το %1$s; Θέλετε να διαγράψετε τα επιλεγμένα αντικείμενα; Θέλετε σίγουρα να διαγράψετε το %1$s και τα περιεχόμενά του; @@ -207,7 +208,15 @@ Αποδέσμευση Αποδέσμευση ειδοποίησης Μην ενοχλείτε + Πολλαπλές εικόνες + αρχείο PDF + Επιλέξτε τύπο εξαγωγής + Η δημιουργία PDF απέτυχε + Δημιουργία PDF… + Ολοκληρώθηκε Να μη γίνεται εκκαθάριση + Αδυναμία δημιουργίας τοπικού αρχείου + Μη έγκυρο όνομα τοπικού αρχείου Λήψη της τελευταίας έκδοσης προγραμματιστή Η λήψη του %1$s δεν μπόρεσε να ολοκληρωθεί Η λήψη απέτυχε, συνδεθείτε ξανά @@ -268,7 +277,10 @@ Αναφορά προβλήματος στο tracker; (απαιτείται λογαριασμός GitHub) Σφάλμα ανάκτησης αρχείου Σφάλμα λήψης προτύπων + Σφάλμα εμφάνισης διαλόγου ρύθμισης κρυπτογράφησης! Σφάλμα κατά την εκκίνηση της κάμερας + Σφάλμα σάρωσης εγγράφων + Σφάλμα κατά τη σάρωση εγγράφου Λογαριασμοί Όνομα εργασίας Πρόοδος @@ -516,6 +528,8 @@ Απόρριψη Επιπλέον διακαιώματα απαιτούνται για μεταφόρτωση και λήψη αρχείων. Δεν βρέθηκε εφαρμογή για τον ορισμό φωτογραφίας + Καρφίτσωμα στην αρχική οθόνη + Άνοιγμα %1$s 389 KB placeholder.txt 12:23:45 @@ -545,6 +559,7 @@ Γενικά Περισσότερα Ημερήσιο αντίγραφο ασφαλείας του ημερολογίου & επαφών σας + Η κρυπτογράφηση από άκρο σε άκρο έχει ρυθμιστεί! E2E μνήμη Για την εμφάνιση της μνήμης παρακαλούμε ενεργοποιήστε τα διαπιστευτήρια συσκευής. Εμφάνιση ειδοποιήσεων σάρωσης πολυμέσων @@ -556,6 +571,7 @@ Το αρχικό αρχείο θα… Αποθήκευση σε υποφακέλους με βάση το χρόνο και μήνα Χρήση υποφακέλων + Προσθήκη κρυπτογράφησης από άκρο σε άκρο σε αυτή τη συσκευή Άδεια χρήσης Κωδικός πρόσβασης εφαρμογής Ενεργοποιημένα διαπιστευτήρια συσκευής @@ -566,6 +582,8 @@ Κωδικός πρόσβασης Διαχείριση λογαριασμών Σύστησε σε ένα φίλο + Αφαίρεση κρυπτογράφησης τοπικά + Ρύθμιση κρυπτογράφησης από άκρο σε άκρο Εμφάνιση κρυφών αρχείων Λήψη πηγαίου κώδικα Φάκελος αποθήκευσης δεδομένων @@ -593,6 +611,8 @@ Επαναφόρτωση (εξ αποστάσεως) Η εύρεση αρχείου απέτυχε! + Μπορείτε να αφαιρέσετε την κρυπτογράφηση άκρο-άκρο τοπικά σε αυτή τη συσκευή + Μπορείτε να αφαιρέσετε την κρυπτογράφηση άκρο-άκρο τοπικά σε αυτή τη συσκευή. Τα κρυπρογραφημένα αρχεία θα παραμείνουν στον διακομιστή, αλλά δε θα συγχρονίζονται πλέον σε αυτόν τον υπολογιστή Αποτυχία διαγραφής Αποτυχία αφαίρεσης της ειδοποίησης. Αφαίρεση @@ -610,6 +630,7 @@ Ανάκτηση αρχείου… Αποτυχία φόρτωσης εγγράφου! Είσοδος μέσω κωδικού QR + Σάρωση σελίδας Προστασία των δεδομένων σας αυτόνομη λειτουργία Περιήγηση και διαμοιρασμός diff --git a/app/src/main/res/values-eo/strings.xml b/app/src/main/res/values-eo/strings.xml index dd837d69ca06..3fbc84a26765 100644 --- a/app/src/main/res/values-eo/strings.xml +++ b/app/src/main/res/values-eo/strings.xml @@ -163,6 +163,8 @@ Malŝalti Preterpasi Forsendi sciigon + Farita + Ne eblas krei lokan dosieron Ne eblis elŝuti %1$s Elŝuto malsukcesis, bonvolu re-ensaluti Elŝuto malsukcesis diff --git a/app/src/main/res/values-es-rAR/strings.xml b/app/src/main/res/values-es-rAR/strings.xml index c400331f08fe..e5e8bbf2255d 100644 --- a/app/src/main/res/values-es-rAR/strings.xml +++ b/app/src/main/res/values-es-rAR/strings.xml @@ -187,7 +187,9 @@ Despedir Eliminar notificación No molestar + Hecho No vaciar + No se puede crear el archivo local Descargue la última versión de desarrollo No fue posible descargar %1$s Falló la descarga, vuelva a iniciar sesión diff --git a/app/src/main/res/values-es-rCL/strings.xml b/app/src/main/res/values-es-rCL/strings.xml index 4503dcb75609..8e2665a88394 100644 --- a/app/src/main/res/values-es-rCL/strings.xml +++ b/app/src/main/res/values-es-rCL/strings.xml @@ -142,6 +142,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rCO/strings.xml b/app/src/main/res/values-es-rCO/strings.xml index 7a2276371912..d7711ba55f66 100644 --- a/app/src/main/res/values-es-rCO/strings.xml +++ b/app/src/main/res/values-es-rCO/strings.xml @@ -145,6 +145,7 @@ Se presentó un error al intentar copiar este archivo o carpeta No es posible copiar una carpeta dentro de una de sus sub carpetas El archivo ya existe en la carpeta destino + No fue posible copiar. Por favor revisa si el archivo ya existe. Copiar enlace Copiar/ mover a la carpeta encriptada no se encuentra soportado por el momento. Copiar a… @@ -162,6 +163,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga @@ -286,6 +288,7 @@ No se encontró el archivo en el sistema de archivos local No hay más carpetas.  %1$s bitácora de aplicación Android + No se ha encontrado una app para enviar los registros. Por favor, instale un cliente de correo electrónico. Iniciar sesión Actualizar Cargando... @@ -368,6 +371,7 @@ Licencia Ninguno Administrar cuentas + Recomendar a un amigo Mostrar archivos ocultos Obtener el código fuente Carpeta local @@ -546,6 +550,7 @@ Virus detectado. ¡La carga no puede ser completada! Esperando a salir de modo de conservación de energía Aguardando la recarga del dispositivo + Esperando a una Wi-Fi de uso no medido Usuario Dirección Correo electrónico diff --git a/app/src/main/res/values-es-rCR/strings.xml b/app/src/main/res/values-es-rCR/strings.xml index 94848da8df7e..6a8d22e1ca27 100644 --- a/app/src/main/res/values-es-rCR/strings.xml +++ b/app/src/main/res/values-es-rCR/strings.xml @@ -142,6 +142,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rDO/strings.xml b/app/src/main/res/values-es-rDO/strings.xml index 83ffce6a9b84..89bddd060277 100644 --- a/app/src/main/res/values-es-rDO/strings.xml +++ b/app/src/main/res/values-es-rDO/strings.xml @@ -157,6 +157,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rEC/strings.xml b/app/src/main/res/values-es-rEC/strings.xml index f161a1356303..505c17c0389e 100644 --- a/app/src/main/res/values-es-rEC/strings.xml +++ b/app/src/main/res/values-es-rEC/strings.xml @@ -157,6 +157,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rGT/strings.xml b/app/src/main/res/values-es-rGT/strings.xml index 7bea3594cab0..299745da4385 100644 --- a/app/src/main/res/values-es-rGT/strings.xml +++ b/app/src/main/res/values-es-rGT/strings.xml @@ -142,6 +142,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rMX/strings.xml b/app/src/main/res/values-es-rMX/strings.xml index 2695fb528ba7..97a0f87f2f3f 100644 --- a/app/src/main/res/values-es-rMX/strings.xml +++ b/app/src/main/res/values-es-rMX/strings.xml @@ -192,6 +192,7 @@ Descartar Descartar notificación No molestar + Terminado No borrar Descargar última versión de desarrollo No fue posible descargar %1$s diff --git a/app/src/main/res/values-es-rSV/strings.xml b/app/src/main/res/values-es-rSV/strings.xml index 94848da8df7e..6a8d22e1ca27 100644 --- a/app/src/main/res/values-es-rSV/strings.xml +++ b/app/src/main/res/values-es-rSV/strings.xml @@ -142,6 +142,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s La descarga falló, inicia sesión de nuevo Falla en la descarga diff --git a/app/src/main/res/values-es-rUY/strings.xml b/app/src/main/res/values-es-rUY/strings.xml index eec44e7b64a2..ff79de0e3141 100644 --- a/app/src/main/res/values-es-rUY/strings.xml +++ b/app/src/main/res/values-es-rUY/strings.xml @@ -153,6 +153,7 @@ Este algoritmo de verificación no está disponible en tu teléfono Deshabilitar Descartar + Terminado No fue posible descargar %1$s Falla en la descarga El archivo ya no se encuentra disponible en el servidor diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ccf68029db6b..845fa95c6ee4 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -32,6 +32,7 @@ Actividad Añadir otro enlace Añadir un nuevo enlace público + Añadir una nueva entrega de archivos segura Añadir a %1$s Configuración avanzada Permitir que se vuelva a compartir @@ -209,7 +210,15 @@ Descartar notificación Muestra su contraseña de cifrado de 12 palabras No molestar + Múltiples imágenes + Archivo PDF + Seleccione el tipo de exportación + La generación del PDF falló + Generando PDF... + Hecho No eliminar + No se puede crear el archivo local + Nombre de archivo inválido para archivo local Descargar la última versión de desarrollo No se ha podido descargar %1$s Descarga fallida, vuelve a iniciar sesión @@ -272,6 +281,8 @@ Error al recuperar plantillas ¡Error al mostrar el diálogo de configuración del cifrado! Error al iniciar la cámara + Error al iniciar el escaneo del documento + Error al usar el escaner de documentos Cuentas Nombre del trabajo Progreso @@ -622,6 +633,7 @@ Recuperando archivo… Fallo al cargar el documento. Entrar vía código QR + Escanear página Protegiendo sus datos plataforma de productividad autoalojada Navegar y compartir @@ -673,6 +685,7 @@ Protegido con contraseña Puede editar Entrega de archivos + entrega de archivos segura Solo lectura Permisos al compartir %1$s (remoto) diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml index 56700d14b3b7..86522872008b 100644 --- a/app/src/main/res/values-eu/strings.xml +++ b/app/src/main/res/values-eu/strings.xml @@ -32,6 +32,7 @@ Jarduera Gehitu beste esteka bat Gehitu partekatzeko esteka berria + Gehitu fitxategi jaregite seguru berria Gehitu %1$s Ezarpen aurreratuak Baimendu birpartekatzea @@ -209,7 +210,15 @@ Baztertu jakinarazpena Zure 12 hitzeko pasahitza erakusten dizu Ez molestatu + Irudi anitz + PDF fitxategia + Aukeratu esportazio mota + PDFaren sorrerak huts egin du + PDFa sortzen... + Egina Ez garbitu + Ezin da sortu fitxategi lokala + Fitxategi-izen baliogabea fitxategi lokalerako Deskargatu azken garapen bertsioa Ezin izan da %1$s deskargatu Deskargak huts egin du, hasi saioa berriz @@ -270,8 +279,10 @@ Arazoaren berri eman nahi duzu? (GitHub kontua beharko duzu) Errorea fitxategia berreskuratzean Errorea txantiloiak berreskuratzean - Errore bat gertatu da konfigurazio enkriptatzearen elkarrizketa-koadroa erakustean! + Errore bat gertatu da enkriptatzea konfiguratzeko elkarrizketa-koadroa erakustean! Errorea kamera abiaraztean + Errorea dokumentuen eskaneatzea abiaraztean + Errorea dokumentu eskaneatzailea erabiltzerakoan Kontuak Lanaren izena Aurrerapena @@ -622,6 +633,7 @@ Fitxategia berreskuratzen ... Huts egin du dokumentua kargatzean! Hasi saioa QR kode bidez + Eskaneatu orria Zure datuak babesten norberak ostatatutako produktibitatea Arakatu eta partekatu @@ -673,6 +685,7 @@ Pasahitzez babestua Editatu dezake Fitxategiak jaregin + Fitxategi-jartze segurua Ikusi soilik Partekatze baimenak %1$s (urrunekoa) diff --git a/app/src/main/res/values-fa/strings.xml b/app/src/main/res/values-fa/strings.xml index 82e00d6adfb0..da72b9b56579 100644 --- a/app/src/main/res/values-fa/strings.xml +++ b/app/src/main/res/values-fa/strings.xml @@ -205,7 +205,9 @@ پنهان کن رد کردن اعلان مزاحم نشوید + انجام شد پاک نکن + پرونده محلی ایجاد نمی شود آخرین نسخه dev را دریافت کنید %1$s دانلود نشد بارگیری شکست خورد. دوباره وارد شوید diff --git a/app/src/main/res/values-fi-rFI/strings.xml b/app/src/main/res/values-fi-rFI/strings.xml index 949bea9238a0..e8ef507b28e7 100644 --- a/app/src/main/res/values-fi-rFI/strings.xml +++ b/app/src/main/res/values-fi-rFI/strings.xml @@ -209,7 +209,14 @@ Hylkää ilmoitus Näyttää 12-sanaisen tunnuslauseen Älä häiritse + Useita kuvia + PDF-tiedosto + Valitse viennin tyyppi + PDF:n luominen epäonnistui + Luodaan PDF:ää… + Valmis Älä tyhjennä + Paikallista tiedostoa ei voi luoda Lataa viimeisin kehitysversio Ei voitu ladata %1$s Lataus epäonnistui, kirjaudu sisään uudelleen @@ -269,8 +276,8 @@ Haluatko ilmoittaa ongelmasta? (tarvitset GitHub-tilin) Tiedoston noudossa tapahtui virhe Tapahtui virhe mallien lataamisessa - Virhe näytettäessä asennuksen salauksen valintaikkunaa! Virhe kameraa käynnistäessä + Virhe dokumentin skannauksessa Tilit Työn nimi Edistyminen @@ -622,6 +629,7 @@ GNU yleinen lisenssi, versio 2 Noudetaan tiedostoa… Asiakirjaa ei voitu lataa! Kirjaudu QR-koodilla + Skannaa sivu Tietojasi suojaten itse-ylläpidettävä tuottavuus Selaa ja jaa diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 6043ff37ff12..91d7f98bb968 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -32,6 +32,7 @@ Activité Ajouter un autre lien Ajouter un nouveau lien de partage public + Ajouter un nouveau dépôt de fichier sécurisé Ajouter à %1$s Paramètres avancés Autoriser le repartage @@ -162,8 +163,8 @@ Pas de permission donnée, rien n\'a été importé. Contacts Sauvegarder maintenant - La sauvegarde est planifiée et va bientôt démarrer - L\'import est planifié et va démarrer + La sauvegarde est planifiée et démarrera bientôt + L\'import est planifié et démarrera bientôt Aucun fichier trouvé Impossible de trouver la dernière sauvegarde ! Copié dans le presse-papier @@ -211,7 +212,15 @@ Attention la suppression est irréversible. Ignorer la notification Affiche votre phrase secrète à 12 mots Ne pas déranger + Images multiples + Fichier PDF + Choisir le type d\'export + La génération du PDF a échoué + Génération du PDF... + Terminé Ne pas effacer + Impossible de créer le fichier local + Nom de fichier local invalide Télécharger la dernière version de développement Impossible de télécharger %1$s Téléchargement échoué, reconnectez-vous @@ -274,6 +283,8 @@ Attention la suppression est irréversible. Erreur lors de la récupération des modèles Erreur d\'affichage de la boîte de dialogue de configuration du chiffrement ! Erreur au démarrage de l\'appareil photo + Erreur lors de la numérisation du document + Erreur lors de la numérisation de documents Comptes Nom de la tâche Progression @@ -432,9 +443,9 @@ Attention la suppression est irréversible. Actualiser Chercher dans les journaux Envoyer logs par e-mail - Journaux: %1$d ko, %2$d / %3$d résultats en %4$d ms + Journaux: %1$d Ko, %2$d / %3$d résultats en %4$d ms Chargement… - Journaux: %1$d ko, pas de filtre + Journaux: %1$d Ko, pas de filtre Journaux Le serveur est en maintenance. Effacer les données @@ -624,6 +635,7 @@ Attention la suppression est irréversible. Téléchargement en cours… Impossible de charger le document ! Connexion par code QR + Numériser la page Protection de vos données productivité auto-hébergée Parcourir et partager @@ -675,6 +687,7 @@ Attention la suppression est irréversible. Protégé par mot de passe Peut modifier Dépôt de fichier + Dépôt sécurisé de fichiers Afficher seulement Autorisations pour le partage %1$s (distant) diff --git a/app/src/main/res/values-gd/strings.xml b/app/src/main/res/values-gd/strings.xml index a14ed137ce08..004f630a7ada 100644 --- a/app/src/main/res/values-gd/strings.xml +++ b/app/src/main/res/values-gd/strings.xml @@ -187,6 +187,7 @@ Leig seachad am brath Na bris a-steach orm Na falamhaich + Chan urrainn dhuinn am faidhle ionadail a chruthachadh Luchdaich a-nuas an tionndadh leasachaidh as ùire Cha b’ urrainn dhuinn %1$s a luchdadh a-nuas Dh’fhàillig an luchdadh a-nuas, clàraich a-steach a-rithist diff --git a/app/src/main/res/values-gl/strings.xml b/app/src/main/res/values-gl/strings.xml index 6fb378919428..0f7336b13b48 100644 --- a/app/src/main/res/values-gl/strings.xml +++ b/app/src/main/res/values-gl/strings.xml @@ -10,7 +10,7 @@ Limpar os envíos fallados Editar Limpar todas as notificacións - Lixo baleiro + Cesto do lixo baleiro Enviar/compartir Ver como grella Ver como lista @@ -32,10 +32,11 @@ Actividade Engadir outra ligazón Engadir unha nova ligazón pública + Engadir un novo arquivo seguro Engadir en %1$s Axustes avanzados Permitir compartir - Mostra un widget do panel + Amosa un trebello do panel Buscar en %s Non se atopou unha conta asociada! Acceso fallado: %1$s @@ -77,7 +78,7 @@ Agochar o cartafol Avatar Ausente - Configuración de copia de seguridade + Configuración da copia de seguridade Copia de seguridade do calendario & de contactos Pechar Desactivar @@ -88,14 +89,14 @@ Calendarios Hai un problema ao cargar o certificado. Cambios na versión de desenvolvemento - Volve máis tarde ou volve cargar. + Volver máis tarde ou volver cargar. Caixa de selección Escoller cartafol local… - Escolle localización + Escoller a localización Escoller cartafol remoto… Escolla un modelo e introduza un nome de ficheiro. Escolla o ficheiro que quere conservar. - Escolla widget + Escoller o trebello Produciuse un fallo ao limpar as notificacións. Limpar a mensaxe de estado Limpar a mensaxe de estado após @@ -147,7 +148,7 @@ Informe dun incidente no GitHub Interesaríalle axudarnos a probar como será próxima versión? Configurar - Elimina o cifrado local + Eliminar o cifrado local Confirma que quere eliminar %1$s? Confirma que quere eliminar os elementos seleccionados? Confirma que quere eliminar %1$s e todo o seu contido? @@ -194,7 +195,7 @@ Eliminar conta Retirar a conta %s e eliminar os ficheiros locais?\n\n Esta eliminación non pode desfacerse. Eliminar entradas - Eliminar ligazón + Eliminar a ligazón Desmarcar todo Nome do ficheiro de destino Non hai versión nova dispoñíbel @@ -207,9 +208,17 @@ Desactivar Rexeitar Rexeitar a notificación - Mostra a túa frase de contrasinal de 12 palabras + Amos a súa frase de paso de 12 palabras Non molestar + Múltiples imaxes + Ficheiro PDF + Escoller o tipo de exportación + Produciuse un erro na xeración do PDF + Xerando o PDF… + Feito Non limpar + Non é posíbel crear o ficheiro local + O nome de ficheiro non é válido para o ficheiro local Descargar a última versión de desenvolvemento Non foi posíbel descargar %1$s Produciuse un fallo na descarga, acceda de novo. @@ -264,14 +273,16 @@ Produciuse un erro ao comentar o ficheiro %1$s quebrou Produciuse un erro ao crear o ficheiro a partir do modelo - Erro ao mostrar as accións do ficheiro + Erro ao amosar as accións do ficheiro Produciuse un erro ao cambiar o estado do bloqueo do ficheiro Informe - Informar dun problema ao rastreador? (require unha conta de GitHub) + Informar dun problema ao rastrexador? (require unha conta de GitHub) Produciuse un erro ao recuperar o ficheiro Produciuse un erro ao recuperar modelos - Produciuse un erro ao mostrar o diálogo de configuración de cifrado. + Produciuse un erro ao amosar o diálogo de configuración do cifrado! Produciuse un erro ao iniciar a cámara + Produciuse un erro ao iniciar o escaneado do documento + Produciuse un erro ao escanear o documento Contas Nome do traballo Progreso @@ -290,7 +301,7 @@ Modo de proba de enxeñería Transferencia de ficheiros Poñer na cola a descarga de proba - Coloca a carga de probas en cola + Poñer na cola o envío de proba Ruta remota Transferencia Descargar @@ -321,15 +332,15 @@ Quizáis estea nun cartafol diferente? Aquí amosaranse os ficheiros e cartafoles que comparta. Aínda non hai nada compartido - Non se atoparon resultados para a túa consulta + Non se atoparon resultados para a súa consulta cartafol Cargando… Non foi estabelecida unha aplicación para manexar este tipo de ficheiro. hai uns segundos Permisos necesarios Permisos de almacenamento - %1$s funciona mellor con permisos para acceder ao almacenamento. Podes escoller acceso completo a todos os ficheiros ou acceso de só lectura a fotos e vídeos. - %1$s precisa permisos de xestión de ficheiros para cargar ficheiros. Podes escoller acceso completo a todos os ficheiros ou acceso de só lectura a fotos e vídeos. + %1$s funciona mellor con permisos para acceder ao almacenamento. Pode escoller acceso completo a todos os ficheiros ou acceso de só lectura a fotos e vídeos. + %1$s precisa permisos de xestión de ficheiros para enviar ficheiros. Pode escoller acceso completo a todos os ficheiros ou acceso de só lectura a fotos e vídeos. Comprobando o destino… Limpando… Actualizando o cartafol de almacenamento de datos @@ -388,15 +399,15 @@ Foron movidos todos os ficheiros Adiante 4 horas - O nome dará lugar a un ficheiro oculto + O nome dará lugar a un ficheiro agochado Nome Nota Contrasinal Servidor non dispoñíbel Hospede o seu propio servidor Icona para a lista baleira - Icona do widget do panel - Icona da entrada do widget + Icona do trebello do taboleiro + Icona da entrada do trebello no cartafol %1$s Envíar tamén os ficheiros existentes Enviar só cando estea cargando @@ -406,7 +417,7 @@ A etiqueta non pode estar baleira Última copia de seguridade: %1$s Ligazón - Nome da Ligazón + Nome da ligazón Permitir o envío e a edición Editando Soltar ficheiro (só envíos) @@ -423,13 +434,13 @@ Pechado por %1$s Bloqueado pola aplicación %1$s Atopáronse %1$s aplicacións de rexistros para Android - Non se atopou ningunha aplicación para enviar rexistros. Instala un cliente de correo electrónico. + Non se atopou ningunha aplicación para enviar rexistros. Instale un cliente de correo-e. Acceder A ligazón á súa interface web %1$s cando a abre no navegador. Eliminar rexistros Actualizar Buscar rexistros - Enviar rexistros por correo electrónico + Enviar rexistros por correo-e Rexistros: %1$d kB, consulta coincidente %2$d / %3$d en %4$d ms Cargando… Rexistros: %1$d kB, sen filtrar @@ -438,7 +449,7 @@ Limpar os datos Van ser eliminados de xeito permanente os axustes , base de datos e certificados do servidor de %1$s.\n\nOs ficheiros descargados conservaranse sen cambios.\n\nEste proceso pode levar bastante tempo. Xestionar o espazo - Non se pode transmitir o ficheiro multimedia + Non é posíbel transmitir o ficheiro multimedia Non foi posíbel ler o ficheiro multimedia O ficheiro multimedia ten unha codificación incorrecta O intento de reproducir o ficheiro esgotou o tempo de espera. @@ -474,12 +485,12 @@ Non hai accións para este usuario Non hai ningunha aplicación para manexar ligazóns Non existe ningún calendario - Non hai ningunha aplicación dispoñible para xestionar o enderezo de correo electrónico + Non hai ningunha aplicación dispoñíbel para xestionar o enderezo de correo-e Non hai elementos Só se permite unha conta Non hai ningunha aplicación para manexar PDF - Non hai ningunha aplicación dispoñible para enviar os ficheiros seleccionados - Selecciona polo menos un permiso para compartir. + Non hai ningunha aplicación dispoñíbel para enviar os ficheiros seleccionados + Seleccione polo menos un permiso para compartir. Enviar Non foi posíbel enviar a nota Icona de nota @@ -492,8 +503,8 @@ Notificacións xerais Progreso do reprodutor de música Reprodutor de medios - Amosa as notificacións enviadas polo servidor: mencións en comentarios, recepción de novos ficheiros compartidos remotos, anuncios publicados por un administrador, etc. - Notificacións do servidor + Amosar as notificacións automáticas: mencións en comentarios, recepción de novos ficheiros compartidos remotos, anuncios publicados por un administrador, etc. + Notificacións automáticas Amosa o progreso do envío Envíos Icona de notificación @@ -514,7 +525,7 @@ O código de seguridade foi eliminado Gardouse o código de seguridade Código de seguridade incorrecto - Toca unha páxina para ampliar + Toque nunha páxina para ampliala Permitir Denegar Son necesarios permisos adicionais para enviar e descargar ficheiros. @@ -549,8 +560,8 @@ Desenvolvemento Xeral Máis - Copia de seguranza diaria dos contactos do teu calendario & - Erro inesperado ao configurar DAVx5 (anteriormente coñecido como DAVdroid) + Copia de seguridade diaria dos contactos do seu calendario & + Produciuse un erro non agardado ao configurar DAVx5 (anteriormente coñecido como DAVdroid) O cifrado de extremo a extremo está configurado. Mnemotécnico do cifrado E2E Para amosar o mnemotécnico, active as credenciais do dispositivo @@ -564,7 +575,7 @@ O ficheiro orixinal vai ser… Arquivar en subcartafoles baseados en ano e mes. Usar subcartafoles - Engade cifrado de extremo a extremo a este cliente + Engadir cifrado de extremo a extremo a este cliente Licenza Código de seguridade da apli Credenciais do dispositivo activadas @@ -575,8 +586,8 @@ Código de seguridade Xestionar contas Recomendar a un amigo - Elimina o cifrado localmente - Configura o cifrado de extremo a extremo + Eliminar o cifrado localmente + Configurar o cifrado de extremo a extremo Amosar ficheiros agochados Obter o código fonte Cartafol de almacenamento de datos @@ -593,10 +604,10 @@ Desculpe. Privacidade Nome novo - Foron desactivadas as notificacións do servidor por depender de servizos propietarios de Google Play. - Non hai notificacións do servidor por mor dun acceso á sesión caducado. Considere volver engadir a súa conta. - Actualmente non están dispoñíbeis as notificacións do servidor. - Non se puido ler o código QR. + Foron desactivadas as notificacións automáticas por depender de servizos propietarios de Google Play. + Non dispón de notificacións automáticas por mor dun acceso á sesión caducado. Considere volver engadir a súa conta. + Actualmente non están dispoñíbeis as notificacións automáticas. + Non foi posíbel ler o código QR. Probe %1$s no seu dispositivo! Quixera convidalo a usar %1$s no seu dispositivo.\nDescargueo aquí: %2$s %1$s ou %2$s @@ -604,8 +615,8 @@ Volver cargar (remoto) Produciuse un fallo ao atopar o ficheiro! - Podes eliminar o cifrado de extremo a extremo localmente neste cliente - Podes eliminar o cifrado de extremo a extremo localmente neste cliente. Os ficheiros cifrados permanecerán no servidor, pero xa non se sincronizarán con este ordenador. + Pode eliminar o cifrado de extremo a extremo localmente neste cliente + Pode eliminar o cifrado de extremo a extremo localmente neste cliente. Os ficheiros cifrados permanecerán no servidor, mais xa non se sincronizarán con este ordenador. Produciuse un fallo na eliminación Produciuse un fallo ao retirar a notificación. Retirar @@ -617,12 +628,13 @@ Non se permite volver compartir No se dispón da imaxe noutros tamaños. Descargala en tamaño total? Restaurar ficheiro - Restaurar copia de seguridade + Restaurar a copia de seguridade Restaurar ficheiro eliminado - Restaurar seleccionado + Restaurar o seleccionado Recuperando o ficheiro… Produciuse un fallo ao cargar o documento! Acceder cun código QR + Escanear a páxina Protexendo os seus datos produtividade en aloxamento autónomo Navegar e compartir @@ -637,21 +649,21 @@ Sincronizar con DAVx5 Produciuse un erro ao obter os resultados da busca Seleccionar todo - Establecer cartafol multimedia + Establecer o cartafol multimedia Seleccione un modelo Seleccionar o modelo Enviar Enviar nota o destinatario - Enviar Compartir + Enviar o compartido Icona do botón de envío Estabelecer como - Establecer Nota + Estabelecer a nota Usar a imaxe como Estabelecer o estado Establecer a mensaxe de estado - Durante a configuración do cifrado de extremo a extremo, recibirá un mnemotécnico aleatorio de 12 palabras, que necesitará para abrir os seus ficheiros noutros dispositivos. Isto só se almacenará neste dispositivo e pódese mostrar de novo nesta pantalla. Anótao nun lugar seguro! + Durante a configuración do cifrado de extremo a extremo, recibirá un mnemotécnico ao chou de 12 palabras, que necesitará para abrir os seus ficheiros noutros dispositivos. Isto só se almacenará neste dispositivo e pódese amosar de novo nesta pantalla. Anóteo nun lugar seguro! Compartir - Compartir & Copiar Ligazón + Compartir & copiar a ligazón Compartindo %1$s Caduca o %1$s @@ -673,13 +685,14 @@ Estabelecer o contrasinal Protexido con contrasinal Pode editar - Solta de ficheiro + Soltar o ficheiro + Descarga segura de ficheiros Só ver - Compartir Permisos + Permisos ao compartir %1$s (remoto) %1$s (conversa) Nome, ID da nube federada ou enderezo de correo… - Enviar correo electrónico novo + Enviar correo-e novo Nota para o destinatario Axustes Agochar a descarga @@ -693,8 +706,8 @@ compartido mediante ligazón Compartido con vostede por %1$s Produciuse un fallo ao engadir un recurso compartido - Mostrar fotos - Mostrar vídeos + Amosar as fotos + Amosar os vídeos Rexistrarse cun provedor Permitirlle a %1$s acceder a súa conta %2$s no Nextcloud? Ordenar por @@ -739,7 +752,7 @@ Filmes Música Acceso completo - Medios só de lectura + Medios de só lectura Imaxes A plataforma de produtividade en aloxamento autónomo que mantén controlada.\n|nCaracterísticas:\n* Interface doada e moderna, totalmente tematizada ao aliñarse co tema do seu servidor\n* Enviar os seus ficheiros ao seu Nextcloud\n* Compartir os seus ficheiros con outras persoas\n* Conservar os seus ficheiros e cartafoles favoritos sincronizados\n* Buscar en todos os cartafoles do servidor\n* Enviar automaticamente fotos e vídeos feitos no seu dispositivo\n* Estar ao día coas notificacións\n* Admite múltiples contas\n* Acceso seguro aos seus datos con pegada dactilar ou PIN\n* Integración con DAVx5 (anteriormente coñecido como DAVdroid) para facilitar a configuración da sincronización de calendarios e contactos\n\nAgradecémoslle que nos informe de calquera incidente en https://github.com/nextcloud/android/issues, pode conversar sobre esta apli en https://help.nextcloud.com/c/clients/android\n\nE novo no Nextcloud? Nextcloud é un servidor privado para sincronizar e compartir ficheiros. É completamente libre e pode instalalo vostede ou contratar a unha empresa ou cooperativa para que o faga por vostede. É o camiño para que sexa vostede quen teña o control sobre as súas fotos, calendario, axenda de contactos, documentos e todo o demais.\n\nCoñeza o Nextcloud en https://nextcloud.com A plataforma de produtividade en aloxamento autónomo que mantén controlada.\nEsta é a versión oficial de desenvolvemento, que presenta unha mostra diaria de calquera nova funcionalidade aínda non probada, o que pode provocar inestabilidade e perda de datos. Esta aplicación está destinada a usuarios que queren probar e informar de fallos (en caso de producirse). Non a use para o día a día!\n\nTanto a versión oficial de desenvolvemento como a normal están dispoñíbeis no F-Droid e poden instalarse xuntas. @@ -748,7 +761,7 @@ Fluxo con… Non é posíbel facer fluxos internos Descargue o medio ou use unha aplicación externa. - Modo estrito: non se permite conexión HTTP! + Modo estrito: non se permite a conexión HTTP! «%1$s» foi compartido con vostede %1$s compartiu «%2$s» con vostede Só fotos @@ -795,7 +808,7 @@ Poderá recuperar ficheiros eliminados de aquí. Non foi posíbel eliminar o ficheiro %1$s! Non foi posíbel restaurar o ficheiro %1$s! - Produciuse un erro ao cargar o lixo. + Produciuse un fallo ao cargar o cesto do lixo! Non foi posíbel eliminar de xeito permanente o ficheiro! Desbloquear ficheiro Existen comentarios sen ler @@ -840,7 +853,7 @@ %1$s non ten permisos para ler o ficheiro recibido Non foi posíbel copiar o ficheiro nun cartafol temporal. Tente volver envialo. Non foi atopado o ficheiro seleccionado para enviar. Comprobe se existe o ficheiro. - Este ficheiro non se pode cargar + Non é posíbel enviar este ficheiro Non hai ficheiros para enviar Nome do cartafol Seleccione o cartafol de envío @@ -903,7 +916,7 @@ Omitir Novo en %1$s Cal é o seu estado? - Os widgets só están dispoñibles en %1$s 25 ou posterior + Os trebellos só están dispoñíbeis en %1$s 25 ou posterior Non dispoñíbel Enviar o correo O cartafol de almacenamento de datos non existe. @@ -916,6 +929,38 @@ Produciuse un fallo ao copiar%1$d ficheiro do cartafol %2$s en Produciuse un fallo ao copiar%1$d ficheiros do cartafol %2$s en + + Escribiu %1$d evento para %2$s + Escribíronse %1$d eventos para %2$s + + + Creouse %1$d UID novo + Creáronse %1$d UID novos + + + %d entrada procesada. + %d entradas procesadas. + + + Atopouse %d entrada duplicada. + Atopáronse %d entradas duplicadas. + + + %d ficheiro exportado + %d ficheiros exportados + + + Produciuse un erro ao exportar %d ficheiro + Produciuse un erro ao exportar %d ficheiros + + + Exportouse %d ficheiro, omitiuse o descanso por mor dun erro + Exportáronse %d ficheiros, omitiuse o descanso por mor dun erro + + + Exportarase %d ficheiro. Consulte a notificación para obter máis información. + Exportaranse %d ficheiros. Consulte a notificación para obter máis información. + %1$d cartafol %1$d cartafoles diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml index 2ca56c5fa080..32b270a7ae80 100644 --- a/app/src/main/res/values-hr/strings.xml +++ b/app/src/main/res/values-hr/strings.xml @@ -204,7 +204,9 @@ Zanemari Zanemari obavijest Ne ometaj + Gotovo Ne briši + Nije moguće stvoriti lokalnu datoteku Preuzmi najnoviju razvojnu inačicu Nije moguće preuzeti %1$s Preuzimanje nije uspjelo, ponovno se prijavite @@ -264,6 +266,7 @@ Pogreška pri dohvaćanju datoteke Pogreška pri dohvaćanju predložaka Pogreška pri pokretanju kamere + Pogreška kod upotrebe skeniranja dokumenta Računi Naziv zadatka Napredak diff --git a/app/src/main/res/values-hu-rHU/strings.xml b/app/src/main/res/values-hu-rHU/strings.xml index 856043cd3140..eabd1bc5b5a7 100644 --- a/app/src/main/res/values-hu-rHU/strings.xml +++ b/app/src/main/res/values-hu-rHU/strings.xml @@ -32,6 +32,7 @@ Tevékenység További hivatkozás hozzáadása Új nyilvános megosztási hivatkozás hozzáadása + Új biztonsági fájllerakat hozzáadása Hozzáadás ehhez: %1$s Speciális beállítások Újra megosztás engedélyezése @@ -209,7 +210,15 @@ Értesítés mellőzése Megjeleníti a 12 szavas jelmondatát Ne zavarjanak + Több kép + PDF-fájl + Válasszon exportálási típust + A PDF előállítása sikertelen + PDF előállítása… + Kész Ne törölje + A helyi fájlt nem lehet létrehozni + Érvénytelen fájlnév a helyi fájlhoz A legfrissebb fejlesztői verzió letöltése %1$s letöltése sikertelen Letöltés sikertelen, jelentkezzen be újra @@ -272,6 +281,8 @@ Hiba történt a sablonok lékérésekor Hiba a titkosítás beállítóablakának megjelenítése során! Hiba a kamera indításakor + Hiba a dokumentumbeolvasás elindítása során + Hiba a dokumentumbeolvasás használata sorá Fiókok Feladat neve Folyamat @@ -409,7 +420,7 @@ Hivatkozás neve Feltöltés és szerkesztés engedélyezése Szerkesztés - Fájl ledobás (csak feltöltés) + Fájllerakat (csak feltöltés) Csak megtekintés Listás elrendezés További találatok betöltése @@ -622,6 +633,7 @@ Fájl lekérése… A dokumentum betöltése sikertelen! Belépés QR-kóddal + Kép szkennelése Az adatai védelme saját üzemeltetésű irodai platform Tallózás és megosztás @@ -672,7 +684,8 @@ Jelszó beállítása Jelszóval védett Szerkesztheti - Fájl ejtése + Fájllerakat + Biztonságos fájllerakat Csak megtekintés Megosztási jogosultságok %1$s (távoli) diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index e99dcbc4dcfb..9200f4897275 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -43,7 +43,7 @@ Pengguna yang dimasukkan tidak cocok dengan pengguna akun ini Versi server tidak dikenal Sambungan dibuat - Server anda tidak membalas dengan ID pengguna yang benar, silahkan kontak admin + Server Anda tidak membalas dengan ID pengguna yang benar, silakan kontak admin Alamat server https://… Format alamat server salah Server tidak ditemukan @@ -77,11 +77,11 @@ Avatar Jauh Pengaturan Pencadangan - Kontak & backup kalender + Cadangan kontak & kalender Tutup Nonaktifkan - Optimisasi baterai perangkat anda mungkin sedang aktif. -Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini dari itu. + Optimisasi baterai perangkat Anda mungkin sedang aktif. +Otomatis unggah hanya bekerja dengan baik apabila Anda mengeluarkan aplikasi ini dari itu. Optimisasi baterai Ditahan karena terlalu banyak percobaan gagal Kalender @@ -138,23 +138,25 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Dapatkan kandidat rilis dari aplikasi F-Droid Dapatkan kandidat rilis dari Google Play Kandidat rilis - Kandidat rilis (RC) adalah potret rilis berikutnya dan diharapkan menjadi rilis stabil. Uji pengaturan pribadi anda dapat membantu untuk memastikan hal ini. Daftar untuk menguji di Play Store atau secara manual lihat di seksi \"versi\" di F-Droid. + Kandidat rilis (RC) adalah potret rilis berikutnya dan diharapkan menjadi rilis stabil. Uji pengaturan pribadi Anda dapat membantu untuk memastikan hal ini. Daftar untuk menguji di Play Store atau secara manual lihat di seksi \"versi\" di F-Droid. Menemukan kesalahan? Bantu dengan menguji. Laporkan di GitHub Konfigurasi + Hilangkan enkripsi lokal Apakah anda yakin ingin menghapus %1$s? Apakah Anda benar-benar ingin menghapus item yang dipilih? Apakah anda yakin ingin menghapus %1$s beserta isinya? Apa anda yakin ingin menghapus item yang terpilih beserta isinya? Lokal saja + Galat saat membuat dialog konflik! File konflik %1$s File lokal File server Tidak ada perizinan diberikan, tidak ada yang terimpor Kontak Cadangkan sekarang. - Jadwalkan pencadangan dan jalankan sebentar lagi. + Cadangan dijadwalkan dan akan dijalankan Impor jadwal dan jalankan sebentar lagi. Tidak ada berkas ditemukan. Tidak dapat menemukan pencadangan terakhir kamu! @@ -169,7 +171,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Tidak dapat mengambil URL Buat Folder tidak dapat dibuat - Buat baru + Buat Buat dokumen baru Buat direktori baru Buat presentasi baru @@ -197,7 +199,11 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Batal Abaikan notifikasi Jangan diganggu + Banyak gambar + Membuat PDF… + Selesai Jangan dihapus + Unduh versi dev terbaru Tidak bisa mengunduh %1$s Unduhan gagal, coba masuk kembali Gagal Mengunduh @@ -229,7 +235,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Buat enkripsi Mendekripsi... Tutup - Silahkan masukkan password untuk mendekripsi kunci pribadi + Silakan masukkan password untuk mendekripsi kunci pribadi Folder ini tidak kosong. Membuat kunci baru... Enkripsi end-to-end dinonaktifkan di server @@ -249,6 +255,8 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Galat saat menerima file Error saat mengambil template Galat saat mengaktifkan kamera + Galat memulai pemindaian dokumen + Error saat menggunakan pemindaian dokumen Akun Nama pekerjaan Kemajuan @@ -258,6 +266,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini UUID Pekerjaan latar belakang Batalkan semua pekerjaan + Preferensi Transfer Unduh Unggah @@ -265,11 +274,14 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Gagal memperbarui UI Tambah ke favorit Favorit + Berkas sudah ada Hapus + Gagal memuat detil Berkas Simpan Unggah beberapa berkas atau sinkronisasi dengan perangkat anda. Belum ada yang disukai. + Berkas dan folder yang Anda tandai sebagai favorit akan ditampilkan di sini. Tidak ada berkas Tidak ada hasil di folder ini Tidak ada hasil. @@ -281,6 +293,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Memuat… Tidak ada aplikasi untuk membuka jenis berkas ini. beberapa detik yang lalu + Hak akses diperlukan Memeriksa tujuan… Membersihkan… Direktori NextCloud sudah ada @@ -333,22 +346,27 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Nama Catatan Kata kunci + Server tidak tersedia Hanya unggah ketika dicas /UnggahInstan + URL Tidak Valid Tersembunyi + Label tidak boleh kosong Tautan Izinkan pengunggahan dan penyuntingan - Berkas jatuh (hanya unggah) + Ungga File (hanya upload) Daftar tampilan Muat lebih banyak hasil Tidak ada satupun berkas dalam folder ini. Berkas tidak ditemukan di sistem berkas lokal + %1$s/%2$s Tidak ada folder lagi. %1$s Android apl log Masuk Segarkan Memuat… Log + Server sedang dalam mode perawatan Bersihkan data Pengaturan, database dan sertifikat server dari data %1$s akan dihapus secara permanen. \n\nBerkas terunduh akan tetap terjaga.\n\nProses ini dapat memakan waktu lama. Kelola ruang @@ -379,10 +397,13 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini foto video Notifikasi Baru + Tak ada item Kirim Tidak dapat mengirim catatan + Menampilkan progres pengunduhan Unduhan Notifikasi umum + Push notifikasi Unggah Ikon Notifikasi Tidak ada notifikasi. @@ -390,6 +411,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Tidak ada koneksi ke internet 1 jam Server telah mencapai batas hidupnya, tolong ditingkatkan! + Menu lainnya Masukkan kode sandi Anda Kode sandi akan diminta setiap kali apl dijalankan. Masukkan kode kunci Anda @@ -402,6 +424,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Izinkan Tolak Diperlukan ijin tambahan untuk mengunggah dan mengunduh berkas. + Sematkan ke layar Beranda 389 KB placeholder.txt 12:23:45 @@ -410,14 +433,21 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini terhapus Tersimpan di folder asli Dipindahkan ke folder aplikasi + Tanya saya setiap saat + Lewati unggah Tambah akun Sinkronkan kalender & kontak + Siapkan DAVx⁵ (sebelumnya DAVdroid) (v1.3.0+) untuk akun saat ini Pemasangan kalender & kontak Tentang Rincian Pengembang Umum Lainnya + Cadangan harian kalender & kontak Anda + Terjadi kesalahan saat menyiapkan DAVx⁵ (sebelumnya DAVdroid) + E2E mnemonic + GNU General Public License, versi 2 Bantuan Jejak Berkas asli akan menjadi… @@ -425,27 +455,32 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Simpan dalam subfolder berdasarkan tahun dan bulan Gunakan subfolder Lisensi + Kode sandi aplikasi Tidak ada - Credentials perangkat + Kredensial perangkat Kunci kode sandi Kelola akun Rekomendasikan ke teman Lihat berkas tersembunyi Dapatkan kode sumber + Kelola folder untuk pengunggahan otomatis Berkas lokal Folder remot Tema Gelap Terang + Ikuti sistem Pratilik gambar Gambar ini tidak dapat ditampilkan Maaf Privasi Nama baru + Notifikasi push dinonaktifkan karena ketergantungan pada layanan Google Play bersumber tertutup. Coba %1$s di perangkat mu! Saya ingin mengundang anda untuk menggunakan %1$s di perangkat anda. \nUnduh disini %2$s %1$s atau %2$s Muat ulang + remote Penghapusan gagal Hapus Dihapus @@ -454,6 +489,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Berbagi ulang tidak diijinkan. Berbagi ulang tidak diijinkan. Pulihkan berkas + Pulihkan cadangan Pulihkan berkas yang terhapus Gagal memuat dokumen! Pilih semua @@ -470,6 +506,9 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Kadaluarsa %1$s Bagikan %1$s %1$s (grup) + Bagikan tautan internal + Tautan berbagi internal hanya bekerja untuk pengguna dengan akses ke berkas ini + Tautan berbagi internal hanya bekerja untuk pengguna dengan akses ke folder ini Bagi tautan Anda harus memasukkan kata sandi untuk membagikan berkas ini @@ -479,6 +518,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Sandi dilindungi Can edit %1$s (remote) + Nama, ID Awan Federasi, atau alamat surel… Catatan untuk penerima Setelan Sembunyikan unduhan @@ -487,6 +527,7 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini Bagikan dengan… bagikan dibagikan + Dibagikan dengan Anda oleh %1$s Izinkan %1$s untuk mengakses akun NextCloud %2$s? Urut berdasarkan Terbaru @@ -519,11 +560,15 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini - Sertifikat server tidak terpercaya - Tanggal sertifikat server yang valid adalah di masa depan - URL tidak cocok dengan nama host dalam sertifikat + Kamera Bawaan Unduhan + Musik Stream menggunakan… \"%1$s\" telah membagikan dengan Anda %1$s dibagikan \"%2$s\" kepada Anda + Hanya foto + Hanya video Konflik ditemukan Folder %1$s sudah tidak ada lagi Tidak bisa mensingkronisasi %1$s @@ -542,16 +587,19 @@ Otomatis unggah hanya bekerja dengan baik apabila anda mengeluarkan aplikasi ini tipe Tag Tes koneksi server. + 30 Menit Pekan ini Pratinjau Hari ini Berkas terhapus Tidak ada berkas yang dihapus. + Buka kunci berkas Hapus dari favorit untuk batal membagikan berkas ini untuk memperbarui pembagian ini Unggah dari… Unggah konten dari aplikasi lain + Unggah dari kamera Nama berkas Tipe berkas Berkas pintasan Google Maps(%s) diff --git a/app/src/main/res/values-is/strings.xml b/app/src/main/res/values-is/strings.xml index 96ca3a6c65c2..9160240f38a5 100644 --- a/app/src/main/res/values-is/strings.xml +++ b/app/src/main/res/values-is/strings.xml @@ -192,7 +192,9 @@ Hafna Afgreiða tilkynningu Ónáðið ekki + Lokið Ekki hreinsa + Get ekki búið til skrá á tölvu Sækja nýjustu þróunarútgáfuna Gat ekki sótt %1$s Niðurhal mistókst, skráðu þig inn aftur diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a8f88e54f451..3fd9dee0ed71 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -32,6 +32,7 @@ Attività Aggiungi un altro collegamento Aggiungi nuovo collegamento pubblico di condivisione + Aggiungi un nuovo drop file sicuro Aggiungi a %1$s Impostazioni avanzate Consenti la ri-condivisione @@ -207,8 +208,17 @@ Disabilita Annulla Cancella notifica + Visualizza la tua frase segreta di 12 parole Non disturbare + Immagini multiple + File PDF + Scegli il tipo di esportazione + Generazione PDF non riuscita + Generazione PDF... + Fatto Non togliere + Impossibile creare il file locale + Nome file non valido per il file locale Scarica l\'ultima versione di sviluppo Impossibile scaricare %1$s Scaricamento non riuscito, effettua nuovamente l\'accesso @@ -269,8 +279,10 @@ Segnalare problemi al sistema di tracciamento? (richiede un account GitHub) Errore durante il recupero del file Errore durante il recupero dei modelli - Errore nel mostrare il messaggio di cifratura impostata! + Errore durante la visualizzazione della finestra di dialogo per l\'impostazione della crittografia! Errore di avvio della fotocamera + Errore all\'avvio della scansione del documento + Errore durante l\'utilizzo della scansione del documento Account Nome operazione Avanzamento @@ -395,6 +407,7 @@ Ospita il tuo server Icona per lista vuota Icona per widget della dashboard + Icona della voce del widget nella cartella %1$s Carica anche i file esistenti Carica solo durante la ricarica @@ -416,7 +429,10 @@ %1$s/%2$s Non ci sono ulteriori cartelle. Trova cartella + Scade: %1$s Blocca file + Bloccato da %1$s + Bloccato dall\'app %1$s Registri applicazione %1$s Android Non è stata trovata alcuna applicazione per inviare i log. Installa un client di posta elettronica. Accedi @@ -515,6 +531,7 @@ Permessi aggiuntivi richiesti per caricare e scaricare i file. Nessuna applicazione trovata per impostare un\'immagine Appunta alla schermata iniziale + Apri %1$s 389 KB segnaposto.txt 12:23:45 @@ -616,6 +633,7 @@ Recupero file… Caricamento del documento non riuscito! Accedi tramite codice QR + Scansiona la pagina Proteggere i tuoi dati produttività auto-gestita Sfoglia e condividi @@ -630,6 +648,7 @@ Sincronizza con DAVx5 Errore nel recuperare i risultati della ricerca Seleziona tutto + Imposta cartella multimediale Scegli un modello Seleziona modello Invia @@ -666,6 +685,7 @@ Protetta da password Può modificare Elimina file + File drop sicuro Sola lettura Condividi permessi %1$s (remota) @@ -744,6 +764,7 @@ \"%1$s\" è stato condiviso con te %1$s ha condiviso \"%2$s\" con te Solo foto + Foto & video Solo video Suggerisci Conflitti rilevati @@ -886,6 +907,7 @@ Aggiungi nome, immagine e dettagli di contatto sulla tua pagina di profilo. Nome utente Scarica + Icona di sovrapposizione video Attendi… Controllo delle credenziali memorizzate Copia file dall\'archiviazione privata @@ -893,6 +915,7 @@ Salta Prima volta su %1$s Qual è il tuo stato? + I widget sono disponibili solo su %1$s 25 o dopo Non disponibile Invia email La cartella di archiviazione dei dati non esiste! @@ -927,6 +950,26 @@ Trovate %d voci duplicate Trovate %d voci duplicate + + %d File esportato + %d file esportati + %d file esportati + + + Esportazione fallita di %d file + Esportazione fallita di %d files + Esportazione fallita di %d files + + + Esportato %dfile , il resto saltato a causa di un errore + Esportati %d files, il resto saltato a causa di un errore + Esportati %d files, il resto saltato a causa di un errore + + + %dfile verrà esportato. Vedere la notifica per i dettagli. + %dfiles verranno esportati. Vedere la notifica per i dettagli. + %d files verranno esportati. Vedere la notifica per i dettagli. + %1$d cartella %1$d cartelle diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml index 9591be631d40..c651821b37ce 100644 --- a/app/src/main/res/values-iw/strings.xml +++ b/app/src/main/res/values-iw/strings.xml @@ -200,6 +200,8 @@ התעלמות התעלמות מהתראה לא להפריע + הסתיים + לא ניתן ליצור קובץ מקומי הורדת גרסת הפיתוח האחרונה לא ניתן להוריד את %1$s ההורדה נכשלה, יש להיכנס שוב diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 7cc601f49615..4a896f2400d4 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -203,7 +203,9 @@ 閉じる 通知を閉じる 取り込み中 + 完了 消去しない + ローカルファイルが作成できません 最新の開発バージョンをダウンロード %1$sをダウンロードできませんでした ダウンロード失敗、要 再ログイン @@ -263,6 +265,7 @@ ファイルの取得中にエラーが発生しました テンプレートの取得中にエラーが発生しました カメラ起動エラー + ドキュメントスキャナーの使用エラー アカウント ジョブの名前 進捗状況 diff --git a/app/src/main/res/values-ka-rGE/strings.xml b/app/src/main/res/values-ka-rGE/strings.xml index 923d1da12076..45c221e41f5a 100644 --- a/app/src/main/res/values-ka-rGE/strings.xml +++ b/app/src/main/res/values-ka-rGE/strings.xml @@ -133,6 +133,7 @@ თქვენს ტელეფონს ამ ალგორითმის დაიჯესტის მხარდაჭერა არ აქვს. გამორთვა დათხოვნა + დასრულებულია ვერ ჩამოიტვირთა %1$s ჩამოტვირთვა ვერ მოხერხდა, ახლიდან გაიარეთ ავტორიზაცია ჩამოტვირთვა ვერ განხორციელდა diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 64e5ee03d51c..525b34ca2acd 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -14,7 +14,7 @@ 보내기/공유 바둑판식 보기 목록 보기 - 주소록 복원 & 달력 + 주소록 & 일정 복원하기 복사 새 폴더 이동 @@ -26,17 +26,18 @@ 정렬 활성 사용자 아직 활동 없음 - 추가, 변경 및 공유와 같은 이벤트가 아직 없음 + 추가, 변경되거나 공유된 이벤트가 아직 없음 보내기 다음으로 링크 보내기… 활동 다른 링크 추가 새 공개된 공유 링크 + 안전한 파일 공유를 새로 추가 %1$s(으)로 추가 고급 설정 - 재공유 허용 - 대시보드로부터 위젯 1개 보기 - %s 검색 + 다시 공유 허용 + 대시보드에 위젯 하나만 표시 + %s에서 검색 관련 계정을 찾을 수 없습니다! 접근 실패: %1$s 이 장치에 아직 계정이 추가되지 않았음 @@ -44,7 +45,7 @@ 입력한 사용자가 이 계정의 사용자와 일치하지 않습니다 서버 버전을 확인할 수 없음 연결됨 - 당신의 서버가 올바른 사용자ID를 보내지 않았습니다. 관리자에게 문의하십시오. + 서버에서 유효한 사용자 ID를 받아올 수 없습니다. 관리자에게 문의하십시오. 서버 주소 https://… 서버 주소 형식이 잘못됨 서버를 찾을 수 없음 @@ -78,17 +79,17 @@ 아바타 자리 비움 백업 설정 - 주소록 & 달력 백업 + 주소록 & 일정 백업 닫기 비활성화 기기의 배터리 최적화가 활성화되어있습니다. 자동 업로드는 이 앱을 배터리 최적화에서 제외해야만 정상적으로 동작합니다. 배터리 최적화 - 잘못된 시도가 너무 많아 지연됨 - 달력 - 달력 + 시도 횟수가 너무 많아 기다려야 합니다 + 일정 + 일정 인증서를 불러올 수 없습니다. - Changelog 개발 버전 - 잠시후 다시 확인하거나 새로고침 하십시오. + 개발 버전 변경점 + 잠시 후 다시 확인하거나 새로고침 하십시오. 체크 상자 로컬 폴더 선택 위치 선택 @@ -209,7 +210,15 @@ 알림 해제 당신의 12 단어의 패스프레이즈를 보이시오. 방해 금지 + 다중 이미지 + PDF 파일 + 내보내기 형식 선택 + PDF 파일 생성 실패 + PDF 파일 생성 중... + 완료 지우지 않음 + 로컬 파일을 만들 수 없음 + 로컬 저장소에서 사용할 수 없는 파일명입니다 최신 개발 버전 다운로드 %1$s을(를) 다운로드할 수 없습니다 다운로드 실패, 다시 로그인하십시오 @@ -270,8 +279,10 @@ 트래커에 문제를 보고하시겠습니까? (GitHub 계정 필요함) 파일 가져오는 중 오류 발생 템플릿 검색 중 오류 발생 - 암호화 다이얼로그 설정을 나타내는 에러! + 암호화 설정 대화상자 표시 오류 카메라 시작 중 오류 발생 + 문서 스캔 시작 오류 + 문서 스캔 중 오류 발생 계정 작업 이름 진행 상황 @@ -520,6 +531,7 @@ 파일을 업로드 및 다운로드하려면 추가 권한이 필요합니다. 사진을 설정할 앱을 찾을 수 없음 홈화면에 고정하다. + %1$s 열기 389 KB placeholder.txt 12:23:45 @@ -621,6 +633,7 @@ 파일 가져오는 중... 문서를 불러올 수 없음 QR 코드로 로그인 + 페이지 스캔 데이터 보호 자체 운영되는 생산성 탐색하고 공유 @@ -672,6 +685,7 @@ 비밀번호로 보호 편집할 수 있음 파일 떨구기 + 안전한 파일 공유 읽기 전용 공유 권한 %1$s(원격) @@ -922,6 +936,7 @@ Nextcloud를 여기서 확인하십시오: https://nextcloud.com 건너뛰기 %1$s의 새로운 것 당신의 상태는? + 위젯 기능은 %1$s 버전 25 이후부터 사용할 수 있습니다 사용할 수 없음 이메일 보내기 데이터 저장 폴더가 존재하지 않습니다! diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index 37791005f7d9..b89efc2df491 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -10,9 +10,11 @@ ການອັບໂຫຼດບໍ່ສຳເລັດ ແກ້ໄຂ ລ້າງການແຈ້ງເຕືອນທັງຫມົດ + ລ້າງຖັງຂີ້ເຫຍື່ອ ສົ່ງ/ແບ່ງປັນ ເບິ່ງຕາຕະລາງ ລາຍການທີ່ຈະເບິ່ງ + ກູ້ຄືນຂໍ້ມູນຕິດຕໍ່ & ປະຕິທິນ ສຳເນົາ ໂຟນເດີໃຫມ່ ຍ້າຍ @@ -30,8 +32,11 @@ ກິດຈະກໍາ ເພີ່ມລິງອຶ່ນອີ ເພິ່ມການແບ່ງປັນສາທາລະນະໃໝ່ + ຕື່ມການວາງໄຟລ໌ທີ່ປອດໄພໃໝ່ ເພີ່ມໃສ່ %1$s + ຕັ້ງ​ຄ່າ​ຂັ້ນ​ສູງ ອະນຸຍາດໃຫ້ ການແບ່ງປັນຄືນ + ສະແດງໜຶ່ງລາຍການຈາກໜ້າປັດ ຄົ້ນຫາໃນ%s ບໍ່ພົບບັນຊີທີ່ກ່ຽວຂ້ອງ! ການເຂົ້າເຖິງໄດ້ບໍ່ສຳເລັດ%1$s: @@ -73,11 +78,14 @@ ເຊື່ອງໂຟນເດີ ຮຸບພາບອາວະຕານ ອອກໄປ + ສໍາຮອງຂໍ້ມູນການຕັ້ງຄ່າ + ສຳຮອງຂຊ້ມູນລາຍຊື່ຕິດຕໍ່ &ປະຕິທິນ ປີດ ປີດ ອຸປະກອນຂອງທ່ານອາດຈະເປີດໃຊ້ງານປະສິດທິພາບ. ການອັບໂຫຼດອັດຕະໂນມັດ ເພື່ອເຮັດວຽກໄດ້ຢ່າງຖືກຕ້ອງ. ການເພີ່ມປະສີດທິພາບແບັດເຕີລີ ລ່າຊ້າ ຍ້ອນຄວາມພະຍາຍາມທີ່ຜິດຫລາຍເກີນ ໄປ + ປະຕິທິນ ມີບັນຫາໃນການໂຫຼດການຢັ້ງຢືນ ເວີຊັ້ນຂອງ Changelog ເຄື່ອງໝາຍກ່ອງ @@ -189,7 +197,9 @@ ຍົກເລີກ ຍົກເລີກການເເຈ້ງເຕືອນ ຫ້າມລົບກວນ + ສໍາເລັດ ບໍ່ຈະແຈ້ງ + ບໍ່ສາມາດສ້າງຟາຍໄດ້ ດາວໂຫຼດເວີຊັ້ນ dev ລຸ້ນລ່າສຸດ ໂຫຼດບໍ່ໄດ້%1$s ໂຫຼດບໍ່ໄດ້, ເຂົ້າລະບົບໃໝ່ອີກຄັ້ງ diff --git a/app/src/main/res/values-lt-rLT/strings.xml b/app/src/main/res/values-lt-rLT/strings.xml index b7152d21e256..c845fdc58325 100644 --- a/app/src/main/res/values-lt-rLT/strings.xml +++ b/app/src/main/res/values-lt-rLT/strings.xml @@ -203,7 +203,9 @@ Atmesti Atmesti pranešimą Netrukdyti + Atlikta Neišvalyti + Nepavyksta sukurti vietinį failą Parsisiųsti naujausią dev versiją Nepavyko atsisiųsti %1$s Atsiuntimas nepavyko, prisijunkite dar kartą @@ -261,6 +263,7 @@ Klaida gaunant failą Klaida gaunant šablonus Klaida paleidžiant kamerą + Klaida naudojant dokumento skenavimą Paskyros Užduoties pavadinimas Eiga diff --git a/app/src/main/res/values-lv/strings.xml b/app/src/main/res/values-lv/strings.xml index ca4c324ab57c..7d924f1ed633 100644 --- a/app/src/main/res/values-lv/strings.xml +++ b/app/src/main/res/values-lv/strings.xml @@ -162,6 +162,7 @@ Deaktivēt Atmest Noraidīt paziņojumu + Pabeigts Nevarēja lejupielādēt %1$s Lejupielāde neizdevās, piesakieties vēlreiz. Neizdevās lejupielādēt diff --git a/app/src/main/res/values-mk/strings.xml b/app/src/main/res/values-mk/strings.xml index c48e58e54f50..b407ff84d869 100644 --- a/app/src/main/res/values-mk/strings.xml +++ b/app/src/main/res/values-mk/strings.xml @@ -196,7 +196,9 @@ Отфрли Отфрли известување Не вознемирувај + Готово Не го тргај + Неможе да се креира локална датотека Download latest dev version %1$s неможе да се превземе Преземањето не беше успешно, најавете се повторно diff --git a/app/src/main/res/values-nb-rNO/strings.xml b/app/src/main/res/values-nb-rNO/strings.xml index f0b222220a3d..95fb4581c8e4 100644 --- a/app/src/main/res/values-nb-rNO/strings.xml +++ b/app/src/main/res/values-nb-rNO/strings.xml @@ -62,8 +62,8 @@ Prøver å logge inn… Feil brukernavn eller passord Ukjent feil: %1$s - Ukjent HTTP feil oppstod! - Ukjent feil oppstod! + Ukjent HTTP feil oppsto! + Ukjent feil oppsto! Fant ikke vert %1$s støtter ikke flere kontoer Klarte ikke å opprette tilkobling @@ -147,6 +147,7 @@ Rapporter en feil på GitHub Interessert i å prøve ut det som kommer til å bli neste versjon? Konfigurer + Fjern lokal kryptering Ønsker du virkelig å slette %1$s? Vil du virkelig fjerne de valgte elementene? Ønsker du virkelig å slette %1$s og dets innhold? @@ -166,7 +167,7 @@ Ingen fil funnet Fant ikke siste sikkerhetskopi. Kopiert til utklippstavlen - En feil oppstod ved kopiering av denne filen eller mappen + En feil oppsto ved kopiering av denne filen eller mappen Det er ikke mulig å kopiere en mappe inn i sin egen undermappe Filen finnes allerede i målmappen Kan ikke kopiere. Sjekk om filen eksisterer. @@ -206,8 +207,16 @@ Deaktiver Forkast Ingen varsel + Viser ditt 12-ords-krypteringspassord Ikke forstyrr + Flere bilder + PDF-fil + Velg eksport-type + PDF-generering feilet + Generer PDF... + Ferdig Ikke fjern + Kan ikke opprette lokal fil Last ned det nyeste dev versjon Kunne ikke laste ned %1$s Nedlasting mislyktes, prøv igjen @@ -247,7 +256,7 @@ Genererer nye nøkler… Alle 12 ordene sammen utgjør et veldig sterkt passord, som lar bare deg vise og gjøre bruk av dine krypterte filer. Skriv det ned og oppbevar det på en trygg plass. Ende-til-ende -kryptering avskrudd på serveren. - Merk deg dit 12-ords-krypteringspassord + Merk deg ditt 12-ords-krypteringspassord Passord… Henter nøkler… Lagrer nøkler @@ -262,12 +271,15 @@ Feil ved kommentering av fil %1$s kræsjet Feil ved oppretting av fil fra mal + Feil under visning av filvalg Feil ved endring av fillåsstatus Rapporter Rapporter feil? (Krever GitHub konto.) - Oppstod feil med å få tilbake filen + Oppsto feil med å få tilbake filen Feil ved henting av mal Klarte ikke å starte opp kamera + Feil ved start av dokumentskanning + Feil ved bruk av dokument skanning Kontoer Jobbnavn Fremgang @@ -452,7 +464,7 @@ Største først Minste først Mer - En feil oppstod ved flytting av denne filen eller mappen + En feil oppsto ved flytting av denne filen eller mappen Det er ikke mulig å flytte en mappe inn i sin egen undermappe Filen finnes allerede i målmappen Kan ikke flytte filen. Sjekk om den eksisterer. @@ -515,13 +527,15 @@ ikke tillatt Flere tillatelser trengs for å laste opp og ned filer. Fant ikke noe app å sette bilde med. + Fest til hjemmeskjermen + Åpne %1$s 389 KB plassholder.txt 12:23:45 Dette er en plassholder 18.05.2012 12:23 stopp - veksle + av/på Deaktivering av strømsparingsmodus vil resultere til at filene blir lastet selv om det er lavt batteri! slettet beholdt i opprinnelig mappe @@ -544,6 +558,8 @@ Generelt Mer Daglig backup av din kaleder & kontakter + Uventet feil under oppsett av DAVx5 (tidligere kjent som DAVdroid) + Ende-til-ende -kryptering er satt opp! E2E mnemonic (hjelper for ende-til-ende kryptering til å huske legitimasjon) For å vise mnemonic, ver vennlig å aktiver enhet legitimasjon. Vis mediaskannvarsler @@ -555,6 +571,7 @@ Opprinnelig fil vil bli… Lagre filer i undermapper basert på år og måned Bruk undermapper + Legg til ende-til-ende -kryptering på denne klienten Lisens Appsikkerhet Enhetens legitimasjon er aktivert @@ -565,6 +582,8 @@ Passord Håndter kontoer Anbefal til en venn + Fjern kryptering lokalt + Sett opp ende-til-ende -kryptering Vis skjulte filer Hent kildekode Datalagringsmappe @@ -592,6 +611,8 @@ Last inn på nytt (ekstern) Kunne ikke finne filen! + Du kan fjerne ende-til-ende -kryptering lokalt på denne klienten + Du kan fjerne ende-til-ende -kryptering lokalt på denne klienten. De krypterte filene vil forbli på serveren, men vil ikke bli synkronisert til denne maskinen lengre. Sletting mislyktes Kunne ikke fjerne meldingen. Fjern @@ -609,6 +630,7 @@ Får tilbake fil Feil i lasting av dokument! Legg inn med QR-kode + Skann side Beskytter din data produktivitet på egen tjener Bla gjennom og del @@ -635,6 +657,7 @@ Bruk bilde som Velg status Velg statusmelding + Under oppsett av ende-til-ende -kryptering så vil du motta et tilfeldig 12-ord-krypteringspassord, som du vil trenge for å få åpner filene dine på andre enheter. Dette vil bare bli lagret på denne enheten. og kan bli vist igjen på denne siden. Vennligst noter det ned på et sikkert sted! Del Del & kopier lenke Deling @@ -646,7 +669,7 @@ Intern dele-link virker bare for brukere med tilgang til til denne filen Intern dele-link virker bare for brukere med tilgang til til denne mappen på %1$s - Share link + Del lenke Du må skrive inn ett passord Det skjedde en feil under deling av denne filen eller mappen. Kan ikke dele. Sjekk om filen eksisterer. @@ -658,7 +681,8 @@ Velg passord Passordbeskyttet Kan endre - Fil mottak + Filkasse + Sikker filkasse Kun se Rettigheter for deling %1$s (ekstern) @@ -677,7 +701,7 @@ delt del via lenke Delt med deg av %1$s - Adding sharee failed + Deling feilet Vis bilder Vis videoer Logg på med tilbyder @@ -786,12 +810,12 @@ Det er uleste kommentarer Ikke satt kryptering Fjern fra favoritter - Det oppstod en feil under oppheving av deling av denne filen eller mappen. + Det oppsto en feil under oppheving av deling av denne filen eller mappen. Kan ikke oppheve deling. Sjekk om filen eksisterer. å oppheve deling av denne filen Fjerning av deling feilet Tilgang gjennom ubetrodd domene. Sjekk dokumentasjonen for mer informasjon. - Det oppstod en feil under oppdatering av delingen. + Det oppsto en feil under oppdatering av delingen. Kan ikke oppdatere. Sjekk om filen eksisterer. å oppdatere denne delingen Oppdatering av deling feilet @@ -921,6 +945,18 @@ Eksporterte %d fil Eksporterte %d filer + + Eksportering av %d fil feilet + Eksportering av %d filer feilet + + + Eksporterte %d fil, hoppet over resten på grunn av feil + Eksporterte %d filer, hoppet over resten på grunn av feil + + + %d fil vil bli eksportert. Se varsel for detaljer + %d filer vil bli eksportert. Se varsel for detaljer + %1$dmappe %1$dmapper diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index bdfc902a3d4a..8abca645a9cd 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -10,7 +10,7 @@ Wis mislukte uploads Bewerken Handel alle meldingen af - Legen prullebak + Prullenbak legen Versturen/Delen Rasterindeling Lijstindeling @@ -78,7 +78,7 @@ Avatar Afwezig Back-up instellingen - Back-up contacten &agenda + Back-up van contacten & agenda Sluiten Uitschakelen Op je toestel kan batterij optimalisatie ingeschakeld zijn. AutoUpload werkt alleen als je dat voor deze app uitschakelt. @@ -207,7 +207,9 @@ Weigeren Handel melding af Niet storen + Klaar Niet opruimen + Kan geen lokaal bestand aanmaken Downloaden laatste dev versie Kon %1$s niet downloaden Downloaden mislukt, je moet opnieuw inloggen @@ -267,6 +269,7 @@ Fout bij ophalen van bestand Fout bij ophalen sjablonen Fout bij starten camera + Fout bij het scannen van documenten Accounts Taaknaam Voortgang @@ -311,7 +314,7 @@ Geen resultaten in deze map Geen resultaten Het is hier leeg. Je kan een map toevoegen! - Gedownloade bestanden en folders zie je hier. + Gedownloade bestanden en mappen zie je hier. Geen bestanden gevonden die de afgelopen 7 dagen zijn gewijzigd Misschien staat het in een andere map? Bestanden en mappen die je deelt, worden hier getoond. @@ -323,7 +326,7 @@ seconden geleden Machtigingen nodig Opslagmachtigingen - %1$s werkt het best met opslagmachtigingen. Je kan kiezen tussel volledige toegang tot alle bestanden, of alleen lezen toegang tot foto\'s en videos. + %1$s werkt het best met opslagmachtigingen. Je kan kiezen tussen volledige toegang tot alle bestanden, of alleen lezen toegang tot foto\'s en video\'s. %1$s heeft bestandsbeheer machtiging nodig om bestanden te uploaden. Je kan kiezen tussel volledige toegang tot alle bestanden, of alleen lezen toegang tot foto\'s en videos. Doelmap controleren… Opruimen… @@ -513,6 +516,7 @@ Weigeren Aanvullende machtigingen vereist voor het uploaden en downloaden van bestanden. Geen app gevonden om afbeelding in te stellen + Toevoegen aan startscherm 389 KB plaatshouder.txt 12:23:45 @@ -566,7 +570,7 @@ Verborgen bestanden weergeven Krijg broncode Gegevensopslagmap - Beheren mappen voor auto-upload + Mappen beheren voor automatisch uploaden Lokale map Externe map Thema diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 7f744edeca22..6a00629f639b 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -32,6 +32,7 @@ Aktywność Dodaj kolejny link Dodaj nowy link publiczny do udostępnienia + Dodaj nowe bezpieczne zrzuty plików Dodaj do %1$s Ustawienia zaawansowane Zezwalaj na udostępnianie dalej @@ -108,7 +109,7 @@ Anuluj synchronizację Wybierz konto Potwierdź - Kopiuj + Skopiuj Usuń Błąd Brak wystarczającej pamięci @@ -209,7 +210,15 @@ Odrzuć powiadomienie Wyświetla hasło składające się z 12-stu słów Nie przeszkadzać + Wiele obrazów + Plik PDF + Wybierz typ eksportu + Generowanie pliku PDF nie powiodło się + Generowanie pliku PDF… + Zrobione Nie czyść + Nie można utworzyć pliku lokalnego + Nieprawidłowa nazwa pliku lokalnego Pobierz najnowszą wersję dev Nie udało się pobrać %1$s Pobieranie nieudane, zaloguj się ponownie @@ -247,9 +256,9 @@ Wprowadź hasło, aby odszyfrować klucz prywatny. Ten katalog nie jest pusty. Generowanie nowych kluczy - Wszystkie 12-stu słów utworzy bardzo trudne hasło, które pozwoli na przeglądanie i korzystanie z zaszyfrowanych plików. Zapisz je i przechowuj w bezpiecznym miejscu. + Wszystkie 12-ście słów utworzy bardzo trudne hasło, które pozwoli na przeglądanie i korzystanie z zaszyfrowanych plików. Zapisz je i przechowuj w bezpiecznym miejscu. Szyfrowanie End-to-End wyłączone po stronie serwera. - Zapisz swoje hasło do szyfrowania składające się z 12-stu słów + Zapisz swoje hasło do szyfrowania z 12-stu słów Hasło… Pobieranie kluczy… Przechowywanie kluczy @@ -272,6 +281,8 @@ Błąd podczas pobierania szablonów Błąd podczas wyświetlania okna dialogowego konfiguracji szyfrowania! Błąd podczas uruchamiania aparatu + Błąd podczas uruchamiania skanowania dokumentu + Błąd podczas skanowania dokumentów Konta Nazwa zadania Postęp @@ -622,6 +633,7 @@ Pobieranie pliku… Nie udało się pobrać dokumentu Zaloguj się za pomocą kodu QR + Zeskanuj stronę Ochrona Twoich danych oprogramowanie biurowe uruchamiane na własnym hostingu Przeglądaj i udostępniaj @@ -671,8 +683,9 @@ Ustaw datę wygaśnięcia Ustaw hasło Zabezpieczone hasłem - Może edytować + Może modyfikować Upuść plik + Bezpieczne upuszczenie pliku Tylko podgląd Uprawnienia udostępniania %1$s (zdalny) diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index b41163c3b305..ab914d89cee0 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -32,6 +32,7 @@ Atividade Adicionar outro link Adicionar novo link de compartilhamento público + Adicionar novo derrubar de arquivo seguro Adicionar em %1$s Configurações avançadas Permitir recompartilhamento @@ -209,7 +210,15 @@ Dispensar notificação Exibe sua frase secreta de 12 palavras Não perturbe + Imagens múltiplas + Arquivo PDF + Escolha o tipo de exportação + Falha na geração do PDF + Gerando PDF… + Concluído Não limpar + Não foi possível criar o arquivo local + Invalid filename for local file Baixar a última versão dev Não foi possível baixar %1$s Download falhou, logue-se novamente @@ -270,8 +279,10 @@ Reportar problema ao rastreador? (requer uma conta GitHub) Erro ao recuperar o arquivo Erro recuperando modelos - Erro ao mostrar a caixa de diálogo de criptografia de configuração! + Erro ao mostrar o diálogo de configuração de criptografia! Erro ao inicializar a câmera + Erro ao iniciar a digitalização do documento + Erro ao usar a digitalização de documentos Contas Nome da tarefa Progresso @@ -622,6 +633,7 @@ Recuperando arquivo… Falhou ao carregar documento! Entrar via código QR + Digitalizar página Protegendo seus dados produtividade auto hospedada Navegar e compartilhar @@ -673,6 +685,7 @@ Protegido por senha Pode editar Baixar Arquivo + Descarte de arquivo seguro Somente visualização Permissões de compartilhamento %1$s (remoto) diff --git a/app/src/main/res/values-pt-rPT/strings.xml b/app/src/main/res/values-pt-rPT/strings.xml index 964f014188db..a77b1767f917 100644 --- a/app/src/main/res/values-pt-rPT/strings.xml +++ b/app/src/main/res/values-pt-rPT/strings.xml @@ -3,7 +3,7 @@ %1$s Aplicação Android Sobre versão %1$s - Versão %1$s, montagem #%2$s + versão %1$s, compilação #%2$s Criação de conta falhou Ícone de conta Conta não encontrada! @@ -12,9 +12,9 @@ Limpar todas as notifcações Esvaziar a reciclagem Enviar/Partilhar - Vista em grelha - Vista em lista - Restaurar contactos & calendário + Visualização em grelha + Visualização em lista + Restaurar contactos e calendário Copiar Nova pasta Mover @@ -29,15 +29,16 @@ Ainda sem registo de eventos, tais como adições, alterações ou partilhas. Enviar Enviar hiperligação para… - Actividade + Atividade Adicionar outra hiperligação Adicionar nova hiperligação de partilha pública Adicionar a %1$s Definições Avançadas Permitir repartilha + Mostra um \'\'widget\'\' do painel Procurar em %s Conta associada não encontrada! - O acesso falhou: %1$s + Acesso falhou: %1$s A conta ainda não foi adicionada a este dispositivo Já existe uma conta para o mesmo utilizador e servidor no dispositivo O utilizador inserido não corresponde com o utilizador desta conta @@ -92,6 +93,7 @@ Escolher pasta remota… Por favor, escolha um modelo e insira um nome de ficheiro. Escolha o ficheiro a manter! + Escolher widget Falha ao limpar notificações. Limpar mensagem de estado Limpar mensagem de estado após @@ -104,7 +106,7 @@ Cancelar sincronização Escolher conta Confirmar - copiar + Copiar Eliminar Erro Falta de memória @@ -139,10 +141,11 @@ Versão candidata a lançamento A versão candidata a lançamento (RC) é um snapshot da próxima versão e é espectável que seja estável. Através do teste da sua configuração individual pode ajudar-nos a assegurá-lo. Para testar, inscreva-se na loja Play ou verifique a secção \"Version\" do F-Droid. Encontrou um erro? Ocorrências estranhas? - Ajude-nos testando + Ajude-nos, testando Reportar um problema no Github - Interessado em ajudar testando a próxima versão? + Interessado em ajudar a testar o que será a próxima versão? Configure + Remove localmente a criptografia Deseja realmente apagar %1$s? Quer realmente remover os itens seleccionados? Deseja realmente apagar %1$s e o seu conteúdo? @@ -152,6 +155,7 @@ Ficheiro em conflito %1$s Ficheiro local Se selecionou ambas as versões, o ficheiro local terá um número acrescentado ao seu nome. + Arquivo do servidor Ícone de utilizador de lista de contactos Sem permissão concedida, nada para importar. Contactos @@ -189,6 +193,7 @@ Apagar entradas Eliminar hiperligação Desseleccionado tudo + Nome do arquivo de destino Nova versão disponível Nenhuma informação disponível. Nenhuma nova versão disponível @@ -199,7 +204,9 @@ Dispensar Dispensar notificação Não incomodar + Concluído Não limpar + Não é possível criar ficheiro local Transferir a última versão de desenvolvimento Não foi possível transferir %1$s A transferência falhou, inicie novamente a sessão @@ -264,10 +271,10 @@ UUID Tarefas de segundo plano Cancelar todos os trabalhos - Elimina jobs inativos - Agenda um job de teste - Executa o job de teste - Para o job de teste + Elimina trabalhos inativos + Agenda um trabalho de teste + Executa o trabalho de teste + Para o trabalho de teste Migrações (atualização da aplicação) Preferências Transferência de ficheiros @@ -382,28 +389,28 @@ Última cópia de segurança: %1$s Hiperligação Nome da hiperligação - Permtir carregamentos e edições + Permitir envios e edição A editar Pasta de carregamento apenas - Apenas visualizar + Visualizar apenas Layout listado - Mostrar mais resultados + Carregar mais resultados Não existem ficheiros nesta pasta. Ficheiros não encontrados no sistema de ficheiros local %1$s/%2$s Não existem mais pastas. Bloquear ficheiro %1$s registos de aplicação Android - Não encontro aplicação para o envio de logs. Por favor Instale um cliente de email. + Não foi encontrada nenhuma aplicação para o envio de registos. Por favor, Instale um cliente de correio eletrónico. Iniciar Sessão - O caminho para a sua %1$s interface web quando abre no seu navegador. - Eliminar logs + A hiperligação para a sua interface da Web %1$s quando a abre no seu navegador. + Eliminar registos Atualizar - Pesquisar logs - Enviar logs por email - Logs: %1$d kB, pesquisa encontrada %2$d / %3$d em %4$d ms + Procurar registos + Enviar registos por correio eletrónico + Registos: %1$d kB, consulta correspondida %2$d / %3$d em %4$d ms A carregar... - Logs: %1$d kB, sem filtro + Registos: %1$d kB, sem filtro Registos de Alterações Servidor em modo de manutenção Limpar dados @@ -430,7 +437,7 @@ Ocorreu um ocorreu quando tentava mover este ficheiro ou pasta Não é possível mover a pasta para uma das suas próprias pastas internas O ficheiro já existe na pasta de destino - Impossível mover o ficheiro. Verifique se existe. + Não é possível mover o ficheiro. por favor, verifique se este existe. Movido para… Erro quando esperava uma resposta do servidor. A operação em curso não foi concluída. Ocorreu um erro na conexão com o servidor @@ -443,12 +450,12 @@ Nova notificação Uma nova versão foi criada Nenhuma aplicação disponível para lidar com links - Não existe calendário + O calendário não existe Só é permitida uma conta. Nenhuma aplicação disponível para lidar com PDF Enviar Não foi possível enviar a nota - Ícone: Nota + Ícone de nota Falha ao executar a acção. Mostra o progresso da transferência Transferências @@ -535,8 +542,8 @@ Recomendar a um amigo Mostrar ficheiros ocultados Obter código fonte - Pasta com o armazenamento de dados - Gerir as pastas que enviam automaticamente para o servidor + Pasta de armazenamento de dados + Gerir as pastas para o envio automático Pasta Local Pasta Remota Tema @@ -552,13 +559,13 @@ Notificações \"push\" desactivadas devido a dependências sobre serviços proprietários Google Play. Sem notificações \"push\" devido a sessão de acesso de desatualizada. Por favor, considere readicionar a sua conta. Notificações \"push\" actualmente não disponíveis. - Código QR não foi lido! + Não foi possível ler o código QR! Teste %1$s no seu dispositivo! Eu quero convidar-te para utilizares %1$sno teu dispositivo.\nTransfere aqui: %2$s %1$s ou %2$s - Actualizar + Recarregar (remoto) - Impossível encontrar o ficheiro! + Não foi possível encontrar o ficheiro! Eliminação falhou Falha ao remover notificação. Remover @@ -575,20 +582,20 @@ A obter o ficheiro… Falha ao carregar o documento! acesso através de código QR - Protegendo os seus dados + A proteger os seus dados aplicações de produtividade instaladas localmente Navegar e partilhar - tudo na ponta dos seus dedos + todas as ações na ponta dos seus dedos Atividades, partilhas, ... - tudo facilmente acessível + tudo rapidamente acessível Todas as suas contas - Num único lugar + num único lugar Envio automático - para as suas fotos & vídeos - Calendário & contactos + para as suas fotografias e vídeos + Calendário e contactos Sincronizar com DAVx5 Selecionar tudo - Escolha um modelo + Por favor, selecione um modelo Seleccionar modelo Enviar Enviar nota para o destinatário @@ -604,18 +611,18 @@ Expira %1$s Partilhar %1$s %1$s (grupo) - Partilhar link interno - Link de partilha interno só funciona se os utilizadores tiverem acesso ao ficheiro - Link de partilha interno só funciona se os utilizadores tiverem acesso à pasta + Partilhar hiperligação interna + A hiperligação de partilha interna só funciona para os utilizadores com acesso a este ficheiro + A hiperligação de partilha interna só funciona para os utilizadores com acesso a esta pasta em %1$s Partilhar hiperligação Você deve introduzir uma palavra-passe - Erro ao tentar partilhar este ficheiro ou pasta. - Impossível partilhar. Verifique se o ficheiro existe. + Ocorreu um erro quando tentava partilhar este ficheiro ou pasta. + Não é possível partilhar. Por favor, verifique se o ficheiro existe. para partilhar este ficheiro Insira uma palavra-passe opcional Introduza uma palavra-passe - Link de partilha (%1$s) + Hiperligação de partilha (%1$s) Definir a data de expiração Defina a senha Protegido com Senha @@ -624,7 +631,7 @@ Permissões de Partilha %1$s (remoto) %1$s (conversação) - Nome, Cloud ID federado ou endereço de email ... + Nome, Id. da Nuvem Federada ou endereço de correio eletrónico... Enviar nova mensagem Nota para o destinatário Definições @@ -702,13 +709,13 @@ Sincronização falhou A sincronização falhou, inicie novamente a sessão O conteúdo do ficheiro já foi sincronizado - Sincronização da pasta %1$snão foi concluída + Não foi possível concluir a sincronização da pasta %1$s Para a versão 1.3.16, os ficheiros enviados deste dispositivo são copiados para a seguinte pasta %1$s para evitar a falha de dados quando um só ficheiro é sincronizado em múltiplas contas.\n\nDevido a esta alteração, todos os ficheiros enviados com as versões mais antigas desta aplicação serão copiadas para a seguinte pasta %2$s. Contudo, um erro evitou a conclusão desta operação durante a sincronização da conta. Pode deixar o(s) ficheiro(s) como estão e eliminar a associação para %3$s, ou mover o(s) ficheiro(s) para a pasta %1$s e manter a associação para %4$s.\n\nEm baixo está a lista dos ficheiros locais e dos ficheiros remotos na pasta %5$s em que foram associados. Alguns ficheiros locais foram esquecidos Obter a versão mais recente do ficheiro. Escolher o que sincronizar Libertar espaço - %1$s tem %2$s, mas apenas %3$s está disponível no equipamento. + %1$s tem %2$s, mas só está disponível %3$sno dispositivo. Espaço insuficiente Botão de estado de sincronização Ficheiros @@ -735,13 +742,13 @@ Aproveite o novo e melhorado envio automático. É possível recuperar ficheiros eliminados a partir daqui. Ficheiro %1$s não pôde ser apagado! Ficheiro %1$s não pôde ser restaurado! - Impossível ler a pasta da reciclagem! + Falhou o carregamento da reciclagem! Os ficheiros não puderam ser permanentemente apagados! Desbloquear ficheiro Existem comentários não lidos Encriptação não definida Remover dos favoritos - Erro ao tentar eliminar a partilha deste ficheiro ou pasta. + Ocorreu um erro enquanto tentava remover a partilha deste ficheiro ou pasta. Impossível eliminar a partilha. Verifique se o ficheiro existe. para cancelar a partilha deste ficheiro Cancelamento da partilha falhou @@ -779,7 +786,7 @@ Aproveite o novo e melhorado envio automático. %1$s não está autorizado para ler um ficheiro recebido Não foi possível copiar o ficheiro para uma pasta temporária. Tente reenviá-lo. Não foi encontrado o ficheiro selecionado para envio. Por favor, verifique se o ficheiro existe. - Impossível enviar o ficheiro + Este ficheiro não pode ser enviado Nenhum ficheiro para enviar Nome da pasta Escolha uma pasta para envio @@ -815,14 +822,14 @@ Aproveite o novo e melhorado envio automático. Ficheiro local não encontrado Erro de permissão Certificado de servidor desconfiável - Obtendo a versão do servidor... + A obter a versão do servidor... Aplicação terminada Concluído Erro desconhecido Vírus detectado. O envio não pode ser completado! A aguardar para sair do modo de poupança de bateria A aguardar carregamento - À espera de uma rede Wi-Fi sem custos + A aguardar por uma rede Wi-Fi sem custos Utilizador Endereço Correio eletrónico @@ -841,7 +848,7 @@ Aproveite o novo e melhorado envio automático. Passar à frente Novo em %1$s Qual é o seu estado? - Indisponível + Não disponível Enviar mensagem A pasta de armazenamento de dados não existe! Poderá estar relacionado com a reposição de uma cópia de segurança. Revertendo para a definição de base. Verifique as definições para ajustar a localização da pasta de armazenamento dos dados. diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 3f903bff4e6e..ba70654392b1 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -209,7 +209,9 @@ Elimină notificarea Afișează fraza de acces din 12 cuvinte Nu deranja + Realizat Nu curăța + Nu se poate creea un fisier local Descarcă ultima versiune dezvoltator Nu s-a putut descărca %1$s Descărcarea a eșuat, autentificați-vă din nou @@ -271,6 +273,7 @@ Eroare la obținerea fișierului Eroare la obținerea șabloanelor Eroare la pornirea camerei + Eroare la utilizarea scanării documentelor Conturi Numele serviciului Progres diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index b547f585f7c1..f27aba34e06b 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -147,6 +147,7 @@ Сообщить о проблеме на GitHub Хотите помочь проверкой новых функций, разрабатываемых для следующей версии? Настроить + Отключить шифрование на устройстве Действительно удалить «%1$s»? Действительно удалить выбранные объекты? Действительно удалить «%1$s» и его содержимое? @@ -206,8 +207,17 @@ Отключить Отклонить Скрыть уведомление + Отображение вашей парольной фразы из 12 слов Не беспокоить + Несколько изображений + Файл в формате PDF + Выберите тип экспорта + Ошибка при создании файла PDF + Сохранение в PDF… + Готово Не очищать + Невозможно создать локальный файл + Недопустимое имя для локального файла Скачать последнюю версию для разработчиков Скачивание %1$s не может быть завершено Ошибка скачивания, необходимо авторизоваться @@ -268,7 +278,10 @@ Сообщить о проблеме? (требуется учётная запись на GitHub) Ошибка при получении файла Ошибка получения шаблона + Ошибка при отображении диалога настройки шифрования! Не удалось открыть камеру + Ошибка во время запуска сканирования + Ошибка при сканировании документа Аккаунты Имя задания Прогресс @@ -517,6 +530,8 @@ Запретить Для отправки и скачивания файлов требуются дополнительные права доступа. Не найдено приложений для обработки изображений + Закрепить на начальном экране + Открыть %1$s 389 Кбайт placeholder.txt 12:23:45 @@ -546,6 +561,8 @@ Основные Больше Ежедневное резервное копирование календаря + Неожиданная ошибка при настройке DAVx5 (ранее известного как DAVdroid) + Сквозное шифрование настроено. Мнемофраза E2E Для просмотра мнемофразы включите системную защитную блокировку. Показывать уведомления о сканировании медиафайлов @@ -557,6 +574,7 @@ Исходный файл будет… Будут созданы папки года и вложенные в них папки номеров месяцев Создавать вложенные папки + Добавьте сквозное шифрование для этого клиента Лицензия Код доступа к приложению Системная защитная блокировка включена @@ -567,6 +585,8 @@ Блокировка кодом Управление аккаунтами Рекомендовать другу + Удалить шифрование локально + Настройка сквозного шифрования Показывать скрытые файлы Получить исходный код Папка хранения данных @@ -594,6 +614,8 @@ Перезагрузить (удалённо) Не удалось найти файл. + Вы можете удалить сквозное шифрование локально на этом клиенте + Вы можете удалить сквозное шифрование локально на этом клиенте. Зашифрованные файлы останутся на сервере, но больше не будут синхронизироваться с этим компьютером. Ошибка при удалении Не удалось скрыть уведомление. Удалить @@ -611,6 +633,7 @@ Получение файла… Не удалось загрузить документ. Войти с использованием QR кода + Сканировать страницу Защита данных размещение на собственных ресурсах Простой поиск и обмен файлами @@ -637,6 +660,7 @@ Использовать изображение Установить состояние Установить сообщение о состоянии + Во время настройки сквозного шифрования вы получите случайную мнемонику из 12 слов, которая понадобится для открытия файлов на других устройствах. Оно будет храниться только на этом устройстве и может быть повторно показано на этом экране. Пожалуйста, запишите его в надежном месте! Общий ресурс Опубликовать и скопировать ссылку Общий доступ diff --git a/app/src/main/res/values-sc/strings.xml b/app/src/main/res/values-sc/strings.xml index c67609f3a474..f6415a162ebf 100644 --- a/app/src/main/res/values-sc/strings.xml +++ b/app/src/main/res/values-sc/strings.xml @@ -193,7 +193,9 @@ Iscarta Iscarta notìfica No istorbes + Fatu Non nche ddu lìmpies + No at fatu a creare s\'archìviu locale Iscàrriga s\'ùrtima versione dispositivu Impossìbile a iscarrigare %1$s Iscarrigamentu faddidu, torra a intrare diff --git a/app/src/main/res/values-sk-rSK/strings.xml b/app/src/main/res/values-sk-rSK/strings.xml index 7683ab918b00..2f45472c0ac5 100644 --- a/app/src/main/res/values-sk-rSK/strings.xml +++ b/app/src/main/res/values-sk-rSK/strings.xml @@ -209,7 +209,9 @@ Odmietnuť upozornenie Zobrazí vaše prístupové heslo o 12-tich slovách Nerušiť + Hotové Nemazať + Nieje možné vytvoriť lokálny súbor Stiahnuť poslednú vývojársku verziu Nepodarilo sa stiahnuť %1$s Sťahovanie neúspešné, je potrebné sa znovu prihlásiť @@ -271,6 +273,7 @@ Chyba pri získavaní súboru Chyba pri načítaní šablón Chyba pri otváraní fotoaparátu + Chyba pri skenovaní dokumentov Účty Názov úlohy Pokrok diff --git a/app/src/main/res/values-sl/strings.xml b/app/src/main/res/values-sl/strings.xml index 58c0f5550f2f..6e7309874061 100644 --- a/app/src/main/res/values-sl/strings.xml +++ b/app/src/main/res/values-sl/strings.xml @@ -35,6 +35,7 @@ Dodaj v %1$s Napredne nastavitve Dovoli nadaljnje omogočanje souporabe + Pokaži en gradnik iz nadzorne plošče Poišči v %s Povezanega računa ni mogoče najti! Dostop je spodletel: %1$s @@ -77,6 +78,7 @@ Avatar Ne spremljam Nastavitve varnostnega kopiranja + Varnostno kopiranje stikov koledarja & Zapri Onemogoči Naprava ima najverjetneje omogočeno možnost optimizacije porabe baterije. Program AutoUpload pravilno deluje le, če je izvzet iz nje. @@ -86,6 +88,7 @@ Koledarji Prišlo je do težav med nalaganjem potrdila. Dnevnik razvojne različice + Preverite kasneje ali ponovno naložite Izbirno polje Izberi krajevno mapo… Izberi mesto @@ -204,9 +207,16 @@ Onemogoči Opusti Opusti obvestilo - Pokaži 12 besedno šifrirno geslo + Pokaže 12 besedno šifrirno geslo Ne moti + Več slik + Datoteka PDF + Izbor vrste izvoza + Ustvarjanje datoteke PDF je spodletelo + Ustvarjanje datoteke PDF ... + Končano ne počisti + Krajevne datoteke ni mogoče ustvariti Prejmi najnovejšo razvojno različico Ni mogoče prejeti %1$s Prejemanje je spodletelo; zahtevana je ponovna prijava. @@ -236,6 +246,7 @@ %1$s od %2$s uporabljeno Skupaj %1$s Samodejno pošiljanje + Celovito šifriranje E2E ni še nastavljeno. Nastavi kot šifrirano Nastavitev šifriranja Poteka odšifriranje… @@ -267,6 +278,8 @@ Pridobivanje datoteke je spodletelo Napaka pridobivanja predlog Napaka začenjanja kamere + Napaka pri začenjanju preverjanja dokumenta + Napaka uporabe preverjanja dokumenta Računi Ime opravila Napredek pošiljanja @@ -316,11 +329,15 @@ Mogoče v drugi mapi? Datoteke in mape v souporabi bodo zbrane na tem mestu. Ni še datotek v souporabi + Poizvedba ni vrnila rezultatov mapa Poteka nalaganje … Ni določenega programa za odpiranje te vrste datotek. pred nekaj sekundami Zahtevana so posebna dovoljenja + Dovoljenje shrambe + %1$s deluje najbolje z dostopom do shrambe. Lahko izberete popoln dostop do vseh datotek, ali samo bralni dostop do fotografij in videoposnetkov. + %1$s potrebuje dovoljenje za upravljanje z datotekami, da lahko pošlje datoteke. Na voljo sta možnosti popolnega dostopa do vseh datotek in dostop le za branje in ogled fotografij oziroma videoposnetkov. Poteka preverjanje cilja … Poteka čiščenje … Poteka osodabljanje podatkovne mape @@ -386,6 +403,7 @@ Gostite osebni strežnik Ikona za prazen seznam Ikona gradnika nadzorne plošče + Ikona vnosa gradnikov v mapi %1$s Pošlji tudi obstoječe datoteke Usklajuj le med polnjenjem naprave @@ -409,6 +427,8 @@ Določi mapo Preteče: %1$s Zakleni datoteko + Zaklenjeno s strani %1$s + Zaklenjeno s strani %1$s %1$s dnevniki programa Ni nameščenega programa za pošiljanje dnevnikov. Namestiti je treba program za elektronsko pošto. Prijava @@ -465,6 +485,8 @@ Ni predmetov Dovoljen je le en račun Ni nameščenega programa za odpiranje datotek PDF + Na voljo ni nobenega programa za pošiljanje izbranih datotek + Izbrati je treba vsaj eno dovoljenje za souporabo. Pošlji Sporočilca ni mogoče poslati Ikona opombe @@ -499,6 +521,7 @@ Koda PIN je izbrisana Koda PIN je shranjena Napačna koda PIN + Kliknite na stran za približanje Dovoli Zavrni Za prejemanje oziroma pošiljanje datotek v oblak so zahtevana dodatna dovoljenja. @@ -510,8 +533,8 @@ 12:23:45 To je vsebnik predmetov 2012/05/18 12:23 PM - končaj - preklop + ustavi + preklopi Onemogočanje varčevanja lahko povzroči pošiljanje datotek, ko je napetost baterije že nizka! izbrisano ohranjeno v izvorni mapi @@ -533,6 +556,9 @@ Dev Splošno Več + Dnevno varnostno kopiranje koledarja & stikov + Nepričakovana napaka pri nastavljanju DAVx5 (prej poznano kot DAVdroid) + Celovito šifriranje E2E je nastavljeno! Mnemonika E2E Za prikaz mnemonike izberite poverila naprave. Pokaži obvestila iskanja predstavnih vsebin @@ -544,6 +570,7 @@ Izvorna datoteka bo… Shrani v podmape kot leto in mesec Uporabi podmape + Dodaj celovito šifriranje E2E na to napravo Dovoljenje Koda PIN programa Poverila naprave so omogočena @@ -554,7 +581,8 @@ Koda PIN Upravljanje z računi Priporoči prijatelju - Odstrani šifriranje krajevno + Krajevno odstrani šifriranje + Nastavi celovito šifriranje E2E Pokaži skrite datoteke Pridobi izvorno kodo Mapa podatkovne shrambe @@ -582,6 +610,7 @@ Ponovno naloži (oddaljeno) Iskanje datoteke je spodletelo! + Na tej napravi lahko odstranite krajevno celovito šifriranje E2E Brisanje je spodletelo Odstranjevanje obvestil je spodletelo. Odstrani @@ -599,6 +628,7 @@ Poteka pridobivanje datoteke… Nalaganje dokumenta je spodletelo! Prijava s kodo QR + Optično preberi stran Zaščita podatkov zasebno produkcijsko okolje Brskanje in souporaba @@ -625,6 +655,7 @@ Nastavi stanje Nastavi sporočilo stanja Souporaba + Omogoči souporabo & Kopiraj povezavo Souporaba %1$s Preteče %1$s @@ -646,6 +677,7 @@ Nastavi geslo Zaščiteno z geslom Lahko ureja + Poteg datotek Le ogled Dovoljenja souporabe %1$s (oddaljeno) @@ -711,6 +743,7 @@ Video Glasba Poln dostop + Predstavna vsebina samo za branje Slike Okolje, ki gostuje, kjer vi želite, in vam omogoča popoln nadzor.\n\n Možnosti:\n* Enostaven za uporabo in sodoben vmesnik, ki je skladen z vašim strežnikom\n* Omogoča nalaganje datotek v oblak Nextcloud\n* Omogoča izmenjavo datotek z drugimi\n* Ohrani vaše datoteke in mape vedno usklajene\n * Podpira iskanje po vseh dodeljenih mapah na strežniku\n * Podpira samodejno nalaganje fotografij in videoposnetkov z naprave\n * Usklajuje in posreduje obvestila\n * Podpora je uporaba več računov\n* Zagotavlja varen dostop do podatkov s prstnim odtisom ali kodo PIN\n * Izvorno podpira sistem DAVx5 (poznan kot DAVdroid) za enostavno nastavitev usklajevanja koledarja in stikov\n\nPoročila o težavah je mogoče poslati na https://github.com/nextcloud/android/isissue in o programu razpravljati na https://help.nextcloud.com/c/clients/android\n\nAli šele spoznavate oblak Nextcloud? To je je zasebni strežnik za usklajevanje in sporočanje. Je brezplačna programska oprema, ki jo lahko namestite na svojem strežniku ali gostujete pri številnih ponudnikih. Vedno imate nadzor nad fotografijami, koledarjem in podatki stikov, nad dokumenti in vsem drugim.\n\nVse o Nextcloud izveste na https://nextcloud.com. Okolje, ki vam omogoči popoln nadzor nad datotekami.\nUporabljate uradno razvojno različico, ki omogoča zagon nepreizkušene, dnevno spreminjajoče se kode, ta pa lahko povzroči nestabilnost in izgubo podatkov. Program je namenjen uporabnikom, ki so pripravljeni preizkušati novosti, poročati o težavah in iskati napake. Programa ni priporočljivo uporabiti za resno delo!\n\nObe različici, stabilna in razvojna, sta na voljo na F-droid in ju je mogoče uporabljati nameščeni sočasno. @@ -723,6 +756,7 @@ \"%1$s\" vam je oddan v souporabo Uporabnik %1$s je omogočil souporabo \"%2$s\" Le slike + Slike & videoposnetki Le posnetki Predlagaj Zaznani spori @@ -801,6 +835,7 @@ Zaklepanje mape je spodletelo Šifriranje je podprto z različico >= Android 5.0 Ni dovolj prostora za kopiranje izbranih datotek v mapo %1$s. Ali želiš datoteke premakniti na novo mesto? + Optično preberi dokument s fotoaparatom Zaznan je spor usklajevanja, ki ga je treba razrešiti ročno Neznana napaka Izberi @@ -872,6 +907,7 @@ Preskoči Novo v %1$s Kako želite nastaviti stanje? + Gradniki so na voljo samo na %1$s 25 ali pozneje Ni na voljo Pošlji elektronsko sporočilo Podatkovna mapa ne obstaja! @@ -888,12 +924,30 @@ Spodletelo je kopiranje %1$d datotek iz mape %2$s v Spodletelo je kopiranje %1$d datotek iz mape %2$s v + + Ustvarjeno je %1$d novo določilo UID + Ustvarjeni sta %1$d novi določili UID + Ustvarjena so %1$d nova določila UID + Ustvarjenih je %1$d novih določil UID + + + Obdelan je %d vnos. + Obdelana sta %d vnosa. + Obdelani so %d vnosi. + Obdelanih je %d vnosov. + Najden je %d podvojen vnos. Najdena sta %d podvojena vnosa. Najdeni so %d podvojeni vnosi. Najdenih je %d podvojenih vnosov. + + Izvožena je %d datoteka. + Izvoženi sta %d datoteki. + Izvožene so %d datoteke. + Izvoženih je %d datotek. + %1$d mapa %1$d mapi diff --git a/app/src/main/res/values-sq/strings.xml b/app/src/main/res/values-sq/strings.xml index 43d923844a47..dac75f1b1781 100644 --- a/app/src/main/res/values-sq/strings.xml +++ b/app/src/main/res/values-sq/strings.xml @@ -175,6 +175,8 @@ Çaktivizoje Hiq Hiq lajmërimin + U krye + Nuk mund të krijohet skedar lokal Shkarkoni versionin më të fundit dev S\'mund të shkarkohej %1$s Shkarkimi dështoi, hyni përsëri diff --git a/app/src/main/res/values-sr-rSP/strings.xml b/app/src/main/res/values-sr-rSP/strings.xml index 20e4742927a4..d027122844df 100644 --- a/app/src/main/res/values-sr-rSP/strings.xml +++ b/app/src/main/res/values-sr-rSP/strings.xml @@ -161,6 +161,8 @@ Isključi Odbaci Skloni obaveštenje + Gotovo + Ne mogu da napravim lokalni fajl Preuzmite najnoviju razvojnu verziju Ne mogu da preuzmem %1$s Neuspešno skidanje, ponovo se prijavite diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index eef9ed614236..bbc947b6b990 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -10,9 +10,11 @@ Избриши неуспела отпремања Уреди Очисти сва обавештења + Испразни корпу за отпатке Слање/Дељење Приказ мреже Приказ листе + Обнови календар контакта & Копирај Нова фасцикла Премести @@ -30,9 +32,11 @@ Активност Додај још једну везу Додај везу новог јавног дељења + Додај ново безбедно место за спуштање фајлова Додај у %1$s Напредне поставке Дозволи дељење даље + Приказује један виџет са контролне табле Тражи у %s Придружени налог није нађен! Неуспешан приступ: %1$s @@ -73,17 +77,29 @@ Искључи проверу уштеде батерије Сакриј фасциклу Аватар + Одсутан + Поставке резервне копије + Резервна копија календара контакта & Затвори Искључи Аутоматско отпремање ради само ако изузмете ову апликацију из оптимизације батерије. Оптимизација батерије + Задржано услед превише неуспелих покушаја Календар + Календари Појавио се проблем приликом учитавања сертификата. Дневник измена развојне верзије + Покушајте касније или поново учитајте. Кућица Одаберите локалну фасциклу… + Изаберите локацију Одаберите удаљену фасциклу… + Молимо вас да изаберете шаблон и унесете назив фајла. + Изаберите који фајл желите да задржите! + Изаберите виџет Не могу да обришем обавештења. + Обриши статусну поруку + Обриши статусну поруку након Текст копиран са %1$s Нема текста за копирање у клипборд Веза ископирана @@ -132,13 +148,17 @@ Пријавите проблем на Гитхабу Заинтересовани сте да помогнете тестирајући кандидате за званично издање? Подеси + Уклони локално шифровање Заиста желите да обришете %1$s? Заиста желите да обришете означене ставке? Заиста желите да обришете %1$s и сав њен садржај? Заиста желите да обришете означене ставке и њихов садржај? Само локално Грешка при прављењу дијалога сукоба! + Конфликтни фајл %1$s + Локални фајл Ако изаберете обе верзије, локални фајл имаће број придодат свом називу. + Серверски фајл Икона корисника за листу контаката Није дата дозвола. Ништа није увезено. Контакти @@ -168,20 +188,37 @@ Додај информације о фасцикли прави информације о фасцикли Акредитиви искључени + Дневна резервна копија + Подаци који се чувају Непознато Неисправни акредитиви Уклони налог Уклонити налог %s и избрисати све локалне фајлове?\n\nБрисање се не може опозвати. Обриши уносе + Обриши линк Поништи цео избор + Циљно име фајла Доступна нова верзија Нема информација. Нема доступних нових верзија. Затвори + Није проверено постојање дупликата. Дигест алгоритам није доступан на вашем уређају. + Пријављивање помоћу директног линка није успело! Искључи Одбаци Уклони обавештење + Приказује вашу безбедносну реченицу дужине 12 речи + Не узнемиравај + Више слика + PDF фајл + Изаберите тип извоза + Није успело генерисање PDF фајла + Генеришем PDF… + Готово + Не бриши + Не могу да направим локални фајл + Неисправно име за локални фајл Преузмите најновију развојну верзију Не могу да преузмем %1$s Неуспешно преузимање. Поново се пријавите @@ -211,6 +248,7 @@ %1$s од %2$s заузето %1$s искоришћено Аутоматска отпремања + E2E још увек није подешено Постави као шифровано Подесите шифровање Дешифрујем… @@ -227,15 +265,24 @@ Подесите шифровање Не могу да сачувам кључеве. Покушајте поново. Грешка при дешифровању. Погрешна лозинка? + Унесите име циљног фајла Унесите назив фајла %1$s се не може копирати у локалну фасциклу %2$s Критична грешка: не могу да обавим операцију + Грешка при избору датума Грешка при коментарисању фајла %1$s се срушио + Грешка приликом креирања фајла из шаблона + Грешка приликом приказивања акција над фајлом + Грешка приликом промене статуса закључавања фајла Пријави + Да пријавим проблем пратиоцу? (потребан је GitHub  налог) Грешка при добављању фајла Грешка при добављању шаблона + Грешка приликом приказа дијалога за подешавање шифрирања! Грешка при покретању камере + Грешка приликом почетка скенирања документа + Грешка при употреби скенирања документа Налози Назив посла Напредак @@ -252,7 +299,9 @@ Пресељења (надоградња апликације) Поставке Инжењерски тест режим + Пренос фајлова Стави тест преузимање у ред чекања + Стави тест отпремање у ред Удаљена путања Пренеси Преузми @@ -264,6 +313,7 @@ Неуспело освежавање сучеља Додај у омиљене Омиљени + Име фајла већ постоји Обриши Грешка при добављању активности за фајл Грешка при учитавању детаља @@ -272,6 +322,7 @@ Отпремите неки садржај или синхронизујте са вашим уређајима. Још ништа није омиљено Фајлови и фасцикле обележене као омиљене ће се појавити овде. + Није пронађена ниједна слика или видео Овде нема фајлова Нема резултата у овој фасцикли Нема резултата @@ -281,10 +332,15 @@ Можда су у некој другој фасцикли? Фајлови и фасцикле које делите појавиће се овде. Још се ништа не дели + Ваш упит није вратио ниједан резултат фасцикла Учитавам… Немате апликацију за овај тип фајла. пре пар секунди + Потребне дозволе + Дозволе за складиште + %1$s најбоље ради када има дозволу да приступи складишту. Можете избрати пуни приступ свим фајловима, или приступ само-за -читање фотографија и видео снимака. + %1$s захтева дозволе управљања за отпремање фајлова. Можете изабрати пуни приступ свим фајловима, или приступ само-за-читање слика и видео снимака. Проверавам одредиште… Чистим… Ажурирам фасциклу са подацима @@ -342,33 +398,49 @@ Удаљени: %1$s Сви фајлови су премештени Проследи + 4 сата + Резултат имена ће бити скирвени фајл Назив Белешка Лозинка Сервер није доступан Поставите сопствени сервер + Икона за празну листу + Икона за виџет контролне табле + Икона за ставку виџета + У фолдеру %1$s Отпреми и постојеће фајлове Отпремај само на пуњењу /InstantUpload Неисправан УРЛ Невидљива Ознака не може да буде празна + Последња резервна копија: %1$s Веза + Име линка Дозволи отпремање и уређивање + Уређивање Превлачење фајлова (само за отпремање) + Само преглед Распоред као листа Учитај још резултата Нема фајлова у овој фасцикли. Фајл није нађен у локалном фајл-систему %1$s/%2$s Нема више фасцикли + Отвори фолдер + Истиче: %1$s Закључај фајл + Закључао %1$s + Закључала апликација %1$s Записници %1$s Андроид апликације Нема апликације за слање дневника. Инсталирајте клијент за е-пошту. Пријава + Линк на ваш %1$s веб интерфејс када га отворите у прегледачу. Обриши записнике Освежи Претражи записнике + Пошаљи дневнике и-мејлом Записници: %1$d kB, упит је пронашао %2$d/%3$d за %4$dms Учитавам… Записници: %1$d kB, без филтрирања @@ -410,9 +482,15 @@ видео записима Ново обавештење Направљена је нова верзија + Нема акција за овог корисника Нема апликације која зна да отвори везу + Не постоји календар + Нема апликације која може да обради мејл адресу + Нема ставки Дозвољен је само један налог Нема апликације која приказује ПДФ + Не постоји доступна апликација за слање изабраних фајлова + Молимо вас да изаберете барем једну дозволу за дељење. Пошаљи Не могу да пошаљем белешку Иконица белешке @@ -434,6 +512,8 @@ Проверите касније. Нема везе са интернетом 1 сат + На мрежи + Мрежни статус Сервер је превише стар. Ажурирајте га! Додатни мени Унесите кôд @@ -445,15 +525,20 @@ Кôд обрисан Код је сачуван Неисправан код + Тапните на страницу да је зумирате Дозволи Одбиј Потребне су дозволе за отпремање и преузимање фајлова. Нема апликације којом се поставља слика + Закачи на Почетни екран + Отвори %1$s 389 KB чувамместо.txt 12:23:45 Ово је местодржач 2012/05/18 12:23 ПоП + стоп + пребацивање Искључивање провере стања батерије може да доведе до тога да отпремате фајлове са празном батеријом! обрисано остављен у изворној фасцикли @@ -475,6 +560,9 @@ Развојно Опште Остало + Дневна резервна копија контаката вашег календара & + Неочекивана грешка приликом подешавања DAVx5 (раније познатог под именом DAVdroid) + Подешено је шифрирање од почетка-до-краја! Е2Е мнемоник За приказивање мнемоника, омогућите акредитиве на уређају. Прикажи обавештења о скенирању медија @@ -486,6 +574,7 @@ Оригинални фајл биће… Сачувај у потфасциклама према години и месецу Користи потфасцикле + Додај шифрирање од почетка-до-краја ка овом клијенту Лиценца Кôд за апликацију Акредитиви уређаја укључени @@ -496,9 +585,12 @@ Код Управљање налозима Препоручи пријатељу + Локално уклони шифрирање + Подешавање шифровања од-краја-до-краја Прикажи скривене фајлове Узми изворни кôд Фасцикла за податке + Управљање фолдерима за аутоматско отпремање Локална фасцикла Удаљена фасцикла Тема @@ -514,11 +606,16 @@ Брза обавештења искључена јер зависе од власничког Гугл плеј сервиса. Нема брзих обавештења јер је сесија застарела. Избришите и додајте поново налог. Брза обавештења тренутно нису доступна. + QR кôд није могао да се прочита! Испробај %1$s на свом уређају! Желим да те позовем да испробаш %1$s на свом уређају.\nПреузми га овде: %2$s %1$s или %2$s + Освежи садржај Поново учитај + (удаљено) Не могу да пронађем фајл! + Шифрирање од почетка-до-краја можете локално да уклоните на овом клијенту + Шифрирање од почетка-до-краја можете локално да уклоните на овом клијенту. Шифрирани фајлови ће остати на серверу, али се више неће синхронизовати са овим компјутером. Брисање није успело Грешка при уклањању обавештења. Уклони @@ -530,10 +627,13 @@ Поновно дељење није дозвољено Нема доступне умањене сличице. Скинути пуну слику? Поврати фајл + Обнови резервну копију Поврати обрисани фајл + Обнови изабрано Добављам фајл… Не могу да учитам документ! Пријава преко КуеР кода + Скенирај страницу Штити ваше податке продуктивност на вашем серверу Прегледај и дели @@ -546,14 +646,23 @@ слика и видео записа Календар и контакти Синхронизација помоћу DAVx5 + Грешка приликом добијања резултата претраге Означи све + Поставите фолдер са медијима + Молимо вас да изаберете један шаблон Одаберите шаблон Пошаљи Пошаљи белешку примаоцу + Пошаљи дељени ресурс Икона за слање Постави као + Пошаљи белешку Постави слику као + Постави статус + Постављање статусне поруке + Током постављања шифрирања од почетка-до-краја примићете 12 случајних речи за памћење које ће вам бити неопходне да фајлове отворите на осталим уређајима. Ово ће се сачувати само на овом уређају и може поново да се прикаже на овом екрану. Молимо вас да их забележите на неко сигурно место! Подели + Дели & Линк за копирање Дељење %1$s Истиче %1$s @@ -562,6 +671,7 @@ Подели интерну везу Интерна веза дељења ради само за кориснике који имају приступ фајлу Интерна веза дељења ради само за кориснике који имају приступ фасцикли + на %1$s Веза дељења Морате унети лозинку Десила се грешка при покушају дељења фајла или фасцикле. @@ -574,9 +684,14 @@ Постави лозинку Заштићено лозинком Може да уређује + Место за упуштање фајлова + Сигурно место за упуштање фајлова + Само преглед + Дозволе за дељење %1$s(удаљено) %1$s (разговор) Име, ИД здруженог облака или адреса е-поште… + Пошаљи нови и-мејл Напомена примаоцу Поставке Сакриј преузимање @@ -590,6 +705,8 @@ дељено путем везе Дели са вама %1$s Додавање особе за дељење није успело + Прикажи слике + Прикажи видео снимке Пријавите се преко провајдера Може ли %1$s да приступи Некстклауд налогу %2$s? Разврстај @@ -633,6 +750,8 @@ Интерно складиште Филмови Музика + Пуни приступ + Само читање медија Слике Платформа продуктивности на вашем серверу и под вашом контролом.\nОсобине:\n* Лако и модерно сучеље, усклађено са темом на серверу\n* Отпремање фајлова на Некстклауд сервер\n* Дељење фајлова са другима\n* Синхронизација омиљених фајлова и фасцикли\n* Претрага кроз све фасцикле на серверу\n* Аутоматско отпремање слика и видео записа са уређаја\n* Обавештења са сервера\n* Подршка за више налога\n* Безбедан приступ свим подацима преко отиска прста или пина\n* Интеграција са DAVx5 (раније знаном као ДАВдроид) за лако подешавање синхронизације календара и контаката\n\nСве проблеме можете да пријавите на https://github.com/nextcloud/android/issues а о апликацији дискутујте на https://help.nextcloud.com/c/clients/android\n\nНови сте на Некстклауду? Некстклауд је лични сервер за синхронизацију, дељење фајлова и комуникацију. То је слободан софтвер и можете га сами поставити на свој сервер или платити компанији да то учини уместо вас. На тај начин, сами контролишете своје слике, календаре, контакте, документа и све остало.\n\nПогледајте Некстклауд на https://nextcloud.com Платформа продуктивности на вашем серверу и под вашом контролом.\nОво је званична развојна верзија, која свакодневно доноси нове нетестиране могућности, које могу изазвати нестабилност или губитак података. Ова апликација је за кориснике који желе да тестирају и пријављују грешке, уколико до њих дође. Не користите је за свакодневни посао!\n\nИ званична и развојна верзија су доступне на Ф-Дроид порталу и могу бити инсталиране истовремено. @@ -641,8 +760,13 @@ Стримуј помоћу… Интерно стримовање није могуће Или преузмите медиј или користите спољну апликацију. + Стриктни режим: не дозвољава се HTTP веза! „%1$s“ је подељен са вама %1$s дели „%2$s“ са вама + Само слике + Слике & видео снимци + Само видео снимци + Предложи Постоје сукоби Фасцикла %1$s више не постоји Не могу да синхронизујем %1$s @@ -683,6 +807,7 @@ Одавде ћете моћи да повратите обрисане фајлове. Фајл %1$s не може да се обрише! Фајл %1$s не може да се поврати! + Није успело учитавање корпе за отпатке! Фајл не може да се обрише неповратно! Откључај фајл Постоје непрочитани коментари @@ -718,6 +843,7 @@ Неуспело закључавање фасцикле Шифровање је могуће само са >= Андроидом 5.0 Недостатак простора спречава копирање фајлова у фасциклу %1$s. Желите ли да их преместите тамо? + Скенирање документа камером Сукоб синхронизације. Разрешите га ручно Непозната грешка Одабери @@ -781,13 +907,19 @@ Додајте име, слику и детаље за контакт на страницу профила. Корисничко име Преузми + Икона ознаке за видео Сачекајте мало… Проверавам сачуване акредитиве Копирам фајл из личног складишта Слика шта је ново Прескочи Ново у %1$s + Који је ваш статус? + Виџети су доступни само на %1$s 25 или новијем + Није доступно Пошаљи е-пошту + Фолдер за чување података не постоји! + Ово може да се догоди када се резервна копија обнови на другом уређају. Враћа се на подразумевано подешавање. Молимо вас да проверите подешавања и исправите локацију фолдера за чување података. Не могу да синхронизујем %1$d фајл (конфликата: %2$d) Не могу да синхронизујем %1$d фајла (конфликата: %2$d) @@ -798,6 +930,46 @@ Грешка приликом копирања %1$d фајла из фасцикле %2$s Грешка приликом копирања %1$d фајлова из фасцикле %2$s + + Уписан је %1$d догађај на %2$s + Уписана су %1$d догађаја на %2$s + Уписано је %1$d догађаја на %2$s + + + Креиран је %1$d свежи UID + Креирана су %1$d свежа UID + Креирано је %1$d свежих UID + + + Обрађена је %d ставка. + Обрађене су %d ставке. + Обрађено је %d ставки. + + + Пронађена је %d ставка дупликат. + Пронађене су %d ставке дупликати. + Пронађено је %d ставки дупликата. + + + Извезен је %d фајл + Извезена су %d фајла + Извезено је %d фајлова + + + Није успео извоз %d фајла + Није успео извоз %d фајла + Није успео извоз %d фајлова + + + Извезен је %d фајл, остали су прескочени услед грешке + Извезена су %d фајла, остали су прескочени услед грешке + Извезено је %d фајлова, остали су прескочени услед грешке + + + Извешће се %d фајл. Погледајте обавештење за више детаља. + Извешће се %d фајла. Погледајте обавештење за више детаља. + Извешће се %d фајлова. Погледајте обавештење за више детаља. + %1$d фасцикла %1$d фасцикле diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index b56eed177f2b..ad32f1facff3 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -32,6 +32,7 @@ Aktivitet Lägg till en annan länk Lägg till en ny publik delad länk + Lägg till ny säker gömd fillista Lägg till %1$s Avancerade inställningar Tillåt dela vidare @@ -209,7 +210,15 @@ Avfärda notifiering Visar din 12-ord långa lösenordsfras Stör ej + Flera bilder + PDF-fil + Välj exporttyp + PDF-generering misslyckades + Skapar PDF... + Klar Rensa inte + Kan inte skapa lokal fil + Ogiltigt filnamn för lokal fil Hämta senaste utvecklingsversionen Kunde inte hämta %1$s Hämtningen misslyckades, logga in igen @@ -270,8 +279,10 @@ Rapportera fel till Tracker? (kräver ett konto hos GitHub) Fel vid mottagning av fil Fel vid hämtning av mallar - Fel vid visning av dialogruta för uppsättning av kryptering! + Det gick inte att visa dialogrutan för krypteringsinställningar! Fel vid start av kamera + Fel vid start av dokumentskanning + Fel vid dokumentskanning Konton Uppdragsnamn Status @@ -623,6 +634,7 @@ Tar emot fil… Kunde inte läsa in dokument! Logga in via QR-kod + Skanna sida Skydda dina data egenhyst produktivitet Bläddra och dela @@ -673,7 +685,8 @@ Sätt lösenord Lösenordsskyddad Kan ändra - Släpp fil + Göm fillista + Säker gömd fillista Skrivskyddat läge Dela behörigheter %1$s (extern) diff --git a/app/src/main/res/values-th-rTH/strings.xml b/app/src/main/res/values-th-rTH/strings.xml new file mode 100644 index 000000000000..c14a4f17b021 --- /dev/null +++ b/app/src/main/res/values-th-rTH/strings.xml @@ -0,0 +1,599 @@ + + + แอป %1$s สำหรับแอนดรอยด์ + เกี่ยวกับ + เวอร์ชัน %1$s + เวอร์ชัน %1$s, หมายเลขรุ่น #%2$s + การสร้างบัญชีล้มเหลว + ไอคอนบัญชี + ไม่พบบัญชี! + ล้างการอัปโหลดที่ล้มเหลว + แก้ไข + ล้างการแจ้งเตือน + ล้างข้อมูลในถังขยะ + ส่ง/แชร์ + มุมมองแบบตาราง + มุมมองแบบรายการ + กู้คืนข้อมูลรายชื่อและปฏิทิน + คัดลอก + โฟลเดอร์ใหม่ + ย้าย + เปิดด้วย + ค้นหา + รายละเอียด + ส่ง + ตั้งค่า + จัดเรียง + ผู้ใช้ที่ใช้งานอยู่ + ยังไม่มีกิจกรรม + ยังไม่มีกิจกรรมเช่น การเพิ่ม การเปลี่ยนแปลง และการแชร์ + ส่ง + ส่งลิงก์ไปยัง... + กิจกรรม + เพิ่มลิงก์อื่น + เพื่มลิงก์การแชร์แบบสาธารณะ + เพิ่มไปยัง %1$s + การตั้งค่าขั้นสูง + อนุญาตให้แชร์ซ้ำ + แสดงหนึ่งวิดเจ็ตจากแดชบอร์ด + ค้นหาใน %s + ไม่พบบัญชีที่เกี่ยวข้อง! + การเข้าถึงล้มเหลว: %1$s + บัญชียังไม่ถูกเพิ่มบนอุปกรณ์นี้ + มีบัญชีสำหรับผู้ใช้และเซิร์ฟเวอร์เดียวกันอยู่บนอุปกรณ์นี้อยู่แล้ว + ป้อนผู้ใช้ไม่ตรงกับบัญชีของผู้ใช้นี้ + ไม่รู้จักรุ่นของเซิร์ฟเวอร์ + เชื่อมต่อแล้ว + เซิร์ฟเวอร์ของคุณไม่ส่ง ID ผู้ใช้ที่ถูกต้อง โปรดติดต่อผู้ดูแลระบบ + ที่อยู่เชิร์ฟเวอร์ https://… + รูปแบบที่อยู่สำหรับเซิร์ฟเวอร์ไม่ถูกต้อง + ไม่พบเชิร์ฟเวอร์ + ไม่มีการเชื่อมต่อเครือข่าย + การเชื่อมต่อแบบปลอดภัยไม่สามารถใช้งานได้ + การกำหนดค่าเซิร์ฟเวอร์มีรูปแบบไม่ถูกต้อง + ตรวจสอบสิทธิ์ไม่สำเร็จ + การเข้าถึงถูกปฏิเสธโดยเซิร์ฟเวอร์ตรวจสอบสิทธิ์ + การเชื่อมต่อแบบปลอดภัยถูกเปลี่ยนเส้นทางผ่านเส้นทางที่ไม่ปลอดภัย + เชื่อมต่อแบบปลอดภัยเสร็จสมบูรณ์ + การเตรียมใช้งาน SSL ล้มเหลว + ไม่สามารถยืนยันตัวตนของเซิร์ฟเวอร์ SSL + กำลังทดสอบการเชื่อมต่อ + เซิร์ฟเวอร์ใช้เวลาตอบสนองนานเกินไป + กำลังพยายามเข้าสู่ระบบ... + ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้อง + ข้อผิดพลาดที่ไม่รู้จัก: %1$s + เกิดข้อผิดพลาด HTTP ที่ไม่รู้จัก! + เกิดข้อผิดพลาดที่ไม่รู้จัก! + ไม่พบโฮสต์ + %1$s ไม่รองรับการใช้งานหลายบัญชี + ไม่สามารถสร้างการเชื่อมต่อ + เก็บไว้ในโฟลเดอร์ต้นฉบับ เนื่องจากอ่านได้เท่านั้น + อัปโหลดเฉพาะบน Wi-Fi ที่ไม่คิดค่าบริการตามปริมาณข้อมูล + /อัปโหลดอัตโนมัติ + กำหนดค่า + การตั้งค่าสร้างโฟลเดอร์ที่กำหนดเอง + ตั้งค่าโฟลเดอร์ที่กำหนดเอง + ปิดการตรวจสอบประหยัดพลังงาน + ซ่อนโฟลเดอร์ + ภาพแทนตัว + ไม่อยู่ + การตั้งค่าสำรองข้อมูล + การสำรองข้อมูลรายชื่อและปฏิทิน + ปิด + ปิดใช้งาน + อุปกรณ์ของคุณอาจเปิดใช้การเพิ่มประสิทธิภาพแบตเตอรี่อยู่ ฟังก์ชันอัปโหลดอัตโนมัติจะทำงานได้อย่างถูกต้องเฉพาะถ้ายกเว้นแอปนี้ + การเพิ่มประสิทธิภาพแบตเตอรี่ + ล่าช้าเนื่องจากผิดหลายครั้งติดต่อกัน + ปฏิทิน + ปฏิทิน + มีปัญหาในการโหลดใบรับรอง + บันทึกการเปลี่ยนแปลงรุ่น dev + กลับมาตรวจสอบภายหลัง หรือรีโหลด + กล่องกาเครื่องหมาย + เลือกโฟลเดอร์ต้นทาง… + เลือกตำแหน่งที่ตั้ง + เลือกโฟลเดอร์รีโมท… + กรุณาเลือกเทมเพลตและใส่ชื่อไฟล์ + เลือกไฟล์ที่จะเก็บ + เลือกวิดเจ็ต + ไม่สามารถล้างการแจ้งเตือน + ล้างข้อความสถานะ + ล้างข้อความสถานะหลังจาก + คัดลอกข้อความจาก %1$s แล้ว + ไม่ได้รับข้อความที่จะคัดลอกไปยังคลิปบอร์ด + คัดลอกลิงก์แล้ว + ข้อผิดพลาดที่ไม่คาดคิดขณะคัดลอกไปยังคลิปบอร์ด + ย้อนกลับ + ยกเลิก + ยกเลิกการผสานข้อมูล + เลือกบัญชี + ยืนยัน + คัดลอก + ลบ + ข้อผิดพลาด + หน่วยความจำไม่พอ + ข้อผิดพลาดที่ไม่รู้จัก + กำลังโหลด… + ถัดไป + ไม่ + ตกลง + อยู่ระหว่างดำเนินการ + ลบ + เปลี่ยนชื่อ + บันทึก + เลือก + ส่ง + แชร์ + ข้าม + สลับบัญชี + สลับไปบัญชี + ตกลง + ทดสอบรุ่น dev + รุ่นนี้มีทุกคุณสมบัติที่จะมีในอนาคตและอยู่ระหว่างการพัฒนา ข้อบกพร่อง/ข้อผิดพลาดอาจเกิดขึ้นได้ หากพบ กรุณารายงานปัญหาที่พบด้วย + ฟอรัม + ช่วยเหลือผู้อื่นบน + ตรวจสอบ แก้ไข และเขียนโค้ด ดูรายละเอียดได้ที่ %1$s + มีส่วนร่วมเป็นประจำ + แอป + แปลภาษา + ช่วยโดยการทดสอบ + รายงานปัญหาบน GitHub + กำหนดค่า + คุณต้องการลบ %1$s จริง ๆ หรือไม่? + คุณต้องการลบรายการที่เลือกจริง ๆ หรือไม่? + คุณต้องการลบ %1$s และเนื้อหาที่อยู่ในนั้นจริง ๆ หรือไม่? + คุณต้องการลบรายการที่เลือกและเนื้อหาที่อยู่ในนั้นจริง ๆ หรือไม่? + เฉพาะต้นทางเท่านั้น + ข้อผิดพลาดในการสร้างกล่องโต้ตอบข้อขัดแย้ง! + ขัดขัดแย้งไฟล์ %1$s + ไฟล์ต้นทาง + ถ้าคุณเลือกทั้งสองรุ่น ชื่อของไฟล์ที่อยู่ในเครื่องจะมีตัวเลขเพิ่มเข้าไป + ไฟล์บนเซิร์ฟเวอร์ + ไอคอนผู้ใช้สำหรับรายชื่อผู้ติดต่อ + ไม่ได้อนุญาตให้เข้าถึงสิทธิ์ จึงไม่ได้นำเข้ารายการใด ๆ + รายชื่อ + สำรองตอนนี้ + กำหนดเวลาสำรองข้อมูลแล้ว และจะเริ่มในอีกสักครู่ + กำหนดเวลานำเข้าแล้ว และจะเริ่มในอีกสักครู่ + ไม่พบไฟล์ + ไม่สามารถหาการสำรองข้อมูลครั้งล่าสุด! + คัดลอกไปยังคลิปบอร์ดแล้ว + เกิดข้อผิดพลาดขณะพยายามคัดลอกไฟล์หรือโฟลเดอร์นี้ + ไม่สามารถคัดลอกโฟลเดอร์เข้าไปยังโฟลเดอร์ที่อยู่ในนั้น + ไฟล์นี้มีในโฟลเดอร์ปลายทางอยู่แล้ว + ไม่สามารถคัดลอก กรุณาตรวจสอบว่ามีไฟล์นั้นอยู่หรือไม่ + คัดลอกลิงก์ + ยังไม่รองรับการคัดลอก/ย้ายไปยังโฟลเดอร์เข้ารหัส + คัดลอกไปยัง… + ไม่สามารถดาวน์โหลดรูปภาพขนาดเต็ม + ไม่สามารถดึงข้อมูลแชร์ + ไม่สามารถดึง URL + สร้าง + ไม่สามารถสร้างโฟลเดอร์ + สร้างใหม่ + สร้างเอกสารใหม่ + สร้างโฟลเดอร์ใหม่ + สร้างงานนำเสนอใหม่ + สร้างสเปรดชีตใหม่ + เพิ่มข้อมูลโฟลเดอร์ + สร้างข้อมูลโฟลเดอร์ + ข้อมูลประจำตัวถูกปิดใช้งาน + สำรองข้อมูลรายวัน + ข้อมูลที่จะสำรอง + ไม่ทราบ + ข้อมูลประจำตัวไม่ถูกต้อง + ลบบัญชี + ลบบัญชี %s ออก และลบไฟล์ในเครื่องทั้งหมดหรือไม่?\n\nเมื่อลบแล้ว จะไม่สามารถย้อนกลับได้ + ลบรายการ + ลบลิงก์ + ยกเลิกการเลือกทั้งหมด + ชื่อไฟล์ปลายทาง + มีรุ่นใหม่ที่สามารถใช้งานได้ + ไม่มีข้อมูล + ไม่มีรุ่นใหม่ที่สามารถใช้งานได้ + ปิด + ไม่ได้ตรวจสอบไฟล์ซ้ำ + อัลกอริทึมย่อยนี้ไม่สามารถใช้งานบนโทรศัพท์ของคุณ + การเข้าสู่ระบบผ่านลิงก์โดยตรงล้มเหลว! + ปิดใช้งาน + ยกเลิก + ปิดการแจ้งเตือน + ห้ามรบกวน + เสร็จสิ้น + ไม่ต้องล้าง + ดาวน์โหลดรุ่น dev ล่าสุด + ไม่สามารถดาวน์โหลด %1$s + การดาวน์โหลดล้มเหลว โปรดเข้าสู่ระบบอีกครั้ง + ดาวน์โหลดล้มเหลว + ไฟล์ไม่พร้อมใช้งานบนเซิร์ฟเวอร์ + %1$d%% กำลังดาวน์โหลด %2$s + กำลังดาวน์โหลด… + ดาวน์โหลด %1$s แล้ว + ดาวน์โหลดแล้ว + ยังดาวน์โหลดไม่ได้ + ปิดแถบด้านข้าง + ชุมชน + รูปภาพพื้นหลังของส่วนหัวแถบเมนูเลื่อนด้านข้าง + กิจกรรม + ไฟล์ทั้งหมด + รายการโปรด + สื่อ + หน้าหลัก + การแจ้งเตือน + บนอุปกรณ์ + แก้ไขล่าสุด + ถูกแชร์ + ไฟล์ที่ถูกลบ + อัปโหลด + ออกจากระบบ + เปิดแถบด้านข้าง + ใช้ไป %1$s จาก %2$s + ใช้ไป %1$s + อัปโหลดอัตโนมัติ + กำลังถอดรหัส… + ปิด + โฟลเดอร์นี้ไม่ว่าง + จดรหัสผ่านเข้ารหัส 12 คำของคุณ + รหัสผ่าน… + กรุณาระบุชื่อไฟล์ + %1$s ไม่สามารถคัดลอกไปยังโฟลเดอร์ %2$s ในเครื่อง + %1$s หยุดทำงาน + รายงาน + รายงานปัญหาไปยังตัวติดตามหรือไม่ (ต้องมีบัญชี GitHub) + ข้อผิดพลาดในการดึงไฟล์ + ข้อผิดพลาดในการดึงเทมเพลต + บัญชี + ผู้ใช้ + การกำหนดลักษณะ + โหมดทดสอบทางวิศวกรรม + โอนย้าย + ดาวน์โหลด + อัปโหลด + เพิ่มหรืออัปโหลด + ไม่สามารถส่งต่อไฟล์ไปยังตัวจัดการดาวน์โหลด + เพิ่มในรายการโปรด + รายการโปรด + ชื่อไฟล์มีอยู่แล้ว + ลบ + ไม่สามารถดึงข้อมูลกิจกรรมสำหรับไฟล์ + โหลดรายละเอียดล้มเหลว + ไฟล์ + เก็บ + ลองอัปโหลดเนื้อหาหรือซิงค์กับอุปกรณ์อื่นของคุณ + ยังไม่มีรายการโปรด + ไฟล์และโฟลเดอร์ที่คุณระบุเป็นรายการโปรดจะแสดงที่นี่ + ไม่พบรูปภาพหรือวิดีโอใด ๆ + ไม่มีไฟล์ที่นี่ + ไม่มีผลลัพธ์ในโฟลเดอร์นี้ + ไม่มีผลลัพธ์ + ไม่มีอะไรในนี้ คุณสามารถเพิ่มโฟลเดอร์ได้ + ไฟล์และโฟลเดอร์ที่ดาวน์โหลดจะปรากฏที่นี่ + ไม่พบไฟล์ที่มีการแก้ไขในช่วง 7 วันที่ผ่านมา + มันอาจจะอยู่ในโฟลเดอร์อื่น + ไฟล์และโฟลเดอร์ที่คุณแชร์จะปรากฏที่นี่ + ยังไม่มีการแชร์ + ไม่พบผลลัพธ์สำหรับคิวรีของคุณ + โฟลเดอร์ + กำลังโหลด… + ไม่มีแอปที่ถูกตั้งค่าเพื่อรองรับไฟล์ประเภทนี้ + วินาที ก่อนหน้านี้ + ต้องการสิทธิ์ + สิทธิ์ที่จัดเก็บ + %1$s จะทำงานได้ดีที่สุดเมื่ออนุญาตสิทธิ์เข้าถึงที่จัดเก็บ คุณสามารถเลือกว่าจะให้เข้าถึงเต็มรูปแบบสำหรับทุกไฟล์ หรือเข้าถึงแบบอ่านเท่านั้นสำหรับรูปภาพและวิดีโอ + %1$s ต้องการสิทธิ์จัดการไฟล์เพื่ออัปโหลดไฟล์ คุณสามารถเลือกว่าจะให้เข้าถึงเต็มรูปแบบสำหรับทุกไฟล์ หรือเข้าถึงแบบอ่านเท่านั้นสำหรับรูปภาพและวิดีโอ + กำลังตรวจสอบปลายทาง… + กำลังล้าง… + กำลังอัปเดตโฟลเดอร์จัดเก็บข้อมูล + มีโฟลเดอร์ข้อมูลอยู่แล้ว เลือกอย่างใดอย่างหนึ่งต่อไปนี้: + โฟลเดอร์ Nextcloud มีอยู่แล้ว + ต้องการพื้นที่เพิ่มเติม + ไม่สามารถอ่านไฟล์ต้นทาง + ไม่สามารถเขียนไปยังไฟล์ปลายทาง + ล้มเหลวระหว่างการย้ายข้อมูล + ไม่สามารถอัปเดตดัชนี + กำลังย้ายข้อมูล… + เสร็จสิ้น + แทนที่ + กำลังเตรียมการย้ายข้อมูล... + กำลังกู้คืนการตั้งค่าบัญชี... + กำลังบันทึกการตั้งค่าบัญชี... + คุณยังต้องการเปลี่ยนโฟลเดอร์จัดเก็บข้อมูลเป็น %1$s หรือไม่?\n\nหมายเหตุ: ข้อมูลทั้งหมดจะต้องดาวน์โหลดใหม่อีกครั้ง + โฟลเดอร์ต้นทางอ่านไม่ได้! + กำลังอัปเดตดัชนี... + ใช้ + กำลังรอการซิงค์แบบเต็ม… + ไม่พบไฟล์ + ไม่สามารถซิงค์ไฟล์ กำลังแสดงรุ่นล่าสุดที่ใช้งานได้ + เปลี่ยนชื่อ + เกิดข้อผิดพลาดในการกู้คืนรุ่นไฟล์! + กู้คืนรุ่นไฟล์เสร็จสมบูรณ์ + ดาวน์โหลด + ส่งออก + ไฟล์ถูกเปลี่ยนชื่อเป็น %1$s ขณะอัปโหลด + ซิงค์ + ไม่ได้เลือกไฟล์ + ชื่อไฟล์ไม่สามารถเว้นว่างได้ + ห้ามใช้ตัวอักษรดังนี้: / \\ < > : \" | ? * + ชื่อไฟล์มีตัวอักษรที่ไม่ถูกต้องอย่างน้อย 1 ตัว + ชื่อไฟล์ + ให้ข้อมูลของคุณปลอดภัยและควบคุมโดยคุณ + การทำงานร่วมกันและแลกเปลี่ยนไฟล์อย่างปลอดภัย + เว็บเมล รายชื่อ และปฏิทินที่ใช้งานง่าย + การแชร์หน้าจอ ประชุมออนไลน์ และประชุมผ่านเว็บ + โฟลเดอร์มีอยู่แล้ว + สร้าง + ไม่มีโฟลเดอร์ที่นี่ + เลือก + คุณไม่ได้รับอนุญาต%s + เพื่อคัดลอกไฟล์นี้ + ให้สร้างไฟล์นี้ + เพื่อลบไฟล์นี้ + เพื่อย้ายไฟล์นี้ + เพื่อเปลี่ยนชื่อไฟล์นี้ + กำลังดาวน์โหลดไฟล์… + กำลังอัปโหลดไฟล์… + ไม่สามารถย้ายบางไฟล์ + ในเครื่อง: %1$s + ย้ายทั้งหมด + ระยะไกล: %1$s + ย้ายไฟล์ทั้งหมดแล้ว + ส่งต่อ + 4 ชั่วโมง + ชื่อจะทำให้ไฟล์ถูกซ่อน + ชื่อ + โน้ต + รหัสผ่าน + เซิร์ฟเวอร์ไม่พร้อมใช้งาน + โฮสต์เซิร์ฟเวอร์ของคุณ + ในโฟลเดอร์ %1$s + อัปโหลดไฟล์ที่มีอยู่เดิมด้วย + อัปโหลดขณะชาร์จเท่านั้น + /อัพโหลดทันที + URL ไม่ถูกต้อง + มองไม่เห็น + ป้ายกำกับไม่สามารถเว้นว่างได้ + สำรองข้อมูลล่าสุด: %1$s + ลิงก์ + ชื่อลิงก์ + อนุญาตให้อัปโหลดและแก้ไข + กำลังแก้ไข + ลากไฟล์ลง (อัปโหลดเท่านั้น) + ดูเท่านั้น + โหลดผลลัพธ์เพิ่มเติม + ยังไม่มีไฟล์ในโฟลเดอร์นี้ + ไม่พบไฟล์ในระบบไฟล์ในเครื่อง + %1$s/%2$s + ไม่มีโฟลเดอร์อื่น + ค้นหาโฟลเดอร์ + หมดอายุ: %1$s + ล็อกไฟล์ + ถูกล็อกโดย %1$s + ถูกล็อกโดยแอป %1$s + %1$s บันทึกแอพแอนดรอยด์ + ไม่พบแอปสำหรับการส่งบันทึก โปรดติดตั้งไคลเอ็นต์อีเมล + เข้าสู่ระบบ + ลิงก์ไปยังอินเตอร์เฟซเว็บ %1$s เมื่อคุณเปิดในเบราว์เซอร์ + ลบบันทึก + รีเฟรช + ค้นหาบันทึก + ส่งบันทึกทางอีเมล + กำลังโหลด… + บันทึก + เซิร์ฟเวอร์อยู่ในโหมดการบำรุงรักษา + ล้างข้อมูล + การตั้งค่า ฐานข้อมูล และใบรับรองเซิร์ฟเวอร์จากข้อมูลของ %1$s จะถูกลบอย่างถาวร \n\nไฟล์ที่ดาวน์โหลดแล้วจะไม่มีการแตะต้อง\n\nกระบวนการนี้อาจใช้เวลาสักครู่ + จัดการพื้นที่ + ไม่สามารถสตรีมไฟล์สื่อ + ไม่สามารถอ่านไฟล์สื่อ + ไฟล์สื่อมีการเข้ารหัสที่ไม่ถูกต้อง + หมดเวลาขณะพยายามเล่นนไฟล์ + โปรแกรมเล่นสื่อในตัวไม่สามารถเล่นไฟล์สื่อ + สื่อไม่สนับสนุนตัวแปลงสัญญาณ + ปุ่มเลื่อนไปข้างหน้า + โปรแกรมเล่นเพลง %1$s + เล่นหรือกดปุ่มหยุดชั่วคราว + ปุ่มย้อนกลับ + %1$s (เล่นอยู่) + เพิ่มเติม + เกิดข้อผิดพลาดขณะพยายามที่จะย้ายไฟล์หรือโฟลเดอร์นี้ + ไฟล์นี้มีในโฟลเดอร์ปลายทางอยู่แล้ว + ย้ายไปยัง… + ความคิดเห็นใหม่… + รูปภาพ + ไม่มีรายการ + อนุญาตเพียงหนึ่งบัญชีเท่านั้น + ส่ง + ดาวน์โหลด + อัปโหลด + 1 ชั่วโมง + ออนไลน์ + สถานะออนไลน์ + ใส่รหัสยืนยันของคุณ + จะมีการร้องขอรหัสยืนยันทุกครั้งเมื่อเริ่มต้นใช้แอพฯ + รหัสยืนยันของคุณไม่ตรงกัน + กรุณากรอกรหัสผ่านของคุณใหม่อีกครั้ง + รหัสยืนยันที่เก็บไว้ + รหัสยืนยันไม่ถูกต้อง + 389 KB + placeholder.txt + 12:23:45 + นี่คือ placeholder + 2012/05/18 12:23 PM + เก็บไว้ในโฟลเดอร์ต้นฉบับ + ถูกย้ายไปยังโฟลเดอร์แอพพลิเคชัน + เพิ่มบัญชี + เกี่ยวกับ + รายละเอียด + ทั่วไป + เพิ่มเติม + ช่วยเหลือ + ประทับ + สัญญาอนุญาต + ไม่มี + บริหารจัดการบัญชี + แสดงไฟล์ที่ซ่อนอยู่ + ธีม + เข้ม + สว่าง + แสดงรูปภาพตัวอย่าง + ความเป็นส่วนตัว + ลอง %1$s บนอุปกรณ์ของคุณ! + ฉันอยากชวนคุณมาใช้ %1$s บนอุปกรณ์ของคุณ\nดาวน์โหลดที่นี่: %2$s + โหลดใหม่ + ลบออก + ลบแล้ว + กรอกชื่อใหม่ + ไม่อนุญาตให้แชร์ซ้ำ + ไม่อนุญาตให้แชร์ซ้ำ + เข้าสู่ระบบผ่านคิวอาร์โค้ด + เลือกทั้งหมด + ส่ง + กำหนดสถานะ + กำหนดข้อความสถานะ + แชร์ + แชร์ข้อมูล + %1$s (กลุ่ม) + แชร์ลิงก์ + คุณจะต้องใส่รหัสผ่าน + เพื่อแชร์ไฟล์นี้ + ป้อนรหัสผ่าน + กำหนดวันที่หมดอายุ + ตั้งรหัสผ่าน + สามารถแก้ไข + ดูเท่านั้น + %1$s (รีโมท) + การตั้งค่า + แชร์ลิงค์ + แชร์ + แชร์แล้ว + เรียงตาม + ซ๋อน + รายละเอียด + ประเทศ: + ชื่อสามัญ: + สถานที่ตั้ง: + องค์กร: + หน่วยงาน: + รัฐ: + ลายนิ้วมือ: + ออกโดย: + ลายเซ็นต์: + อัลกอริทึ่ม: + ออกถึง: + ตั้งแต่วันที่: + จาก: + ถึง: + - ไม่มีข้อมูลเกี่ยวกับข้อผิดพลาด + ไม่สามารถแสดงใบรับรอง + คุณต้องการให้ความไว้วางใจในใบรับรองความปลอดภัยนี้หรือไม่? + - ใบรับรองความปลอดภัยของเซิร์ฟเวอร์หมดอายุแล้ว + - ใบรับรองความปลอดภัยของเซิร์ฟเวอร์ไม่น่าเชื่อถือ + - ใบรับรองความปลอดภัยของเซิร์ฟเวอร์ยังมีอายุน้อยอยู่ + - URL ดังกล่าวไม่ตรงกันกับชื่อโฮสต์ที่อยู่ในใบรับรอง + ข้อความสถานะ + กล้อง + ค่าเริ่มต้น + ดาวน์โหลด + แพลตฟอร์มผลิตภาพโอสต์เองได้ ที่คุณควบคุมได้เอง\n\nคุณสมบัติ:\n* ส่วนติดต่อที่ใช้งานง่าย ทันสมัย ปรับแต่งให้เข้ากับธีมของเซิร์ฟเวอร์ของคุณอย่างเต็มรูปแบบ\n* อัปโหลดไฟล์ขึ้นไปยังเซิร์ฟเวอร์ Nextcloud ของคุณ\n* แชร์ไฟล์ของคุณกับผู้อื่น\n* ซิงค์ไฟล์และโฟลเดอร์โปรดของคุณให้ตรงกันอยู่ตลอดเวลา\n* ค้นหาในทุกโฟลเดอร์บนเซิร์ฟเวอร์ของคุณ\n* อัปโหลดอัตโนมัติ สำหรับรูปภาพและวิดีโอที่ถ่ายโดยอุปกรณ์ของคุณ\n* ไม่พลาดข้อมูลล่าสุดด้วยการแจ้งเตือน\n* รองรับหลายบัญชี\n* เพิ่มความปลอดภัยในการเข้าถึงข้อมูลของคุณด้วยลายนิ้วมือหรือ PIN\n* บูรณาการร่วมกับ DAVx5 (ก่อนหน้านี้รู้จักในชื่อ DAVdroid) สำหรับการตั้งค่าการซิงค์ข้อมูลปฏิทินและรายชื่ออย่างง่าย\n\nโปรดรายงานปัญหาทั้งหมดที่ https://github.com/nextcloud/android/issues และแสดงความคิดเห็นเกี่ยวกับแอปนี้ได้ที่ https://help.nextcloud.com/c/clients/android\n\nมือใหม่ Nextcloud? Nextcloud เป็นเซิร์ฟเวอร์ส่วนตัวสำหรับการซิงค์และแชร์ไฟล์ และการสื่อสาร ซึ่งเป็นซอฟต์แวร์เสรี และคุณสามารถโฮสต์ด้วยตัวเองหรือจ่ายเงินให้บริษัทอื่นทำให้คุณแทนได้ วิธีนี้นี่เองทำให้ข้อมูลรูปภาพ ปฏิทิน รายชื่อ เอกสาร และอื่น ๆ ทั้งหมดของคุณอยู่ในการควบคุมของคุณ\n\nลองดู NextCloud ได้ที่ https://nextcloud.com + \"%1$s\" ได้ถูกแชร์กับคุณ + %1$s ได้แชร์ \"%2$s\" กับคุณ + ตรวจพบความขัดแย้ง + ไฟล์ Kept-in-sync ล้มเหลว + การผสานข้อมูลล้มเหลว + เนื้อหาของไฟล์ถูกประสานข้อมูลอยู่แล้ว + มีไฟล์ต้นทางบางไฟล์ถูกลืม + เลือกสิ่งที่จะซิงค์ + %1$s เป็น %2$s แต่มีแค่ %3$s ที่ใช้งานได้บนอุปกรณ์ + ไฟล์ + ปุ่มการตั้งค่า + ไม่พบโฟลเดอร์สื่อ + สำหรับ %1$s + ประเภท + ซิงค์แล้ว + แท็ก + ทดสอบการเชื่อมต่อเซิร์ฟเวอร์ + 30 นาที + สัปดาห์นี้ + ภาพขนาดย่อ + ภาพขนาดย่อสำหรับไฟล์ที่มีอยู่ + ภาพขนาดย่อสำหรับไฟล์ใหม่ + การโหลดใช้เวลานานมาก… + วันนี้ + ไฟล์ที่ถูกลบ + ไม่มีไฟล์ที่ถูกลบ + เพื่อเลิกแชร์ไฟล์นี้ + เพื่ออัปเดตการแชร์นี้ + อัปโหลดจาก… + อัปโหลดเนื้อหาจากแอปอื่น + อัปโหลดจากกล้อง + ชื่อไฟล์ + ประเภทไฟล์ + ลบ + ข้อผิดพลาดที่ไม่รู้จัก + เลือก + อัปโหลด + %1$s ไม่ได้รับอนุญาตให้อ่านไฟล์ที่ได้รับ + ไม่สามารถอัปโหลดไฟล์นี้ + ไม่มีไฟล์ที่จะอัปโหลด + ชื่อโฟลเดอร์ + เลือกโฟลเดอร์อัปโหลด + ไม่สามารถอัปโหลด %1$s + การอัปโหลดล้มเหลว โปรดเข้าสู่ระบบอีกครั้ง + การอัปโหลดไฟล์ขัดแย้ง + เลือกรุ่นของ %1$s ที่จะเก็บไว้ + อัปโหลดล้มเหลว + ตัวเลือกอัปโหลด: + %1$d%% กำลังอัปโหลด %2$s + กำลังอัปโหลด… + อัปโหลด %1$s แล้ว + ออก + ตั้งค่า + ไม่มีบัญชีผู้ใช้ %1$s ในอุปกรณ์ของคุณ กรุณาตั้งค่าบัญชีผู้ใช้ก่อน + ไม่พบบัญชี + ปัจจุบัน + ถูกอัพโหลด + กำลังรอที่จะอัปโหลด + อัปโหลด + ยกเลิกแล้ว + ความขัดแย้ง + การเชื่อมต่อล้มเหลว + ข้อผิดพลาดของข้อมูลประจำตัว + ข้อผิดพลาดของไฟล์ + ข้อผิดพลาดของโฟลเดอร์ + ข้อผิดพลาดสิทธิ์การเข้าถึง + เสร็จสมบูรณ์ + เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ + ตรวจพบไวรัส ไม่สามารถอัปโหลดให้เสร็จสิ้น! + กำลังรอออกจากโหมดประหยัดพลังงาน + กำลังรอการชาร์จ + ผู้ใช้ + ที่อยู่ + อีเมล + หมายเลขโทรศัพท์ + ทวิตเตอร์ + เว็บไซต์ + ชื่อผู้ใช้ + ดาวน์โหลด + รอสักครู่… + กำลังคัดลอกไฟล์จากพื้นที่จัดเก็บส่วนตัว + รูปภาพมีอะไรใหม่ + ข้าม + มีอะไรใหม่ใน %1$s + ส่งอีเมล + โฟลเดอร์จัดเก็บข้อมูลไม่มีอยู่! + + ไม่สามารถซิงค์ %1$d ไฟล์ (ข้อขัดแย้ง: %2$d) + + + %1$d โฟลเดอร์ + + + %1$d ไฟล์ + + + แสดง %1$d โฟลเดอร์ที่ซ่อนอยู่ + + + เลือก %d รายการ + + diff --git a/app/src/main/res/values-tk/strings.xml b/app/src/main/res/values-tk/strings.xml index 8db357091f99..f8495c8b8184 100644 --- a/app/src/main/res/values-tk/strings.xml +++ b/app/src/main/res/values-tk/strings.xml @@ -186,6 +186,7 @@ Duýduryşy ýapyň Bimaza etmäň Arassalama + Ýerli faýl döredip bolmaýar Iň soňky wersiýasyny ýükläp alyň %1$sGöçürip alyp bolmaýar Ýüklemek şowsuz, gaýtadan giriň diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index e0c88d9580a0..dc75dcff4672 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -32,6 +32,7 @@ İşlem Başka bir bağlantı ekle Yeni herkese açık paylaşım bağlantısı ekle + Yeni güvenli dosya bırakma ekle %1$s üzerine ekle Gelişmiş ayarlar Yeniden paylaşılabilsin @@ -209,7 +210,15 @@ Bildirimi yok say 12 sözcüklü parolanızı görüntüler Rahatsız etmeyin + Çok sayıda görsel + PDF dosyası + Dışa aktarma türünü seçin + PDF dosyası oluşturulamadı + PDF oluşturuluyor… + Tamam Kaldırılmasın + Yerel dosya oluşturulamadı + Yerel dosya adı geçersiz Son geliştirici sürümünü indirin %1$s indirmesi tamamlanamadı İndirilemedi, yeniden oturum açmalısınız @@ -270,8 +279,10 @@ İzleyici üzerine bir hata bildirmek ister misiniz? (GitHub hesabı gereklidir) Dosya alınırken sorun çıktı Kalıplar alınırken sorun çıktı - Şifreleme kurulumu sayfası görüntülenirken sorun çıktı! + Şifreleme kurulumu penceresi görüntülenirken sorun çıktı! Kamera başlatılamadı + Belge taramasına başlanırken sorun çıktı + Belge taraması sırasında sorun çıktı Hesaplar Görev adı İlerleme @@ -367,8 +378,8 @@ Dosya adı Verilerinizi güvenli ve denetiminiz altında tutun Güvenli iş birliği ve dosya değiş tokuşu - Kolay kullanılan web e-posta, takvim ve kişiler - Ekran paylaşımı, çevrimiçi görüşmeler ve web toplantıları + İnternet üzerinden kolayca kullanılan e-posta, takvim ve kişiler + Ekran paylaşımı, çevrimiçi görüşmeler ve internet toplantıları Klasör zaten var Ekle Burada herhangi bir klasör yok @@ -425,7 +436,7 @@ %1$s Android uygulaması günlükleri Günlüklerin gönderilebileceği bir uygulama bulunamadı. Lütfen bir e-posta uygulaması kurun. Oturum aç - %1$s web arayüzü için web tarayıcıda açacağınız bağlantı. + %1$s site arayüzü için tarayıcıda açacağınız bağlantı. Günlükleri sil Yenile Günlük arama @@ -436,7 +447,7 @@ Günlükler Sunucu bakım kipinde Verileri temizle - %1$s verilerinden ayarlar, veritabanı ve sunucu sertifikaları kalıcı olarak silinecek. \n\nİndirilen dosyalara dokunulmayacak.\n\nBu işlem biraz zaman alabilir. + %1$s verilerinden ayarlar, veri tabanı ve sunucu sertifikaları kalıcı olarak silinecek. \n\nİndirilen dosyalara dokunulmayacak.\n\nBu işlem biraz zaman alabilir. Alan yönetimi Ortam dosyası akışı sağlanamadı Ortam dosyası okunamadı @@ -622,6 +633,7 @@ Dosya alınıyor … Belge yüklenemedi! QR kodu ile oturum aç + Sayfayı tara Verilerinizi korumak sizin barındırdığınız üretkenlik Göz at ve paylaş @@ -673,6 +685,7 @@ Parola korumalı Düzenleyebilir Dosya bırakma + Güvenli dosya bırakma Yalnızca görüntüleme İzinleri paylaş %1$s (uzak) @@ -747,7 +760,7 @@ Şununla akıt … İç akış yapılamaz Onun yerine ortamı indirin ya da dış bir uygulama kullanın. - Kısıtlı kip: HTTP bağlantılarına izin verilmez! + Kısıtlanmış kip: HTTP bağlantılarına izin verilmez! \"%1$s\" ögesi sizinle paylaşıldı %1$s, sizinle \"%2$s\" ögesini paylaştı Yalnızca fotoğraflar @@ -888,7 +901,7 @@ E-posta Telefon numarası Twitter - Web sitesi + Site Kullanıcı bilgileri alınırken sorun çıktı Herhangi bir kişisel bilgi ayarlanmamış Profil sayfanızdan ad, görsel ve iletişim bilgilerinizi ekleyin. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index cc0998ffdd00..f307de80acdc 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -33,6 +33,7 @@ Ваші дії Додати інше посилання Додати нове публічне посилання + Додайте новий захищений файл Додати на хмару %1$s Додаткові налаштування Можете ділитися @@ -148,6 +149,7 @@ Повідомити про помилку на GitHub Ви зацікавлені у допомозі з тестуванням функцій, які будуть доступні у наступній версії? Налаштування + Вилучити шифрування на пристрої Ви справді бажаєте вилучити %1$s? Дійсно вилучити вибрані об\'єкти? Ви справді бажаєте вилучити %1$s та його вміст? @@ -167,7 +169,7 @@ Файл не знайдено Неможливо знайти вашу останню резервну копію Скопійовано - Виникла помилка під час спроби скопіювати цей файл або каталог + Виникла помилка під час спроби копіювати цей файл або каталог Неможливо скопіювати каталог до одного із вкладених підкаталогів Файл вже присутній у каталозі призначення Неможливо скопіювати. Будь ласка, перевірте, чи файл існує. @@ -207,8 +209,17 @@ Вимкнути Припинити Скасувати сповіщення + Показати вашу парольну празу з 12 слів Не турбувати + Кілька сторінок + Файл PDF + Вибрати тип експорту + Не вдалося зґенерувати PDF + Створення PDF... + Готово Не очистувати + Неможливо створити файл на пристрої + Недійсна назва локального файлу Звантажити останню версію для розробників Не можливо вивантажити %1$s Вивантаження невдале, увійдіть знову @@ -216,7 +227,7 @@ Файл більше не доступний на сервері %1$d%% Зкачування %2$s Завантаження… - %1$s завантажено + %1$s звантажено Вивантажені Ще не завантажене Закрити бічну панель @@ -238,6 +249,7 @@ Використано %1$s із %2$s %1$sвикористано Автоматичне завантаження + Наскрізне шифруванння ще не налаштовано Позначити як зашифроване Налаштування шифрування Розшифровування... @@ -262,12 +274,16 @@ Помилка з додаванням коментаря до файлу Відмова в обслуговуванні %1$s Помилка створення файлу з шаблону + Помилка з показом дій з файлами Помилка зміни статусу блокування файлу Звіт Надіслати звіт про ваду (потрібна обліковка у GitHub) Помилка під час отримання файлу Помилка під час отримання шаблонів + Помилка з показом діалогу налаштування шифрування! Помилка під час запуску камери + Помилка під час сканування документу + Помилка сканування документу Облікові записи Назва завдання Перебіг @@ -321,7 +337,7 @@ каталог Завантаження… Відсутній застосунок для відкриття файлу такого типу. - секунди тому + кілька секунд тому Потрібні дозволи Доступ до пам\'яти %1$s Найкраще працює з дозволами для доступу до зберігання. Ви можете вибрати повний доступ до всіх файлів або доступ лише для читання до фотографій і відео. @@ -332,7 +348,7 @@ Каталог з даними вже існує. Виберіть один з таких: Каталог сервера Nextcloud вже існує Потрібно більше місця - Неможливо прочитати початковий файл + Неможливо прочитати вихідний файл Неможливо записати до файлу призначення Помилка під час міграції Неможливо оновити індекс @@ -370,7 +386,7 @@ Тут немає папок Вибрати У вас відсутні повноваження %s - скопіювати даний файл + скопіювати цей файл щоб створити цей файл щоби вилучити цей файл перемістити цей файл @@ -390,6 +406,7 @@ Пароль Сервер недоступний Розмістити на власному сервері + Піктограма порожнього списку Піктограма віджету панелі Піктограма запису віджету в папці %1$s @@ -431,7 +448,7 @@ Журнал подій Сервер у режимі обслуговування Очистити дані - Налаштування, база даних та дані сертифікатів серверу від %1$s буде вилучено без можливості відновлення.\n\nФайли, які було завантажено, буде збережено.\n\nЦей процес триватиме певний час. + Налаштування, база даних та дані сертифікатів серверу від %1$s буде вилучено без можливості відновлення.\n\nФайли, які було звантажено, буде збережено.\n\nЦей процес триватиме певний час. Керувати простором Неможливо транслювати мультимедійний файл Неможливо відкрити мультимедійний файл @@ -515,6 +532,7 @@ Додаткові дозволи потрібні для завантаження та звантаження файлів. Не знайдено застосунків для встановлення зображення для Закріпити на Домівці + Відкрити %1$s 389 КБ placeholder.txt 12:23:45 @@ -544,6 +562,8 @@ Основне Більше Щоденне створення резервних копій календарів та контактів + Неочікувана помилка під час налаштування DAVx5 (раніше відомого як DAVdroid) + Наскрізне шифрування налаштовано! Мнемоніка E2E Щоб показати мнемоніку, будь ласка, активуйте дані авторизації пристрою Cповіщення про сканування зображень та відео @@ -551,10 +571,11 @@ GNU General Public License, версія 2 Допомога Відбиток - Початковий файл буде... - Початковий файл буде... + Вихідний файл буде... + Вихідний файл буде... Зберігати у підкаталогах за часом створення Використовувати підкаталоги + Додати наскрізне шифрування для цього клієнта Ліцензія Пароль на застосунок Облікові дані пристрою увімкнено @@ -565,6 +586,8 @@ Пароль на застосунок Облікові записи Рекомендувати застосунок + Вилучити шифрування на пристрої + Налаштувати наскрізне шифрування Показувати приховані файли Отримати вихідний код Місце збереження файлів @@ -592,6 +615,8 @@ Перезавантажити (віддалено) Не знайдено файл! + Ви можете вилучити наскрізне шифрування на пристрої на цьому клієнті + Ви можете вилучити наскрізне шифрування на пристрої на цьому клієнті. Зашифровані файли залишатимуться на сервері, але більше не синхронізуватимуться з цим комп\'ютером. Помилка під час вилучення Неможливо зняти сповіщення. Вилучити @@ -609,6 +634,7 @@ Отримання файлу... Неможливо завантажити документ! Вхід з QR-кодом + Сканувати сторінку Захист ваших даних рішення з власним хостинґом Переглянути та поділитися @@ -635,6 +661,7 @@ Використати як Встановити статус Встановити повідомлення про стан + Під час налаштування наскрізного шифрування ви отримаєте парольну фразу з 12 слів, за допомогою якої ви зможете відкривати ваші файлі на інших пристроях. Її буде збережено лише на цьому пристрої та буде показано знову на цьому екрані. Будь ласка, занотуйте цю фразу та збережіть у безпеченому місці! Спільний доступ Поділитися & Копіювати посилання Спільний доступ @@ -659,6 +686,7 @@ Захищено паролем Можна редагувати Відкинути файл + Безпечне додавання файлу Лише перегляд Поділитися дозволами %1$s (віддалено) @@ -842,7 +870,7 @@ завантажити до цього каталогу %1$d%% Завантаження %2$s Завантаження… - %1$s завантажено + %1$s звантажено Вийти Налаштування На вашому пристрої немає %1$s облікових записів. Будь ласка, спочатку створіть обліковий запис. @@ -880,6 +908,7 @@ Додайте назву, зображення та деталі контакту на сторінці вашого профілю. Ім\'я користувача Звантажити + Піктограма відеонакладання Зачекайте трохи… Перевірка збережених даних авторизації Копіювання файлу з приватного сховища diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index fc7ea6b1569c..9a3e27d528c9 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -35,6 +35,7 @@ Thêm vào %1$s Cài đặt nâng cao Cho phép chia sẻ lại + Hiện thị lối tắt từ dashboard Tìm kiếm trong %s Không tìm thấy tài khoản được liên kết! Lỗi truy cập: %1$s @@ -89,6 +90,7 @@ Nhật kí phiên bản nhà phát triển Hộp chọn Chọn thư mục cục bộ... + Chọn vị trí lưu trữ Chọn thư mục từ xa... Vui lòng chọn một mẫu và nhập tên tệp. Chọn tệp muốn giữ! @@ -202,8 +204,16 @@ Tắt Bỏ qua Bỏ qua thông báo + Hiển thị 12 ký tự trong mật khẩu của bạn Không làm phiền + Nhiều hình ảnh + Tập tin PDF + Chọn kiểu dữ liệu muốn xuất + Lỗi khởi tạo tập tin PDF + Đang tạo tập tin PDF + Hoàn thành Không xoá + Không thể tạo tệp trên máy Tải xuống phiên bản dev mới nhất Không thể tải về %1$s Lỗi tải về, đăng nhập lại @@ -233,6 +243,7 @@ %1$s trên %2$s đã sử dụng %1$s đã dùng Tự động tải lên + E2E chưa được thiết lập Đặt mã hóa Thiết lập mã hóa Đang giải mã… @@ -262,6 +273,7 @@ Lỗi khi truy xuất tệp Lỗi khi truy xuất mẫu Lỗi khởi động máy ảnh + Lỗi khi sử dụng quét tài liệu Tài khoản Tên công việc Tiến trình @@ -292,6 +304,7 @@ Cập nhật giao diện người dùng thất bại Thêm vào ưa thích Ưa thích + Tập tin đã tồn tại Xóa Lỗi khi truy xuất các hoạt động cho tệp Không tải được thông tin chi tiết @@ -403,6 +416,8 @@ Không tìm thấy tệp trong hệ thống tệp cục bộ %1$s/%2$s Không có thư mục nào khác. + Hết hạn trong %1$s + Khoá tập tin %1$s nhật ký ứng dụng Android Không tìm thấy ứng dụng để gửi nhật ký. Vui lòng cài đặt ứng dụng e-mail. Đăng nhập @@ -499,6 +514,7 @@ Từ chối Các quyền bổ sung cần thiết để tải lên và tải xuống tệp. Không tìm thấy ứng dụng nào để đặt ảnh với + Mở trong %1$s 389 KB placeholder.txt 12:23:45 @@ -528,6 +544,7 @@ Tổng hợp hơn Sao lưu hàng ngày lịch & danh bạ của bạn + Mã hoá đầu cuối đã được thiết lập E2E ghi nhớ Để hiển thị ghi nhớ, vui lòng bật thông tin đăng nhập thiết bị. Hiển thị thông báo quét media @@ -539,6 +556,7 @@ Tệp gốc sẽ là... Lưu trữ trong các thư mục con dựa trên năm và tháng Sử dụng thư mục con + Thêm mã hoá đầu cuối Giấy phép Mật mã ứng dụng Bật chứng nhận thiết bị @@ -549,6 +567,7 @@ Mật mã Quản lý tài khoản Giới thiệu cho bạn bè + Thiết lập mã hoá đầu cuối Hiển thị các tệp ẩn Lấy mã nguồn Thư mục lưu trữ dữ liệu @@ -572,6 +591,7 @@ Thử %1$s trên điện thoại của bạn! Tôi muốn mời bạn sử dụng %1$s trên điện thoại của bạn.\nTải về: %2$s %1$s hoặc %2$s + Làm mới nội dung Tải lại (từ xa) Không tìm thấy tệp! @@ -659,6 +679,8 @@ liên kết đã chia sẽ %1$s đã chia sẻ với bạn Thêm chia sẻ không thành công + Hiển thị hình ảnh + Hiển thị video Đăng ký với nhà cung cấp Cho phép %1$s truy cập vào %2$s tài khoản Hệ thống của bạn Sắp xếp theo @@ -713,6 +735,9 @@ Chế độ nghiêm ngặt: Kết nối HTTP không được cho phép! \"%1$s\" đã chia sẽ với bạn %1$s đã chia sẽ \"%2$s\" với bạn + Chỉ chấp nhận hình ảnh + Hình ảnh và video + Chỉ chấp nhận video Đề xuất Tìm thấy xung đột Thư mục %1$s không còn tồn tại nữa @@ -756,6 +781,7 @@ Tệp %1$s không thể được khôi phục! Tải nội dung trong thùng rác thất bại Không thể xóa tệp vĩnh viễn! + Mở khoá tập tin Có bình luận chưa đọc Bỏ đặt mã hóa Xóa khỏi ưa thích diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index ef8e8742402b..c51027e8612d 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -209,7 +209,10 @@ 忽略通知 显示您的12字密语 请勿打扰 + PDF文件 + 完成 不要清除 + 无法新建本地文件 下载最新的开发版本 无法下载 %1$s 下载失败,请重新登录 @@ -270,8 +273,8 @@ 是否向跟踪器报告问题?(需要GitHub账号) 获取文件时遇到错误 检索模板时出错 - 显示设置加密对话框时出错! 开启相机时发生错误 + 使用文档扫描时出错 账号 工作名称 进度 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index ce13cb73a696..1e0f14891b31 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -32,6 +32,7 @@ 動態 添加另一個連結 添加一個新的公共連結 + 新增安全檔案投遞箱 添加到 %1$s 進階設定 允許轉貼分享 @@ -209,7 +210,15 @@ 撤銷通告 顯示您的 12 字密碼片語 請勿打擾 + 多個圖像 + PDF 檔案 + 選擇導出類型 + PDF 産生失敗 + 正在產生 PDF … + 完成 不要清空 + 無法建立近端檔案 + 近端檔案有無效的檔案名 下載最新開發的版本 下載 %1$s 無法完成 下載失敗,再重新登入 @@ -270,8 +279,10 @@ 想舉報問題?(需要GitHub賬戶) 檢索檔案時發生錯誤 取得範本時發生錯誤 - 顯示設置加密對話框時出錯! + 顯示加密設定對話方塊時發生錯誤! 無法啟動相機 + 文件掃描開始時出錯 + 使用文件掃描時出錯 賬戶 工作名稱 進度 @@ -622,6 +633,7 @@ 正在檢索檔案… 無法加載文件! 使用 QR Code 登入 + 掃描頁面 保護您的資料 自建且具生產力 瀏覽與分享 @@ -673,6 +685,7 @@ 受密碼保護 可編輯 檔案拖放 + 安全檔案投放 僅檢視 分享權限 %1$s(遠端) diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index cd9966ddc563..5eaa8e6b4926 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -32,6 +32,7 @@ 活動 加入另一個連結 增加一個新的公開連結 + 新增安全檔案投放 新增到 %1$s 進階設定 允許轉貼分享 @@ -209,7 +210,15 @@ 清除通知 顯示您的 12 字通關密語 請勿打擾 + 多重影像 + PDF 檔案 + 選擇匯出類型 + PDF 產生失敗 + 正在產生 PDF…… + 完成 不要清空 + 無法建立本機檔案 + 本機檔案有無效的檔案名稱 下載最新開發的版本 下載 %1$s 無法完成 下載失敗,再重新登入 @@ -270,8 +279,10 @@ 要回報議題至追蹤程式?(需要 GitHub 帳號) 擷取檔案時發生錯誤 擷取範本時發生錯誤 - 顯示設定加密對話方塊時發生錯誤! + 顯示加密設定對話方塊時發生錯誤! 無法啟動相機 + 開始文件掃描時發生錯誤 + 使用文件掃描時發生錯誤 帳戶 工作名稱 進度 @@ -622,6 +633,7 @@ 正在擷取檔案…… 載入文件失敗! 透過 QR Code 登入 + 掃描頁面 保護您的資料 自建且具生產力 瀏覽與分享 @@ -672,7 +684,8 @@ 設定密碼 受密碼保護 可以編輯 - 檔案投遞 + 檔案投放 + 安全檔案投放 僅檢視 分享權限 %1$s(遠端) diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml index 019830d59fec..501c30b0a3d5 100644 --- a/app/src/main/res/values/setup.xml +++ b/app/src/main/res/values/setup.xml @@ -95,7 +95,7 @@ https://play.google.com/apps/testing/com.nextcloud.client https://f-droid.org/repository/browse/?fdid=com.nextcloud.client https://help.nextcloud.com/c/clients/android - https://www.transifex.com/nextcloud/nextcloud/android/ + https://app.transifex.com/nextcloud/nextcloud/android/ https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md https://github.com/nextcloud/android/issues/new?labels=bug&body=%1$s diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 59d6013d1af9..f98d81cb2135 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -978,6 +978,7 @@ View only Can edit File drop + Secure file drop Share Permissions Advanced Settings Next @@ -1063,8 +1064,9 @@ Remove local encryption You can remove end-to-end encryption locally on this client. The encrypted files will remain on server, but will not be synced to this computer any longer. During setup of end-to-end encryption, you will receive a random 12 word mnemonic, which you will need to open your files on other devices. This will only be stored on this device, and can be shown again in this screen. Please note it down in a secure place! - Error showing setup encryption dialog! + Error showing encryption setup dialog! Add end-to-end encryption to this client + Add new secure file drop Scan page Done Generating PDF… @@ -1073,4 +1075,6 @@ Choose export type PDF file Multiple images + Cannot create local file + Invalid filename for local file diff --git a/app/src/test/java/com/owncloud/android/ui/adapter/ShareeListAdapterTest.kt b/app/src/test/java/com/owncloud/android/ui/adapter/ShareeListAdapterTest.kt index cef8d08d4fef..f81c866a24b9 100644 --- a/app/src/test/java/com/owncloud/android/ui/adapter/ShareeListAdapterTest.kt +++ b/app/src/test/java/com/owncloud/android/ui/adapter/ShareeListAdapterTest.kt @@ -87,7 +87,8 @@ class ShareeListAdapterTest { null, user.accountName, user, - viewThemeUtils + viewThemeUtils, + false ) sut.sortShares() diff --git a/app/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt b/app/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt deleted file mode 100644 index 1bf42c6bfb4c..000000000000 --- a/app/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt +++ /dev/null @@ -1,3 +0,0 @@ -Kompletní privátní řešení pro všechy vaše soubory, fotky, kalendáře a kontakty. -Toto je oficiální vývojová verze aktualizovaná denně. Obsahuje nejnovější fukce, ale může být nestabilní a ohrozit vaše data. Je pro uživatele, kteří jsou ochotni testovat a hlásit chyby na které narazí. Nepoužívejte ji pro svoje produkční prostředí. -Jak vývojová tak produkční verze je k dispozici na F-droid a mohou být nainstalovány souběžně. \ No newline at end of file diff --git a/app/src/versionDev/res/values/setup.xml b/app/src/versionDev/res/values/setup.xml index a5a68b78c2b0..75eb0abf4765 100644 --- a/app/src/versionDev/res/values/setup.xml +++ b/app/src/versionDev/res/values/setup.xml @@ -5,7 +5,7 @@ false - Nextcloud dev + Nextcloud Dev nextcloud.beta org.nextcloud.beta.provider org.nextcloud.beta.android.providers.UsersAndGroupsSearchProvider @@ -13,7 +13,7 @@ org.nextcloud.beta.documents org.nextcloud.beta.files org.nextcloud.beta.android.providers.imageCache - Nextcloud dev + Nextcloud Dev true https://github.com/nextcloud/android/commits/master diff --git a/build.gradle b/build.gradle index 8b37ad936dc4..160459c4ebb6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,11 +1,11 @@ buildscript { ext { - androidPluginVersion = '7.4.0' - appCompatVersion = '1.6.0' - jacoco_version = '0.8.8' - kotlin_version = '1.7.22' + androidPluginVersion = '7.4.2' + appCompatVersion = '1.6.1' + jacoco_version = '0.8.9' + kotlin_version = '1.8.21' androidxTestVersion = "1.4.0" - daggerVersion = "2.44.2" + daggerVersion = "2.45" markwonVersion = "4.6.2" prismVersion = "2.0.0" androidLibraryVersion = "master-SNAPSHOT" @@ -13,10 +13,10 @@ buildscript { mockitoKotlinVersion = "4.1.0" mockkVersion = "1.13.3" espressoVersion = "3.5.1" - workRuntime = "2.7.1" + workRuntime = "2.8.1" fidoVersion = "4.1.0-patch1" checkerVersion = "3.21.2" - exoplayerVersion = "2.18.1" + exoplayerVersion = "2.18.5" documentScannerVersion = "1.0.1" roomVersion = "2.5.0" diff --git a/drawable_resources/x-office-analytics.svg b/drawable_resources/x-office-analytics.svg new file mode 100644 index 000000000000..fc61029c4b97 --- /dev/null +++ b/drawable_resources/x-office-analytics.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/scripts/buildDev b/scripts/buildDev index a460fa605472..f444f5cd73c0 100755 --- a/scripts/buildDev +++ b/scripts/buildDev @@ -74,7 +74,7 @@ if git log --pretty='format:%an' HEAD "^$lastBuildTag" | grep -q dependabot; the fi # changelog -echo "$changelog" > app/src/versionDev/fastlane/metadata/android/en-US/changelogs/$date.txt +echo "$changelog" > src/versionDev/fastlane/metadata/android/en-US/changelogs/$date.txt git add . git commit -m "daily dev $date" -m "$changelog" diff --git a/scripts/metadata/generate_metadata.py b/scripts/metadata/generate_metadata.py index a976d1878f1c..59983e47eaf0 100644 --- a/scripts/metadata/generate_metadata.py +++ b/scripts/metadata/generate_metadata.py @@ -11,8 +11,8 @@ from xml.etree import ElementTree XML_PATH = '../../app/src/main/res' -METADATA_PATH = '../../app/src/generic/fastlane/metadata/android/' -METADATA_DEV_PATH = '../../app/src/versionDev/fastlane/metadata/android/' +METADATA_PATH = '../../src/generic/fastlane/metadata/android/' +METADATA_DEV_PATH = '../../src/versionDev/fastlane/metadata/android/' DEFAULT_LANG = 'en-US' LANG_MAP = { 'values': 'en-US', diff --git a/src/README.md b/src/README.md new file mode 100644 index 000000000000..52d15dd98097 --- /dev/null +++ b/src/README.md @@ -0,0 +1,2 @@ +This `src/` directory is only here for F-Droid, as it doesn't pick up per-flavor metadata in the app/ subdir. +Tracking issue: https://gitlab.com/fdroid/fdroidserver/-/issues/829 diff --git a/app/src/generic/fastlane/metadata/android/ar-AR/full_description.txt b/src/generic/fastlane/metadata/android/ar-AR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ar-AR/full_description.txt rename to src/generic/fastlane/metadata/android/ar-AR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ar-AR/short_description.txt b/src/generic/fastlane/metadata/android/ar-AR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ar-AR/short_description.txt rename to src/generic/fastlane/metadata/android/ar-AR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ar-AR/title.txt b/src/generic/fastlane/metadata/android/ar-AR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ar-AR/title.txt rename to src/generic/fastlane/metadata/android/ar-AR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/bg-BG/full_description.txt b/src/generic/fastlane/metadata/android/bg-BG/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/bg-BG/full_description.txt rename to src/generic/fastlane/metadata/android/bg-BG/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/bg-BG/short_description.txt b/src/generic/fastlane/metadata/android/bg-BG/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/bg-BG/short_description.txt rename to src/generic/fastlane/metadata/android/bg-BG/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/bg-BG/title.txt b/src/generic/fastlane/metadata/android/bg-BG/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/bg-BG/title.txt rename to src/generic/fastlane/metadata/android/bg-BG/title.txt diff --git a/app/src/generic/fastlane/metadata/android/ca/full_description.txt b/src/generic/fastlane/metadata/android/ca/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ca/full_description.txt rename to src/generic/fastlane/metadata/android/ca/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ca/short_description.txt b/src/generic/fastlane/metadata/android/ca/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ca/short_description.txt rename to src/generic/fastlane/metadata/android/ca/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ca/title.txt b/src/generic/fastlane/metadata/android/ca/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ca/title.txt rename to src/generic/fastlane/metadata/android/ca/title.txt diff --git a/app/src/generic/fastlane/metadata/android/cs-CZ/full_description.txt b/src/generic/fastlane/metadata/android/cs-CZ/full_description.txt similarity index 88% rename from app/src/generic/fastlane/metadata/android/cs-CZ/full_description.txt rename to src/generic/fastlane/metadata/android/cs-CZ/full_description.txt index aad090870a8d..bc781005d526 100644 --- a/app/src/generic/fastlane/metadata/android/cs-CZ/full_description.txt +++ b/src/generic/fastlane/metadata/android/cs-CZ/full_description.txt @@ -1,4 +1,4 @@ -U vás hostovaná platforma pro produktivitu, která ponechává kontrolu vám +Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše. Funkce: * Snadno použitelné moderní rozhraní, s motivem vzhledu sladěným s tím nastaveným na serveru @@ -12,9 +12,8 @@ Funkce: * Zabezpečení přístupu k vašim datům otiskem prstu nebo PIN kódem * Propojení s aplikací DAVx5 (dříve známé jako DAVdroid) pro snadné nastavení synchronizace kalendáře a kontaktů - Veškeré problémy prosíme hlaste na https://github.com/nextcloud/android/issues, diskutovat lze na https://help.nextcloud.com/c/clients/android Ještě Nextcloud neznáte? Je to server pro komunikaci, synchronizaci a sdílení vašich dat. Jedná se o svobodný software, který můžete provozovat sami, nebo si jako službu koupit u jiné společnosti. Díky tomu máte kontrolu nad svými fotkami, kalendářem, kontakty i dokumenty a vším ostatním. -Další informace o Nextcloud naleznete na https://nextcloud.com \ No newline at end of file +Více o Nextcloud naleznete na https://nextcloud.com \ No newline at end of file diff --git a/app/src/generic/fastlane/metadata/android/cs-CZ/short_description.txt b/src/generic/fastlane/metadata/android/cs-CZ/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/cs-CZ/short_description.txt rename to src/generic/fastlane/metadata/android/cs-CZ/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/cs-CZ/title.txt b/src/generic/fastlane/metadata/android/cs-CZ/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/cs-CZ/title.txt rename to src/generic/fastlane/metadata/android/cs-CZ/title.txt diff --git a/app/src/generic/fastlane/metadata/android/da-DK/full_description.txt b/src/generic/fastlane/metadata/android/da-DK/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/da-DK/full_description.txt rename to src/generic/fastlane/metadata/android/da-DK/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/da-DK/short_description.txt b/src/generic/fastlane/metadata/android/da-DK/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/da-DK/short_description.txt rename to src/generic/fastlane/metadata/android/da-DK/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/da-DK/title.txt b/src/generic/fastlane/metadata/android/da-DK/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/da-DK/title.txt rename to src/generic/fastlane/metadata/android/da-DK/title.txt diff --git a/app/src/generic/fastlane/metadata/android/de-DE/full_description.txt b/src/generic/fastlane/metadata/android/de-DE/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/de-DE/full_description.txt rename to src/generic/fastlane/metadata/android/de-DE/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/de-DE/short_description.txt b/src/generic/fastlane/metadata/android/de-DE/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/de-DE/short_description.txt rename to src/generic/fastlane/metadata/android/de-DE/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/de-DE/title.txt b/src/generic/fastlane/metadata/android/de-DE/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/de-DE/title.txt rename to src/generic/fastlane/metadata/android/de-DE/title.txt diff --git a/app/src/generic/fastlane/metadata/android/el-GR/full_description.txt b/src/generic/fastlane/metadata/android/el-GR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/el-GR/full_description.txt rename to src/generic/fastlane/metadata/android/el-GR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/el-GR/short_description.txt b/src/generic/fastlane/metadata/android/el-GR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/el-GR/short_description.txt rename to src/generic/fastlane/metadata/android/el-GR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/el-GR/title.txt b/src/generic/fastlane/metadata/android/el-GR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/el-GR/title.txt rename to src/generic/fastlane/metadata/android/el-GR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/en-US/full_description.txt b/src/generic/fastlane/metadata/android/en-US/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/en-US/full_description.txt rename to src/generic/fastlane/metadata/android/en-US/full_description.txt diff --git a/fastlane/metadata/android/en-US/images/icon.png b/src/generic/fastlane/metadata/android/en-US/images/icon.png similarity index 100% rename from fastlane/metadata/android/en-US/images/icon.png rename to src/generic/fastlane/metadata/android/en-US/images/icon.png diff --git a/app/src/generic/fastlane/metadata/android/en-US/short_description.txt b/src/generic/fastlane/metadata/android/en-US/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/en-US/short_description.txt rename to src/generic/fastlane/metadata/android/en-US/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/en-US/title.txt b/src/generic/fastlane/metadata/android/en-US/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/en-US/title.txt rename to src/generic/fastlane/metadata/android/en-US/title.txt diff --git a/app/src/generic/fastlane/metadata/android/es-ES/full_description.txt b/src/generic/fastlane/metadata/android/es-ES/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/es-ES/full_description.txt rename to src/generic/fastlane/metadata/android/es-ES/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/es-ES/short_description.txt b/src/generic/fastlane/metadata/android/es-ES/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/es-ES/short_description.txt rename to src/generic/fastlane/metadata/android/es-ES/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/es-ES/title.txt b/src/generic/fastlane/metadata/android/es-ES/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/es-ES/title.txt rename to src/generic/fastlane/metadata/android/es-ES/title.txt diff --git a/app/src/generic/fastlane/metadata/android/eu-ES/full_description.txt b/src/generic/fastlane/metadata/android/eu-ES/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/eu-ES/full_description.txt rename to src/generic/fastlane/metadata/android/eu-ES/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/eu-ES/short_description.txt b/src/generic/fastlane/metadata/android/eu-ES/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/eu-ES/short_description.txt rename to src/generic/fastlane/metadata/android/eu-ES/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/eu-ES/title.txt b/src/generic/fastlane/metadata/android/eu-ES/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/eu-ES/title.txt rename to src/generic/fastlane/metadata/android/eu-ES/title.txt diff --git a/app/src/generic/fastlane/metadata/android/fa-FA/full_description.txt b/src/generic/fastlane/metadata/android/fa-FA/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fa-FA/full_description.txt rename to src/generic/fastlane/metadata/android/fa-FA/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fa-FA/short_description.txt b/src/generic/fastlane/metadata/android/fa-FA/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fa-FA/short_description.txt rename to src/generic/fastlane/metadata/android/fa-FA/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fa-FA/title.txt b/src/generic/fastlane/metadata/android/fa-FA/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fa-FA/title.txt rename to src/generic/fastlane/metadata/android/fa-FA/title.txt diff --git a/app/src/generic/fastlane/metadata/android/fi-FI/full_description.txt b/src/generic/fastlane/metadata/android/fi-FI/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fi-FI/full_description.txt rename to src/generic/fastlane/metadata/android/fi-FI/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fi-FI/short_description.txt b/src/generic/fastlane/metadata/android/fi-FI/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fi-FI/short_description.txt rename to src/generic/fastlane/metadata/android/fi-FI/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fi-FI/title.txt b/src/generic/fastlane/metadata/android/fi-FI/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fi-FI/title.txt rename to src/generic/fastlane/metadata/android/fi-FI/title.txt diff --git a/app/src/generic/fastlane/metadata/android/fr-FR/full_description.txt b/src/generic/fastlane/metadata/android/fr-FR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fr-FR/full_description.txt rename to src/generic/fastlane/metadata/android/fr-FR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fr-FR/short_description.txt b/src/generic/fastlane/metadata/android/fr-FR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fr-FR/short_description.txt rename to src/generic/fastlane/metadata/android/fr-FR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/fr-FR/title.txt b/src/generic/fastlane/metadata/android/fr-FR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/fr-FR/title.txt rename to src/generic/fastlane/metadata/android/fr-FR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/is-IS/full_description.txt b/src/generic/fastlane/metadata/android/is-IS/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/is-IS/full_description.txt rename to src/generic/fastlane/metadata/android/is-IS/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/is-IS/short_description.txt b/src/generic/fastlane/metadata/android/is-IS/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/is-IS/short_description.txt rename to src/generic/fastlane/metadata/android/is-IS/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/is-IS/title.txt b/src/generic/fastlane/metadata/android/is-IS/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/is-IS/title.txt rename to src/generic/fastlane/metadata/android/is-IS/title.txt diff --git a/app/src/generic/fastlane/metadata/android/it-IT/full_description.txt b/src/generic/fastlane/metadata/android/it-IT/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/it-IT/full_description.txt rename to src/generic/fastlane/metadata/android/it-IT/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/it-IT/short_description.txt b/src/generic/fastlane/metadata/android/it-IT/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/it-IT/short_description.txt rename to src/generic/fastlane/metadata/android/it-IT/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/it-IT/title.txt b/src/generic/fastlane/metadata/android/it-IT/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/it-IT/title.txt rename to src/generic/fastlane/metadata/android/it-IT/title.txt diff --git a/app/src/generic/fastlane/metadata/android/ko-KR/full_description.txt b/src/generic/fastlane/metadata/android/ko-KR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ko-KR/full_description.txt rename to src/generic/fastlane/metadata/android/ko-KR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ko-KR/short_description.txt b/src/generic/fastlane/metadata/android/ko-KR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ko-KR/short_description.txt rename to src/generic/fastlane/metadata/android/ko-KR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ko-KR/title.txt b/src/generic/fastlane/metadata/android/ko-KR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ko-KR/title.txt rename to src/generic/fastlane/metadata/android/ko-KR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/lt-LT/full_description.txt b/src/generic/fastlane/metadata/android/lt-LT/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/lt-LT/full_description.txt rename to src/generic/fastlane/metadata/android/lt-LT/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/lt-LT/short_description.txt b/src/generic/fastlane/metadata/android/lt-LT/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/lt-LT/short_description.txt rename to src/generic/fastlane/metadata/android/lt-LT/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/lt-LT/title.txt b/src/generic/fastlane/metadata/android/lt-LT/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/lt-LT/title.txt rename to src/generic/fastlane/metadata/android/lt-LT/title.txt diff --git a/app/src/generic/fastlane/metadata/android/nl-NL/full_description.txt b/src/generic/fastlane/metadata/android/nl-NL/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/nl-NL/full_description.txt rename to src/generic/fastlane/metadata/android/nl-NL/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/nl-NL/short_description.txt b/src/generic/fastlane/metadata/android/nl-NL/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/nl-NL/short_description.txt rename to src/generic/fastlane/metadata/android/nl-NL/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/nl-NL/title.txt b/src/generic/fastlane/metadata/android/nl-NL/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/nl-NL/title.txt rename to src/generic/fastlane/metadata/android/nl-NL/title.txt diff --git a/app/src/generic/fastlane/metadata/android/pl-PL/full_description.txt b/src/generic/fastlane/metadata/android/pl-PL/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pl-PL/full_description.txt rename to src/generic/fastlane/metadata/android/pl-PL/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pl-PL/short_description.txt b/src/generic/fastlane/metadata/android/pl-PL/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pl-PL/short_description.txt rename to src/generic/fastlane/metadata/android/pl-PL/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pl-PL/title.txt b/src/generic/fastlane/metadata/android/pl-PL/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pl-PL/title.txt rename to src/generic/fastlane/metadata/android/pl-PL/title.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-BR/full_description.txt b/src/generic/fastlane/metadata/android/pt-BR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-BR/full_description.txt rename to src/generic/fastlane/metadata/android/pt-BR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-BR/short_description.txt b/src/generic/fastlane/metadata/android/pt-BR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-BR/short_description.txt rename to src/generic/fastlane/metadata/android/pt-BR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-BR/title.txt b/src/generic/fastlane/metadata/android/pt-BR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-BR/title.txt rename to src/generic/fastlane/metadata/android/pt-BR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-PT/full_description.txt b/src/generic/fastlane/metadata/android/pt-PT/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-PT/full_description.txt rename to src/generic/fastlane/metadata/android/pt-PT/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-PT/short_description.txt b/src/generic/fastlane/metadata/android/pt-PT/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-PT/short_description.txt rename to src/generic/fastlane/metadata/android/pt-PT/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/pt-PT/title.txt b/src/generic/fastlane/metadata/android/pt-PT/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/pt-PT/title.txt rename to src/generic/fastlane/metadata/android/pt-PT/title.txt diff --git a/app/src/generic/fastlane/metadata/android/ro-RO/full_description.txt b/src/generic/fastlane/metadata/android/ro-RO/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ro-RO/full_description.txt rename to src/generic/fastlane/metadata/android/ro-RO/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ro-RO/short_description.txt b/src/generic/fastlane/metadata/android/ro-RO/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ro-RO/short_description.txt rename to src/generic/fastlane/metadata/android/ro-RO/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/ro-RO/title.txt b/src/generic/fastlane/metadata/android/ro-RO/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/ro-RO/title.txt rename to src/generic/fastlane/metadata/android/ro-RO/title.txt diff --git a/app/src/generic/fastlane/metadata/android/sl-SL/full_description.txt b/src/generic/fastlane/metadata/android/sl-SL/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sl-SL/full_description.txt rename to src/generic/fastlane/metadata/android/sl-SL/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sl-SL/short_description.txt b/src/generic/fastlane/metadata/android/sl-SL/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sl-SL/short_description.txt rename to src/generic/fastlane/metadata/android/sl-SL/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sl-SL/title.txt b/src/generic/fastlane/metadata/android/sl-SL/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sl-SL/title.txt rename to src/generic/fastlane/metadata/android/sl-SL/title.txt diff --git a/app/src/generic/fastlane/metadata/android/sr-SR/full_description.txt b/src/generic/fastlane/metadata/android/sr-SR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sr-SR/full_description.txt rename to src/generic/fastlane/metadata/android/sr-SR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sr-SR/short_description.txt b/src/generic/fastlane/metadata/android/sr-SR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sr-SR/short_description.txt rename to src/generic/fastlane/metadata/android/sr-SR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sr-SR/title.txt b/src/generic/fastlane/metadata/android/sr-SR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sr-SR/title.txt rename to src/generic/fastlane/metadata/android/sr-SR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/sv-SE/full_description.txt b/src/generic/fastlane/metadata/android/sv-SE/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sv-SE/full_description.txt rename to src/generic/fastlane/metadata/android/sv-SE/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sv-SE/short_description.txt b/src/generic/fastlane/metadata/android/sv-SE/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sv-SE/short_description.txt rename to src/generic/fastlane/metadata/android/sv-SE/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/sv-SE/title.txt b/src/generic/fastlane/metadata/android/sv-SE/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/sv-SE/title.txt rename to src/generic/fastlane/metadata/android/sv-SE/title.txt diff --git a/app/src/generic/fastlane/metadata/android/tr-TR/full_description.txt b/src/generic/fastlane/metadata/android/tr-TR/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/tr-TR/full_description.txt rename to src/generic/fastlane/metadata/android/tr-TR/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/tr-TR/short_description.txt b/src/generic/fastlane/metadata/android/tr-TR/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/tr-TR/short_description.txt rename to src/generic/fastlane/metadata/android/tr-TR/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/tr-TR/title.txt b/src/generic/fastlane/metadata/android/tr-TR/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/tr-TR/title.txt rename to src/generic/fastlane/metadata/android/tr-TR/title.txt diff --git a/app/src/generic/fastlane/metadata/android/uk-UK/full_description.txt b/src/generic/fastlane/metadata/android/uk-UK/full_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/uk-UK/full_description.txt rename to src/generic/fastlane/metadata/android/uk-UK/full_description.txt diff --git a/app/src/generic/fastlane/metadata/android/uk-UK/short_description.txt b/src/generic/fastlane/metadata/android/uk-UK/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/uk-UK/short_description.txt rename to src/generic/fastlane/metadata/android/uk-UK/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/uk-UK/title.txt b/src/generic/fastlane/metadata/android/uk-UK/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/uk-UK/title.txt rename to src/generic/fastlane/metadata/android/uk-UK/title.txt diff --git a/app/src/generic/fastlane/metadata/android/vi-VI/short_description.txt b/src/generic/fastlane/metadata/android/vi-VI/short_description.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/vi-VI/short_description.txt rename to src/generic/fastlane/metadata/android/vi-VI/short_description.txt diff --git a/app/src/generic/fastlane/metadata/android/vi-VI/title.txt b/src/generic/fastlane/metadata/android/vi-VI/title.txt similarity index 100% rename from app/src/generic/fastlane/metadata/android/vi-VI/title.txt rename to src/generic/fastlane/metadata/android/vi-VI/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ar-AR/full_description.txt b/src/versionDev/fastlane/metadata/android/ar-AR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ar-AR/full_description.txt rename to src/versionDev/fastlane/metadata/android/ar-AR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ar-AR/short_description.txt b/src/versionDev/fastlane/metadata/android/ar-AR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ar-AR/short_description.txt rename to src/versionDev/fastlane/metadata/android/ar-AR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ar-AR/title.txt b/src/versionDev/fastlane/metadata/android/ar-AR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ar-AR/title.txt rename to src/versionDev/fastlane/metadata/android/ar-AR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/bg-BG/full_description.txt b/src/versionDev/fastlane/metadata/android/bg-BG/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/bg-BG/full_description.txt rename to src/versionDev/fastlane/metadata/android/bg-BG/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/bg-BG/short_description.txt b/src/versionDev/fastlane/metadata/android/bg-BG/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/bg-BG/short_description.txt rename to src/versionDev/fastlane/metadata/android/bg-BG/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/bg-BG/title.txt b/src/versionDev/fastlane/metadata/android/bg-BG/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/bg-BG/title.txt rename to src/versionDev/fastlane/metadata/android/bg-BG/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ca/full_description.txt b/src/versionDev/fastlane/metadata/android/ca/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ca/full_description.txt rename to src/versionDev/fastlane/metadata/android/ca/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ca/short_description.txt b/src/versionDev/fastlane/metadata/android/ca/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ca/short_description.txt rename to src/versionDev/fastlane/metadata/android/ca/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ca/title.txt b/src/versionDev/fastlane/metadata/android/ca/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ca/title.txt rename to src/versionDev/fastlane/metadata/android/ca/title.txt diff --git a/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt b/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt new file mode 100644 index 000000000000..10b1afb9fd2d --- /dev/null +++ b/src/versionDev/fastlane/metadata/android/cs-CZ/full_description.txt @@ -0,0 +1,4 @@ +Platforma pro produktivitu hostovaná u vás, kde vaše data jsou opravdu vaše. +Toto je oficiální vývojová verze, sloužící jako denně aktualizovaná ukázka nových nevyzkoušených funkcí, což může způsobovat nestabilitu a ztráty dat. Je určeno pro uživatele, kteří jsou ochotní testovat a hlásit chyby na které narazí. Nepoužívejte pro svou produktivní práci! + +Jak vývojová tak produkční verze jsou k dispozici na F-droid a mohou být nainstalovány souběžně. \ No newline at end of file diff --git a/app/src/versionDev/fastlane/metadata/android/cs-CZ/short_description.txt b/src/versionDev/fastlane/metadata/android/cs-CZ/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/cs-CZ/short_description.txt rename to src/versionDev/fastlane/metadata/android/cs-CZ/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/cs-CZ/title.txt b/src/versionDev/fastlane/metadata/android/cs-CZ/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/cs-CZ/title.txt rename to src/versionDev/fastlane/metadata/android/cs-CZ/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/da-DK/full_description.txt b/src/versionDev/fastlane/metadata/android/da-DK/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/da-DK/full_description.txt rename to src/versionDev/fastlane/metadata/android/da-DK/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/da-DK/short_description.txt b/src/versionDev/fastlane/metadata/android/da-DK/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/da-DK/short_description.txt rename to src/versionDev/fastlane/metadata/android/da-DK/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/da-DK/title.txt b/src/versionDev/fastlane/metadata/android/da-DK/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/da-DK/title.txt rename to src/versionDev/fastlane/metadata/android/da-DK/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/de-DE/full_description.txt b/src/versionDev/fastlane/metadata/android/de-DE/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/de-DE/full_description.txt rename to src/versionDev/fastlane/metadata/android/de-DE/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/de-DE/short_description.txt b/src/versionDev/fastlane/metadata/android/de-DE/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/de-DE/short_description.txt rename to src/versionDev/fastlane/metadata/android/de-DE/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/de-DE/title.txt b/src/versionDev/fastlane/metadata/android/de-DE/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/de-DE/title.txt rename to src/versionDev/fastlane/metadata/android/de-DE/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/el-GR/full_description.txt b/src/versionDev/fastlane/metadata/android/el-GR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/el-GR/full_description.txt rename to src/versionDev/fastlane/metadata/android/el-GR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/el-GR/short_description.txt b/src/versionDev/fastlane/metadata/android/el-GR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/el-GR/short_description.txt rename to src/versionDev/fastlane/metadata/android/el-GR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/el-GR/title.txt b/src/versionDev/fastlane/metadata/android/el-GR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/el-GR/title.txt rename to src/versionDev/fastlane/metadata/android/el-GR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190517.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190517.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190517.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190517.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190518.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190518.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190518.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190518.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190520.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190520.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190520.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190520.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190521.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190521.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190521.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190521.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190522.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190522.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190522.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190522.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190523.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190523.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190523.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190523.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190524.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190524.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190524.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190524.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190528.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190528.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190528.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190528.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190529.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190529.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190529.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190529.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190530.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190530.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190530.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190530.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190531.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190531.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190531.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190531.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190601.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190601.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190601.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190601.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190604.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190604.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190604.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190604.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190605.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190605.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190605.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190605.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190612.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190612.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190612.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190612.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190613.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190613.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190613.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190613.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190615.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190615.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190615.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190615.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190619.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190619.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190619.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190619.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190621.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190621.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190621.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190621.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190622.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190622.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190622.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190622.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190625.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190625.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190625.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190625.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190627.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190627.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190627.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190627.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190629.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190629.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190629.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190629.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190701.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190701.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190701.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190701.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190702.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190702.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190702.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190702.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190703.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190703.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190703.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190703.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190704.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190704.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190704.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190704.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190705.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190705.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190705.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190705.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190710.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190710.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190710.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190710.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190711.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190711.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190711.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190711.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190713.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190713.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190713.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190713.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190716.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190716.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190716.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190716.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190717.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190717.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190717.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190717.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190720.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190720.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190720.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190720.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190723.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190723.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190723.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190723.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190724.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190724.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190724.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190724.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190726.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190726.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190726.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190726.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190727.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190727.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190727.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190727.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190730.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190730.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190730.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190730.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190731.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190731.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190731.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190731.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190802.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190802.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190802.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190802.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190803.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190803.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190803.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190803.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190806.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190806.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190806.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190806.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190808.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190808.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190808.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190808.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190809.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190809.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190809.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190809.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190810.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190810.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190810.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190810.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190813.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190813.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190813.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190813.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190815.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190815.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190815.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190815.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190816.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190816.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190816.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190816.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190817.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190817.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190817.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190817.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190820.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190820.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190820.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190820.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190821.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190821.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190821.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190821.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190822.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190822.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190822.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190822.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190823.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190823.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190823.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190823.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190824.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190824.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190824.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190824.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190827.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190827.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190827.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190827.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190828.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190828.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190828.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190828.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190829.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190829.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190829.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190829.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190903.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190903.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190903.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190903.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190904.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190904.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190904.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190904.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190905.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190905.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190905.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190905.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190906.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190906.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190906.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190906.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190910.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190910.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190910.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190910.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190911.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190911.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190911.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190911.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190913.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190913.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190913.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190913.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190914.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190914.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190914.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190914.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190921.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190921.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190921.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190921.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190924.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190924.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190924.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190924.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190926.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190926.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190926.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190926.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190928.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190928.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20190928.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20190928.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191002.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191002.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191002.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191002.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191003.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191003.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191003.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191003.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191005.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191005.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191005.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191005.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191008.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191008.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191008.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191008.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191009.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191009.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191009.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191009.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191010.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191010.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191010.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191010.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191011.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191011.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191011.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191011.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191012.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191012.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191012.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191012.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191016.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191016.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191016.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191016.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191017.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191017.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191017.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191017.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191018.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191018.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191018.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191018.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191019.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191019.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191019.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191019.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191022.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191022.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191022.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191022.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191024.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191024.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191024.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191024.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191025.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191025.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191025.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191025.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191026.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191026.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191026.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191026.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191029.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191029.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191029.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191029.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191030.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191030.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191030.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191030.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191031.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191031.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191031.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191031.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191101.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191101.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191101.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191101.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191102.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191102.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191102.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191102.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191106.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191106.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191106.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191106.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191107.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191107.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191107.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191107.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191108.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191108.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191108.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191108.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191113.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191113.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191113.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191113.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191114.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191114.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191114.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191114.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191116.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191116.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191116.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191116.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191119.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191119.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191119.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191119.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191120.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191120.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191120.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191120.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191121.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191121.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191121.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191121.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191123.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191123.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191123.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191123.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191127.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191127.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191127.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191127.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191129.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191129.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191129.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191129.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191203.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191203.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191203.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191203.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191204.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191204.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191204.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191204.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191205.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191205.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191205.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191205.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191206.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191206.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191206.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191206.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191207.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191207.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191207.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191207.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191211.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191211.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191211.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191211.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191213.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191213.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191213.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191213.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191214.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191214.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191214.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191214.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191217.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191217.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191217.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191217.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191218.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191218.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191218.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191218.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191219.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191219.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191219.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191219.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191220.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191220.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191220.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191220.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191221.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191221.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20191221.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20191221.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200107.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200107.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200107.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200107.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200108.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200108.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200108.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200108.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200109.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200109.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200109.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200109.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200110.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200110.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200110.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200110.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200112.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200112.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200112.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200112.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200115.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200115.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200115.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200115.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200117.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200117.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200117.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200117.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200118.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200118.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200118.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200118.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200121.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200121.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200121.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200121.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200122.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200122.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200122.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200122.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200125.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200125.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200125.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200125.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200128.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200128.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200128.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200128.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200129.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200129.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20200129.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20200129.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20220322.txt b/src/versionDev/fastlane/metadata/android/en-US/changelogs/20220322.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/changelogs/20220322.txt rename to src/versionDev/fastlane/metadata/android/en-US/changelogs/20220322.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/full_description.txt b/src/versionDev/fastlane/metadata/android/en-US/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/full_description.txt rename to src/versionDev/fastlane/metadata/android/en-US/full_description.txt diff --git a/src/versionDev/fastlane/metadata/android/en-US/images/icon.png b/src/versionDev/fastlane/metadata/android/en-US/images/icon.png new file mode 100644 index 000000000000..9a704f550779 Binary files /dev/null and b/src/versionDev/fastlane/metadata/android/en-US/images/icon.png differ diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/short_description.txt b/src/versionDev/fastlane/metadata/android/en-US/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/short_description.txt rename to src/versionDev/fastlane/metadata/android/en-US/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/en-US/title.txt b/src/versionDev/fastlane/metadata/android/en-US/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/en-US/title.txt rename to src/versionDev/fastlane/metadata/android/en-US/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/es-ES/full_description.txt b/src/versionDev/fastlane/metadata/android/es-ES/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/es-ES/full_description.txt rename to src/versionDev/fastlane/metadata/android/es-ES/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/es-ES/short_description.txt b/src/versionDev/fastlane/metadata/android/es-ES/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/es-ES/short_description.txt rename to src/versionDev/fastlane/metadata/android/es-ES/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/es-ES/title.txt b/src/versionDev/fastlane/metadata/android/es-ES/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/es-ES/title.txt rename to src/versionDev/fastlane/metadata/android/es-ES/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/eu-ES/full_description.txt b/src/versionDev/fastlane/metadata/android/eu-ES/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/eu-ES/full_description.txt rename to src/versionDev/fastlane/metadata/android/eu-ES/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/eu-ES/short_description.txt b/src/versionDev/fastlane/metadata/android/eu-ES/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/eu-ES/short_description.txt rename to src/versionDev/fastlane/metadata/android/eu-ES/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/eu-ES/title.txt b/src/versionDev/fastlane/metadata/android/eu-ES/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/eu-ES/title.txt rename to src/versionDev/fastlane/metadata/android/eu-ES/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fa-FA/full_description.txt b/src/versionDev/fastlane/metadata/android/fa-FA/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fa-FA/full_description.txt rename to src/versionDev/fastlane/metadata/android/fa-FA/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fa-FA/short_description.txt b/src/versionDev/fastlane/metadata/android/fa-FA/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fa-FA/short_description.txt rename to src/versionDev/fastlane/metadata/android/fa-FA/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fa-FA/title.txt b/src/versionDev/fastlane/metadata/android/fa-FA/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fa-FA/title.txt rename to src/versionDev/fastlane/metadata/android/fa-FA/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fi-FI/full_description.txt b/src/versionDev/fastlane/metadata/android/fi-FI/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fi-FI/full_description.txt rename to src/versionDev/fastlane/metadata/android/fi-FI/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fi-FI/short_description.txt b/src/versionDev/fastlane/metadata/android/fi-FI/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fi-FI/short_description.txt rename to src/versionDev/fastlane/metadata/android/fi-FI/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fi-FI/title.txt b/src/versionDev/fastlane/metadata/android/fi-FI/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fi-FI/title.txt rename to src/versionDev/fastlane/metadata/android/fi-FI/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fr-FR/full_description.txt b/src/versionDev/fastlane/metadata/android/fr-FR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fr-FR/full_description.txt rename to src/versionDev/fastlane/metadata/android/fr-FR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fr-FR/short_description.txt b/src/versionDev/fastlane/metadata/android/fr-FR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fr-FR/short_description.txt rename to src/versionDev/fastlane/metadata/android/fr-FR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/fr-FR/title.txt b/src/versionDev/fastlane/metadata/android/fr-FR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/fr-FR/title.txt rename to src/versionDev/fastlane/metadata/android/fr-FR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/is-IS/full_description.txt b/src/versionDev/fastlane/metadata/android/is-IS/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/is-IS/full_description.txt rename to src/versionDev/fastlane/metadata/android/is-IS/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/is-IS/short_description.txt b/src/versionDev/fastlane/metadata/android/is-IS/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/is-IS/short_description.txt rename to src/versionDev/fastlane/metadata/android/is-IS/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/is-IS/title.txt b/src/versionDev/fastlane/metadata/android/is-IS/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/is-IS/title.txt rename to src/versionDev/fastlane/metadata/android/is-IS/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/it-IT/full_description.txt b/src/versionDev/fastlane/metadata/android/it-IT/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/it-IT/full_description.txt rename to src/versionDev/fastlane/metadata/android/it-IT/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/it-IT/short_description.txt b/src/versionDev/fastlane/metadata/android/it-IT/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/it-IT/short_description.txt rename to src/versionDev/fastlane/metadata/android/it-IT/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/it-IT/title.txt b/src/versionDev/fastlane/metadata/android/it-IT/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/it-IT/title.txt rename to src/versionDev/fastlane/metadata/android/it-IT/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ko-KR/full_description.txt b/src/versionDev/fastlane/metadata/android/ko-KR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ko-KR/full_description.txt rename to src/versionDev/fastlane/metadata/android/ko-KR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ko-KR/short_description.txt b/src/versionDev/fastlane/metadata/android/ko-KR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ko-KR/short_description.txt rename to src/versionDev/fastlane/metadata/android/ko-KR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ko-KR/title.txt b/src/versionDev/fastlane/metadata/android/ko-KR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ko-KR/title.txt rename to src/versionDev/fastlane/metadata/android/ko-KR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/lt-LT/full_description.txt b/src/versionDev/fastlane/metadata/android/lt-LT/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/lt-LT/full_description.txt rename to src/versionDev/fastlane/metadata/android/lt-LT/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/lt-LT/short_description.txt b/src/versionDev/fastlane/metadata/android/lt-LT/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/lt-LT/short_description.txt rename to src/versionDev/fastlane/metadata/android/lt-LT/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/lt-LT/title.txt b/src/versionDev/fastlane/metadata/android/lt-LT/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/lt-LT/title.txt rename to src/versionDev/fastlane/metadata/android/lt-LT/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/nl-NL/full_description.txt b/src/versionDev/fastlane/metadata/android/nl-NL/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/nl-NL/full_description.txt rename to src/versionDev/fastlane/metadata/android/nl-NL/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/nl-NL/short_description.txt b/src/versionDev/fastlane/metadata/android/nl-NL/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/nl-NL/short_description.txt rename to src/versionDev/fastlane/metadata/android/nl-NL/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/nl-NL/title.txt b/src/versionDev/fastlane/metadata/android/nl-NL/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/nl-NL/title.txt rename to src/versionDev/fastlane/metadata/android/nl-NL/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pl-PL/full_description.txt b/src/versionDev/fastlane/metadata/android/pl-PL/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pl-PL/full_description.txt rename to src/versionDev/fastlane/metadata/android/pl-PL/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pl-PL/short_description.txt b/src/versionDev/fastlane/metadata/android/pl-PL/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pl-PL/short_description.txt rename to src/versionDev/fastlane/metadata/android/pl-PL/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pl-PL/title.txt b/src/versionDev/fastlane/metadata/android/pl-PL/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pl-PL/title.txt rename to src/versionDev/fastlane/metadata/android/pl-PL/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-BR/full_description.txt b/src/versionDev/fastlane/metadata/android/pt-BR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-BR/full_description.txt rename to src/versionDev/fastlane/metadata/android/pt-BR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-BR/short_description.txt b/src/versionDev/fastlane/metadata/android/pt-BR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-BR/short_description.txt rename to src/versionDev/fastlane/metadata/android/pt-BR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-BR/title.txt b/src/versionDev/fastlane/metadata/android/pt-BR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-BR/title.txt rename to src/versionDev/fastlane/metadata/android/pt-BR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-PT/full_description.txt b/src/versionDev/fastlane/metadata/android/pt-PT/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-PT/full_description.txt rename to src/versionDev/fastlane/metadata/android/pt-PT/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-PT/short_description.txt b/src/versionDev/fastlane/metadata/android/pt-PT/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-PT/short_description.txt rename to src/versionDev/fastlane/metadata/android/pt-PT/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/pt-PT/title.txt b/src/versionDev/fastlane/metadata/android/pt-PT/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/pt-PT/title.txt rename to src/versionDev/fastlane/metadata/android/pt-PT/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ro-RO/full_description.txt b/src/versionDev/fastlane/metadata/android/ro-RO/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ro-RO/full_description.txt rename to src/versionDev/fastlane/metadata/android/ro-RO/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ro-RO/short_description.txt b/src/versionDev/fastlane/metadata/android/ro-RO/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ro-RO/short_description.txt rename to src/versionDev/fastlane/metadata/android/ro-RO/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/ro-RO/title.txt b/src/versionDev/fastlane/metadata/android/ro-RO/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/ro-RO/title.txt rename to src/versionDev/fastlane/metadata/android/ro-RO/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sl-SL/full_description.txt b/src/versionDev/fastlane/metadata/android/sl-SL/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sl-SL/full_description.txt rename to src/versionDev/fastlane/metadata/android/sl-SL/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sl-SL/short_description.txt b/src/versionDev/fastlane/metadata/android/sl-SL/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sl-SL/short_description.txt rename to src/versionDev/fastlane/metadata/android/sl-SL/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sl-SL/title.txt b/src/versionDev/fastlane/metadata/android/sl-SL/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sl-SL/title.txt rename to src/versionDev/fastlane/metadata/android/sl-SL/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sr-SR/full_description.txt b/src/versionDev/fastlane/metadata/android/sr-SR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sr-SR/full_description.txt rename to src/versionDev/fastlane/metadata/android/sr-SR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sr-SR/short_description.txt b/src/versionDev/fastlane/metadata/android/sr-SR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sr-SR/short_description.txt rename to src/versionDev/fastlane/metadata/android/sr-SR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sr-SR/title.txt b/src/versionDev/fastlane/metadata/android/sr-SR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sr-SR/title.txt rename to src/versionDev/fastlane/metadata/android/sr-SR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sv-SE/full_description.txt b/src/versionDev/fastlane/metadata/android/sv-SE/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sv-SE/full_description.txt rename to src/versionDev/fastlane/metadata/android/sv-SE/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sv-SE/short_description.txt b/src/versionDev/fastlane/metadata/android/sv-SE/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sv-SE/short_description.txt rename to src/versionDev/fastlane/metadata/android/sv-SE/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/sv-SE/title.txt b/src/versionDev/fastlane/metadata/android/sv-SE/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/sv-SE/title.txt rename to src/versionDev/fastlane/metadata/android/sv-SE/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/tr-TR/full_description.txt b/src/versionDev/fastlane/metadata/android/tr-TR/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/tr-TR/full_description.txt rename to src/versionDev/fastlane/metadata/android/tr-TR/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/tr-TR/short_description.txt b/src/versionDev/fastlane/metadata/android/tr-TR/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/tr-TR/short_description.txt rename to src/versionDev/fastlane/metadata/android/tr-TR/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/tr-TR/title.txt b/src/versionDev/fastlane/metadata/android/tr-TR/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/tr-TR/title.txt rename to src/versionDev/fastlane/metadata/android/tr-TR/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/uk-UK/full_description.txt b/src/versionDev/fastlane/metadata/android/uk-UK/full_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/uk-UK/full_description.txt rename to src/versionDev/fastlane/metadata/android/uk-UK/full_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/uk-UK/short_description.txt b/src/versionDev/fastlane/metadata/android/uk-UK/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/uk-UK/short_description.txt rename to src/versionDev/fastlane/metadata/android/uk-UK/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/uk-UK/title.txt b/src/versionDev/fastlane/metadata/android/uk-UK/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/uk-UK/title.txt rename to src/versionDev/fastlane/metadata/android/uk-UK/title.txt diff --git a/app/src/versionDev/fastlane/metadata/android/vi-VI/short_description.txt b/src/versionDev/fastlane/metadata/android/vi-VI/short_description.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/vi-VI/short_description.txt rename to src/versionDev/fastlane/metadata/android/vi-VI/short_description.txt diff --git a/app/src/versionDev/fastlane/metadata/android/vi-VI/title.txt b/src/versionDev/fastlane/metadata/android/vi-VI/title.txt similarity index 100% rename from app/src/versionDev/fastlane/metadata/android/vi-VI/title.txt rename to src/versionDev/fastlane/metadata/android/vi-VI/title.txt