From 282883d6737d0500fab62bf7187deaa80411bc53 Mon Sep 17 00:00:00 2001 From: harambasicluka <64483219+harambasicluka@users.noreply.github.com> Date: Tue, 9 Jun 2020 17:38:16 +0200 Subject: [PATCH] Design Polish & exchanged webViews (#323) * added new guidelines * fixed card * removed onboarding webview * design polish & translations Co-authored-by: marcmuschko <marc.muschko@sap.com> --- .../src/main/assets/privacy_en.html | 742 ++++++++++++++++ .../src/main/assets/technical_en.html | 348 ++++++++ Corona-Warn-App/src/main/assets/terms_en.html | 812 ++++++++++++++++++ .../information/InformationPrivacyFragment.kt | 8 - .../InformationTechnicalFragment.kt | 8 - .../information/InformationTermsFragment.kt | 8 - .../onboarding/OnboardingPrivacyFragment.kt | 8 - .../util/formatter/FormatterHelper.kt | 22 +- .../util/formatter/FormatterRiskHelper.kt | 2 +- .../res/layout/fragment_information_about.xml | 2 +- .../layout/fragment_information_contact.xml | 2 +- .../layout/fragment_information_privacy.xml | 12 +- .../layout/fragment_information_technical.xml | 10 +- .../res/layout/fragment_information_terms.xml | 11 +- .../src/main/res/layout/fragment_main.xml | 30 +- .../main/res/layout/fragment_onboarding.xml | 4 +- .../fragment_onboarding_notifications.xml | 4 +- .../layout/fragment_onboarding_privacy.xml | 23 +- .../res/layout/fragment_onboarding_test.xml | 4 +- .../layout/fragment_onboarding_tracing.xml | 4 +- .../main/res/layout/fragment_risk_details.xml | 13 +- .../fragment_settings_notifications.xml | 1 + .../res/layout/fragment_settings_reset.xml | 6 +- .../res/layout/fragment_settings_tracing.xml | 2 +- .../src/main/res/layout/include_header.xml | 3 +- .../layout/include_information_details.xml | 5 +- .../main/res/layout/include_onboarding.xml | 4 +- .../res/layout/include_risk_card_header.xml | 2 +- .../src/main/res/values-v28/styles.xml | 33 + .../src/main/res/values/colors.xml | 2 +- .../src/main/res/values/dimens.xml | 7 +- .../src/main/res/values/strings.xml | 1 + 32 files changed, 2018 insertions(+), 125 deletions(-) create mode 100644 Corona-Warn-App/src/main/assets/privacy_en.html create mode 100644 Corona-Warn-App/src/main/assets/technical_en.html create mode 100644 Corona-Warn-App/src/main/assets/terms_en.html create mode 100644 Corona-Warn-App/src/main/res/values-v28/styles.xml diff --git a/Corona-Warn-App/src/main/assets/privacy_en.html b/Corona-Warn-App/src/main/assets/privacy_en.html new file mode 100644 index 000000000..e56136dcc --- /dev/null +++ b/Corona-Warn-App/src/main/assets/privacy_en.html @@ -0,0 +1,742 @@ +<p> + Privacy notice +</p> +<p> + Corona-Warn-App +</p> +<p> + This privacy notice explains what data is collected when you use the + Corona-Warn-App, how that data is used, and your rights under data + protection law. +</p> +<p> + To ensure that this privacy notice can be understood by all users, we have + made every effort to make it as simple and non-technical as possible. +</p> +<h2> + 1. Who has provided you with this app? +</h2> +<p> + The Corona-Warn-App (the “<strong>App</strong>â€) is provided by the Robert + Koch Institute, Nordufer 20, 13353 Berlin (the “<strong>RKI</strong>â€). +</p> +<p> + The RKI is also what is called the controller under data protection law, + meaning it is responsible for the processing of App users’ data. +</p> +<p> + You can contact the RKI’s data protection officer at the above address + (“FAO the data protection officerâ€) and by emailing: datenschutz@rki.de. +</p> +<h2> + 2. Is using the App voluntary? +</h2> +<p> + Using the App is entirely voluntary. It is your decision alone whether and + how you use the App. +</p> +<p> + Although installing and using the App is voluntary, if you wish to use the + risk identification feature you still have to grant the RKI your consent to + let the App process your personal data (including health data, if the App + detects that you may be infected). You do this by tapping on the “Enable†+ button the first time you open the App. This is necessary because otherwise + the App will not be able to access your smartphone’s exposure logging + feature. You can, however, use the toggle switch in the App to disable the + risk identification feature at any time. Doing this will mean that you are + unable to use the full functionality of the App. Separate consent is also + required for the data processing performed for the following features: +</p> +<ul> + <li> + Registering a test (see 6 b.) + </li> + <li> + Sharing your test result (see 6 c.). + </li> +</ul> +<p> + The data processing performed in connection with these features is + described in more detail in the following sections. +</p> +<h2> + 3. On what legal basis is your data processed? +</h2> +<p> + In principle, the RKI will process your personal data only on the basis of + your consent granted pursuant to Article 6(1) Sentence 1(a) and Article + 9(2)(a) of the General Data Protection Regulation (GDPR). If you have + granted your consent, you can withdraw it at any time. Further information + on your right of withdrawal and instructions on how to exercise this right + can be found under 11. +</p> +<h2> + 4. Who is the App aimed at? +</h2> +<p align="left"> + The App is aimed at people who are resident in Germany and at least 16 + years old. +</p> +<h2> + 5. What personal data is processed? +</h2> +<p> + The App is designed to process as little personal data as possible. This + means, for example, that the App does not collect any data that would allow + the RKI or other users to infer your identity, health status or location. + In addition, the App deliberately refrains from using tracking tools to + record or analyse how you use the App. +</p> +<p> + The data processed by the App can be grouped into the following categories: +</p> +<h3> + a. Access data +</h3> +<p> + Each time a file stored on a server is retrieved, this generates access + data. Specifically, the following data is processed with each retrieval: +</p> +<ul> + <li> + IP address + </li> + <li> + Date and time of retrieval (time stamp) + </li> + <li> + Transmitted data volume (or packet length) + </li> + <li> + Notification of successful retrieval + </li> + <li> + Requesting domain + </li> + <li> + Operating system used + </li> + <li> + Device type (smartphone), the manufacturer and the model of your + smartphone (e.g. iPhone 7 or Galaxy S9). + </li> +</ul> +<p> + This access data is only processed to secure and maintain the technical + infrastructure. You are not identified personally as a user of the App and + it is not possible to create a user profile. +</p> +<p> + Access data is generated when you use or enable the following features: +</p> +<ul type="disc"> + <li> + Risk identification + </li> + <li> + Registering a test + </li> + <li> + Sharing your test result. + </li> +</ul> +<h3> + b. Contact data +</h3> +<p> + If you enable exposure logging in your smartphone’s operating system, which + serves to record encounters (contacts) with other users, then your + smartphone will continuously send out randomly generated identification + numbers (“<strong>random IDs</strong>â€) via Bluetooth, which other + smartphones in your vicinity can receive if exposure logging is also + enabled on them. Your smartphone, in turn, also receives the random IDs of + the other smartphones. In addition to the random IDs received from other + smartphones, your smartphone’s exposure logging functionality records and + stores the following contact data: +</p> +<ul type="disc"> + <li> + Date of the contact + </li> + <li> + Duration of the contact + </li> + <li> + Bluetooth signal strength of the contact. + </li> +</ul> +<p> + Your own random IDs and those received from other smartphones as well as + the other contact data (date, duration, signal strength) are recorded by + your smartphone in an exposure log and stored there for 14 days. +</p> +<p> + The functionality used to record encounters with other users is called + “COVID-19 Exposure Notifications†on Android smartphones and “COVID-19 + Exposure Logging†on iPhones. Please note that this exposure logging + functionality is not part of the App, but an integral part of your + smartphone's operating system. This means that the exposure logging + functionality is provided to you by Apple (iPhones) or Google (Android + smartphones) and is subject to these companies’ respective privacy + policies. The RKI has no influence on data processing performed by the + operating system in connection with exposure logging. +</p> +<p> + More information about the exposure logging functionality on Android + smartphones is available at: https://support.google.com/android/answer/9888358?hl=en. +</p> +<p> + More information about Apple’s exposure logging functionality can be found + in your iPhone’s settings under “Privacy†> “Health†> "COVID-19 + Exposure Loggingâ€. Please note that the exposure logging functionality is + only available if iOS version 13.5 or higher is installed on your iPhone. +</p> +<p> + The App will only process the contact data generated and stored by your + smartphone if the App’s risk identification feature is enabled. +</p> +<h3> + c. Health data +</h3> +<p> + Health data is any data containing information about the health of a + particular individual. This includes not only information about past and + current illnesses, but also about a person’s risk of illness (such as the + risk that the person has been infected with the coronavirus). +</p> +<p> + Your health data will be processed in the following cases: +</p> +<ul> + <li> + If the risk identification feature detects that you may have been in + contact with a person who has been infected with the coronavirus. + </li> + <li> + If you register your test. + </li> + <li> + If you share a positive test result. + </li> +</ul> +<h2> + 6. App features +</h2> +<h3> + a. Risk identification +</h3> +<p> + The App’s core functionality is risk identification. This serves to track + possible contacts with other users of the App who are infected with the + coronavirus, to evaluate the risk that you yourself have been infected, and + – based on the risk identified – to provide you with health advice and + recommendations for what to do next. +</p> +<p> + If you enable the risk identification feature, then several times a day + while the App runs in the background (or when you tap on “Updateâ€), the App + will retrieve a list from the App’s server system of random IDs from users + who have shared a positive test result. The App shares these random IDs + with your smartphone’s exposure logging functionality, which then compares + them with the random IDs stored in your smartphone’s exposure log. If your + smartphone’s exposure logging functionality detects a match, it transfers + the contact data (date, duration, signal strength) to the App, but not the + random ID of the contact in question. +</p> +<p> + In the event of a contact, the App analyses the contact data provided by + the exposure logging functionality in order to determine your individual + risk of infection. The evaluation algorithm which determines how the + contact data is interpreted (for example, how the duration of a contact + influences the risk of infection) is based on current scientific findings. + To account for new findings as and when they arise, the RKI can update the + evaluation algorithm by adjusting its settings. The settings for the + evaluation algorithm are sent to the App together with the list of random + IDs. +</p> +<p> + The identification of your risk of infection is only carried out locally on + your smartphone, meaning that the data is processed offline. Once + identified, the risk of infection is also only stored in the App and is not + passed on to any other recipients (including the RKI, Apple, Google and + other third parties). +</p> +<p> + The legal basis for the processing of your access data, contact data and, + if applicable, health data (if the App determines that you may have been + infected) described above is your consent which you gave when enabling the + risk identification feature. +</p> +<h3> + b. Registering a test +</h3> +<p> + If you have been tested for the coronavirus, you can register the test in + the App by scanning the QR code which you received from your doctor or the + testing facility. The app will then inform you as soon as the test result + is available from the laboratory. +</p> +<p> + For this to work, the testing laboratory needs to be connected to the App’s + server system and, as part of the testing procedure, you must have agreed + separately to the laboratory transmitting your test result to the App’s + server system (test result database). Test results from laboratories that + are not connected to the App’s server system cannot be displayed in the + App. If you have not received a QR code, the testing laboratory is not + connected. In this case you will not be able to use this feature. +</p> +<p> + <u>Registering a test</u> +</p> +<p> + To receive the test result in the App, you must first register the test you + have taken in the App. For this purpose, your doctor or the testing + facility will provide you with a QR code when taking the sample. This QR + code contains a code number which can be read with a QR code scanner. To + register your test, you will need to scan the QR code in the App using your + smartphone’s camera. +</p> +<p> + The code number read from the QR code is then hashed by the App, which + means that the App performs a certain mathematical procedure in order to + convert the code number in such a way that nobody can identify it. As soon + as your smartphone is connected to the internet, the App will transmit the + hashed code number to the App’s server system. In return, the App receives + a token from the server system, i.e. a digital access key that is stored in + the App. The token is linked to the hashed code number on the server + system. The App then deletes the hashed code number on your smartphone. The + server system will only issue a token once for each hashed code number. + This ensures that your QR code cannot be used by other users of the App to + retrieve test results. +</p> +<p> + This completes the registration of your test. +</p> +<p> + <u>Filing of the test result</u> +</p> +<p> + As soon as the testing laboratory receives the test result, it stores the + result in the RKI’s test result database, indicating the hashed code + number. The test result database is operated by the RKI on a special server + within the App’s server system. Based on the code number contained in the + QR code issued to you, the testing laboratory also generates the hashed + code number using the same mathematical procedure as the App.<u></u> +</p> +<p> + <u>Retrieval of the test result</u> +</p> +<p> + Using the token, the App regularly requests the status of the registered + test from the App’s server system. The server system then assigns the token + to the hashed code number and transfers it to the test result database. If + the test result has now been stored there, the test result database sends + the test result back to the server system, which forwards it to the App + without gaining any knowledge of the content. +</p> +<p> + If the test result is positive, the App uses the token again to request a + TAN (transaction number) from the server system. The server system + reassigns the token to the hashed code number and requests confirmation + from the test result database that a positive test result exists for the + hashed code number. If the test result database confirms this, the server + system generates the TAN and transmits it to the App. A copy of the TAN + remains on the server system. +</p> +<p> + The TAN is required to ensure that no false information is distributed to + other users in the event of a positive test result being transmitted. +</p> +<p> + The legal basis for the processing described above of the data mentioned + above is your consent to using the test registration feature. +</p> +<h3> + c. Sharing your test result +</h3> +<p> + If you share your positive test result in order to warn other users, the + App will transfer the random IDs generated and stored by your smartphone + from the last 14 days and the TAN to the App’s server system. The server + system first checks whether the TAN is valid and then adds your random IDs + to the list of random IDs of users who have shared a positive test result. + Your random IDs can now be downloaded by other users as part of the risk + identification process. +</p> +<p> + <u>If you have not retrieved your test result in the App:</u> +</p> +<p> + Even if you have not retrieved a positive test result in the app, you can + share the test result via the App to warn other users. In this case, the + App prompts you to enter a so-called TeleTAN, which acts as a TAN. +</p> +<p> + To obtain a TeleTAN, please call the Corona-Warn-App hotline on +49 (0)800 + 7540002. The operator will first ask you some questions over the phone to + check the plausibility of your call. These questions serve to prevent + fraudulent reports of infections and any resulting incorrect warnings and + risk levels. Once you have answered these questions sufficiently, you will + be asked for your mobile/telephone number. This is so that you can be + called back later and given a TeleTAN to enter in the App. Your + mobile/telephone number will only be temporarily stored for this purpose + and deleted within one hour at the latest. +</p> +<p> + After your call, the hotline employee will generate a TeleTAN via a special + access to the App’s server system and then call you to tell you the + TeleTAN. If you enter the TeleTAN in the App, the TeleTAN will be sent back + from the App to the App’s server system for comparison and verification. In + return, the App receives a token from the server system, i.e. a digital + access key that is stored in the App. Using this token, the App then + requests a TAN from the server system. +</p> +<p> + The legal basis for this processing of your access data and health data + (random IDs, test result, TAN and, if applicable, TeleTAN) is your consent + to using the feature for sharing your test result. +</p> +<h3> + d. Using the App for information purposes only +</h3> +<p> + As long as you use the App for information purposes only, i.e. do not use + any of the App features mentioned above and do not enter any data, then + processing only takes place locally on your smartphone and no personal data + is generated. +</p> +<h2> + 7. What permissions and functionality does the App require? +</h2> +<p> + The App requires access to a number of your smartphone’s features and + interfaces. For this purpose, you need to grant the App certain + permissions. Permissions are programmed differently by different + manufacturers. For example, individual permissions may be combined into + permission categories, where you can only agree to the permission category + as a whole. Please note that if the App is denied access, you will not be + able to use any or all of the App’s features. +</p> +<h3> + a. Technical requirements (all smartphones) +</h3> +<ul> + <li> + Internet + </li> +</ul> +<p> + The App requires an internet connection for the risk identification + feature, and so that it can receive and transmit test results, so that it + can communicate with the App’s server system. +</p> +<ul> + <li> + Bluetooth + </li> +</ul> +<p> + Your smartphone’s Bluetooth interface must be enabled for your smartphone + to record random IDs from other smartphones and store them in the device’s + exposure log. +</p> +<ul> + <li> + Camera + </li> +</ul> +<p> + Your smartphone requires a camera to be able to scan a QR code when + registering a test. +</p> +<ul> + <li> + Background operation + </li> +</ul> +<p> + The App runs in the background (i.e. when you are not actively using the + App) in order to be able to automatically identify your risk and query the + status of a registered test. If you deny the App permission to run in the + background in your smartphone’s operating system, then you must start all + actions in the App itself. +</p> +<h3> + b. Android smartphones +</h3> +<p> + If you are using an Android device, the following system features must also + be enabled: +</p> +<ul> + <li> + COVID-19 Exposure Notifications + </li> +</ul> +<p> + The App’s risk identification feature requires this functionality. + Otherwise, no exposure log with the random IDs of your contacts will be + available. The functionality must be enabled within the App to allow the + App to access the exposure log. +</p> +<ul> + <li> + Location + </li> +</ul> +<p> + Your smartphone’s location service must be enabled for your device to + search for Bluetooth signals from other smartphones. Please note that no + location data is collected in this process. +</p> +<ul> + <li> + Notification + </li> +</ul> +<p> + The user is notified locally of the identified risk and available test + results. The necessary notification function is already enabled in the + operating system. +</p> +<p> + The App also requires the following permissions: +</p> +<ul> + <li> + Camera + </li> +</ul> +<p> + The App requires access to the camera to read the QR code when registering + a test. +</p> +<h3> + c. iPhones (Apple iOS) +</h3> +<p> + If you are using an iPhone, the following system features must be enabled: +</p> +<ul> + <li> + COVID-19 Exposure Logging + </li> +</ul> +<p> + The App’s risk identification feature requires this functionality, + otherwise no exposure log with the random IDs of your contacts will be + available. The functionality must be enabled within the App to allow the + App to access the exposure log. +</p> +<ul> + <li> + Notifications + </li> +</ul> +<p> + The user is notified locally of the identified risk and available test + results. Notifications must be enabled for this. +</p> +<p> + The App also requires the following permissions: +</p> +<ul> + <li> + Camera + </li> +</ul> +<p> + The App requires access to the camera to read the QR code when registering + a test. +</p> +<h2> + 8. When will data be deleted? +</h2> +<p> + All data stored in the App is deleted as soon as it is no longer needed for + the App features: +</p> +<h3> + a. Risk identification +</h3> +<ul> + <li> + The list of random IDs of users who have shared a positive test result + will be deleted from the App immediately after comparison with the + random IDs in your smartphone’s exposure log. + </li> + <li> + The RKI has no way of influencing the deletion of contact data in your + smartphone’s exposure log (including your own random IDs) and contact + data on other smartphones, as this functionality is provided by Apple + or Google. In this case, the deletion depends on what Apple or Google + has determined. Currently, the data is automatically deleted after 14 + days. It may also be possible, using the functionality provided by + Apple and Google, to manually delete data in your device’s system + settings. + </li> + <li> + The risk level displayed in the App will be deleted as soon as a new + risk level has been determined. A new risk level is usually determined + after the App has received a new list of random IDs. + </li> +</ul> +<h3> + b. Registering a test +</h3> +<ul> + <li> + The hashed code number will be deleted from the App’s server system + after 21 days. + </li> + <li> + In the event of a negative test result, the hashed code number and the + test result will be deleted from the test result database immediately + after the test result is retrieved; and in the event of a positive test + result, they will be deleted immediately after the copy of the TAN + stored on the server system is deleted (see below). + </li> + <li> + The token stored on the server system will be deleted after 21 days. + </li> + <li> + The token stored in the app will be deleted from the smartphone after + the App is deleted or after the test result is shared. + </li> +</ul> +<h3> + c. Sharing your test result +</h3> +<ul> + <li> + Your smartphone’s own random IDs which are shared in the App will be + deleted from the server system after 14 days. + </li> + <li> + The copy of the TAN stored on the server system will be deleted after + 21 days. + </li> + <li> + The TAN stored in the App will be deleted after the test result has + been shared. + </li> + <li> + The TeleTAN stored in the App will be deleted after the test result has + been shared. + </li> + <li> + The TeleTAN stored on the server system will be deleted after 21 days. + </li> + <li> + The TeleTAN sent to the hotline employee will be deleted there + immediately after it has been passed on to you by telephone. + </li> + <li> + The token stored on the server system will be deleted after 21 days. + </li> + <li> + The token stored in the App will be deleted after the test result has + been shared. + </li> +</ul> +<h2> + 9. Who will receive your data? +</h2> +<p> + If you share a test result to warn other users, your random IDs from the + last 14 days will be passed on to the App on other users’ smartphones. +</p> +<p> + The RKI has commissioned Deutsche Telekom AG and SAP Deutschland SE & + Co. KG to operate and maintain part of the technical infrastructure of the + App (e.g. server system, hotline), meaning that these two companies are + processors under data protection law and acting on the RKI’s behalf + (Article 28 GDPR). +</p> +<p> + Otherwise, the RKI will only pass on personal data collected in connection + with your use of the App to third parties if the RKI is legally obliged to + do so or if this is necessary for legal action or criminal prosecution in + the case of attacks on the App’s technical infrastructure. In other cases, + personal data will not generally be passed on. +</p> +<h2> + 10. Is data transferred to a third country? +</h2> +<p> + The data generated when the App is used is processed exclusively on servers + in Germany or in another EU or EEA member state. +</p> +<h2> + 11. Withdrawal of consent +</h2> +<p> + You have the right to withdraw any consent you granted the RKI in the App + at any time with effect for the future. Please note that this will not + affect the lawfulness of the processing before the withdrawal. +</p> +<p> + To withdraw your consent to the risk identification feature, you can + disable the feature using the toggle switch in the App or delete the App. + If you decide to use the risk identification feature again, you can toggle + the feature back on or reinstall the App. +</p> +<p> + To withdraw your consent to the test registration feature, you can delete + the test registration in the App. The token for retrieving the test result + will then be deleted from your device. Neither the RKI nor the testing + laboratory can then assign the transmitted data to your App or smartphone. + If you wish to register another test, you will be asked to grant your + consent again. +</p> +<p> + To withdraw your consent to the sharing of your test result, you must + delete the App. All of your random IDs stored in the App will then be + removed and can no longer be assigned to your smartphone. If you wish to + report another test result, you can reinstall the App and grant your + consent again. Alternatively, you may be able to delete your own random IDs + in the exposure log in your smartphone’s system settings. Please note that, + once transmitted, the RKI has no way of deleting your random IDs from the + lists and from other users’ smartphones. +</p> +<h2> + 12. Your other rights under data protection law +</h2> +<p> + If the RKI processes your personal data, you also have the following data + protection rights: +</p> +<ul> + <li> + the rights under Articles 15, 16, 17, 18, 20 and 21 GDPR, + </li> + <li> + the right to contact the official RKI data protection officer and raise your concerns + (Article 38(4) GDPR) and + </li> + <li> + the right to lodge a complaint with a competent data protection + authority. To do so, you can either contact your local supervisory + authority or the competent authority at the RKI’s headquarters. The + competent supervisory authority for the RKI is the Federal Commissioner + for Data Protection and Freedom of Information, Graurheindorfer Straße + 153, 53117 Bonn. + </li> +</ul> +<p> + Please note that the RKI can only fulfil the rights mentioned above if the + data on which your claim is based can be clearly assigned to you. This + would only be possible if the RKI were to collect further personal data + that would allow the data mentioned above to be clearly assigned to you or + your smartphone. Since this is not necessary – and not intended – for the + purposes of the App, the RKI is not obliged to collect such additional data + (Article 11(2) GDPR). Moreover, this would run counter to the stated + objective of keeping the amount of data processed for the App as low as + possible. Against this backdrop, it will not normally be possible to + directly fulfil the above data protection rights under Articles 15, 16, 17, + 18, 20 and 21 GDPR, as doing so would require additional information about + you which is not available to the RKI. +</p> +<p> + Last amended: 5 June 2020 +</p> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/assets/technical_en.html b/Corona-Warn-App/src/main/assets/technical_en.html new file mode 100644 index 000000000..303c1d8fa --- /dev/null +++ b/Corona-Warn-App/src/main/assets/technical_en.html @@ -0,0 +1,348 @@ +<h2>ThirdPartyNotices</h2> +<p>corona-warn-app/cwa-app-android uses third-party software or other resources that + may be distributed under licenses different from corona-warn-app/cwa-app-android + software. + In the event that we overlooked to list a required notice, please bring this + to our attention by contacting us via this email: + corona-warn-app.opensource@sap.com</p> +<h2>Components:</h2> +<p>Component: JUnit 4 + Licensor: The JUnit Team + Website: https://junit.org/junit4/ + License: Eclipse Public License 1.0</p> +<p>Component: Java Hamcrest + Licensor: www.hamcrest.org + Website: https://github.com/hamcrest/JavaHamcrest + License: BSD-style license</p> +<p>Component: android-database-sqlcipher + Licensor: Zetetic LLC + Website: https://www.zetetic.net/sqlcipher/ + License: BSD-style license</p> +<p>Component: guava + Licensor: Google + Website: https://github.com/google/guava + License: Apache 2.0</p> +<p>Component: joda-time + Licensor: Joda.org + Website: https://www.joda.org/joda-time/ + License: Apache 2.0</p> +<p>Component: Mockito + Licensor: Mockito contributors + Website: https://site.mockito.org/ + License: MIT</p> +<p>Component: MockK + Licensor: github.com/mockk + Website: https://github.com/mockk/mockk + License: Apache 2.0</p> +<p>Component: Robolectric + Licensor: Xtreme Labs, Pivotal Labs and Google Inc. + Website: https://robolectric.org/ + License: MIT</p> +<p>Component: RootBeer + Licensor: Scott Alexander-Bown, Mat Rollings + Website: https://github.com/scottyab/rootbeer + License: Apache 2.0</p> +<p>Component: Zxing + Licensor: zxing + Website: https://github.com/zxing/zxing/ + License: Apache 2.0</p> +<p>Component: ZXing Android Embedded + Licensor: ZXing authors, Journey Mobile + Website: https://github.com/journeyapps/zxing-android-embedded + License: Apache 2.0</p> +<p>Component: Detekt + Licensor: detekt + Website: https://detekt.github.io/detekt/ + License: Apache 2.0</p> +<p>Component: gson + Licensor: Google + Website: https://github.com/google/gson + License: Apache 2.0</p> +<p>Component: okhttp + Licensor: square + Website: https://square.github.io/okhttp/ + License: Apache 2.0</p> +<p>Component: kotlinx.coroutines + Licensor: Kotlin + Website: https://github.com/Kotlin/kotlinx.coroutines + License: Apache 2.0</p> +<p>Component: Ktlint Gradle + Licensor: Jonathan Leitschuh + Website: https://github.com/JLLeitschuh/ktlint-gradle + License: MIT</p> +<p>Component: Retrofit + Licensor: square + Website: https://square.github.io/retrofit/ + License: Apache 2.0</p> +<p>Component: Protobuf gradle plugin + Licensor: Google + Website: https://github.com/google/protobuf-gradle-plugin + License: BSD 3-Clause</p> +<p>Copyright (c) 2008-2020 Zetetic LLC + All rights reserved.</p> +<p>Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met:</p> +<pre><code> * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of the ZETETIC LLC nor the + names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. +</code></pre><p>THIS SOFTWARE IS PROVIDED BY ZETETIC LLC ''AS IS'' AND ANY + EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL ZETETIC LLC BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p> +<p>Apache License 2.0 (guava, joda-time, MockK, RootBeer, Zxing, ZXing Android Embedded, Detekt, + gson, okhttp, kotlinx.coroutines, Retrofit)</p> +<pre><code> Apache License + Version 2.0, January 2004 + https://www.apache.org/licenses/ +</code></pre><p> TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION</p> +<ol> + <li><p>Definitions.</p> + <p>"License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document.</p> + <p>"Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License.</p> + <p>"Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity.</p> + <p>"You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License.</p> + <p>"Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files.</p> + <p>"Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types.</p> + <p>"Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below).</p> + <p>"Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof.</p> + <p>"Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution."</p> + <p>"Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work.</p> + </li> + <li><p>Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form.</p> + </li> + <li><p>Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed.</p> + </li> + <li><p>Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions:</p> + <p>(a) You must give any other recipients of the Work or</p> + <pre><code>Derivative Works a copy of this License; and +</code></pre> + <p>(b) You must cause any modified files to carry prominent notices</p> + <pre><code>stating that You changed the files; and +</code></pre> + <p>(c) You must retain, in the Source form of any Derivative Works</p> + <pre><code>that You distribute, all copyright, patent, trademark, and +attribution notices from the Source form of the Work, +excluding those notices that do not pertain to any part of +the Derivative Works; and +</code></pre> + <p>(d) If the Work includes a "NOTICE" text file as part of its</p> + <pre><code>distribution, then any Derivative Works that You distribute must +include a readable copy of the attribution notices contained +within such NOTICE file, excluding those notices that do not +pertain to any part of the Derivative Works, in at least one +of the following places: within a NOTICE text file distributed +as part of the Derivative Works; within the Source form or +documentation, if provided along with the Derivative Works; or, +within a display generated by the Derivative Works, if and +wherever such third-party notices normally appear. The contents +of the NOTICE file are for informational purposes only and +do not modify the License. You may add Your own attribution +notices within Derivative Works that You distribute, alongside +or as an addendum to the NOTICE text from the Work, provided +that such additional attribution notices cannot be construed +as modifying the License. +</code></pre> + <p>You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License.</p> + </li> + <li><p>Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions.</p> + </li> + <li><p>Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file.</p> + </li> + <li><p>Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License.</p> + </li> + <li><p>Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages.</p> + </li> + <li><p>Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability.</p> + <p>END OF TERMS AND CONDITIONS</p> + </li> +</ol> +<p>The MIT License</p> +<p>Copyright (c) 2007 Mockito contributors</p> +<p>Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions:</p> +<p>The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software.</p> +<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE.</p> +<p>The MIT License</p> +<p>Copyright (c) 2010 Xtreme Labs, Pivotal Labs and Google Inc.</p> +<p>Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions:</p> +<p>The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software.</p> +<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE.</p> +<p>MIT License</p> +<p>Copyright (c) 2020 Jonathan Leitschuh</p> +<p>Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions:</p> +<p>The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software.</p> +<p>THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE.</p> +<p>BSD 3-Clause (Protobuf gradle plugin)</p> +<p>Original work copyright (c) 2015, Alex Antonov. All rights reserved. + Modified work copyright (c) 2015, Google Inc. All rights reserved.</p> +<p>Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met:</p> +<ol> + <li><p>Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer.</p> + </li> + <li><p>Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution.</p> + </li> + <li><p>Neither the name of the copyright holder nor the names of its contributors + may be used to endorse or promote products derived from this software without + specific prior written permission.</p> + </li> +</ol> +<p>THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</p> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/assets/terms_en.html b/Corona-Warn-App/src/main/assets/terms_en.html new file mode 100644 index 000000000..8df1539f4 --- /dev/null +++ b/Corona-Warn-App/src/main/assets/terms_en.html @@ -0,0 +1,812 @@ +<p> + 1. Welche Funktionen hat die APP? +</p> +<p> + 2. Was bedeutet niedriges oder erhöhtes Risiko? +</p> +<p> + 3. Risiko-Begegnung – was tun? +</p> +<p> + 4. Kein Infektionsschutz durch die App. +</p> +<p> + 5. Abrufen von Testergebnissen. +</p> +<p> + 6. Auslösen einer Warnung. +</p> +<p> + 7. Voraussetzungen für die Nutzung der App. +</p> +<p> + 8. Grenzen der App. +</p> +<p> + 9. Nutzungsrechte. +</p> +<p> + 10. Wichtige Hinweise zu Verfügbarkeit und Änderungen. +</p> +<p> + 11. Keine Gewährleistung. +</p> +<p> + 12. Besondere Bedingungen für die iOS-Version der App. +</p> +<p> + 13. Schlussbestimmungen. +</p> +<p> + Herausgeber der App ist das +</p> +<p> + Robert Koch-Institut +</p> +<p> + Nordufer 20 +</p> +<p> + 13353 Berlin ("<strong>RKI</strong>") +</p> +<p> + vertreten durch den Präsidenten. Für Fragen, Beschwerden und Ansprüche im + Zusammenhang mit diesen Nutzungsbedingungen können Sie das RKI telefonisch + unter +49 30 18754-5100 und per E-Mail unter CoronaWarnApp@rki.de + erreichen. +</p> +<p> + Bitte lesen Sie diese Nutzungsbedingungen sorgfältig. Diese + Nutzungsbedingungen regeln Ihre Nutzung der Corona Warn App einschließlich + der Nutzung zukünftiger Versionen (Patches, Updates und Upgrades) ("<strong>App</strong>") und + der Nutzung weiterer Dienste (" <a name="_Hlk41947003"><strong>CWA-Dienste</strong></a>"), die + derzeit oder + zukünftig vom RKI im Zusammenhang mit der App bereitgestellt werden. Die + separate Datenschutzerklärung (siehe <strong>[<em>Link</em>]</strong>) ist + Bestandteil dieser Nutzungsbedingungen. Bitte lesen Sie auch die + Datenschutzerklärung sorgfältig. +</p> +<p> + Die App ist für die Nutzung auf iOS-Geräten im Apple App Store verfügbar + und für die Nutzung auf Android-Geräten bei Google Play. Allgemeine + Nutzungsbedingungen für Applikationen von Apple oder Google finden im + Verhältnis zum RKI keine Anwendung. Das RKI ist allein verantwortlich für + die Inhalte der App sowie deren Wartung und Pflege und für Ansprüche, die + Sie ggf. in Bezug auf die App haben. +</p> +<p> + Mit der Installation und Nutzung der App erklären Sie sich mit diesen + Nutzungsbedingungen einverstanden. Sollten Sie mit den Nutzungsbedingungen + nicht einverstanden sein, dürfen Sie die App nicht installieren oder nutzen + (bzw. müssen diese wieder löschen) und dürfen auch die die damit + verbundenen Dienste und Systeme nicht nutzen. Etwaige Rechte unter Open + Source-Lizenzen in Bezug auf den Quellcode der App bleiben hiervon + unberührt. +</p> +<p> + Sie sind für die Einhaltung dieser Nutzungsbedingungen auch dann + verantwortlich, wenn Sie das Endgerät, auf dem Sie die App installiert + haben, Dritten überlassen und diese die App verwenden. +</p> +<p> + Die App richtet sich an Personen, die mindestens 16 Jahre alt sind. + Personen unter 16 Jahren dürfen die App nur mit Zustimmung ihres/ihrer + Sorgeberechtigten verwenden. +</p> +<p> + <a name="_Toc42328034">1. Welche Funktionen hat die APP?</a> +</p> +<p> + Ziel der Corona Warn App ist es, SARS-CoV-2-Infektionsketten frühzeitig zu + durchbrechen. Personen sollen möglichst zuverlässig und schnell über + Begegnungen mit infizierten Personen und damit mögliche Ãœbertragungen des + Virus informiert werden, damit sie sich freiwillig isolieren können, um + damit zu einer Eindämmung der SARS-CoV-2-Pandemie beizutragen. +</p> +<p> + Die wesentlichen Funktionen der App sind nachstehend beschrieben. Hierbei + handelt es sich um eine Beschreibung zu Ihrer Information und nicht um eine + Beschaffenheitsvereinbarung oder die Vereinbarung bestimmter Funktionen, + bitte beachten Sie die diesbezüglichen Hinweise und Vorbehalte unter Ziffer + 10. +</p> +<p> + Hintergrund +</p> +<p> + Die App läuft auf dem Endgerät im Hintergrund und speichert automatisiert + und verschlüsselt die Zufallscodes (<em>rolling proximity identifier</em>) + anderer in der Nähe befindlicher Endgeräte. In regelmäßigen Abständen holt + sich die App über die CWA-Dienste eine Liste der Zufallscodes (<em>t</em> <em>emporary exposure + keys</em>) der Personen, die sich freiwillig + infiziert gemeldet haben, und vergleicht diese mit den gespeicherten + Zufallscodes im Gerät, um eine Risiko-Begegnung zu ermitteln. +</p> +<p> + Die App kann nur Begegnungen mit Personen registrieren, die ihrerseits ein + Endgerät mit installierter App bei sich führen und alle Voraussetzungen für + die Nutzung der App erfüllen (siehe unten Ziffer 7). Begegnungen mit + anderen Personen kann die App nicht registrieren. +</p> +<p> + Risikobenachrichtigung +</p> +<p> + Bei einer festgestellten Risiko-Begegnung zu positiv getesteten Personen + erhalten Sie eine Benachrichtigung und verhaltensbezogene Empfehlungen. + Hier kann zum Beispiel die Kontaktaufnahme mit ärztlichem Fachpersonal, mit + dem zuständigen Gesundheitsamt und/oder die freiwillige häusliche Isolation + empfohlen werden. +</p> +<p> + Benachrichtigung über Testergebnisse +</p> +<p> + Ab dem Zeitpunkt der Probenabgabe für einen Test auf eine + SARS-CoV-2-Infektion können Sie über die App den digitalen + Testinformationsprozess starten und damit über das Testergebnis + benachrichtigt werden. Die App übermittelt lediglich das vom jeweiligen + Labor mitgeteilte Testergebnis. Das RKI ist weder für die Durchführung des + Tests noch für den Inhalt des Testergebnisses verantwortlich. +</p> +<p> + Infektfall +</p> +<p> + Im Fall eines positiven SARS-CoV-2-Befunds können Sie freiwillig die in der + App gespeicherten eigenen Zufallscodes der letzten 14 Tage als + Positivkennungen (<em>diagnosis keys</em>) veröffentlichen, damit andere + Personen, die die App nutzen, auf ihrem eigenen Endgerät abgleichen können, + ob sie mit Ihnen eine Risiko-Begegnung hatten. +</p> +<p> + Technische Beschreibung der App +</p> +<p> + Die technischen Funktionen der App sowie der damit verbundenen Dienste und + Systeme sind unter folgendem Link detailliert beschrieben: +</p> +<p> + https://github.com/Corona-Warn-App +</p> +<p> + Diese technische Beschreibung dient lediglich der Erläuterung und ist nicht + Bestandteil dieser Nutzungsbedingungen. Sie stellt auch keine + Beschaffenheitsvereinbarung in Bezug auf die App dar. +</p> +<p> + Weiterführende Informationen +</p> +<p> + Weiterführende Informationen zur App finden Sie unter folgendem Link: + <strong>[<em>Link</em>]</strong> +</p> +<p> + Weiterführende Informationen zur SARS-CoV-2-Pandemie finden Sie unter + folgendem Link: + https://www.zusammengegencorona.de/ +</p> +<p> + Diese weiterführenden Informationen dienen lediglich der Erläuterung und + sind nicht Bestandteil dieser Nutzungsbedingungen. +</p> +<p> + <a name="_Toc42328035">2. Was bedeutet niedriges oder erhöhtes Risiko?</a> +</p> +<p> + Die App berechnet auf Basis der festgestellten Begegnungen ein indikatives + individuelles Risiko. Hierbei werden Faktoren wie der Zeitraum seit der + Begegnung (<em>days since exposure</em>), die Dauer der Begegnung ( <em>exposure duration</em>), + die ungefähre Nähe zur infizierten Person, + basierend auf der gemessenen Dämpfung des Bluetooth-Signals (<em>signal attenuation</em>) sowie + ggf. Ãœbertragungsrisiken ( <em>transmission risk</em> berücksichtigt. Auf dieser Basis wird + Ihnen in + der App entweder ein "niedriges Risiko" oder ein "erhöhtes Risiko" + angezeigt. Es handelt sich hierbei um einen rein indikativen Wert auf der + Grundlage der erfassten Daten. + <strong> + Eine Aussage über das Vorliegen einer tatsächlichen Infektion mit + SARS-CoV-2 ist hiermit nicht verbunden. + </strong> + Auch bei der Angabe eines "niedrigen Risikos" kann eine Infektion + vorliegen, während auch bei Angabe eines "erhöhten Risikos" eine Infektion + nicht gegeben sein kann. +</p> +<p> + <strong> + Andere Faktoren können Ihr persönliches Infektionsrisiko erheblich + beeinflussen. Diese werden von der App nicht berücksichtigt. + </strong> + Das sind insbesondere Ihre persönlichen Umstände, die äußeren Umstände + einer Risiko-Begegnung mit einer infizierten Person, Ihr persönliches + Verhalten sowie Begegnungen mit Dritten, die von der App nicht erfasst + wurden. Bitte beachten Sie die Hinweise in Ziffer 4. +</p> +<p> + <a name="_Toc42328036">3. Risiko-Begegnung – was tun?</a> +</p> +<p> + Wenn Sie über die App eine Benachrichtigung über eine festgestellte + Risiko-Begegnung mit infizierten Personen erhalten, erhalten Sie + verhaltensbezogene Empfehlungen in der Benachrichtigung. Diese Empfehlungen + sind rechtlich nicht verbindlich, ihre Befolgung wird aber vom RKI + empfohlen. Gesetzliche und vertragliche Pflichten sowie behördliche + Anordnungen für den Fall einer Risiko-Begegnung mit infizierten Personen + bleiben unberührt und müssen von Ihnen unabhängig von diesen Empfehlungen + befolgt werden. +</p> +<p> + <strong> + Innerhalb oder über die App erfolgt keinerlei medizinische Diagnose. + </strong> +</p> +<p> + <strong> + Die Benachrichtigung bedeutet nicht, dass Sie sich mit SARS-CoV-2 + infiziert haben. + </strong> + Sie besagt lediglich, dass sie während der letzten 14 Tage eine + Risiko-Begegnung mit einer anderen Person hatten, bei der eine + SARS-CoV-2-Infektion positiv festgestellt wurde. Hieraus ergibt sich für + Sie zunächst nur eine Möglichkeit, dass Sie sich ebenfalls infiziert haben + könnten. Die Einstufung des diesbezüglichen Risikos als "niedrig" oder + "erhöht" erfolgt allein auf der Basis der ermittelten Daten und lässt keine + Aussage über das tatsächliche Vorliegen einer Infektion zu. +</p> +<p> + <strong> + Die Benachrichtigung über eine Risiko-Begegnung kann unzutreffend sein. + </strong> + Die Risiko-Begegnung kann von Ihrem Endgerät beispielsweise zu einem + Zeitpunkt registriert worden sein, zu dem Sie sich nicht in der Nähe Ihres + Endgeräts aufgehalten haben oder während eine andere Person Ihr Endgerät + verwendet hat. Die Risiko-Begegnung kann auch aufgrund bestehender Grenzen + bei der Kontaktmessung fälschlicherweise registriert worden sein (siehe + unten Ziffer 8). +</p> +<p> + <a name="_Toc42328037"></a> + <a name="_Ref41775531">4. Kein Infektionsschutz durch die App</a> +</p> +<p> + Die App dient der Unterbrechung von Infektionsketten. +</p> +<ul> + <li> + <strong> + Die App schützt Sie nicht vor einer SARS-CoV-2-Infektion. + </strong> + </li> + <li> + <strong> + Die App reduziert Ihr persönliches Infektionsrisiko nicht. + </strong> + </li> + <li> + <strong> + Sie können sich auch mit SARS-CoV-2 infizieren, ohne dass die App + Sie über die Risiko-Begegnung mit der Person benachrichtigt, die + Sie infiziert hat: + </strong> + </li> +</ul> +<p> + o Die App registriert nicht alle Ihre Begegnungen mit anderen Personen, + z.B. weil andere Personen die App nicht verwenden, Sie Ihr Endgerät nicht + immer bei sich tragen oder die App nicht immer in Betrieb haben oder weil + die Kontaktmessung gewissen Grenzen unterliegt (siehe unten Ziffer 8). +</p> +<p> + o Die App informiert Sie nur über festgestellte Risiko-Begegnungen mit + infizierten Personen. Das setzt voraus, dass die App die Begegnung mit der + infizierten Person registriert hat <u>und</u> die infizierte Person eine + Warnung über die App auslöst. Das Auslösen der Warnung ist freiwillig und + erfolgt möglicherweise nicht durch alle infizierten Personen. +</p> +<p> + Bitte halten Sie auch bei Verwendung der App die sonstigen + Vorsichtsmaßnahmen und behördlichen Anordnungen ein. Verlässliche + Informationen über die SARS-CoV-2-Pandemie und Vorsichtsmaßnahmen finden + Sie unter anderem auf: +</p> +<p> + www.infektionsschutz.de/coronavirus +</p> +<p> + www.zusammengegencorona.de +</p> +<p> + www.rki.de/covid-19 +</p> +<p> + Diese weiterführenden Informationen dienen lediglich Ihrer Information und + sind nicht Bestandteil dieser Nutzungsbedingungen. +</p> +<p> + Halten Sie sich auch bei Verwendung der App an die <strong>AHA-Regeln</strong>: +</p> +<p> + <strong>A</strong> + ✋ - Halten Sie mindestens 1,5m Abstand zu Ihren Mitmenschen +</p> +<p> + <strong>H</strong> + � - Waschen Sie sich regelmäßig für mindestens 20 Sekunden die Hände +</p> +<p> + <strong>A</strong> + � - Tragen Sie beim Einkauf und in öffentlichen Verkehrsmitteln eine + Alltagsmaske +</p> +<p> + So schützen Sie sich selbst und andere vor dem Virus. +</p> +<p> + <a name="_Toc42328038">5. Abrufen von Testergebnissen</a> +</p> +<p> + Sie dürfen über die App ausschließlich Ihre eigenen Testergebnisse abrufen. +</p> +<p> + Wenn Sie auf Testergebnisse warten und die CWA-Dienste nicht zur Verfügung + stehen oder der Abruf der Testergebnisse über die App aus sonstigen Gründen + nicht funktioniert, dann informieren Sie sich bitte über andere Kontaktwege + über das Testergebnis, z.B. über die jeweilige Teststelle wie Ihren + Hausarzt oder das örtliche Gesundheitsamt. Warten Sie nicht darauf, dass + die App wieder zur Verfügung steht. +</p> +<p> + <a name="_Toc42328039">6. Auslösen einer Warnung</a> +</p> +<p> + Sie können über die App andere Kontaktpersonen warnen, wenn Sie mit + SARS-CoV-2 infiziert wurden. <strong>Sie dürfen diese Warnung nur auslösen, wenn </strong> + <strong> + die Infektion durch einen Test in einem zugelassenen Testlabor positiv + bestätigt wurde. + </strong> +</p> +<p> + Falls das zugelassene Testlabor noch nicht an die CWA-Dienste angeschlossen + ist, erfolgt eine Ãœberprüfung Ihres Infektionsstatus über eine vom RKI + eingerichtete Verifikations-Hotline. Das Auslösen einer Warnung über die + App auf der Grundlage einer bloßen Risiko-Mitteilung ist nicht zulässig. +</p> +<p> + Bei Unsicherheit: erst Hausarzt oder Gesundheitsamt kontaktieren +</p> +<p> + Wenn Sie nicht sicher sind, ob Sie sich infiziert haben oder nicht, dann + kontaktieren Sie bitte Ihren Hausarzt oder das zuständige Gesundheitsamt, + bevor Sie eine Warnung auslösen. Hier erhalten Sie weitere Beratung und + können sich erforderlichenfalls auf eine Infektion testen lassen. In der + Zwischenzeit befolgen Sie die allgemein gültigen Empfehlungen für das + Verhalten bei dem Verdacht einer SARS-CoV-2-Infektion. +</p> +<p> + Missbrauchsverbot +</p> +<p> + <strong> + Das missbräuchliche Auslösen einer Warnung ist untersagt und kann + schwerwiegende Konsequenzen nach sich ziehen. + </strong> + Insbesondere können Sie sich eventuell gegenüber anderen betroffenen + Personen schadenersatzpflichtig machen. +</p> +<p> + Das RKI behält sich vor, Sie bei Feststellung eines missbräuchlichen + Verhaltens von der weiteren Nutzung der App und der CWA-Dienste + auszuschließen. +</p> +<p> + <a name="_Toc42328040"></a> + <a name="_Ref41851933">7. Voraussetzungen für die Nutzung der App</a> +</p> +<p> + Folgende technische Voraussetzungen sind für die Nutzung der App + erforderlich: +</p> +<p> + Sie benötigen eine Datenverbindung +</p> +<p> + Bestimmte Funktionen der App setzen auf zentrale Dienste und Systeme auf, + die über die CWA-Dienste zur Verfügung gestellt werden. Diese Funktionen + stehen daher nur zur Verfügung, wenn Ihr Endgerät über eine Datenverbindung + mit dem Internet verfügt, z.B. über UMTS, LTE oder WLAN, um hierüber auf + die CWA-Dienste zugreifen zu können. Ohne Datenverbindung stehen einige + oder alle Funktionen der App nicht zur Verfügung. Dies gilt auch, wenn Sie + Ihr Endgerät in den Flugmodus versetzen oder ausschalten. +</p> +<p> + Die App muss auf dem Endgerät laufen und eingeschaltet sein +</p> +<p> + Die App muss auf Ihrem Endgerät im Vorder- oder Hintergrund laufen und + eingeschaltet sein. Hierzu müssen Sie die App starten. Wenn Sie die App + nicht starten, ausschalten oder beenden, speichert die App keine + Begegnungen mit anderen Personen und erzeugt keine Zufallscodes zur + Speicherung durch andere Personen. Wenn Sie das Endgerät neu starten (z.B. + nach dem Ausschalten, nachdem die Batterie leer war oder nach einem Update + des Betriebssystems), müssen Sie auch die App neu starten. +</p> +<p> + Einstellungen im Endgerät +</p> +<p> + Für die Nutzung der App müssen Sie ferner die Bluetooth (BLE)-Funktionen + auf Ihrem Endgerät aktivieren und ggf. zur Verwendung durch die App + freigegeben. +</p> +<p> + Für die Nutzung der App empfiehlt das RKI ferner folgende Funktionen auf + Ihrem Endgerät zu aktivieren und ggf. zur Verwendung durch die App + freizugegeben, auch wenn diese nicht Voraussetzung für die Nutzung der + grundlegenden Funktionen der App sind: +</p> +<ul> + <li> + Benachrichtigungen + </li> + <li> + Kamerafunktion + </li> +</ul> +<p> + Bitte prüfen Sie in den Einstellungen ihres Endgeräts, ob diese Funktionen + aktiviert und für die Verwendung der App freigegeben sind. +</p> +<p> + Eine ausführliche Anleitung zur Einrichtung der App unter iOS und Android + finden Sie unter [<em>Link</em>]. Die Anleitung dient lediglich der + Erläuterung und ist nicht Teil dieser Nutzungsbedingungen. +</p> +<p> + Sie müssen immer die aktuelle Version der App verwenden +</p> +<p> + Das RKI wird von Zeit zu Zeit Updates der App zur Verfügung stellen. Sie + müssen diese Updates unverzüglich installieren und immer die neueste + verfügbare Version der App verwenden. Beim Verwenden älterer Versionen kann + es zu Fehlfunktionen und Störungen kommen. +</p> +<p> + <strong> + <em>Sie benötigen aktuelle Versionen von iOS bzw. Android</em> + </strong> +</p> +<p> + Die App verwendet eigens von Apple in iOS und Google in Android + implementierte Funktionen (<em>sog. Exposure Notification</em>). Diese + stehen in iOS erst ab Version 13.5 und in Android erst ab Version + <strong>[x]</strong><strong> </strong>zur Verfügung. Die App funktioniert + daher leider nicht mit früheren Versionen der beiden Betriebssysteme. +</p> +<p> + <a name="_Toc42328041"></a> + <a name="_Ref42018297">8. Grenzen der App</a> +</p> +<p> + Die App kann Sie dabei unterstützen, Risiko-Begegnungen mit Personen zu + erkennen, die später positiv getestet wurden. Die App hat aber auch + Grenzen, die berücksichtigt werden müssen. +</p> +<p> + Eine dieser Grenzen ist, dass die App zwar laufend eigene Zufallscodes ( <em>Rolling Proximity + Identifiers</em>) aussendet, aber andere Zufallscodes + nur in bestimmten Intervallen empfängt. Diese Empfangsfenster liegen + derzeit noch bis zu fünf Minuten auseinander und sind nur als sehr kurz + spezifiziert. In der App sind die Empfangsfenster vier Sekunden lang. +</p> +<p> + Für die Entfernungsmessung wird die Dämpfung des Bluetooth-Signals + verwendet. Eine geringere Dämpfung bedeutet dabei grundsätzlich, dass das + andere Endgerät näher ist. Eine höhere Dämpfung kann entweder bedeuten, + dass das andere Endgerät weiter entfernt ist (also eine Entfernung von mehr + als zwei Metern) oder dass sich zwischen den beiden Endgeräten etwas + befindet, was das Signal blockiert. Das können Objekte wie eine Wand oder + eine Tasche, in der sich das Endgerät befindet, sein, aber genauso Personen + oder Tiere. +</p> +<p> + <a name="_Toc42328042">9. Nutzungsrechte</a> +</p> +<p> + <strong><em>Einfaches Nutzungsrecht</em></strong> +</p> +<p> + Hiermit wird Ihnen eine eingeschränkte, nicht ausschließliche, nicht + übertragbare, nicht unterlizenzierbare, widerrufliche Lizenz zur Nutzung + der App für Ihre persönlichen, nicht kommerziellen Zwecke gewährt. +</p> +<p> + Die Lizenz für die iOS-Version der App umfasst die Nutzung auf jedem + Apple-Gerät, an dem Sie Eigentum haben oder über das Sie Kontrolle ausüben, + im Rahmen der geltenden Nutzungsbedingungen des App Stores, wobei auch über + andere Apple Accounts, die mit Ihrem Apple Account via Family Sharing oder + Volumenkauf verbunden sind, auf die App zugegriffen und diese genutzt + werden kann. +</p> +<p> + Sie dürfen im Rahmen von Datensicherungen Kopien der App anfertigen. + Darüberhinausgehende Rechte an der App werden Ihnen nicht eingeräumt. +</p> +<p> + <strong><em>Eigentum an der App</em></strong> +</p> +<p> + Die App (einschließlich des Quellcodes) ist das alleinige und + ausschließliche Eigentum von SAP SE, Dietmar Hopp Allee 16, 69190 Walldorf + („<strong>SAP</strong>“) oder deren Lizenzgebern, vorbehaltlich der Ihnen + nach Ziffer 9 eingeräumten Rechte sowie sonstiger Rechte an der App, die + SAP der Bundesrepublik Deutschland vertraglich eingeräumt hat. +</p> +<p> + <strong><em>Open Source-Lizenzhinweise</em></strong> +</p> +<p> + Information über die Verwendung von Drittkomponenten in der App und die + anwendbaren Lizenzbestimmungen finden Sie in den Open + Source-Lizenzhinweisen in der App. +</p> +<p> + Der Quellcode der App ist unter den Lizenzbedingungen der "Apache 2.0 + License" veröffentlicht und kann unter " + https://github.com/corona-warn-app + " heruntergeladen werden. Die Lizenzbedingungen der "Apache 2.0 License" + sind unter " + https://www.apache.org/licenses/LICENSE-2.0 + " abrufbar. +</p> +<p> + Die auf den Quellcode der App sowie auf in der App enthaltene + Drittkomponenten jeweils anwendbaren Lizenzbestimmungen bleiben von der + Rechteeinräumung nach dieser Ziffer 9 unberührt. +</p> +<p> + <strong><em>Was nicht erlaubt ist</em></strong> +</p> +<p> + Sie dürfen die App nicht manipulieren oder verändern. +</p> +<p> + Sie dürfen die App und die Schnittstellen zu den CWA-Diensten nicht + missbräuchlich verwenden. Sie dürfen die CWA-Dienste nicht für andere + Zwecke nutzen als den bestimmungsgemäßen Betrieb der App auf Ihrem + Endgerät. Sie dürfen auf die CWA-Dienste ausschließlich über die App + zugreifen. +</p> +<p> + <a name="_Toc42328043"></a> + <a name="_Ref41856586"> + 10. Wichtige Hinweise zu Verfügbarkeit und Änderungen + </a> +</p> +<p> + Kein Anspruch auf bestimmte Funktionalität +</p> +<p> + Die App wird Ihnen so zur Verfügung gestellt, wie sie vom RKI herausgegeben + wird. Das RKI übernimmt keine Gewähr für die Funktionsfähigkeit der App + oder der CWA-Dienste und vereinbart mit Ihnen keine bestimmte + Beschaffenheit. Sie haben keinen Anspruch auf eine bestimmte Funktionalität + oder anderweitige Beschaffenheit der App oder der CWA-Dienste. Das RKI kann + die App jederzeit ändern und Funktionen ganz oder teilweise entfernen oder + die App um zusätzliche Funktionen erweitern. +</p> +<p> + Keine Verfügbarkeitszusage +</p> +<p> + Das RKI kann den Betrieb der App und der CWA-Dienste jederzeit einschränken + oder einstellen. Es besteht Ihrerseits kein Anspruch auf die weitergehende + Verfügbarkeit der App oder der damit verbundenen Dienste und Systeme + einschließlich der CWA-Dienste, weder in Bezug auf einzelne Funktionen noch + in Bezug auf das System als Ganzes. +</p> +<p> + Das RKI macht keine Zusagen über die Verfügbarkeit oder Leistungsfähigkeit + der CWA-Dienste. Diese können aufgrund von Wartungsarbeiten oder Störungen + vorübergehend und ggf. auch für längere Zeiträume nicht zur Verfügung + stehen. In diesen Fällen ist die Funktionalität der App ganz oder teilweise + eingeschränkt. +</p> +<p> + Änderung der Nutzungsbedingungen +</p> +<p> + Das RKI behält sich vor, diese Nutzungsbedingungen zu ändern. In diesem + Fall werden Sie beim Start der App aufgefordert, den geänderten + Nutzungsbedingungen zuzustimmen. Wenn Sie den geänderten + Nutzungsbedingungen nicht zustimmen, können Sie die App und die CWA- + Dienste nicht mehr nutzen und müssen die App von Ihrem Endgerät löschen. +</p> +<p> + Risk Score +</p> +<p> + Das RKI behält sich ferner vor, die im Rahmen der Risikobewertung ( <em>risk score</em>) + verwendeten Parameter jederzeit zu ändern, um dadurch + jeweils aktuellen Forschungsergebnissen zur Virusübertragung zu + entsprechen. Das RKI bestimmt die verwendeten Parameter jeweils nach seinem + Ermessen. +</p> +<p> + <a name="_Toc42328044">11. Keine Gewährleistung</a> +</p> +<p> + Das RKI bestimmt die Funktionen der App und der CWA-Dienste sowie deren + Ausgestaltung. Das RKI vereinbart mit Ihnen keine bestimmte Beschaffenheit + und Sie haben keinen Anspruch darauf, dass die App bestimmte Funktionen hat + oder diese in bestimmter Weise ausgestaltet sind. Die App wird in dem + Zustand und mit den Funktionen zur Verfügung gestellt, wie sie beim + Veröffentlichen der App im Apple App Store oder bei Google Play durch das + RKI implementiert sind. +</p> +<p> + Das RKI wird die App mit angemessener Sorgfalt zur Verfügung stellen und + angemessene Sorgfalt hinsichtlich der CWA-Dienste anwenden. Das RKI gibt + keine sonstigen Versprechen oder Zusicherungen im Hinblick auf die App oder + die CWA-Dienste ab und gewährleistet insbesondere nicht, dass: +</p> +<p> + · Ihre Nutzung der App oder der CWA-Dienste ohne Unterbrechung möglich oder + fehlerfrei sein wird, +</p> +<p> + · die App oder die CWA-Dienste frei von Verlusten, Korruption, Angriffen, + Viren, Eingriffen, Hacking oder anderen sicherheitsrelevanten Störungen + sein werden. +</p> +<p> + Für die Datensicherung Ihres Endgeräts sowie ggf. damit verbundener Systeme + sind Sie verantwortlich, inklusive der Datensicherung sämtlicher anderer + Apps, welche auf Ihrem Endgerät gespeichert sind. +</p> +<p> + <a name="_Toc42328045"> + 12. Besondere Bedingungen für die iOS-Version der App + </a> +</p> +<p> + Die folgenden Bedingungen gelten für den Bezug der App über den Apple App + Store und die Nutzung der App unter dem Betriebssystem iOS. +</p> +<p> + Einwilligung zur Nutzung von Daten +</p> +<p> + Sie erklären sich damit einverstanden, dass das RKI technische Daten und + zugehörige Informationen – insbesondere technische Informationen über Ihr + Gerät, System und Ihre Anwendungssoftware sowie Peripheriegeräte – erheben + und nutzen darf, die in regelmäßigen Abständen erfasst werden, um die + Bereitstellung von Software-Aktualisierungen, Produkt-Support und anderen + im Zusammenhang mit der App gegenüber Ihnen erbrachten Dienstleistungen + (soweit gegeben) zu erleichtern. Das RKI darf diese Informationen nutzen, + um seine Produkte zu verbessern oder Ihnen Dienstleistungen oder + Technologien zur Verfügung zu stellen, solange dies in einer Form erfolgt, + die Ihre Identität nicht preisgibt. +</p> +<p> + Wartung und Support +</p> +<p> + Das RKI ist als Herausgeber der App allein verantwortlich für Wartung und + Support der App nach Maßgabe dieser Nutzungsbedingungen. Apple übernimmt + keinerlei Verpflichtung zur Erbringung irgendwelcher Wartungs- und + Supportleistungen in Bezug auf die App. +</p> +<p> + Keine Haftung von Apple für Störungen +</p> +<p> + Im Fall von Störungen der App steht es Ihnen frei, Apple hierüber zu + informieren. Soweit gesetzlich zulässig hat Apple keine weitergehenden + Pflichten wegen Störungen der App. +</p> +<p> + Produkthaftung +</p> +<p> + Apple ist nicht verantwortlich für etwaige Ansprüche Ihrerseits oder von + Dritten in Bezug auf die App oder deren Besitz oder Verwendung + einschließlich +</p> +<ul> + <li> + Ansprüchen wegen Produkthaftung, + </li> +</ul> +<p> + · Ansprüchen auf der Basis, dass die App anwendbare gesetzliche oder + regulatorische Anforderungen nicht erfüllt und +</p> +<p> + · Ansprüchen unter Verbrauchschutz- und Datenschutzgesetzen oder ähnlichen + Gesetzen, +</p> +<p> + einschließlich im Zusammenhang mit der Nutzung der HealthKit und + HomeKit-Frameworks. +</p> +<p> + Verletzung von Schutzrechten Dritter +</p> +<p> + Für den Fall, dass Dritte Ansprüche wegen der Verletzung von Schutzrechten + durch die App oder den Besitz oder die Verwendung der App durch Sie geltend + machen, ist Apple nicht verantwortlich für Untersuchungen, Verteidigung, + Beilegung oder Erfüllung solcher Ansprüche wegen der Verletzung von + Schutzrechten. +</p> +<p> + US Embargos und Sanktionen +</p> +<p> + Mit Anerkennen dieser Nutzungsbedingungen bestätigten Sie, +</p> +<p> + · dass Sie sich nicht in einem Land aufhalten, das einem Embargo der + Regierung der Vereinigten Staaten von Amerika unterliegt oder von der + Regierung der Vereinigten Staaten von Amerika als Unterstützer von + Terroristen (<em>"terrorist supporting" country</em>) designiert wurde und +</p> +<p> + · dass Sie nicht auf einer Liste der Regierung der Vereinigten Staaten von + Amerika als sog. <em>Prohibited or Restricted Party</em> geführt werden. +</p> +<p> + Drittbegünstigung von Apple +</p> +<p> + Sie erkennen an und erklären sich damit einverstanden, dass Apple ein + Drittbegünstigter unter diesen Nutzungsbedingungen ist und Apple daher + diese Nutzungsbedingungen Ihnen gegenüber durchsetzen kann. Die Änderung + und Aufhebung dieser Nutzungsbedingungen einschließlich der Rechte von + Apple hierunter bleibt den Vertragsparteien vorbehalten und bedarf nicht + der Zustimmung von Apple. +</p> +<p> + <a name="_Toc42328046">13. Schlussbestimmungen</a> +</p> +<p> + Bestimmungsgemäße Nutzung / Sperrung bei missbräuchlicher Verwendung +</p> +<p> + Sie dürfen die App und die CWA-Dienste nur bestimmungsgemäß nutzen. Das RKI + behält sich vor, Sie bei missbräuchlicher Verwendung der App oder nicht + bestimmungsgemäßem Zugriff auf die CWA-Dienste von der Nutzung der App und + der CWA-Dienste auszuschließen. +</p> +<p> + Dienste Dritter +</p> +<p> + Sofern Sie im Zusammenhang mit der Nutzung der App Dienste Dritter in + Anspruch nehmen, insbesondere die Dienste von + Telekommunikationsdienstleistern für die Bereitstellung einer + Datenverbindung, sind Sie für damit im Zusammenhang stehenden Kosten und + die Einhaltung der jeweiligen Vertragsbedingungen selbst verantwortlich. +</p> +<p> + Anwendbares Recht +</p> +<p> + Diese Nutzungsbedingungen unterliegen dem Recht der Bundesrepublik + Deutschland. Das Ãœbereinkommen der Vereinten Nationen über Verträge über + den internationalen Warenkauf findet keine Anwendung. Die gesetzlichen + Vorschriften zur Beschränkung der Rechtswahl und zur Anwendbarkeit + zwingender Vorschriften insbesondere des Staates, in dem Sie als + Verbraucher Ihren gewöhnlichen Aufenthalt haben, bleiben unberührt. +</p> +<p> + Teilunwirksamkeit +</p> +<p> + Diese Nutzungsbedingungen bleiben auch bei rechtlicher Unwirksamkeit + einzelner Punkte in ihren übrigen Teilen verbindlich. Anstelle der + unwirksamen Punkte treten, soweit vorhanden, die gesetzlichen Vorschriften. + Soweit dies für eine Vertragspartei eine unzumutbare Härte darstellen + würde, werden die Nutzungsbedingungen jedoch im Ganzen unwirksam. +</p> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt index 5b587643b..9df2c027b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationPrivacyFragment.kt @@ -5,11 +5,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent -import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentInformationPrivacyBinding import de.rki.coronawarnapp.ui.BaseFragment import de.rki.coronawarnapp.ui.main.MainActivity -import de.rki.coronawarnapp.util.AssetConstants /** * Basic Fragment which only displays static content. @@ -39,7 +37,6 @@ class InformationPrivacyFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setButtonOnClickListener() - loadWebView() } override fun onStart() { @@ -57,9 +54,4 @@ class InformationPrivacyFragment : BaseFragment() { (activity as MainActivity).goBack() } } - - private fun loadWebView() { - val informationPrivacyHtmlFilename = getString(R.string.information_privacy_html_path) - binding.informationPrivacyWebview.loadUrl(AssetConstants.ANDROID_ASSET_PATH + informationPrivacyHtmlFilename) - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt index 7d68ca4ee..02bc5c35d 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTechnicalFragment.kt @@ -5,11 +5,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent -import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentInformationTechnicalBinding import de.rki.coronawarnapp.ui.BaseFragment import de.rki.coronawarnapp.ui.main.MainActivity -import de.rki.coronawarnapp.util.AssetConstants /** * Basic Fragment which only displays static content. @@ -39,7 +37,6 @@ class InformationTechnicalFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setButtonOnClickListener() - loadWebView() } override fun onStart() { @@ -57,9 +54,4 @@ class InformationTechnicalFragment : BaseFragment() { (activity as MainActivity).goBack() } } - - private fun loadWebView() { - val informationTermsHtmlFilename = getString(R.string.information_technical_html_path) - binding.informationTechnicalWebview.loadUrl(AssetConstants.ANDROID_ASSET_PATH + informationTermsHtmlFilename) - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt index 86374777b..0cfb04cd9 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/information/InformationTermsFragment.kt @@ -5,11 +5,9 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent -import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentInformationTermsBinding import de.rki.coronawarnapp.ui.BaseFragment import de.rki.coronawarnapp.ui.main.MainActivity -import de.rki.coronawarnapp.util.AssetConstants /** * Basic Fragment which only displays static content. @@ -39,7 +37,6 @@ class InformationTermsFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setButtonOnClickListener() - loadWebView() } override fun onStart() { @@ -57,9 +54,4 @@ class InformationTermsFragment : BaseFragment() { (activity as MainActivity).goBack() } } - - private fun loadWebView() { - val informationTermsHtmlFilename = getString(R.string.information_terms_html_path) - binding.informationTermsWebview.loadUrl(AssetConstants.ANDROID_ASSET_PATH + informationTermsHtmlFilename) - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt index cb6e600ab..d0b725448 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/ui/onboarding/OnboardingPrivacyFragment.kt @@ -5,10 +5,8 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.view.accessibility.AccessibilityEvent -import de.rki.coronawarnapp.R import de.rki.coronawarnapp.databinding.FragmentOnboardingPrivacyBinding import de.rki.coronawarnapp.ui.BaseFragment -import de.rki.coronawarnapp.util.AssetConstants /** * This fragment informs the user regarding privacy. @@ -38,7 +36,6 @@ class OnboardingPrivacyFragment : BaseFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) setButtonOnClickListener() - loadWebView() } override fun onStart() { @@ -61,9 +58,4 @@ class OnboardingPrivacyFragment : BaseFragment() { (activity as OnboardingActivity).goBack() } } - - private fun loadWebView() { - val informationPrivacyHtmlFilename = getString(R.string.information_privacy_html_path) - binding.onboardingPrivacyWebview.loadUrl(AssetConstants.ANDROID_ASSET_PATH + informationPrivacyHtmlFilename) - } } diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt index 17fead213..6b1a56f39 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterHelper.kt @@ -3,8 +3,8 @@ package de.rki.coronawarnapp.util.formatter import android.graphics.drawable.Drawable +import android.text.Spanned import android.view.View -import androidx.annotation.StringRes import androidx.core.text.HtmlCompat import de.rki.coronawarnapp.CoronaWarnApplication import de.rki.coronawarnapp.R @@ -89,6 +89,14 @@ fun formatVisibilityInverted(value: Boolean): Int = formatVisibility(!value) */ fun formatVisibilityText(text: String?): Int = formatVisibility(text != null && text != "") +/** + * Formats visibility of item if valid spannable is provided + * + * @param text + * @return + */ +fun formatVisibilityText(text: CharSequence?): Int = formatVisibility(text != null) + /*Text*/ /** * Formats text resource to be displayed depending on flag provided @@ -118,10 +126,14 @@ fun formatColorIcon(color: Int?): Int { return color ?: appContext.getColor(R.color.colorAccentTintIcon) } -fun formatStringAsHTML(@StringRes stringRes: Int) = HtmlCompat.fromHtml( - CoronaWarnApplication.getAppContext().getString(stringRes), - HtmlCompat.FROM_HTML_MODE_LEGACY -) +fun formatStringAsHTMLFromLocal(path: String): Spanned { + val appContext = CoronaWarnApplication.getAppContext() + val content = appContext.assets.open(path).bufferedReader().use { it.readText() } + return HtmlCompat.fromHtml( + content, + HtmlCompat.FROM_HTML_MODE_LEGACY + ) +} /** * TODO diff --git a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt index 8814199e1..b31ab699b 100644 --- a/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt +++ b/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/util/formatter/FormatterRiskHelper.kt @@ -523,7 +523,7 @@ fun formatBehaviorIcon(riskLevelScore: Int?): Int { val appContext = CoronaWarnApplication.getAppContext() return when (riskLevelScore) { RiskLevelConstants.NO_CALCULATION_POSSIBLE_TRACING_OFF, - RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> appContext.getColor(R.color.colorAccentTintIcon) + RiskLevelConstants.UNKNOWN_RISK_OUTDATED_RESULTS -> appContext.getColor(R.color.colorSemanticNeutralRisk) else -> appContext.getColor(R.color.colorStableLight) } } diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml index cd92970ac..d07c91a08 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_about.xml @@ -50,7 +50,7 @@ style="@style/subtitle" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_medium" android:text="@string/information_about_body_emphasized" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml index 20bede8c3..8d8dafb4e 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_contact.xml @@ -51,7 +51,7 @@ layout="@layout/include_divider" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_normal" + android:layout_marginTop="@dimen/spacing_medium" app:layout_constraintEnd_toEndOf="@+id/guideline_end" app:layout_constraintStart_toStartOf="@id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/information_contact_header_details" /> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml index f21af729c..05da54a75 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_privacy.xml @@ -38,7 +38,7 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" - android:layout_height="match_parent"> + android:layout_height="wrap_content"> <include android:id="@+id/information_privacy_header_details" @@ -47,19 +47,11 @@ android:layout_height="wrap_content" app:illustration="@{@drawable/ic_illustration_privacy}" app:illustrationDescription="@{@string/information_privacy_illustration_description}" + app:body="@{FormatterHelper.formatStringAsHTMLFromLocal(@string/information_privacy_html_path)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <WebView - android:id="@+id/information_privacy_webview" - android:layout_width="@dimen/match_constraint" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/spacing_normal" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toEndOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/information_privacy_header_details" /> - <include layout="@layout/merge_guidelines_side" /> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml index 9c89947a5..d94919817 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_technical.xml @@ -46,21 +46,13 @@ layout="@layout/include_information_details" android:layout_width="0dp" android:layout_height="wrap_content" + app:body="@{FormatterHelper.formatStringAsHTMLFromLocal(@string/information_technical_html_path)}" app:illustration="@{@drawable/ic_information_illustration_technical}" app:illustrationDescription="@{@string/information_technical_illustration_description}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <WebView - android:id="@+id/information_technical_webview" - android:layout_width="@dimen/match_constraint" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/spacing_normal" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toEndOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/information_technical_header_details" /> - <include layout="@layout/merge_guidelines_side" /> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml b/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml index afd1ebdf8..e4e13e84f 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_information_terms.xml @@ -45,6 +45,7 @@ layout="@layout/include_information_details" android:layout_width="0dp" android:layout_height="wrap_content" + app:body="@{FormatterHelper.formatStringAsHTMLFromLocal(@string/information_terms_html_path)}" app:headline="@{@string/information_terms_headline}" app:illustration="@{@drawable/ic_information_illustration_terms}" app:illustrationDescription="@{@string/information_terms_illustration_description}" @@ -52,16 +53,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - <WebView - android:id="@+id/information_terms_webview" - android:layout_width="@dimen/match_constraint" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" - android:layout_marginBottom="@dimen/spacing_normal" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toEndOf="@+id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/information_terms_header_details" /> - <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" android:layout_width="wrap_content" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_main.xml b/Corona-Warn-App/src/main/res/layout/fragment_main.xml index a47e4b2d8..f402de1c7 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_main.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_main.xml @@ -131,8 +131,8 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatShowRiskStatusCard(submissionViewModel.deviceUiState)}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@+id/main_tracing_divider" app:settingsViewModel="@{settingsViewModel}" app:showDetails="@{false}" @@ -146,8 +146,8 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatSubmissionStatusCardUnregisteredVisible(submissionViewModel.deviceRegistered)}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@id/main_risk" /> <include @@ -158,8 +158,8 @@ android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatSubmissionStatusCardContentVisible(submissionViewModel.deviceUiState)}" app:deviceUIState="@{submissionViewModel.deviceUiState}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@id/main_test_unregistered" /> <include @@ -169,8 +169,8 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatSubmissionStatusCardFetchingVisible(submissionViewModel.deviceRegistered, submissionViewModel.uiStateState)}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@id/main_test_result" /> <include @@ -180,8 +180,8 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatShowSubmissionStatusPositiveCard(submissionViewModel.deviceUiState)}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@+id/main_test_fetching" app:registerDate="@{submissionViewModel.testResultReceivedDate}" /> @@ -192,8 +192,8 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacing_normal" android:visibility="@{FormatterSubmissionHelper.formatShowSubmissionDoneCard(submissionViewModel.deviceUiState)}" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" - app:layout_constraintStart_toStartOf="@+id/guideline_start" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:layout_constraintTop_toBottomOf="@+id/main_test_positive" /> <androidx.constraintlayout.widget.Barrier @@ -214,10 +214,10 @@ app:icon="@{@drawable/ic_main_about}" app:iconEnd="@{@drawable/ic_forward}" app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintHorizontal_bias="0.0" - app:layout_constraintStart_toStartOf="@+id/guideline_start" app:layout_constraintTop_toBottomOf="@+id/main_barrier" + app:layout_constraintEnd_toStartOf="@+id/guideline_card_end" + app:layout_constraintStart_toStartOf="@+id/guideline_card_start" app:tracingViewModel="@{tracingViewModel}" /> <include layout="@layout/merge_guidelines_side" /> @@ -229,6 +229,8 @@ android:orientation="horizontal" app:layout_constraintGuide_end="@dimen/spacing_small" /> + <include layout="@layout/merge_guidelines_card" /> + </androidx.constraintlayout.widget.ConstraintLayout> </ScrollView> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding.xml index 5db621d83..1f778ffbc 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding.xml @@ -15,7 +15,7 @@ layout="@layout/include_onboarding" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginBottom="@dimen/spacing_small" android:focusable="false" app:body="@{@string/onboarding_body}" app:bodyEmphasized="@{@string/onboarding_body_emphasized}" @@ -50,7 +50,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml index 0a8fa2919..1800f5105 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_notifications.xml @@ -42,7 +42,7 @@ layout="@layout/include_onboarding" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginBottom="@dimen/spacing_small" app:body="@{@string/onboarding_notifications_body}" app:headline="@{@string/onboarding_notifications_headline}" app:illustration="@{@drawable/ic_illustration_notification_on}" @@ -75,7 +75,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml index 90840022a..739392b9b 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_privacy.xml @@ -46,30 +46,19 @@ </androidx.constraintlayout.widget.ConstraintLayout> <include - android:id="@+id/onboarding_privacy" layout="@layout/include_onboarding" - android:layout_width="0dp" - android:layout_height="wrap_content" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_width="@dimen/match_constraint" + android:layout_height="@dimen/match_constraint" + android:layout_marginBottom="@dimen/spacing_small" app:headline="@{@string/onboarding_privacy_headline}" + app:body="@{FormatterHelper.formatStringAsHTMLFromLocal(@string/information_privacy_html_path)}" app:illustration="@{@drawable/ic_illustration_privacy}" app:illustrationDescription="@{@string/onboarding_privacy_illustration_description}" + app:layout_constraintBottom_toTopOf="@+id/onboarding_button_next" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/onboarding_header" /> - <WebView - android:id="@+id/onboarding_privacy_webview" - android:layout_width="@dimen/match_constraint" - android:layout_height="@dimen/match_constraint" - android:layout_marginBottom="@dimen/spacing_normal" - android:scrollbars="vertical" - app:layout_constraintBottom_toTopOf="@+id/onboarding_button_next" - app:layout_constraintEnd_toEndOf="@id/guideline_end" - app:layout_constraintStart_toStartOf="@id/guideline_start" - app:layout_constraintTop_toBottomOf="@+id/onboarding_privacy" /> - - <Button android:id="@+id/onboarding_button_next" style="@style/buttonPrimary" @@ -92,7 +81,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml index 71f445ac4..8fd19dc34 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_test.xml @@ -41,7 +41,7 @@ layout="@layout/include_onboarding" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginBottom="@dimen/spacing_small" app:body="@{@string/onboarding_test_body}" app:headline="@{@string/onboarding_test_headline}" app:illustration="@{@drawable/ic_illustration_test}" @@ -74,7 +74,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml index 1097da4a0..dca4457c3 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_onboarding_tracing.xml @@ -41,7 +41,7 @@ layout="@layout/include_onboarding" android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginBottom="@dimen/spacing_small" app:body="@{@string/onboarding_tracing_body}" app:bodyCard="@{@string/onboarding_tracing_body_consent}" app:bodyEmphasized="@{@string/onboarding_tracing_body_emphasized}" @@ -88,7 +88,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> <androidx.constraintlayout.widget.Guideline android:id="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml index e3bcb2886..943f04f8b 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_risk_details.xml @@ -211,10 +211,10 @@ <TextView android:id="@+id/risk_details_information_body" - style="@style/body2" + style="@style/body1" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_normal" android:focusable="false" android:text="@{FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure)}" android:visibility="@{FormatterHelper.formatVisibilityText(FormatterRiskHelper.formatRiskDetailsRiskLevelBody(tracingViewModel.riskLevel, tracingViewModel.daysSinceLastExposure))}" @@ -224,10 +224,10 @@ <TextView android:id="@+id/risk_details_information_body_notice" - style="@style/body2" + style="@style/body1" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_normal" android:focusable="false" android:text="@string/risk_details_information_body_notice" app:layout_constraintEnd_toEndOf="parent" @@ -259,7 +259,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/colorSurface1" - android:padding="@dimen/spacing_normal" + android:paddingStart="@dimen/spacing_normal" + android:paddingTop="@dimen/spacing_small" + android:paddingEnd="@dimen/spacing_normal" + android:paddingBottom="@dimen/spacing_small" android:visibility="@{FormatterRiskHelper.formatRiskDetailsButtonVisibility(tracingViewModel.riskLevel, settingsViewModel.isBackgroundJobEnabled())}" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml index 697992636..475ce1567 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_notifications.xml @@ -57,6 +57,7 @@ <include android:id="@+id/settings_switch_row_notifications_risk" layout="@layout/include_settings_switch_row" + android:layout_marginTop="@dimen/spacing_tiny" android:layout_width="0dp" android:layout_height="wrap_content" android:visibility="@{FormatterHelper.formatVisibility(settingsViewModel.isNotificationsEnabled())}" diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml index d910929b2..9ce4584a3 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_reset.xml @@ -20,7 +20,7 @@ <ScrollView android:layout_width="0dp" android:layout_height="0dp" - android:layout_marginBottom="@dimen/spacing_normal" + android:layout_marginBottom="@dimen/spacing_small" android:fillViewport="true" app:layout_constraintBottom_toTopOf="@+id/settings_reset_button_delete" app:layout_constraintEnd_toEndOf="parent" @@ -49,7 +49,7 @@ layout="@layout/include_tracing_status_card" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_normal" + android:layout_marginTop="@dimen/spacing_medium" app:body="@{@string/settings_reset_body_keys}" app:buttonText="@{@string/settings_tracing_status_connection_button}" app:headline="@{@string/settings_reset_headline_keys}" @@ -118,7 +118,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" - app:layout_constraintGuide_end="@dimen/guideline_bottom" /> + app:layout_constraintGuide_end="@dimen/spacing_small" /> </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml index 1cadf93f1..4e2f001aa 100644 --- a/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml +++ b/Corona-Warn-App/src/main/res/layout/fragment_settings_tracing.xml @@ -114,7 +114,7 @@ android:id="@+id/settings_tracing_status_tracing" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_tiny" android:visibility="@{FormatterSettingsHelper.formatTracingStatusVisibilityTracing(tracingViewModel.isTracingEnabled(), settingsViewModel.isBluetoothEnabled(), settingsViewModel.isConnectionEnabled())}" app:layout_constraintEnd_toStartOf="@+id/guideline_end" app:layout_constraintStart_toEndOf="@+id/guideline_start" diff --git a/Corona-Warn-App/src/main/res/layout/include_header.xml b/Corona-Warn-App/src/main/res/layout/include_header.xml index 8e1dca2b7..4dcf94459 100644 --- a/Corona-Warn-App/src/main/res/layout/include_header.xml +++ b/Corona-Warn-App/src/main/res/layout/include_header.xml @@ -17,7 +17,8 @@ <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="@dimen/header_main" - android:padding="@dimen/spacing_tiny"> + android:paddingTop="@dimen/spacing_tiny" + android:paddingBottom="@dimen/spacing_tiny"> <include android:id="@+id/header_button_back" diff --git a/Corona-Warn-App/src/main/res/layout/include_information_details.xml b/Corona-Warn-App/src/main/res/layout/include_information_details.xml index 20c19d008..6e97b1bac 100644 --- a/Corona-Warn-App/src/main/res/layout/include_information_details.xml +++ b/Corona-Warn-App/src/main/res/layout/include_information_details.xml @@ -21,7 +21,7 @@ <variable name="body" - type="String" /> + type="CharSequence" /> </data> <androidx.constraintlayout.widget.ConstraintLayout @@ -49,6 +49,7 @@ style="@style/headline5" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/spacing_small" android:text="@{headline}" android:visibility="@{FormatterHelper.formatVisibilityText(headline)}" app:layout_constraintEnd_toEndOf="parent" @@ -61,7 +62,7 @@ style="@style/subtitle" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_medium" android:text="@{body}" android:visibility="@{FormatterHelper.formatVisibilityText(body)}" app:layout_constraintEnd_toEndOf="@id/guideline_end" diff --git a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml index 83c66263c..03d9af5c8 100644 --- a/Corona-Warn-App/src/main/res/layout/include_onboarding.xml +++ b/Corona-Warn-App/src/main/res/layout/include_onboarding.xml @@ -79,7 +79,7 @@ style="@style/subtitle" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_small" + android:layout_marginTop="@dimen/spacing_normal" android:focusable="false" android:text="@{subtitle}" android:visibility="@{FormatterHelper.formatVisibilityText(subtitle)}" @@ -120,7 +120,7 @@ layout="@layout/include_tracing_status_card" android:layout_width="@dimen/match_constraint" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacing_normal" + android:layout_marginTop="@dimen/spacing_large" android:visibility="@{FormatterHelper.formatVisibilityText(headlineCard)}" app:body="@{bodyCard}" app:headline="@{headlineCard}" diff --git a/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml b/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml index 8d6e6673b..4d85a537f 100644 --- a/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml +++ b/Corona-Warn-App/src/main/res/layout/include_risk_card_header.xml @@ -42,7 +42,7 @@ android:layout_height="@dimen/icon_size_risk_card" android:importantForAccessibility="no" android:src="@drawable/ic_forward" - android:tint="@{FormatterRiskHelper.formatStableIconColor(tracingViewModel.riskLevel)}" + android:tint="@{FormatterRiskHelper.formatStableTextColor(tracingViewModel.riskLevel)}" android:visibility="@{FormatterHelper.formatVisibilityInverted(showDetails)}" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" /> diff --git a/Corona-Warn-App/src/main/res/values-v28/styles.xml b/Corona-Warn-App/src/main/res/values-v28/styles.xml new file mode 100644 index 000000000..b3578fe41 --- /dev/null +++ b/Corona-Warn-App/src/main/res/values-v28/styles.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <style name="subtitle" parent="@style/TextAppearance.MaterialComponents.Subtitle1"> + <item name="android:textColor">@color/colorTextPrimary1</item> + <item name="android:lineHeight">@dimen/line_height_normal</item> + </style> + + <style name="subtitleSemanticRed" parent="@style/subtitle"> + <item name="android:textColor">@color/colorTextSemanticRed</item> + <item name="android:lineHeight">@dimen/line_height_normal</item> + </style> + + <style name="subtitleMedium" parent="@style/TextAppearance.MaterialComponents.Subtitle1"> + <item name="android:textColor">@color/colorTextPrimary2</item> + <item name="android:lineHeight">@dimen/line_height_normal</item> + </style> + + <style name="body1" parent="@style/TextAppearance.MaterialComponents.Body1"> + <item name="android:textColor">@color/colorTextPrimary1</item> + <item name="android:lineHeight">@dimen/line_height_large</item> + </style> + + <style name="body2" parent="@style/TextAppearance.MaterialComponents.Body2"> + <item name="android:textColor">@color/colorTextPrimary1</item> + <item name="android:lineHeight">@dimen/line_height_small</item> + </style> + + <style name="body2Medium" parent="@style/TextAppearance.MaterialComponents.Body2"> + <item name="android:textColor">@color/colorTextPrimary2</item> + <item name="android:lineHeight">@dimen/line_height_small</item> + </style> +</resources> \ No newline at end of file diff --git a/Corona-Warn-App/src/main/res/values/colors.xml b/Corona-Warn-App/src/main/res/values/colors.xml index 0e311ca72..afd984e0f 100644 --- a/Corona-Warn-App/src/main/res/values/colors.xml +++ b/Corona-Warn-App/src/main/res/values/colors.xml @@ -50,7 +50,7 @@ <color name="colorStableDark">#000000</color> <color name="colorStableMedium">#4D17191A</color> <color name="colorStableLight">#FFFFFF</color> - <color name="colorStableHairlineLight">#4DFFFFFF</color> + <color name="colorStableHairlineLight">#33FFFFFF</color> <color name="colorStableHairlineDark">#3317191A</color> </resources> diff --git a/Corona-Warn-App/src/main/res/values/dimens.xml b/Corona-Warn-App/src/main/res/values/dimens.xml index 248a374e5..787274836 100644 --- a/Corona-Warn-App/src/main/res/values/dimens.xml +++ b/Corona-Warn-App/src/main/res/values/dimens.xml @@ -17,6 +17,11 @@ <dimen name="font_button">14sp</dimen> <dimen name="font_title">20sp</dimen> + <!-- line heights --> + <dimen name="line_height_large">28sp</dimen> + <dimen name="line_height_normal">24sp</dimen> + <dimen name="line_height_small">20sp</dimen> + <dimen name="font_line_spacing_extra">4sp</dimen> <!-- header height --> @@ -32,7 +37,7 @@ <dimen name="guideline_start">@dimen/spacing_normal</dimen> <dimen name="guideline_end">@dimen/spacing_normal</dimen> <dimen name="guideline_top">@dimen/spacing_normal</dimen> - <dimen name="guideline_bottom">@dimen/spacing_normal</dimen> + <dimen name="guideline_bottom">@dimen/spacing_small</dimen> <dimen name="guideline_action">72dp</dimen> <dimen name="guideline_action_large">150dp</dimen> <dimen name="guideline_body_title">45dp</dimen> diff --git a/Corona-Warn-App/src/main/res/values/strings.xml b/Corona-Warn-App/src/main/res/values/strings.xml index 3e6c8c43f..94ee9a4d7 100644 --- a/Corona-Warn-App/src/main/res/values/strings.xml +++ b/Corona-Warn-App/src/main/res/values/strings.xml @@ -254,6 +254,7 @@ <string name="main_about_link">https://www.bundesregierung.de/corona-warn-app-faq</string> <!-- XACT: Opens external webpage --> <string name="hint_external_webpage">Häufige Fragen, hier finden Sie Antworten auf häufig gestellte Fragen rund um die Corona-Warn-App. Aufruf externer Infos im Web.</string> + <!-- #################################### Main - Share ###################################### --> -- GitLab