diff --git a/.circleci/config.yml b/.circleci/config.yml index 29858818167968060a19ef492f7b3f6c66f55342..f297a047b0c968a1bb951528b726ac80e435022d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,140 +1,147 @@ version: 2.1 orbs: android: circleci/android@0.2.1 - sonarcloud: sonarsource/sonarcloud@1.0.1 + sonarcloud: sonarsource/sonarcloud@1.0.2 commands: install-ndk: android/install-ndk - restore-build-cache: android/restore-build-cache - save-build-cache: android/save-build-cache + restore-android-build-cache: android/restore-build-cache + save-android-build-cache: android/save-build-cache scan-sonar: sonarcloud/scan -jobs: - quick_build_release_no_tests: - executor: android/android - resource_class: large + restore-gradle-cache: + description: "Restore gradle caches" + steps: + - restore_cache: + key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + save-gradle-cache: + description: "Save gradle caches" + steps: + - save_cache: + paths: + - ~/.gradle + key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + require-version-bump: + description: "Require version bump for binary assembling" steps: - - checkout - run: - name: Check if assemble required + name: "Check if assemble required" command: | last_commit=$(git log -1 --pretty=%B) if [[ $last_commit != *"Version bump"* ]]; then circleci-agent step halt echo "Skipping job" fi - - install-ndk: - ndk-sha: "c81a5bcb4672a18d3647bf6898cd4dbcb978d0e8" - ndk-version: "android-ndk-r21c" - - restore-build-cache - - restore_cache: - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + run-gradle-cmd: + description: "Running gradle command with environment options" + parameters: + desc: + type: string + default: "Running gradle command" + cmd: + type: string + steps: - run: - name: Quick Build - command: ./gradlew assembleDeviceRelease + name: << parameters.desc >> + command: ./gradlew << parameters.cmd >> environment: JVM_OPTS: -Xmx2048m GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false - - save-build-cache - - save_cache: - paths: - - ~/.gradle - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + run-gradle-cmd-test-splitting: + description: "Running gradle command with environment options and test splitting" + parameters: + desc: + type: string + default: "Running gradle command" + cmd: + type: string + steps: + - run: + name: Test splitting output + command: circleci tests glob "**/test*/**/*.kt" | circleci tests split | xargs -n 1 echo + - run: + name: << parameters.desc >> + command: ./gradlew << parameters.cmd >> -i -PtestFilter="`circleci tests glob "**/test*/**/*.kt" | circleci tests split`" + environment: + JVM_OPTS: -Xmx2048m + GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + +jobs: + quick_build_device_release_no_tests: + executor: android/android + resource_class: large + working_directory: ~/project + steps: + - checkout + - restore-gradle-cache + - restore-android-build-cache + - require-version-bump + - install-ndk: + ndk-sha: "c81a5bcb4672a18d3647bf6898cd4dbcb978d0e8" + ndk-version: "android-ndk-r21c" + - run-gradle-cmd: + desc: Quick Build + cmd: "assembleDeviceRelease" + - save-gradle-cache + - save-android-build-cache - store_artifacts: path: Corona-Warn-App/build/reports destination: reports - quick_build_for_testers_no_tests: + quick_build_device_for_testers_release_no_tests: executor: android/android resource_class: large + working_directory: ~/project steps: - checkout - - run: - name: Check if assemble required - command: | - last_commit=$(git log -1 --pretty=%B) - if [[ $last_commit != *"Version bump"* ]]; then - circleci-agent step halt - echo "Skipping job" - fi + - restore-gradle-cache + - restore-android-build-cache + - require-version-bump - install-ndk: ndk-sha: "c81a5bcb4672a18d3647bf6898cd4dbcb978d0e8" ndk-version: "android-ndk-r21c" - - restore-build-cache - - restore_cache: - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} - - run: - name: Quick Build - command: ./gradlew :Corona-Warn-App:assembleDeviceForTestersRelease - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false - - save-build-cache - - save_cache: - paths: - - ~/.gradle - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + - run-gradle-cmd: + desc: Quick Build + cmd: ":Corona-Warn-App:assembleDeviceForTestersRelease" + - save-gradle-cache + - save-android-build-cache - store_artifacts: path: Corona-Warn-App/build/reports destination: reports device_release_unit_tests: executor: android/android resource_class: large - parallelism: 4 + working_directory: ~/project + parallelism: 3 steps: - checkout - - restore-build-cache - - restore_cache: - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} - - run: - name: test splitting output - command: circleci tests glob "**/test*/**/*.kt" | circleci tests split | xargs -n 1 echo - - run: - name: Unit tests - command: ./gradlew :Corona-Warn-App:testDeviceReleaseUnitTest -i -PtestFilter="`circleci tests glob "**/test*/**/*.kt" | circleci tests split`" - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false - - save-build-cache - - save_cache: - paths: - - ~/.gradle - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} - - run: - name: JaCoCo report - command: ./gradlew :Corona-Warn-App:jacocoTestReportDeviceRelease - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd-test-splitting: + desc: Unit tests + cmd: ":Corona-Warn-App:testDeviceReleaseUnitTest -i" + - save-gradle-cache + - save-android-build-cache - store_artifacts: path: Corona-Warn-App/build/reports destination: reports - store_test_results: path: Corona-Warn-App/build/test-results - - run: - name: Skip SonarCloud for external Pull Requests - command: '[[ -v CIRCLE_PR_REPONAME ]] && circleci-agent step halt || true' - - scan-sonar - device_for_testers_unit_tests: + - persist_to_workspace: + root: /home/circleci + paths: + - ./project + device_for_testers_release_unit_tests: executor: android/android resource_class: large - parallelism: 4 + working_directory: ~/project + parallelism: 3 steps: - checkout - - restore-build-cache - - restore_cache: - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} - - run: - name: test splitting output - command: circleci tests glob "**/test*/**/*.kt" | circleci tests split | xargs -n 1 echo - - run: - name: Unit tests - command: ./gradlew :Corona-Warn-App:testDeviceForTestersReleaseUnitTest -i -PtestFilter="`circleci tests glob "**/test*/**/*.kt" | circleci tests split`" - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false - - save-build-cache - - save_cache: - paths: - - ~/.gradle - key: jars-{{ checksum "build.gradle" }}-{{ checksum "Corona-Warn-App/build.gradle" }}-{{ checksum "Server-Protocol-Buffer/build.gradle" }} + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd-test-splitting: + desc: Unit tests with splitting + cmd: ":Corona-Warn-App:testDeviceForTestersReleaseUnitTest" + - save-gradle-cache + - save-android-build-cache - store_artifacts: path: Corona-Warn-App/build/reports destination: reports @@ -143,83 +150,102 @@ jobs: lint_device_release_check: executor: android/android resource_class: large + working_directory: ~/project steps: - checkout - - run: - name: Lint check device release - command: ./gradlew --profile :Corona-Warn-App:lintDeviceRelease - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: Lint check deviceRelease + cmd: ":Corona-Warn-App:lintDeviceRelease -i" - store_artifacts: path: Corona-Warn-App/build/reports destination: reports ktlint_device_release_check: executor: android/android resource_class: medium + working_directory: ~/project steps: - checkout - - run: - name: Ktlint check device release - command: ./gradlew :Corona-Warn-App:ktlintDeviceReleaseCheck - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: Ktlint check deviceRelease + cmd: ":Corona-Warn-App:ktlintDeviceReleaseCheck" - store_artifacts: path: Corona-Warn-App/build/reports destination: reports - lint_device_for_testers_check: + lint_device_for_testers_release_check: executor: android/android resource_class: large + working_directory: ~/project steps: - checkout - - run: - name: Lint check device for testers - command: ./gradlew --profile :Corona-Warn-App:lintDeviceForTestersRelease - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: Lint check deviceForTestersRelease + cmd: ":Corona-Warn-App:lintDeviceForTestersRelease -i" - store_artifacts: path: Corona-Warn-App/build/reports destination: reports - ktlint_device_for_testers_check: + ktlint_device_for_testers_release_check: executor: android/android resource_class: medium + working_directory: ~/project steps: - checkout - - run: - name: Ktlint check device for testers - command: ./gradlew :Corona-Warn-App:ktlintDeviceForTestersReleaseCheck - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: Ktlint check deviceForTestersRelease + cmd: ":Corona-Warn-App:ktlintDeviceForTestersReleaseCheck" - store_artifacts: path: Corona-Warn-App/build/reports destination: reports detekt: executor: android/android resource_class: medium + working_directory: ~/project steps: - checkout - - run: - name: Detekt check - command: ./gradlew :Corona-Warn-App:detekt - environment: - JVM_OPTS: -Xmx2048m - GRADLE_OPTS: -Xmx1536m -XX:+HeapDumpOnOutOfMemoryError -Dorg.gradle.caching=true -Dorg.gradle.configureondemand=true -Dkotlin.compiler.execution.strategy=in-process -Dkotlin.incremental=false + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: Detekt check + cmd: ":Corona-Warn-App:detekt" - store_artifacts: path: Corona-Warn-App/build/reports destination: reports + run_sonar: + executor: android/android + resource_class: large + working_directory: ~/project + steps: + - attach_workspace: + at: /home/circleci + - restore-gradle-cache + - restore-android-build-cache + - run-gradle-cmd: + desc: JaCoCo report + cmd: ":Corona-Warn-App:jacocoTestReportDeviceRelease -i" + - run: + name: Skip SonarCloud for external Pull Requests + command: '[[ -v CIRCLE_PR_REPONAME ]] && circleci-agent step halt || true' + - scan-sonar workflows: version: 2 quick_build: jobs: - - quick_build_release_no_tests - - quick_build_for_testers_no_tests + - quick_build_device_release_no_tests + - quick_build_device_for_testers_release_no_tests - device_release_unit_tests - - device_for_testers_unit_tests + - device_for_testers_release_unit_tests - lint_device_release_check - - lint_device_for_testers_check + - lint_device_for_testers_release_check - ktlint_device_release_check - - ktlint_device_for_testers_check + - ktlint_device_for_testers_release_check - detekt + - run_sonar: + requires: + - device_release_unit_tests diff --git a/Corona-Warn-App/src/main/res/values-tr/strings.xml b/Corona-Warn-App/src/main/res/values-tr/strings.xml index e56795e493e4074e0cab05c53b1874bd730d605e..62d35a5b58357a2a9a91cb004a4128657180069b 100644 --- a/Corona-Warn-App/src/main/res/values-tr/strings.xml +++ b/Corona-Warn-App/src/main/res/values-tr/strings.xml @@ -214,7 +214,7 @@ <!-- XTXT: main, explains faq on card --> <string name="main_about_body">"Bu bölümde, Corona-Warn-App hakkında sık sorulan soruların yanıtlarını bulabilirsiniz. Alman hükûmetinin harici bir web sitesine yönlendirileceksiniz."</string> <!-- XTXT: FAQ link, should be translated --> - <string name="main_about_link">"https://www.bundesregierung.de/corona-warn-app-faq-englisch"</string> + <string name="main_about_link">"https://www.bundesregierung.de/corona-warn-app-faq-tuerkisch"</string> <!-- XACT: Opens external webpage --> <string name="hint_external_webpage">"Bu bölümde, Corona-Warn-App hakkında sık sorulan soruların yanıtlarını bulabilirsiniz. Harici bir web sitesine yönlendirileceksiniz."</string> diff --git a/Corona-Warn-App/src/main/res/values/legal_strings.xml b/Corona-Warn-App/src/main/res/values/legal_strings.xml index 5e7e488e912c474ba14d0bbec7158f34d4aad235..117e87dbb30cbfee51b4f5a8ff37b5a951799b2b 100644 --- a/Corona-Warn-App/src/main/res/values/legal_strings.xml +++ b/Corona-Warn-App/src/main/res/values/legal_strings.xml @@ -20,5 +20,5 @@ <!-- XHED: onboarding(tracing) - headline for consent information --> <string name="onboarding_tracing_headline_consent" translatable="false">"Declaration of consent"</string> <!-- YTXT: onboarding(tracing) - body for consent information --> - <string name="onboarding_tracing_body_consent" translatable="false">"You need to enable exposure logging to find out whether you have had possible exposures involving app users in the participating countries and are therefore at risk of infection yourself. By tapping on the “Enable exposure logging†button, you agree to enabling the exposure logging feature and to the associated data processing by the app.\n\nIn order to use the exposure logging feature, you will also have to enable the “COVID-19 Exposure Notifications†functionality provided by Google on your Android smartphone and grant the Corona-Warn-App permission to use this.\n\nWhen COVID-19 Exposure Notifications are enabled, your Android smartphone continuously generates random IDs and sends them via Bluetooth so that they can be received by other smartphones near you. Your Android smartphone, in turn, receives the random IDs of other smartphones. Your own random IDs and those received from other smartphones are recorded by your Android smartphone and stored there for 14 days.\n\nFor exposure logging, the app downloads a list, which is updated daily, of the random IDs of all users who have shared their random IDs via their official coronavirus app. This list is then compared with the random IDs of other users which have been recorded by your smartphone.\n\nThe app will inform you if it detects a possible exposure. In this case, the app gains access to the data recorded by your smartphone about the possible exposure (date, duration and Bluetooth signal strength of the contact). The Bluetooth signal strength is used to derive the physical distance to the other user (the stronger the signal, the smaller the distance). The app analyses this information in order to calculate your risk of infection and to give you recommendations for what to do next. This analysis is only performed locally on your smartphone.\n\nApart from you, nobody (not even the RKI or the health authorities of participating countries) will know whether a possible exposure has been detected and what risk of infection has been identified for you.\n\nTo withdraw your consent to the exposure logging feature, you can disable the feature by using the toggle switch in the app or delete the app. If you would like to use the exosure logging feature again, you can toggle the feature back on or reinstall the app. If you disable the exposure logging feature, the app will no longer check for possible exposures. If you also wish to stop your device sending and receiving random IDs, you will need to disable COVID-19 Exposure Notifications in your Android smartphone settings. Please note that your own random IDs and those received from other smartphones which are stored by your Android smartphone’s COVID-19 Exposure Notification functionality will not be deleted by the app. You can only permanently delete these in your Android smartphone settings.\n\nThe app’s privacy notice (including information about the data processing carried out for the transnational exposure logging feature) can be found in the menu under „App Information“ > „Data Privacy“."</string> + <string name="onboarding_tracing_body_consent" translatable="false">"You need to enable exposure logging to find out whether you have had possible exposures involving app users in the participating countries and are therefore at risk of infection yourself. By tapping on the “Activate exposure logging†button, you agree to enabling the exposure logging feature and to the associated data processing by the app.\n\nIn order to use the exposure logging feature, you will also have to enable the “COVID-19 Exposure Notifications†functionality provided by Google on your Android smartphone and grant the Corona-Warn-App permission to use this.\n\nWhen COVID-19 Exposure Notifications are enabled, your Android smartphone continuously generates random IDs and sends them via Bluetooth so that they can be received by other smartphones near you. Your Android smartphone, in turn, receives the random IDs of other smartphones. Your own random IDs and those received from other smartphones are recorded by your Android smartphone and stored there for 14 days.\n\nFor exposure logging, the app downloads a list, which is updated daily, of the random IDs of all users who have shared their random IDs via their official coronavirus app. This list is then compared with the random IDs of other users which have been recorded by your smartphone.\n\nThe app will inform you if it detects a possible exposure. In this case, the app gains access to the data recorded by your smartphone about the possible exposure (date, duration and Bluetooth signal strength of the contact). The Bluetooth signal strength is used to derive the physical distance to the other user (the stronger the signal, the smaller the distance). The app analyses this information in order to calculate your risk of infection and to give you recommendations for what to do next. This analysis is only performed locally on your smartphone.\n\nApart from you, nobody (not even the RKI or the health authorities of participating countries) will know whether a possible exposure has been detected and what risk of infection has been identified for you.\n\nTo withdraw your consent to the exposure logging feature, you can disable the feature by using the toggle switch in the app or delete the app. If you would like to use the exosure logging feature again, you can toggle the feature back on or reinstall the app. If you disable the exposure logging feature, the app will no longer check for possible exposures. If you also wish to stop your device sending and receiving random IDs, you will need to disable COVID-19 Exposure Notifications in your Android smartphone settings. Please note that your own random IDs and those received from other smartphones which are stored by your Android smartphone’s COVID-19 Exposure Notification functionality will not be deleted by the app. You can only permanently delete these in your Android smartphone settings.\n\nThe app’s privacy notice (including information about the data processing carried out for the transnational exposure logging feature) can be found in the menu under „App Information“ > „Data Privacy“."</string> </resources>