From b1314bfe20b085a82d0e3d6aa3984b1bdd8d422c Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Fri, 23 Oct 2020 19:25:19 +0200 Subject: [PATCH 01/17] dynamic texts WIP --- .../BE/DynamicText/BEDynamicTextService.swift | 38 +++++++ .../Model/BEDynamicTextScreen.swift | 24 +++++ .../Model/BEDynamicTextScreenName.swift | 29 ++++++ .../Model/BEDynamicTextScreenSection.swift | 49 +++++++++ .../BEDynamicTextScreenSectionName.swift | 28 +++++ src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 40 ++++++++ .../Dynamic Text/Contents.json | 6 ++ .../dt_check.imageset/Contents.json | 16 +++ .../dt_check.imageset/Icons - Check.pdf | Bin 0 -> 5802 bytes .../dt_cloud.imageset/Contents.json | 16 +++ .../dt_cloud.imageset/Icons - Warnen.pdf | Bin 0 -> 6123 bytes .../dt_delete.imageset/Contents.json | 16 +++ .../Icons_Grey_Entfernen-Dark.pdf | Bin 0 -> 48305 bytes .../dt_distance.imageset/Contents.json | 16 +++ .../dt_distance.imageset/Icons - Abstand.pdf | Bin 0 -> 53163 bytes .../dt_empty.imageset/Contents.json | 16 +++ .../dt_empty.imageset/Icons - Empty.pdf | Bin 0 -> 5554 bytes .../dt_exclamation.imageset/Contents.json | 16 +++ .../Icons_Grey_Error-Dark.pdf | Bin 0 -> 44210 bytes .../dt_home.imageset/Contents.json | 16 +++ .../dt_home.imageset/Icons - Home.pdf | Bin 0 -> 50285 bytes .../dt_mouthMask.imageset/Contents.json | 16 +++ .../Icons - Mundschutz.pdf | Bin 0 -> 57908 bytes .../dt_phone.imageset/Contents.json | 16 +++ .../dt_phone.imageset/Icons - Hotline.pdf | Bin 0 -> 4086 bytes .../dt_sneeze.imageset/Contents.json | 16 +++ .../dt_sneeze.imageset/Icons - Niesen.pdf | Bin 0 -> 59249 bytes .../dt_virus.imageset/Contents.json | 16 +++ .../dt_virus.imageset/Icons - Ansteckend.pdf | Bin 0 -> 8437 bytes .../dt_washHands.imageset/Contents.json | 16 +++ .../dt_washHands.imageset/Icons - Hands.pdf | Bin 0 -> 61148 bytes .../Localization/de.lproj/Localizable.strings | 1 + .../Localization/en.lproj/Localizable.strings | 1 + .../Localization/fr.lproj/Localizable.strings | 1 + .../Localization/nl.lproj/Localizable.strings | 1 + src/xcode/ENA/ENA/Resources/dynamicTexts.json | 97 ++++++++++++++++++ 36 files changed, 507 insertions(+) create mode 100644 src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Icons - Check.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Icons - Warnen.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Icons_Grey_Entfernen-Dark.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Icons - Abstand.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Icons - Empty.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Icons_Grey_Error-Dark.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Icons - Home.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Icons - Mundschutz.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Icons - Hotline.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Icons - Niesen.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_virus.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_virus.imageset/Icons - Ansteckend.pdf create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_washHands.imageset/Contents.json create mode 100644 src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_washHands.imageset/Icons - Hands.pdf create mode 100644 src/xcode/ENA/ENA/Resources/dynamicTexts.json diff --git a/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift b/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift new file mode 100644 index 000000000..68ead4424 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift @@ -0,0 +1,38 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +class BEDynamicTextService { + typealias DynamicTextLoader = (Error?) -> Void + + var screens:[BEDynamicTextScreenName:BEDynamicTextScreen] + + private let client: Client + private let store: Store + + init(client: Client, store: Store) { + self.client = client + self.store = store + } + + func loadTexts(completion: @escaping DynamicTextLoader) { + + } +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift new file mode 100644 index 000000000..f00cfb899 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift @@ -0,0 +1,24 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +struct BEDynamicTextScreen : Decodable { + let sections:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]] +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift new file mode 100644 index 000000000..16b4164d4 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift @@ -0,0 +1,29 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +/// Make sure these stay in sync with the JSON +enum BEDynamicTextScreenName: String, Decodable { + case lowRisk = "lowRisk" + case highRisk = "highRisk" + case positiveTestResult = "positiveTestResult" + case negativeTestResult = "negativeTestResult" + case thankYou = "thankYou" +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift new file mode 100644 index 000000000..44ddd7d81 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift @@ -0,0 +1,49 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation +import UIKit + +struct BEDynamicTextScreenSection : Decodable { + let icon:UIImage? + let title:String? + let text:String? + let paragraphs:[String]? + + enum CodingKeys: String, CodingKey { + case icon + case title + case text + case paragraphs + } + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + + title = try container.decode(String.self, forKey: .title) + text = try container.decode(String.self, forKey: .text) + paragraphs = try container.decode([String].self, forKey: .paragraphs) + + if let iconTitle = try? container.decode(String.self, forKey: .icon) { + icon = UIImage(named: iconTitle) + } else { + icon = nil + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift new file mode 100644 index 000000000..919b645f0 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift @@ -0,0 +1,28 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +/// Make sure these stay in sync with the JSON +enum BEDynamicTextScreenSectionName: String, Decodable { + case explanation = "explanation" + case pleaseNote = "pleaseNote" + case otherInformation = "otherInformation" + case preventiveMeasures = "preventiveMeasures" +} diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index ba33d74d4..0485556d0 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -252,6 +252,12 @@ A92076E624ED407A00AE8748 /* BEFakeRequestsExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076E524ED407A00AE8748 /* BEFakeRequestsExecutor.swift */; }; A92076E924ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076E824ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift */; }; A92076EC24ED542900AE8748 /* BEMockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076EB24ED542900AE8748 /* BEMockURLSession.swift */; }; + A9221A312542C1F200853CEF /* BEDynamicTextService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A302542C1F200853CEF /* BEDynamicTextService.swift */; }; + A9221A332542C2C200853CEF /* dynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A322542C2C200853CEF /* dynamicTexts.json */; }; + A9221A362542F02900853CEF /* BEDynamicTextScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */; }; + A9221A382542F06E00853CEF /* BEDynamicTextScreenSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */; }; + A9221A3A2542F10300853CEF /* BEDynamicTextScreenName.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */; }; + A9221A3C2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */; }; A929A71724DC3EE50039B997 /* BEHTTPClientSubmitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */; }; A92B66AD251CBF9B00F9B8DD /* BEUILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */; }; A935EE5624E0060400B33B66 /* BEENAUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935EE5524E0060400B33B66 /* BEENAUITests.swift */; }; @@ -732,6 +738,12 @@ A92076E524ED407A00AE8748 /* BEFakeRequestsExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEFakeRequestsExecutor.swift; sourceTree = ""; }; A92076E824ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEFakeRequestsExecutorTests.swift; sourceTree = ""; }; A92076EB24ED542900AE8748 /* BEMockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEMockURLSession.swift; sourceTree = ""; }; + A9221A302542C1F200853CEF /* BEDynamicTextService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextService.swift; sourceTree = ""; }; + A9221A322542C2C200853CEF /* dynamicTexts.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = dynamicTexts.json; sourceTree = ""; }; + A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreen.swift; sourceTree = ""; }; + A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenSection.swift; sourceTree = ""; }; + A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenName.swift; sourceTree = ""; }; + A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenSectionName.swift; sourceTree = ""; }; A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEHTTPClientSubmitTests.swift; sourceTree = ""; }; A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEUILabel.swift; sourceTree = ""; }; A935EE5524E0060400B33B66 /* BEENAUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEENAUITests.swift; sourceTree = ""; }; @@ -1540,6 +1552,7 @@ 85D75976245706BD008175F0 /* Assets */, 85D75975245706B0008175F0 /* Storyboards */, A189E460248C35BF001D0996 /* PublicKeys.plist */, + A9221A322542C2C200853CEF /* dynamicTexts.json */, ); path = Resources; sourceTree = ""; @@ -1740,6 +1753,26 @@ path = Mocks; sourceTree = ""; }; + A9221A2F2542C1DD00853CEF /* DynamicText */ = { + isa = PBXGroup; + children = ( + A9221A342542F00C00853CEF /* Model */, + A9221A302542C1F200853CEF /* BEDynamicTextService.swift */, + ); + path = DynamicText; + sourceTree = ""; + }; + A9221A342542F00C00853CEF /* Model */ = { + isa = PBXGroup; + children = ( + A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */, + A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */, + A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */, + A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */, + ); + path = Model; + sourceTree = ""; + }; A929A71324DC3C470039B997 /* __tests__ */ = { isa = PBXGroup; children = ( @@ -1844,6 +1877,7 @@ A9DD2CE224CEEEF40035081A /* BE */ = { isa = PBXGroup; children = ( + A9221A2F2542C1DD00853CEF /* DynamicText */, A9FC52802522329600660812 /* TestActivation */, A95EE81224FCE0CF00AFECBD /* Statistics */, A9D0BF8A24FBA19C00DEBD99 /* InfectionSummary */, @@ -2642,6 +2676,7 @@ 51CE1B85246078B6002CF42A /* ActivateCollectionViewCell.xib in Resources */, 51C779142486E5AB004582F8 /* RiskFindingPositiveCollectionViewCell.xib in Resources */, 51D420CE245869C800AD70CA /* Home.storyboard in Resources */, + A9221A332542C2C200853CEF /* dynamicTexts.json in Resources */, 8539874F2467094E00D28B62 /* AppIcon.xcassets in Resources */, 514C0A0B247AF9F700F235F6 /* RiskTextItemView.xib in Resources */, 51B5B414246DF07300DC5D3E /* RiskImageItemView.xib in Resources */, @@ -2730,6 +2765,7 @@ 7187A5582481231C00FCC755 /* DynamicTableViewAction.swift in Sources */, A128F059248B459F00EC7F6C /* PublicKeyStore.swift in Sources */, 71C0BEDD2498DD07009A17A0 /* ENANavigationFooterView.swift in Sources */, + A9221A382542F06E00853CEF /* BEDynamicTextScreenSection.swift in Sources */, A3FF84EC247BFAF00053E947 /* Hasher.swift in Sources */, 51895EDC245E16CD0085DA38 /* ENAColor.swift in Sources */, A372DA3B24BDA075003248BB /* ExposureSubmissionCoordinating.swift in Sources */, @@ -2752,6 +2788,7 @@ CD8638532477EBD400A5A07C /* SettingsViewModel.swift in Sources */, A9DD2CF624CF379F0035081A /* BEUIImage.swift in Sources */, 51CE1BB52460AC83002CF42A /* UICollectionView+Dequeue.swift in Sources */, + A9221A312542C1F200853CEF /* BEDynamicTextService.swift in Sources */, B17F2D48248CEB4C00CAA38F /* DetectionMode.swift in Sources */, 137846492488027600A50AB8 /* OnboardingInfoViewController+Extension.swift in Sources */, 85E33444247EB357006E74EC /* CircularProgressView.swift in Sources */, @@ -2782,6 +2819,7 @@ 51486DA22485101500FCE216 /* RiskInactiveCollectionViewCell.swift in Sources */, 710021DC248E44A6001F0B63 /* ENAFont.swift in Sources */, A92076E624ED407A00AE8748 /* BEFakeRequestsExecutor.swift in Sources */, + A9221A3C2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift in Sources */, A9DD2D0124D01F980035081A /* BESecureStore.swift in Sources */, B1FE13FF2489708200D012E5 /* CachedAppConfiguration.swift in Sources */, EE22DB8B247FB43A001B0A71 /* ActionDetailTableViewCell.swift in Sources */, @@ -2882,6 +2920,7 @@ B10FD5ED246EAADC00E9D7F2 /* AppInformationDetailViewController.swift in Sources */, A951618524DAEB3A00631519 /* BEDecimal.swift in Sources */, CDCE11D9247D64C600F30825 /* NotificationSettingsOnTableViewCell.swift in Sources */, + A9221A3A2542F10300853CEF /* BEDynamicTextScreenName.swift in Sources */, 0DF6BB97248AD616007E8B0C /* AppUpdateCheckHelper.swift in Sources */, 0DD260FF248D549B007C3B2C /* KeychainHelper.swift in Sources */, 2FF1D63024880FCF00381FFB /* DynamicTableViewRoundedCell.swift in Sources */, @@ -2980,6 +3019,7 @@ A92076D124E426D600AE8748 /* BEMockExposureSubmissionService.swift in Sources */, A92B66AD251CBF9B00F9B8DD /* BEUILabel.swift in Sources */, B1221BE02492ECE800E6C4E4 /* CFDictionary+KeychainQuery.swift in Sources */, + A9221A362542F02900853CEF /* BEDynamicTextScreen.swift in Sources */, FEDCE77AED78E9C25999BB35 /* SceneDelegate+State.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/Contents.json new file mode 100644 index 000000000..73c00596a --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Contents.json new file mode 100644 index 000000000..2c2521357 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Check.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Icons - Check.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_check.imageset/Icons - Check.pdf new file mode 100644 index 0000000000000000000000000000000000000000..78746d852988b7cc39596153c12507ef3647300a GIT binary patch literal 5802 zcmbtYXH=6*x28%JP$^P`h=g7eNPvid)JW0LrDGC8hiK>^Qlvkch;Ugd-m-8yp!1vP)}V`0xT&*4{V%Xn_kFU zf85pBOb-Eo09ce0{e=qvDP4@4y@vw;N)#CYq%<8}JTN%o+Xd-?QOBUMwitkt61}?z z4uf>1_aQek3hF~RwgMW#7*TW%_S>o zCF;&ynSUofSwVim<^*m?r73Y{d0=vQ&V9HjPiuV#m)j{eahCjT@dr6Sp&M>yXUgPV zOy(<+sH(y@Z@az{7`~`o#X;p$^d{HtrMP2RezRD=lL1mc9jxT_*W4W%Tyog$b1Eq= ziD$-CA|l@`r@6WBMK9irjHzX<<1i>KSh6I(w6JF|Y>UK73Hgv?B8C9@+ ziOIdB$MCkfjhAtPbFXNy(Wy2rmAl|76VoJJN!!LCZZ|>N%$SLj5lO@2di9LO(RDJd zF0>Elg*XB8u<{Hc1(T^K)Y;qAKI(0$!B^7pj7+YmR8fE4$qy`i9i?hOuNBh<^McLq zcJ1{noy#SMmV3v>lqqsY=ay&=>dMphnA7eC*32CrpDnKHYP0b>V2*%A2hd~OY=1_Y z*drx~loirj1_~w(lDg8r<<7|WItC!6hqOQX#bMk$05U)FXn=9Ydg9O+cYy2B&2A%f&p?rXa8n^ zB>H9GCz#}qwEioYq<;AP%dV86C(7e!7n)d{D{&3tFG+(Q43JV)#rgm&B%lCdlaV7f zqCfxH7wpFxa2(e2`jLBv04XCJ(#`!kk{AfIFF;Do5C8^|wCJU@03J9`VvuwIc1Ra@ z5~TluYB3{PBVi*DnJW4mi>S6S?bQ}TP?wBhi&2-iq^!Xu$zwX)!mL7KU(-ZSr;AO6 z&;mY?pSYOC!;<=)&KkJ z&baSwWcZ0af`FI9cb()105`b&=l~xTF0oPRM`{J>QG|yIdZ|-uvYrqzu{EkChez!nK>-5z%rbl9&=~fD%>!WE0@6E*vR?@ps3gSu)7BYDm0BPtd*p zFff5%PEFt#8NEiI?1fu`9Mcr{3`?6hr4Ok-Y$S_Fhl8crv*@y4@J}`tyKLsoh*h;d zND-XM;xg;xd8bW2As%=p~|v+035f^xk-b;8)>DHO>YVJ^lU%WB?Gah+O*FK zX1PR4Yp`-IN3Kzj(cWu>y~8m@@4y@$k@-BepNgW2)IvQyG4Q}~`fH2b?rN#w4hk%G zui^5<9Uoo7Mj7K>5Jylk_Pz!=(9AW}Az`VIXKBf-f5u^_=F=GOEyDxF7Qa2?Rl!BV zBbAs(W@9dkFQoA7WSau!>1Rr-la0yBT#sFxo_K*+0g$axla-A=T;~mUu}*CK!YITL zy}0P&PM+y3DfU%vFEa%Dp(Y%*mD;wvXQJ?wLpk`I7Ml!4WBO^{Qyum8c1ETYg6+W; z%i&}#%(0`jLHuE6EyrruS7ZIJ_vk_+9jd}E1e?Z7+R}#x_DuwymKCDmyp`e1>fmWZ z77zy0tI(op!77reoud?RQ}&|>Sg>FL)3;Q=b0|zGc8`T2!r>kN!R@Qd`}bvhvO(O^f~kZ&w(*(%TD z*>jmwRr^`E&1rqrRP^LoDVx+H<5?0f?sN%0J1u(qd6t@<;>I}-u1Z>~+q;ixx&V-4 z2jl^vCmvArAde4{y$SkMqQFB7uWuVy_hEZT!%;glpzJQk6Kd~lk*nR7D2EM@{_ zg6v0WgZdtzADHNJ%*fiY$OP|%JVEund}=E6LfMN>_C$KDM5D>IxN8YPt-&7gP$Qh_`_Lz8!b^HFYgYjywlGAAnQ-4hmMMQHPAsD8Qv z(|&u=_oA=b6NBT=+*Nd*bc$qOm|K*YU)6z>!p z$xI=evw_;*pYB&s=+|AWGYrltG0D=LD63Zt)6z)GPDb59rJ*8Gx4%G}^nvdZgA>b7 zBJwZJm3#y~Im@Nm^ThXKMcL)D^Pe%FL1*A{xqCfHb4?q3U-27s7$C-CT6mggnrpiB zgTb+S(6wzD1I{NgNikJ1aqEzow}eT;kZiG|_2D~_92-)#rY(zG_Gnc zPA+4v6i73aGtDinHElX=7V^H#!JOeWmHD*!>}zXKa_VxsksYu!8kSX9w3H{&t&}@b zpje20R%&XWbEUNNlvSdng`7&cWx1iZDndufRLZ7Uem)J^LS?t10%;bj$Vn= zxb7Ph6+E~ENn6Pn8=vc0y~abyljaM%?Ux5)XT2I-8%G8eKOI!;i81RiC%~iM-^)vy zdbY3Y^DOTxJwO4gPfYdhffa1VwcVvCw+wAVZ9)e1q z>IL0b`dlhaDiazd25GvJ)Sgrgb>wwbA$(FFZ3HZP*(p@_)x5$k&_Nlk*mm7dONv8Y z2rl|o82jAv@ureMX{f6;R$Yo~`Pc%Fj%C+j_ttEMH)-_2FKhT~q-f}*n2MW~PHD!N z#{ixxvh#7X`3rdA^0z*Y=tN8|exaXSmXxu)U%L1i_j)?NjZhSCQ)hNVl$V?D%oxjI z5qpWV&0@2$t5(~X{RFC%&{v_|>M4y@k!Yec2y7Ve%Jl$Qj9=4@U|I4sne@bdpIWZgMRyonT@HmDYv#Wt?R9Ox1e@VZ%_Mb zukYdebCFHv6*z~RJ&F|&ZHJ0tCzp-cED zn@{$<$GvF1hezfr*G*GVX4ap&ipH%9r`y-E*UGD|E>@c$EpA+6c8s%)E0ccq3a?%4 z1n=wFx;q@uGpS zkUd{nV;^V}sJ?V*HGu#RgFks+ALrSp&^sXaOzxg+eQaX$%gGz>u?ORSsrjEOnA4NV zdAm&|e-^g-<^49_$|J@LpM0YNp3ey#WNyCcGLJIP>L2cpe3L8d=&$QPHW$>Bai;T( zgmU`f&5fAN)U?tM_Bw=wPPT{XuuSh;YpTs*tI?4h5$CUZC{>nCeat8-DH?4HPARrt zeT&Nt)v(?EP1jl5uTwqVjw?^|qDBjwACRc#p23qzkUJELi$ik#Tf~B?*a@ zg_fF{D$*Te3pl#O8UU>RR{AexDfnky`v17ph8bJj;Wj?~JqgxIU)9<3xlbZj4eudR zrSpbu?);6Nw)2a0-d@a83IH@zC;&PYpJ}$OVEaV^sDQq*)z!3 zGx1*F7gj3sQ4!wIC|^}bvK2IQO2-gxt{;r;U}rNqvx8r&;*0j!vVjepOsbX92CW#uaNEw?yM2e>vuQ*Bb#3miYC z9$e})QWkkEybi%vzCaPp6Mk8Mc0apzS~fg3oMUJk3Qr<5J%%xe7bL5m@S*m(`7%Ok zYut-TuNINWJ=|-gvBB@$ubtL;M$P|i#9O$pTt%*&Ug`Q!uxHEj&NI!PjIV19#2cv} zQCaIVM8d}5LB-J5VY)P9MMK>@-_YvcGh*j&Qu)YTe{ReBkS3h3#>_Fday!E?dB1eL zJovELw4G;e(aNy!w4atj-B{7Lvai@Xmkb~Z8ARQ=AhR|)MO?hL1}}mvj#~3?9>#E*XAF)JysDhkg?g zVT;;I)Vw!R-O_hDt>0LFWO}Nwix9Qb{)Sq4UAf#YjAPjD(7e)n*EF~_B=r(SgFT=v z*0&oGoL)9A#*)V+fiiA=eAz%4t`+sgTj}X%V>+eo5{tEM84rT+#3`h zB0T-XD6%NB2~nv1a?O5FX~3J^zmhHTrW-(eh|qSY<;)0$Q_USNSJ7(+)KOe!MG@6S z;&HOg7uq=2sW0Q#n#UCJA4^K-MFn@y`%PIZGVilj@R~MN@(x}P5Dw0y;NG@?W8axO zJ;L{3ZWwS~DeKQ0@?*C$rb?dg>;!tKsCB%{n~AjMOSuxb^O(amIm7?^eAkm6AlkPV zt--NfkZQqsUS|2_1Ybj7_|=A$FlEL=NxVdWXaF!HMJYuxiQg(-QrkvnOq)-~ree3M zBi?^gK$^oHxW?YoS6EU$@W2!%icR6WKe@)Vqwm{qEV6dz0x)mNs>H>c(2Jt#-H-eQ_F`OPtV3^mGlp3Ze8X(0bj*dVJ8Hg(w% zylypCrw-zci9b1f<{{k`YG%6Ofcv+ruBF$deeF2DJ|Vg*IxVYwwpxg_pbwE|{uU+X zUq2y~Osf=Nsl`1%RbkNO*#tI=YL#%4^}UhU=xw-ot}@lVI-=V3>V?i*;SPs3K3f4R zH{Nrpi?MgNO!CTwdrwoYoXqf7b$!tBMtNMY?=8|89yxm8|npJ<2m z4wHq`eGBr`J7#73kz)UcjJ9*4+(=s4QC6R8+dsZTs5e`8$0zjHP}EUFpg0S^O6DdDoS0ox?2>3Mx43Y#xC7}RI zVO38@7vf}$w3d|I_gBefnHesyfjD}1cFM- zgFz5^X&G}6NQl^odY7@bBo)B_uJRvR$_IzBqXz-Na`d3TAAl?rDgy=B0e;G$UL zAw2-MUosFxmKdFX${;YVY5-BAN9s85Hv8Tv^ip*}wGU|H~RMFcAv> z)PumFLB+)~eA2&Ua?n5ggTQ3|(1U{He%qS|4(aHE!5tC6 zhK_z1Vw{QG8Wu~$9nl(z2-b45!xBOGqpwbc;ROr^jE2g{f}m&+1TAfcl10m+z)*P@ k3W~xYk#_P*^#8ZY4;Z_95HWO=V5kfTN)H5TAT;U!2gFd){{R30 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Contents.json new file mode 100644 index 000000000..ea26e0d98 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Warnen.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Icons - Warnen.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_cloud.imageset/Icons - Warnen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e97bd9197e73e6c31cb65f0cbfbde0809e206c27 GIT binary patch literal 6123 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json new file mode 100644 index 000000000..b9322bb6c --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons_Grey_Entfernen-Dark.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "original" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Icons_Grey_Entfernen-Dark.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Icons_Grey_Entfernen-Dark.pdf new file mode 100644 index 0000000000000000000000000000000000000000..60149f548b2bd6e65808506723663f8079f61815 GIT binary patch literal 48305 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Contents.json new file mode 100644 index 000000000..cf6699885 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Abstand.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Icons - Abstand.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_distance.imageset/Icons - Abstand.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e3c94dd7eadae635f89259ccab31069e71765513 GIT binary patch literal 53163 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 DiCVuD literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Contents.json new file mode 100644 index 000000000..9b78a4bf6 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Empty.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Icons - Empty.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_empty.imageset/Icons - Empty.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a3156e47885267d1277a4f57d0a28836f09bd6d3 GIT binary patch literal 5554 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json new file mode 100644 index 000000000..53726640b --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons_Grey_Error-Dark.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "original" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Icons_Grey_Error-Dark.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Icons_Grey_Error-Dark.pdf new file mode 100644 index 0000000000000000000000000000000000000000..57312e175df31005925c2e6f31fd45277f909939 GIT binary patch literal 44210 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

I3GpSTGPv?ziv+ly+gH1ti-6W_kJ< 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Contents.json new file mode 100644 index 000000000..cb74b67e6 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Home.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Icons - Home.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_home.imageset/Icons - Home.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a88f16ac95ebb20299bfe991e6a1d0e00c6e9025 GIT binary patch literal 50285 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Contents.json new file mode 100644 index 000000000..abebdc807 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Mundschutz.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Icons - Mundschutz.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_mouthMask.imageset/Icons - Mundschutz.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5fa795f2084b2dc9b6c7673a395877cf0c70f93a GIT binary patch literal 57908 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 literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Contents.json new file mode 100644 index 000000000..0ef0b2862 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Hotline.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Icons - Hotline.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_phone.imageset/Icons - Hotline.pdf new file mode 100644 index 0000000000000000000000000000000000000000..00456f278336d20702099816e92ded1cb71817ef GIT binary patch literal 4086 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 WawF5d{Bh9;85kNYBBH9T2L2cEmH^-Y literal 0 HcmV?d00001 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Contents.json new file mode 100644 index 000000000..994f4a234 --- /dev/null +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "Icons - Niesen.pdf", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "template" + } +} diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Icons - Niesen.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_sneeze.imageset/Icons - Niesen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..70f78861b906a27e7f3de253badc324e5dae5226 GIT binary patch literal 59249 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%0AO2v|bg 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 Date: Fri, 23 Oct 2020 19:42:37 +0000 Subject: [PATCH 02/17] [skip ci] version bump --- src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 8 ++++---- src/xcode/ENA/ENA/Resources/Info.plist | 2 +- src/xcode/ENA/ENATests/Info.plist | 2 +- src/xcode/ENA/ENAUITests/Info.plist | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index 54b564eb3..6a3c0201e 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -3257,7 +3257,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENACommunity.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 81; + CURRENT_PROJECT_VERSION = 82; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3417,7 +3417,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENACommunity.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 81; + CURRENT_PROJECT_VERSION = 82; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3633,7 +3633,7 @@ CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENATest.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 81; + CURRENT_PROJECT_VERSION = 82; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3673,7 +3673,7 @@ CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENA.entitlements"; CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 81; + CURRENT_PROJECT_VERSION = 82; DEVELOPMENT_TEAM = UK48F668XR; GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = "SQLITE_HAS_CODEC=1"; diff --git a/src/xcode/ENA/ENA/Resources/Info.plist b/src/xcode/ENA/ENA/Resources/Info.plist index 135eebf71..f5004e52f 100644 --- a/src/xcode/ENA/ENA/Resources/Info.plist +++ b/src/xcode/ENA/ENA/Resources/Info.plist @@ -26,7 +26,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 81 + 82 ENAPIVersion 1 ENDeveloperRegion diff --git a/src/xcode/ENA/ENATests/Info.plist b/src/xcode/ENA/ENATests/Info.plist index 4502621a0..59b154745 100644 --- a/src/xcode/ENA/ENATests/Info.plist +++ b/src/xcode/ENA/ENATests/Info.plist @@ -17,6 +17,6 @@ CFBundleShortVersionString 0.5.0 CFBundleVersion - 81 + 82 diff --git a/src/xcode/ENA/ENAUITests/Info.plist b/src/xcode/ENA/ENAUITests/Info.plist index 4502621a0..59b154745 100644 --- a/src/xcode/ENA/ENAUITests/Info.plist +++ b/src/xcode/ENA/ENAUITests/Info.plist @@ -17,6 +17,6 @@ CFBundleShortVersionString 0.5.0 CFBundleVersion - 81 + 82 From 347a02e1e76e2ce919a540aa797238396014cb65 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:23:16 +0100 Subject: [PATCH 03/17] Improve testing --- .../ENA/BE/ENAUITests/BEENAUITests.swift | 100 ++++++++++++++++-- .../BEExposureSubmissionCoordinator.swift | 12 --- src/xcode/ENA/ENA/Source/AppDelegate.swift | 15 ++- .../Models/Exposure/ExposureManager.swift | 17 ++- src/xcode/ENA/ENA/Source/SceneDelegate.swift | 21 +++- .../ExposureSubmissionCoordinating.swift | 18 +--- .../Services/Risk/Provider/RiskProvider.swift | 12 +++ .../ENA/ENA/Source/Services/Risk/Risk.swift | 16 +++ src/xcode/ENA/ENAUITests/ENAUITests.swift | 16 --- 9 files changed, 166 insertions(+), 61 deletions(-) diff --git a/src/xcode/ENA/BE/ENAUITests/BEENAUITests.swift b/src/xcode/ENA/BE/ENAUITests/BEENAUITests.swift index 006c065e9..df2755b7d 100644 --- a/src/xcode/ENA/BE/ENAUITests/BEENAUITests.swift +++ b/src/xcode/ENA/BE/ENAUITests/BEENAUITests.swift @@ -93,14 +93,14 @@ class BEENAUITests: XCTestCase { } func testSelectCountry() throws { - app.launchArguments.append(contentsOf: ["-positiveResult", "YES"]) + app.launchArguments.append(contentsOf: ["-testResult", "POSITIVE"]) app.launchArguments.append(contentsOf:[UITestingParameters.ExposureSubmission.useMock.rawValue]) app.launch() - XCTAssertTrue(app.buttons["AppStrings.Home.submitCardButton"].waitForExistence(timeout: 5.0)) + XCTAssertTrue(app.buttons["AppStrings.Home.resultCardShowResultButton"].waitForExistence(timeout: 5.0)) snapshot("ScreenShot_\(#function)_001") app.swipeUp() - app.buttons["AppStrings.Home.submitCardButton"].tap() + app.buttons["AppStrings.Home.resultCardShowResultButton"].tap() XCTAssertTrue(app.buttons["BEAppStrings.BETestResult.next"].waitForExistence(timeout: 5.0)) snapshot("ScreenShot_\(#function)_002") @@ -135,7 +135,7 @@ class BEENAUITests: XCTestCase { } func testIncreasedRisk() throws { - app.launchArguments.append(contentsOf: ["-isAtRisk", "YES"]) + app.launchArguments.append(contentsOf: ["-riskLevel", "HIGH"]) app.launch() XCTAssert(app.buttons["AppStrings.Home.rightBarButtonDescription"].waitForExistence(timeout: 5.0)) @@ -147,10 +147,33 @@ class BEENAUITests: XCTestCase { app.swipeUp() snapshot("ScreenShot_\(#function)_003") } - - // :TODO: activate these tests once the form is ready in production - - /* + + func testUnknownRisk() throws { + app.launchArguments.append(contentsOf: ["-riskLevel", "UNKNOWN"]) + app.launch() + + XCTAssert(app.buttons["AppStrings.Home.rightBarButtonDescription"].waitForExistence(timeout: 5.0)) + XCTAssertTrue(app.buttons["RiskLevelCollectionViewCell.topContainer"].waitForExistence(timeout: 5.0)) + app.buttons["RiskLevelCollectionViewCell.topContainer"].tap() + XCTAssertTrue(app.navigationBars.buttons.element(boundBy: 0).waitForExistence(timeout: 5.0)) + snapshot("ScreenShot_\(#function)_001") + app.swipeUp() + snapshot("ScreenShot_\(#function)_002") + } + + func testExposureStopped() throws { + app.launchArguments.append(contentsOf: ["-riskLevel", "INACTIVE"]) + app.launch() + + XCTAssert(app.buttons["AppStrings.Home.rightBarButtonDescription"].waitForExistence(timeout: 5.0)) + XCTAssertTrue(app.buttons["RiskLevelCollectionViewCell.topContainer"].waitForExistence(timeout: 5.0)) + app.buttons["RiskLevelCollectionViewCell.topContainer"].tap() + XCTAssertTrue(app.navigationBars.buttons.element(boundBy: 0).waitForExistence(timeout: 5.0)) + snapshot("ScreenShot_\(#function)_001") + app.swipeUp() + snapshot("ScreenShot_\(#function)_002") + } + func testWebFormWithoutSymptoms() throws { app.launchArguments.append(contentsOf: ["-openWebForm", "https://coronalert.be/en/corona-alert-form/?pcr=0000000000000000"]) app.launch() @@ -172,6 +195,65 @@ class BEENAUITests: XCTestCase { XCTAssertTrue(app.navigationBars.buttons.element(boundBy: 0).waitForExistence(timeout: 5.0)) } -*/ + + func testNegativeTestResult() throws { + app.launchArguments.append(contentsOf: ["-testResult", "NEGATIVE"]) + app.launch() + XCTAssertTrue(app.buttons["AppStrings.Home.resultCardShowResultButton"].waitForExistence(timeout: 5.0)) + snapshot("ScreenShot_\(#function)_001") + app.swipeUp() + snapshot("ScreenShot_\(#function)_002") + app.buttons["AppStrings.Home.resultCardShowResultButton"].tap() + sleep(1) + snapshot("ScreenShot_\(#function)_003") + } + + func testPendingTestResult() throws { + app.launchArguments.append(contentsOf: ["-testResult", "PENDING"]) + app.launch() + + XCTAssertTrue(app.buttons["AppStrings.Home.resultCardShowResultButton"].waitForExistence(timeout: 5.0)) + snapshot("ScreenShot_\(#function)_001") + app.swipeUp() + snapshot("ScreenShot_\(#function)_002") + app.buttons["AppStrings.Home.resultCardShowResultButton"].tap() + sleep(1) + snapshot("ScreenShot_\(#function)_003") + } + + func testPositiveTestResult() throws { + app.launchArguments.append(contentsOf: ["-testResult", "POSITIVE"]) + app.launchArguments.append(contentsOf:[UITestingParameters.ExposureSubmission.useMock.rawValue]) + app.launch() + + XCTAssertTrue(app.buttons["AppStrings.Home.resultCardShowResultButton"].waitForExistence(timeout: 5.0)) + snapshot("ScreenShot_\(#function)_001") + app.swipeUp() + snapshot("ScreenShot_\(#function)_002") + app.buttons["AppStrings.Home.resultCardShowResultButton"].tap() + sleep(1) + snapshot("ScreenShot_\(#function)_003") + + XCTAssertTrue(app.buttons["BEAppStrings.BETestResult.next"].waitForExistence(timeout: 5.0)) + } + + func testSendKeys() throws { + app.launchArguments.append(contentsOf: ["-testResult", "POSITIVE"]) + app.launchArguments.append(contentsOf:[UITestingParameters.ExposureSubmission.useMock.rawValue]) + app.launch() + + XCTAssertTrue(app.buttons["AppStrings.Home.resultCardShowResultButton"].waitForExistence(timeout: 5.0)) + app.buttons["AppStrings.Home.resultCardShowResultButton"].tap() + + XCTAssertTrue(app.buttons["BEAppStrings.BETestResult.next"].waitForExistence(timeout: 5.0)) + app.buttons["BEAppStrings.BETestResult.next"].tap() + + XCTAssertTrue(app.buttons["BEAppStrings.BEWarnOthers.next"].waitForExistence(timeout: 5.0)) + app.buttons["BEAppStrings.BEWarnOthers.next"].tap() + XCTAssertTrue(app.buttons["BEAppStrings.BESelectKeyCountries.shareIds"].waitForExistence(timeout: 5.0)) + app.buttons["BEAppStrings.BESelectKeyCountries.shareIds"].tap() + XCTAssertTrue(app.buttons["BEAppStrings.BEExposureSubmissionSuccess.button"].waitForExistence(timeout: 5.0)) + app.swipeUp() + } } diff --git a/src/xcode/ENA/BE/KeySubmission/BEExposureSubmissionCoordinator.swift b/src/xcode/ENA/BE/KeySubmission/BEExposureSubmissionCoordinator.swift index b40e6a66e..4911d6b39 100644 --- a/src/xcode/ENA/BE/KeySubmission/BEExposureSubmissionCoordinator.swift +++ b/src/xcode/ENA/BE/KeySubmission/BEExposureSubmissionCoordinator.swift @@ -180,22 +180,10 @@ class BEExposureSubmissionCoordinator : NSObject, ExposureSubmissionCoordinating } private func getInitialViewController(with result: TestResult? = nil) -> UIViewController { - #if UITESTING - if ProcessInfo.processInfo.arguments.contains("-negativeResult") { - return createTestResultViewController(with: .negative) - } - - // :BE: add positive result - if ProcessInfo.processInfo.arguments.contains("-positiveResult") { - return createTestResultViewController(with: .positive) - } - - #else // We got a test result and can jump straight into the test result view controller. if let result = result, exposureSubmissionService.hasRegistrationToken() { return createTestResultViewController(with: result) } - #endif // By default, we show the intro view. return createIntroViewController() diff --git a/src/xcode/ENA/ENA/Source/AppDelegate.swift b/src/xcode/ENA/ENA/Source/AppDelegate.swift index 0a68a2827..008003130 100644 --- a/src/xcode/ENA/ENA/Source/AppDelegate.swift +++ b/src/xcode/ENA/ENA/Source/AppDelegate.swift @@ -106,10 +106,19 @@ class AppDelegate: UIResponder, UIApplicationDelegate { ) #if UITESTING - // :BE: add positive risk - if let isAtRisk = UserDefaults.standard.value(forKey: "isAtRisk") as? String { - if isAtRisk != "NO" { + if let isAtRisk = UserDefaults.standard.value(forKey: "riskLevel") as? String { + + switch isAtRisk { + case "HIGH": provider.setHighRiskForTesting() + case "LOW": + provider.setLowRiskForTesting() + case "UNKNOWN": + provider.setUnknownRiskForTesting() + case "INACTIVE": + provider.setInactiveRiskForTesting() + default: + fatalError() } } #endif diff --git a/src/xcode/ENA/ENA/Source/Models/Exposure/ExposureManager.swift b/src/xcode/ENA/ENA/Source/Models/Exposure/ExposureManager.swift index 747ea1d65..d3a03b25b 100644 --- a/src/xcode/ENA/ENA/Source/Models/Exposure/ExposureManager.swift +++ b/src/xcode/ENA/ENA/Source/Models/Exposure/ExposureManager.swift @@ -41,9 +41,20 @@ struct ExposureManagerState { status: ENStatus = .unknown ) { #if UITESTING - self.authorized = true - self.enabled = true - self.status = .active + self.authorized = true + self.enabled = true + + + if let isExposureStopped = UserDefaults.standard.value(forKey: "isExposureStopped") as? String { + if isExposureStopped != "NO" { + self.status = .disabled + } else { + self.status = .active + } + } else { + self.status = .active + } + #else self.authorized = authorized self.enabled = enabled diff --git a/src/xcode/ENA/ENA/Source/SceneDelegate.swift b/src/xcode/ENA/ENA/Source/SceneDelegate.swift index 001eeb6e9..813d3f092 100644 --- a/src/xcode/ENA/ENA/Source/SceneDelegate.swift +++ b/src/xcode/ENA/ENA/Source/SceneDelegate.swift @@ -74,7 +74,26 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, RequiresAppDepend store.isOnboarded = (isOnboarded != "NO") } store.userNeedsToBeInformedAboutHowRiskDetectionWorks = false - + + if let argIndex = ProcessInfo.processInfo.arguments.firstIndex(of: "-testResult") { + let mobileTestId = BEMobileTestId.generate() + store.mobileTestId = mobileTestId + store.registrationToken = mobileTestId.registrationToken + + let resultType = ProcessInfo.processInfo.arguments[argIndex + 1] + switch resultType { + case "POSITIVE": + store.testResult = TestResult.positive + case "NEGATIVE": + store.testResult = TestResult.negative + case "PENDING": + store.testResult = TestResult.pending + default: + fatalError("Should never happen") + } + + } + // Test opening the app from the webform url if let argIndex = ProcessInfo.processInfo.arguments.firstIndex(of: "-openWebForm") { let urlString = ProcessInfo.processInfo.arguments[argIndex + 1] diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift index 11d4462dc..a97bf3a66 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift @@ -99,24 +99,8 @@ extension ExposureSubmissionCoordinator { } /// This method selects the correct initial view controller among the following options: - /// Option 1: (only for UITESTING) if the `-negativeResult` flag was passed, return ExposureSubmissionTestResultViewController - /// Option 2: if a test result was passed, the method checks further preconditions (e.g. the exposure submission service has a registration token) - /// and returns an ExposureSubmissionTestResultViewController. - /// Option 3: (default) return the ExposureSubmissionIntroViewController. + /// :BE: REMOVED private func getInitialViewController(with result: TestResult? = nil) -> UIViewController { - #if UITESTING - if ProcessInfo.processInfo.arguments.contains("-negativeResult") { - return createTestResultViewController(with: .negative) - } - - #else - // We got a test result and can jump straight into the test result view controller. - if let result = result, exposureSubmissionService.hasRegistrationToken() { - return createTestResultViewController(with: result) - } - #endif - - // By default, we show the intro view. return createIntroViewController() } diff --git a/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift b/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift index f7889d2fc..fc8a652cd 100644 --- a/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift +++ b/src/xcode/ENA/ENA/Source/Services/Risk/Provider/RiskProvider.swift @@ -176,10 +176,22 @@ extension RiskProvider: RiskProviding { #if UITESTING + func setUnknownRiskForTesting() { + riskLevelForTesting = Risk.mockedUknown + } + + func setLowRiskForTesting() { + riskLevelForTesting = Risk.mockedLow + } + func setHighRiskForTesting() { riskLevelForTesting = Risk.mockedIncreased } + func setInactiveRiskForTesting() { + riskLevelForTesting = Risk.mockedInactive + } + private func _requestRiskLevel(userInitiated: Bool, completion: Completion? = nil) { let risk = riskLevelForTesting diff --git a/src/xcode/ENA/ENA/Source/Services/Risk/Risk.swift b/src/xcode/ENA/ENA/Source/Services/Risk/Risk.swift index 84bd488e3..3df2249be 100644 --- a/src/xcode/ENA/ENA/Source/Services/Risk/Risk.swift +++ b/src/xcode/ENA/ENA/Source/Services/Risk/Risk.swift @@ -75,5 +75,21 @@ extension Risk { exposureDetectionDate: Date()), riskLevelHasChanged: true ) + static let mockedUknown = Risk( + level: .unknownInitial, + details: Risk.Details( + numberOfExposures: 0, + activeTracing: .init(interval: 336 * 3600), // two weeks + exposureDetectionDate: Date()), + riskLevelHasChanged: true + ) + static let mockedInactive = Risk( + level: .inactive, + details: Risk.Details( + numberOfExposures: 0, + activeTracing: .init(interval: 336 * 3600), // two weeks + exposureDetectionDate: Date()), + riskLevelHasChanged: true + ) } #endif diff --git a/src/xcode/ENA/ENAUITests/ENAUITests.swift b/src/xcode/ENA/ENAUITests/ENAUITests.swift index 263d35443..f4fef73e8 100644 --- a/src/xcode/ENA/ENAUITests/ENAUITests.swift +++ b/src/xcode/ENA/ENAUITests/ENAUITests.swift @@ -121,21 +121,5 @@ class ENAUITests: XCTestCase { } - func test_0001_Generate_Screenshots_For_AppStore_Submission() throws { - - let snapshotsActive = true - - app.setPreferredContentSizeCategory(accessibililty: .normal, size: .M) - - app.launchArguments.append(contentsOf: ["-negativeResult", "YES"]) - app.launch() - - /// ScreenShot_0006: Negative result - try? navigateThroughOnboarding() - XCTAssertTrue(app.buttons["AppStrings.Home.submitCardButton"].waitForExistence(timeout: 5.0)) - app.buttons["AppStrings.Home.submitCardButton"].tap() - - if snapshotsActive { snapshot("AppStore_0006") } - } } From 7ef04346ce1046d861c214dc986409383be4b40a Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:23:34 +0100 Subject: [PATCH 04/17] Add new screenshot folders to gitignore --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 07bc24911..65e043795 100644 --- a/.gitignore +++ b/.gitignore @@ -98,3 +98,5 @@ src/xcode/screenshots /src/xcode/.idea /src/xcode/vendor /src/xcode/.bundle +src/xcode/screenshots_dark +src/xcode/screenshots_light From f93260b3a2928f639173cf4e322f221b2b8a17ac Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:30:40 +0100 Subject: [PATCH 05/17] remove no longer used texts --- .../Localization/de.lproj/Localizable.strings | 37 ----------------- .../Localization/en.lproj/Localizable.strings | 37 ----------------- .../Localization/fr.lproj/Localizable.strings | 37 ----------------- .../Localization/nl.lproj/Localizable.strings | 37 ----------------- .../ENA/Source/View Helpers/AppStrings.swift | 40 ------------------- 5 files changed, 188 deletions(-) diff --git a/src/xcode/ENA/ENA/Resources/Localization/de.lproj/Localizable.strings b/src/xcode/ENA/ENA/Resources/Localization/de.lproj/Localizable.strings index e1789f77b..e0c78cea3 100644 --- a/src/xcode/ENA/ENA/Resources/Localization/de.lproj/Localizable.strings +++ b/src/xcode/ENA/ENA/Resources/Localization/de.lproj/Localizable.strings @@ -36,15 +36,6 @@ "ExposureDetection_LoadingText" = "Aktuelle Daten werden heruntergeladen und geprüft. Das kann mehrere Minuten dauern."; "ExposureDetection_Behavior_Title" = "Vorbeugende Maßnahmen"; "ExposureDetection_Behavior_Subtitle" = "So verhalten Sie sich richtig"; -"ExposureDetection_Guide_Hands" = "Waschen Sie Ihre Hände regelmäßig und gründlich mit Wasser und Seife."; -"ExposureDetection_Guide_Mask" = "Tragen Sie eine Nasen- und Mundmaske, wenn Sie mit anderen Personen in Kontakt kommen und wo dies erforderlich ist."; -"ExposureDetection_Guide_Distance" = "Halten Sie mindestens 1,5 m Abstand zu Personen, die sich nicht in Ihrer Nähe befinden."; -"ExposureDetection_Guide_Sneeze" = "Niesen oder husten Sie in Ihren Ellbogen oder in ein Taschentuch, das Sie unmittelbar danach wegwerfen."; -"ExposureDetection_Guide_Home" = "Gehen Sie, wenn möglich, nach Hause bzw. bleiben Sie zu Hause."; -"ExposureDetection_Guide_Hotline1" = "Haben Sie Symptome, die auf Covid-19 hinweisen können, wie z.B. Müdigkeit, Fieber, trockener Husten, Kopfschmerzen, Geschmacks- oder Geruchsverlust? Bitte kontaktieren Sie eine der folgenden Personen:"; -"ExposureDetection_Guide_Hotline2" = "Ihr Hausarzt"; -"ExposureDetection_Guide_Hotline3" = "Den medizinischen Bereitschaftsdienst auf der Nummer 1733"; -"ExposureDetection_Guide_Hotline4" = "Haben Sie keine Symptome?"; "ExposureDetection_Explanation_Title" = "Infektionsrisiko"; "ExposureDetection_Explanation_Subtitle_Inactive" = "So wird Ihr Risiko ermittelt"; "ExposureDetection_Button_Enable" = "Kontaktlogbuch aktivieren"; @@ -133,12 +124,6 @@ "ExposureSubmissionSuccess_Description" = "Dank Ihrer Mithilfe können andere gewarnt werden und entsprechend reagieren."; "ExposureSubmissionSuccess_subTitle" = "Weitere Infos:"; "ExposureSubmissionSuccess_listTitle" = "Bitte beachten:"; -"ExposureSubmissionSuccess_listItem1" = "Das Gesundheitsamt meldet sich demnächst telefonisch oder schriftlich bei Ihnen."; -"ExposureSubmissionSuccess_listItem2" = "Sie sind ansteckend. Isolieren Sie sich von anderen Menschen."; -"ExposureSubmissionSuccess_listItem2_1" = "Ihre Quarantäne dauert meistens 7 Tage. Bitte beobachten und erfassen Sie den Verlauf Ihrer Symptome genau."; -"ExposureSubmissionSuccess_listItem2_2" = "Sie werden von Ihrem Gesundheitsamt gebeten, eine Liste Ihrer Kontaktpersonen zu erstellen. Dabei sollen alle Personen erfasst werden, mit denen Sie in den zwei Tagen vor Erkrankungsbeginn engen Kontakt (unter 2 Meter, direktes Gespräch) über insgesamt 15 Minuten hatten."; -"ExposureSubmissionSuccess_listItem2_3" = "Bitte berücksichtigen Sie vor allem Personen, die nicht von der App informiert werden, da sie kein Handy haben oder die App nicht installiert haben."; -"ExposureSubmissionSuccess_listItem2_4" = "Selbst wenn Sie keine Symptome mehr haben und es Ihnen wieder gut geht, könnten Sie immer noch ansteckend sein."; "ExposureSubmissionIntroduction_Title" = "Info"; "ExposureSubmissionIntroduction_AccImageDescription" = "Ein Handy übermittelt einen positiven Testbefund verschlüsselt ins System."; "ExposureSubmissionIntroduction_Usage02" = "Da nur verschlüsselte Zufallscodes ausgetauscht werden, bleiben Sie anonym. Sie können jetzt wie folgt vorgehen:"; @@ -156,10 +141,6 @@ "ExposureSubmissionResult_testAddedDesc" = "Ihr Test wurde in Coronalert gespeichert."; "ExposureSubmissionResult_warnOthers" = "Andere warnen"; "ExposureSubmissionResult_warnOthersDesc" = "Ihre Zufallscodes der letzten Tage teilen, um andere zu schützen und die Infektionskette zu unterbrechen."; -"ExposureSubmissionResult_testPositive" = "Befund positiv"; -"ExposureSubmissionResult_testPositiveDesc" = "Ihr Testergebnis ist positiv. Dies bedeutet, dass Sie infiziert sind."; -"ExposureSubmissionResult_testNegative" = "Befund negativ"; -"ExposureSubmissionResult_testNegativeDesc" = "Der Labortest ergab für Sie keine Coronavirus SARS-CoV-2-Diagnose."; "ExposureSubmissionResult_testNegative_furtherInfos_title" = "Weitere Infos:"; "ExposureSubmissionResult_testNegative_furtherInfos_listItem1" = "Fühlen Sie sich noch angeschlagen? Fragen Sie Ihren Hausarzt, wenn Sie sich sehr krank fühlen und/oder Ihre Beschwerden sich verschlimmert haben."; "ExposureSubmissionResult_testNegative_furtherInfos_listItem2" = "Bleiben Sie bis zu Ihrer Genesung zu Hause. Wenn Sie sich Coronavirus (SARS-CoV-2) infizieren, wenn eine andere Infektion Sie schwächte, könnten Sie sehr krank werden."; @@ -256,23 +237,10 @@ "Home_Risk_High_Title" = "Erhöhtes Risiko"; "Home_Risk_Status_Check_Title" = "Prüfung läuft…"; "Home_Risk_Status_Check_Body" = "Aktuelle Daten herunterladen und prüfen. Das kann mehrere Minuten dauern."; -"Home_Thank_You_Card_Title" = "Vielen Dank!"; -"Home_Thank_You_Card_Body" = "Dank Ihrer Mithilfe können andere gewarnt werden und entsprechend reagieren."; -"Home_Thank_You_Card_Note_Title" = "Bitte beachten:"; -"Home_Thank_You_Card_Phone_Item_Title" = "Das Gesundheitsamt meldet sich demnächst telefonisch oder schriftlich bei Ihnen."; -"Home_Thank_You_Card_Home_Item_Title" = "Sie sind ansteckend. Isolieren Sie sich von anderen Menschen."; -"Home_Thank_You_Card_Further_Info_Item_Title" = "Weitere Infos:"; -"Home_Thank_You_Card_14Days_Item_Title" = "Ihre Quarantäne dauert meistens 7 Tage. Bitte beobachten und erfassen Sie den Verlauf Ihrer Symptome genau."; -"Home_Thank_You_Card_Contacts_Item_Title" = "Ihre Gesundheitsbehörde wird Sie auffordern, eine Liste der Personen zu erstellen, mit denen Sie Kontakt gehabt haben, d.h., aller Personen, mit denen Sie in den zwei Tagen, bevor Symptome auftraten, länger als 15 Minuten engen Kontakt hatten (weniger als 2 Meter, Gespräch von Angesicht zu Angesicht)."; -"Home_Thank_You_Card_App_Item_Title" = "Bitte berücksichtigen Sie vor allem Personen, die nicht von der App informiert werden, da sie kein Handy haben oder die App nicht installiert haben."; -"Home_Thank_You_Card_NoSymptoms_Item_Title" = "Auch wenn Sie keine Symptome aufweisen und sich wieder gesund fühlen, könnten Sie noch ansteckend sein."; "Home_Finding_Positive_Card_Title" = "Befund positiv"; "Home_Finding_Positive_Card_Status_Title" = "SARS-CoV-2-positiv"; "Home_Finding_Positive_Card_Status_Subtitle" = "SARS-CoV-2 wurde bei Ihnen nachgewiesen."; "Home_Finding_Positive_Card_Note_Title" = "Bitte beachten:"; -"Home_Finding_Positive_Card_Phone_Item_Title" = "Das Gesundheitsamt meldet sich demnächst telefonisch oder schriftlich bei Ihnen."; -"Home_Finding_Positive_Card_Home_Item_Title" = "Sie sind ansteckend. Isolieren Sie sich von anderen Menschen."; -"Home_Finding_Positive_Card_Share_Item_Title" = "Teilen Sie Ihre Zufallscodes, damit andere gewarnt werden können."; "Home_Finding_Positive_Card_Button" = "Weiter"; "Home_SubmitCard_Title" = "Erhalten Sie Ihr Testergebnis"; "Home_SubmitCard_Body" = "Generieren Sie den Code, um Ihr Testergebnis auf Ihrem Smartphone zu erhalten."; @@ -407,16 +375,11 @@ "Common_Deadman_AlertBody" = "Bitte denken Sie daran, die Coronalert-App regelmäßig zu öffnen, um Ihren Risikostatus zu überprüfen."; "BERiskLegend_infectionSummaryTitle" = "Statistiken"; "BERiskLegend_infectionSummaryText" = "Enthält den 7-Tage-Durchschnitt der Anzahl neuer Infektionen, Krankenhausaufenthalte und Todesfälle."; -"ExposureDetection_Guide_Hotline5" = "Bitte respektieren Sie die Quarantäne für 10 Tage."; -"ExposureDetection_Guide_GetTested" = "Lassen Sie sich so bald wie möglich testen."; "BEInfectionSummary_forWeek" = "Für die Woche"; -"ExposureSubmissionResult_testPositiveIsolationDesc" = "Sie sind infiziert und müssen daher mindestens 7 Tage isoliert zu Hause bleiben. Verlassen Sie Ihr Zuhause erst, wenn die Symptome verschwunden sind."; -"ExposureSubmissionResult_testPositiveWarnOthersDesc" = "Sie können andere Personen warnen, mit denen Sie in Kontakt gekommen sind."; "BEMobileTestIdActivator_pageLoadError" = "Beim Laden der Seite ist ein Problem aufgetreten. Bitte versuche es erneut."; "BEMobileTestIdActivator_testActivatedTitle" = "Test erfolgreich verknüpft"; "BEMobileTestIdActivator_testActivatedMessage" = "Ihr Test wurde erfolgreich mit Ihrem Smartphone verknüpft. Ab sofort können Sie Ihr Testergebnis in Coronalert erhalten."; "BEMobileTestIdActivator_linkTestToPhoneTitle" = "Verknüpfen Sie Ihr Smartphone"; -"ExposureSubmissionResult_testPositiveAutomaticDeletionDesc" = "Dieses Testergebnis wird nach 48 Stunden von Ihrem Smartphone entfernt."; "BEAppResetAfterTEKUpload_title" = "Zurücksetzen der App"; "BEAppResetAfterTEKUpload_description" = "Vielen Dank, dass Sie Ihre Daten zur Verfügung gestellt und anderen geholfen haben. Die App wird nun zurückgesetzt und alle Daten werden gelöscht. Wir empfehlen Ihnen dringend, die Anwendung während Ihrer Isolationsperiode zu deaktivieren, indem Sie das Kontaktlogbuch stoppen. Nach Ihrer Isolationsperiode können Sie die Anwendung wieder verwenden."; "language" = "de"; diff --git a/src/xcode/ENA/ENA/Resources/Localization/en.lproj/Localizable.strings b/src/xcode/ENA/ENA/Resources/Localization/en.lproj/Localizable.strings index f9aed15cf..9096735f3 100644 --- a/src/xcode/ENA/ENA/Resources/Localization/en.lproj/Localizable.strings +++ b/src/xcode/ENA/ENA/Resources/Localization/en.lproj/Localizable.strings @@ -36,15 +36,6 @@ "ExposureDetection_LoadingText" = "Current data is being downloaded and checked. This can take several minutes."; "ExposureDetection_Behavior_Title" = "Preventive measures"; "ExposureDetection_Behavior_Subtitle" = "This is what you should do"; -"ExposureDetection_Guide_Hands" = "Wash your hands regularly and thoroughly with soap and water."; -"ExposureDetection_Guide_Mask" = "Wear a nose and mouth mask when you come into contact with other people and where required."; -"ExposureDetection_Guide_Distance" = "Keep at least 1.5m away from people who are not close to you."; -"ExposureDetection_Guide_Sneeze" = "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards."; -"ExposureDetection_Guide_Home" = "If possible, please go home and stay at home."; -"ExposureDetection_Guide_Hotline1" = "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:"; -"ExposureDetection_Guide_Hotline2" = "Your general practitioner"; -"ExposureDetection_Guide_Hotline3" = "Medical out-of-hours service at 1733"; -"ExposureDetection_Guide_Hotline4" = "Do you have no symptoms?"; "ExposureDetection_Explanation_Title" = "Risk of Infection"; "ExposureDetection_Explanation_Subtitle_Inactive" = "This is how your risk is calculated"; "ExposureDetection_Button_Enable" = "Activate Exposure Logging"; @@ -133,12 +124,6 @@ "ExposureSubmissionSuccess_Description" = "Thanks to your support, other people can now be warned and respond appropriately."; "ExposureSubmissionSuccess_subTitle" = "Other information:"; "ExposureSubmissionSuccess_listTitle" = "Please note:"; -"ExposureSubmissionSuccess_listItem1" = "The public health authority will contact you within the next few days by telephone or by letter."; -"ExposureSubmissionSuccess_listItem2" = "You are infectious. Isolate yourself from other people."; -"ExposureSubmissionSuccess_listItem2_1" = "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop."; -"ExposureSubmissionSuccess_listItem2_2" = "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms."; -"ExposureSubmissionSuccess_listItem2_3" = "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app."; -"ExposureSubmissionSuccess_listItem2_4" = "Even when you no longer have any symptoms and you feel well again, you could still be infectious. "; "ExposureSubmissionIntroduction_Title" = "Information"; "ExposureSubmissionIntroduction_AccImageDescription" = "A device transmits an encrypted positive test diagnosis to the system."; "ExposureSubmissionIntroduction_Usage02" = "Since only encrypted random IDs are exchanged, you remain anonymous. You can now proceed as follows:"; @@ -156,10 +141,6 @@ "ExposureSubmissionResult_testAddedDesc" = "Your test has been stored in Coronalert."; "ExposureSubmissionResult_warnOthers" = "Warning Others"; "ExposureSubmissionResult_warnOthersDesc" = "Share your random IDs of the last days in order to protect others and break the chain of infection."; -"ExposureSubmissionResult_testPositive" = "Positive Diagnosis"; -"ExposureSubmissionResult_testPositiveDesc" = "Your test result is positive. This means that you are infected."; -"ExposureSubmissionResult_testNegative" = "Negative Diagnosis"; -"ExposureSubmissionResult_testNegativeDesc" = "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2."; "ExposureSubmissionResult_testNegative_furtherInfos_title" = "Other information:"; "ExposureSubmissionResult_testNegative_furtherInfos_listItem1" = "Still feeling unwell? If you feel very poorly and/or your symptoms have worsened, please contact your general practitioner."; "ExposureSubmissionResult_testNegative_furtherInfos_listItem2" = "Remain at home until you feel well again. If you were to get infected with coronavirus (SARS-CoV-2) whilst weakened from another infection, this could lead to a serious illness."; @@ -256,23 +237,10 @@ "Home_Risk_High_Title" = "Higher Risk"; "Home_Risk_Status_Check_Title" = "Check is running …"; "Home_Risk_Status_Check_Body" = "Current data is being downloaded and checked. This can take several minutes."; -"Home_Thank_You_Card_Title" = "Thank you!"; -"Home_Thank_You_Card_Body" = "Thanks to your support, other people can now be warned and respond appropriately."; -"Home_Thank_You_Card_Note_Title" = "Please note:"; -"Home_Thank_You_Card_Phone_Item_Title" = "The public health authority will contact you within the next few days by telephone or by letter."; -"Home_Thank_You_Card_Home_Item_Title" = "You are infectious. Isolate yourself from other people."; -"Home_Thank_You_Card_Further_Info_Item_Title" = "Other information:"; -"Home_Thank_You_Card_14Days_Item_Title" = "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop."; -"Home_Thank_You_Card_Contacts_Item_Title" = "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms."; -"Home_Thank_You_Card_App_Item_Title" = "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app."; -"Home_Thank_You_Card_NoSymptoms_Item_Title" = "Even when you no longer have any symptoms and you feel well again, you could still be infectious. "; "Home_Finding_Positive_Card_Title" = "Positive Diagnosis"; "Home_Finding_Positive_Card_Status_Title" = "SARS-CoV-2 positive"; "Home_Finding_Positive_Card_Status_Subtitle" = "You have been diagnosed with the SARS-CoV-2 virus."; "Home_Finding_Positive_Card_Note_Title" = "Please note:"; -"Home_Finding_Positive_Card_Phone_Item_Title" = "The public health authority will contact you within the next few days by telephone or by letter."; -"Home_Finding_Positive_Card_Home_Item_Title" = "You are infectious. Isolate yourself from other people."; -"Home_Finding_Positive_Card_Share_Item_Title" = "Share your random IDs so that others can be warned."; "Home_Finding_Positive_Card_Button" = "Next"; "Home_SubmitCard_Title" = "Receive your test result"; "Home_SubmitCard_Body" = "Generate the code to receive your test result on your smartphone."; @@ -407,16 +375,11 @@ "Common_Deadman_AlertBody" = "Please open Coronalert regularly so your exposure risk can be updated."; "BERiskLegend_infectionSummaryTitle" = "Statistics"; "BERiskLegend_infectionSummaryText" = "Contains the seven-day average of the number of new infections, hospitalisations and deaths."; -"ExposureDetection_Guide_Hotline5" = "Observe a 10-day quarantine."; -"ExposureDetection_Guide_GetTested" = "Get tested as soon as possible."; "BEInfectionSummary_forWeek" = "For week"; -"ExposureSubmissionResult_testPositiveIsolationDesc" = "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed."; -"ExposureSubmissionResult_testPositiveWarnOthersDesc" = "You can warn other people with whom you came into contact."; "BEMobileTestIdActivator_pageLoadError" = "There was a problem loading the page. Please try again."; "BEMobileTestIdActivator_testActivatedTitle" = "Test linked successfully"; "BEMobileTestIdActivator_testActivatedMessage" = "Your test has been successfully linked to your smartphone. From now on you will be able to receive your test result in Coronalert."; "BEMobileTestIdActivator_linkTestToPhoneTitle" = "Link your smartphone"; -"ExposureSubmissionResult_testPositiveAutomaticDeletionDesc" = "This test result will be removed from your smartphone after 48 hours."; "BEAppResetAfterTEKUpload_title" = "App Reset"; "BEAppResetAfterTEKUpload_description" = "Thank you for sharing your data and helping others. The app will now be reset and all data will be deleted. We strongly recommend that you disable the app during your isolation period by stopping exposure logging. After your isolation period, you may use the app again."; "language" = "en"; diff --git a/src/xcode/ENA/ENA/Resources/Localization/fr.lproj/Localizable.strings b/src/xcode/ENA/ENA/Resources/Localization/fr.lproj/Localizable.strings index 92e2773e6..4ca7ae2b8 100644 --- a/src/xcode/ENA/ENA/Resources/Localization/fr.lproj/Localizable.strings +++ b/src/xcode/ENA/ENA/Resources/Localization/fr.lproj/Localizable.strings @@ -36,15 +36,6 @@ "ExposureDetection_LoadingText" = "Les données actuelles sont en cours de téléchargement et de vérification. Cela peut prendre plusieurs minutes."; "ExposureDetection_Behavior_Title" = "Mesures de prévention"; "ExposureDetection_Behavior_Subtitle" = "Voici ce que vous devez faire"; -"ExposureDetection_Guide_Hands" = "Lavez-vous les mains régulièrement et soigneusement avec de l'eau et du savon."; -"ExposureDetection_Guide_Mask" = "Portez un masque nasal et buccal lorsque vous entrez en contact avec d'autres personnes et si nécessaire."; -"ExposureDetection_Guide_Distance" = "Tenez-vous à au moins 1,5 m des personnes qui ne sont pas proches de vous."; -"ExposureDetection_Guide_Sneeze" = "Éternuez ou toussez dans votre coude ou dans un mouchoir que vous jetez immédiatement après."; -"ExposureDetection_Guide_Home" = "Si possible, rentrez et restez chez vous."; -"ExposureDetection_Guide_Hotline1" = "Avez-vous des symptômes qui peuvent indiquer la présence de Covid-19, tels que fatigue, fièvre, toux sèche, maux de tête, perte de goût ou d'odorat ? Veuillez contacter l'une des personnes suivantes :"; -"ExposureDetection_Guide_Hotline2" = "Votre médecin généraliste"; -"ExposureDetection_Guide_Hotline3" = "Le service de garde médical sur le numéro 1733"; -"ExposureDetection_Guide_Hotline4" = "Vous n'avez pas de symptômes ?"; "ExposureDetection_Explanation_Title" = "Risque d'infection"; "ExposureDetection_Explanation_Subtitle_Inactive" = "C'est ainsi que votre risque est calculé."; "ExposureDetection_Button_Enable" = "Activer le journal d'exposition"; @@ -133,12 +124,6 @@ "ExposureSubmissionSuccess_Description" = "Grâce à votre soutien, d'autres personnes peuvent maintenant être averties et réagir de manière appropriée."; "ExposureSubmissionSuccess_subTitle" = "Autres informations :"; "ExposureSubmissionSuccess_listTitle" = "Veuillez noter que :"; -"ExposureSubmissionSuccess_listItem1" = "L'autorité de santé publique vous contactera dans les prochains jours par téléphone ou par courrier."; -"ExposureSubmissionSuccess_listItem2" = "Vous êtes infectieux. Isolez-vous des autres personnes."; -"ExposureSubmissionSuccess_listItem2_1" = "La période de quarantaine est généralement de 7 jours. Veuillez observer vos symptômes et surveiller leur évolution."; -"ExposureSubmissionSuccess_listItem2_2" = "Votre autorité de santé publique vous demandera d'établir une liste des personnes avec lesquelles vous avez été en contact. Cette liste doit inclure toutes les personnes avec lesquelles vous avez été en contact étroit (moins de 2 mètres, conversation en face à face) pendant plus de 15 minutes au cours des deux jours précédant l'apparition des symptômes."; -"ExposureSubmissionSuccess_listItem2_3" = "Veuillez considérer en particulier les personnes qui ne seront pas directement averties par l'application parce qu'elles ne possèdent pas de smartphone ou n'ont pas installé l'application."; -"ExposureSubmissionSuccess_listItem2_4" = "Même si vous n'avez plus de symptômes et que vous vous sentez bien, vous pouvez toujours être contagieux. "; "ExposureSubmissionIntroduction_Title" = "Informations"; "ExposureSubmissionIntroduction_AccImageDescription" = "Un smartphone transmet un diagnostic positif crypté au système."; "ExposureSubmissionIntroduction_Usage02" = "Comme seuls des identifiants aléatoires cryptés sont échangés, vous restez anonyme. Vous pouvez maintenant procéder comme suit :"; @@ -156,10 +141,6 @@ "ExposureSubmissionResult_testAddedDesc" = "Votre test a été enregistré dans l'application Coronalert."; "ExposureSubmissionResult_warnOthers" = "Avertir les autres"; "ExposureSubmissionResult_warnOthersDesc" = "Partagez vos identifiants aléatoires des derniers jours afin de protéger les autres et briser la chaîne d'infection."; -"ExposureSubmissionResult_testPositive" = "Diagnostic positif"; -"ExposureSubmissionResult_testPositiveDesc" = "Le résultat de votre test est positif. Cela signifie que vous êtes infecté."; -"ExposureSubmissionResult_testNegative" = "Diagnostic négatif"; -"ExposureSubmissionResult_testNegativeDesc" = "Le résultat du laboratoire indique que vous n'êtes pas porteur du coronavirus SRAS-CoV-2."; "ExposureSubmissionResult_testNegative_furtherInfos_title" = "Autres informations :"; "ExposureSubmissionResult_testNegative_furtherInfos_listItem1" = "Vous ne vous sentez toujours pas bien ? Si vous vous sentez très mal et/ou si vos symptômes se sont aggravés, veuillez contacter votre médecin généraliste."; "ExposureSubmissionResult_testNegative_furtherInfos_listItem2" = "Restez chez vous jusqu'à ce que vous vous sentiez à nouveau bien. Si vous deviez être infecté par le coronavirus (SRAS-CoV-2) alors que vous êtes affaibli par une autre infection, cela pourrait entraîner une maladie grave."; @@ -256,23 +237,10 @@ "Home_Risk_High_Title" = "Risque plus élevé"; "Home_Risk_Status_Check_Title" = "La vérification est en cours..."; "Home_Risk_Status_Check_Body" = "Les données actuelles sont en cours de téléchargement et de vérification. Cela peut prendre plusieurs minutes."; -"Home_Thank_You_Card_Title" = "Merci !"; -"Home_Thank_You_Card_Body" = "Grâce à votre soutien, d'autres personnes peuvent maintenant être averties et réagir de manière appropriée."; -"Home_Thank_You_Card_Note_Title" = "Veuillez noter que :"; -"Home_Thank_You_Card_Phone_Item_Title" = "L'autorité de santé publique vous contactera dans les prochains jours par téléphone ou par courrier."; -"Home_Thank_You_Card_Home_Item_Title" = "Vous êtes contagieux. Isolez-vous des autres personnes."; -"Home_Thank_You_Card_Further_Info_Item_Title" = "Autres informations :"; -"Home_Thank_You_Card_14Days_Item_Title" = "Votre période de quarantaine est généralement de 7 jours. Veuillez observer vos symptômes et surveiller leur évolution."; -"Home_Thank_You_Card_Contacts_Item_Title" = "Votre autorité de santé publique vous demandera d'établir une liste des personnes avec lesquelles vous avez été en contact. Cette liste doit inclure toutes les personnes avec lesquelles vous avez été en contact étroit (moins de 2 mètres, conversation en face à face) pendant plus de 15 minutes au cours des deux jours précédant l'apparition des symptômes."; -"Home_Thank_You_Card_App_Item_Title" = "Veuillez considérer tout particulièrement les personnes qui ne seront pas directement averties par l'application puisqu'elles ne possèdent pas de smartphone ou n'ont pas installé l'application."; -"Home_Thank_You_Card_NoSymptoms_Item_Title" = "Même si vous n'avez plus de symptômes et que vous vous sentez bien, vous pouvez toujours être contagieux. "; "Home_Finding_Positive_Card_Title" = "Diagnostic positif"; "Home_Finding_Positive_Card_Status_Title" = "SARS-CoV-2 positif"; "Home_Finding_Positive_Card_Status_Subtitle" = "Vous avez été diagnostiqué positif pour le SRAS-CoV-2."; "Home_Finding_Positive_Card_Note_Title" = "Veuillez noter que :"; -"Home_Finding_Positive_Card_Phone_Item_Title" = "L'autorité de santé publique vous contactera dans les prochains jours par téléphone ou par courrier."; -"Home_Finding_Positive_Card_Home_Item_Title" = "Vous êtes contagieux. Isolez-vous des autres personnes."; -"Home_Finding_Positive_Card_Share_Item_Title" = "Partagez vos identifiants aléatoires afin que les autres puissent être avertis."; "Home_Finding_Positive_Card_Button" = "Suivant"; "Home_SubmitCard_Title" = "Recevoir votre résultat du test"; "Home_SubmitCard_Body" = "Générez le code pour recevoir le résultat de votre test sur votre smartphone."; @@ -407,16 +375,11 @@ "Common_Deadman_AlertBody" = "Veuillez ouvrir régulièrement Coronalert afin que votre risque d'exposition puisse être mis à jour."; "BERiskLegend_infectionSummaryTitle" = "Statistiques"; "BERiskLegend_infectionSummaryText" = "Contient la moyenne sur sept jours du nombre de nouvelles infections, hospitalisations et décès."; -"ExposureDetection_Guide_Hotline5" = "Respectez une quarantaine de 10 jours."; -"ExposureDetection_Guide_GetTested" = "Faites-vous tester dès que possible."; "BEInfectionSummary_forWeek" = "Pour la semaine"; -"ExposureSubmissionResult_testPositiveIsolationDesc" = "Vous êtes infecté et vous devez donc rester à la maison en isolement pendant au moins 7 jours. Ne quittez pas votre domicile tant que les symptômes ne sont pas passés."; -"ExposureSubmissionResult_testPositiveWarnOthersDesc" = "Vous pouvez avertir les autres personnes avec lesquelles vous êtes entré en contact."; "BEMobileTestIdActivator_pageLoadError" = "Un problème est survenu lors du chargement de la page. Veuillez réessayer."; "BEMobileTestIdActivator_testActivatedTitle" = "Test lié avec succès"; "BEMobileTestIdActivator_testActivatedMessage" = "Votre test a été lié avec succès à votre smartphone. Désormais, vous pourrez recevoir votre résultat de test dans Coronalert."; "BEMobileTestIdActivator_linkTestToPhoneTitle" = "Liez votre smartphone"; -"ExposureSubmissionResult_testPositiveAutomaticDeletionDesc" = "Le résultat de ce test sera supprimé de votre smartphone après 48 heures."; "BEAppResetAfterTEKUpload_title" = "Réinitialisation de l'app"; "BEAppResetAfterTEKUpload_description" = "Merci de partager vos données et d'aider les autres. L'application va maintenant être réinitialisée et toutes les données seront supprimées. Nous vous recommandons vivement de désactiver l'application pendant votre période d'isolement en arrêtant l'enregistrement de l'exposition. Après votre période d'isolement, vous pourrez à nouveau utiliser l'application."; "language" = "fr"; diff --git a/src/xcode/ENA/ENA/Resources/Localization/nl.lproj/Localizable.strings b/src/xcode/ENA/ENA/Resources/Localization/nl.lproj/Localizable.strings index c12c809f1..65ce99726 100644 --- a/src/xcode/ENA/ENA/Resources/Localization/nl.lproj/Localizable.strings +++ b/src/xcode/ENA/ENA/Resources/Localization/nl.lproj/Localizable.strings @@ -36,15 +36,6 @@ "ExposureDetection_LoadingText" = "Actuele gegevens worden gedownload en gecontroleerd. Dit kan enkele minuten duren."; "ExposureDetection_Behavior_Title" = "Preventieve maatregelen"; "ExposureDetection_Behavior_Subtitle" = "Dit is wat je moet doen"; -"ExposureDetection_Guide_Hands" = "Was je handen regelmatig en grondig, met water en zeep."; -"ExposureDetection_Guide_Mask" = "Draag een neus- en mondmasker wanneer je in contact komt met andere mensen en waar dit verplicht is."; -"ExposureDetection_Guide_Distance" = "Houd minstens 1,5m afstand van mensen die niet tot je nauwe contacten behoren."; -"ExposureDetection_Guide_Sneeze" = "Nies of hoest in je elleboog of in een papieren zakdoek die je daarna onmiddellijk weggooit."; -"ExposureDetection_Guide_Home" = "Ga indien mogelijk naar huis en blijf thuis."; -"ExposureDetection_Guide_Hotline1" = "Heb je symptomen die kunnen wijzen op Covid-19, zoals vermoeidheid, koorts, droge hoest, hoofdpijn, verlies van smaak of reuk? Contacteer dan één van volgende personen:"; -"ExposureDetection_Guide_Hotline2" = "Je huisarts"; -"ExposureDetection_Guide_Hotline3" = "De medische wachtdienst op het nummer 1733"; -"ExposureDetection_Guide_Hotline4" = "Heb je geen symptomen?"; "ExposureDetection_Explanation_Title" = "Risico op besmetting"; "ExposureDetection_Explanation_Subtitle_Inactive" = "Zo wordt je risico berekend"; "ExposureDetection_Button_Enable" = "Blootstellingscontrole activeren"; @@ -133,12 +124,6 @@ "ExposureSubmissionSuccess_Description" = "Dankzij je steun kunnen andere mensen nu gewaarschuwd worden en op de juiste manier reageren."; "ExposureSubmissionSuccess_subTitle" = "Andere informatie:"; "ExposureSubmissionSuccess_listTitle" = "Let op:"; -"ExposureSubmissionSuccess_listItem1" = "De dienst volksgezondheid neemt binnen enkele dagen telefonisch of per brief contact met je op."; -"ExposureSubmissionSuccess_listItem2" = "Je bent besmettelijk. Ga in zelfisolatie."; -"ExposureSubmissionSuccess_listItem2_1" = "Je gaat normaal gesproken 7 dagen in quarantaine. Let goed op je symptomen en volg op hoe ze zich ontwikkelen."; -"ExposureSubmissionSuccess_listItem2_2" = "De dienst volksgezondheid zal je vragen een lijst op te stellen van mensen met wie je contact hebt gehad. Noteer iedereen met wie je gedurende meer dan 15 minuten nauw contact hebt gehad (minder dan 2 meter, persoonlijk gesprek) in de twee dagen voordat je symptomen ontwikkelde."; -"ExposureSubmissionSuccess_listItem2_3" = "Denk vooral aan mensen die niet rechtstreeks door de app op de hoogte worden gesteld, omdat ze geen smartphone hebben of de app niet hebben geïnstalleerd."; -"ExposureSubmissionSuccess_listItem2_4" = "Zelfs als je geen symptomen meer hebt en je je weer goed voelt, kan je nog steeds besmettelijk zijn."; "ExposureSubmissionIntroduction_Title" = "Informatie"; "ExposureSubmissionIntroduction_AccImageDescription" = "Een toestel stuurt een gecodeerde positieve diagnose naar het systeem."; "ExposureSubmissionIntroduction_Usage02" = "Omdat alleen versleutelde willekeurige ID's worden uitgewisseld, blijf je anoniem. Je gaat als volgt te werk:"; @@ -156,10 +141,6 @@ "ExposureSubmissionResult_testAddedDesc" = "Je test is opgeslagen in Coronalert."; "ExposureSubmissionResult_warnOthers" = "Anderen waarschuwen"; "ExposureSubmissionResult_warnOthersDesc" = "Deel je willekeurige ID's van de voorbije dagen om anderen te beschermen en de infectieketen te doorbreken."; -"ExposureSubmissionResult_testPositive" = "Positieve diagnose"; -"ExposureSubmissionResult_testPositiveDesc" = "Je testresultaat is positief. Dit betekent dat je besmet bent."; -"ExposureSubmissionResult_testNegative" = "Negatieve diagnose"; -"ExposureSubmissionResult_testNegativeDesc" = "Het laboratoriumresultaat wijst er niet op dat je het coronavirus SARS-CoV-2 hebt."; "ExposureSubmissionResult_testNegative_furtherInfos_title" = "Andere informatie:"; "ExposureSubmissionResult_testNegative_furtherInfos_listItem1" = "Voel je je nog steeds niet goed? Als je je erg slecht voelt en/of als je klachten verergerd zijn, neem dan contact op met je huisarts."; "ExposureSubmissionResult_testNegative_furtherInfos_listItem2" = "Blijf thuis tot je je weer goed voelt. Als je besmet zou raken met het coronavirus (SARS-CoV-2) terwijl je verzwakt bent door een andere infectie, kan dit leiden tot een ernstige ziekte."; @@ -256,23 +237,10 @@ "Home_Risk_High_Title" = "Verhoogd risico "; "Home_Risk_Status_Check_Title" = "Controle is bezig ..."; "Home_Risk_Status_Check_Body" = "Actuele gegevens worden gedownload en gecontroleerd. Dit kan enkele minuten duren."; -"Home_Thank_You_Card_Title" = "Dank u wel!"; -"Home_Thank_You_Card_Body" = "Dankzij je medewerking kunnen andere mensen nu gewaarschuwd worden en op de juiste manier reageren."; -"Home_Thank_You_Card_Note_Title" = "Let op:"; -"Home_Thank_You_Card_Phone_Item_Title" = "De dienst volksgezondheid neemt binnen enkele dagen telefonisch of per brief contact met u op."; -"Home_Thank_You_Card_Home_Item_Title" = "Je bent besmettelijk. Ga in zelfisolatie."; -"Home_Thank_You_Card_Further_Info_Item_Title" = "Andere informatie:"; -"Home_Thank_You_Card_14Days_Item_Title" = "Je gaat normaal gesproken 7 dagen in quarantaine. Let goed op je symptomen en volg op hoe ze zich ontwikkelen."; -"Home_Thank_You_Card_Contacts_Item_Title" = "De dienst volksgezondheid zal je vragen een lijst op te stellen van mensen met wie je contact hebt gehad. Noteer iedereen met wie je gedurende meer dan 15 minuten nauw contact hebt gehad (minder dan 2 meter, persoonlijk gesprek) in de twee dagen voordat je symptomen ontwikkelde."; -"Home_Thank_You_Card_App_Item_Title" = "Denk vooral aan mensen die niet rechtstreeks door de app op de hoogte worden gesteld, omdat ze geen smartphone hebben of de app niet hebben geïnstalleerd."; -"Home_Thank_You_Card_NoSymptoms_Item_Title" = "Zelfs als je geen symptomen meer hebt en zich weer goed voelt, kan je nog steeds besmettelijk zijn."; "Home_Finding_Positive_Card_Title" = "Positieve diagnose"; "Home_Finding_Positive_Card_Status_Title" = "SARS-CoV-2-positief"; "Home_Finding_Positive_Card_Status_Subtitle" = "Je testte positief op het SARS-CoV-2-virus."; "Home_Finding_Positive_Card_Note_Title" = "Let op:"; -"Home_Finding_Positive_Card_Phone_Item_Title" = "De dienst volksgezondheid neemt binnen enkele dagen telefonisch of per brief contact met u op."; -"Home_Finding_Positive_Card_Home_Item_Title" = "Je bent besmettelijk. Ga in zelfisolatie."; -"Home_Finding_Positive_Card_Share_Item_Title" = "Deel je willekeurige ID's, zodat anderen gewaarschuwd kunnen worden."; "Home_Finding_Positive_Card_Button" = "Volgende"; "Home_SubmitCard_Title" = "Ontvang je testresultaat"; "Home_SubmitCard_Body" = "Genereer de code om je testresultaat op je smartphone te ontvangen."; @@ -407,16 +375,11 @@ "Common_Deadman_AlertBody" = "Open Coronalert regelmatig zodat uw blootstellingsrisico kan worden bijgewerkt."; "BERiskLegend_infectionSummaryTitle" = "Statistieken"; "BERiskLegend_infectionSummaryText" = "Bevat het zevendaagse gemiddelde van het aantal nieuwe infecties, ziekenhuisopnames en sterfgevallen."; -"ExposureDetection_Guide_Hotline5" = "Respecteer 10 dagen quarantaine."; -"ExposureDetection_Guide_GetTested" = "Laat je zo snel mogelijk testen."; "BEInfectionSummary_forWeek" = "Voor week"; -"ExposureSubmissionResult_testPositiveIsolationDesc" = "Je bent besmet en daarom moet je minstens 7 dagen thuis in isolatie blijven. Verlaat je huis niet tot de symptomen voorbij zijn."; -"ExposureSubmissionResult_testPositiveWarnOthersDesc" = "Je kan andere personen met wie je in contact kwam waarschuwen."; "BEMobileTestIdActivator_pageLoadError" = "Er is een probleem opgetreden bij het laden van de pagina. Probeer het a.u.b. opnieuw."; "BEMobileTestIdActivator_testActivatedTitle" = "Test succesvol gekoppeld"; "BEMobileTestIdActivator_testActivatedMessage" = "Je test is succesvol gekoppeld aan je smartphone. Vanaf nu kan je je testresultaat ontvangen in Coronalert."; "BEMobileTestIdActivator_linkTestToPhoneTitle" = "Koppel je smartphone"; -"ExposureSubmissionResult_testPositiveAutomaticDeletionDesc" = "Dit testresultaat wordt na 48 uur van uw smartphone verwijderd."; "BEAppResetAfterTEKUpload_title" = "App Reset"; "BEAppResetAfterTEKUpload_description" = "Bedankt voor het delen van je gegevens en het helpen van anderen. De app wordt nu gereset en alle gegevens worden verwijderd. We raden je sterk aan om de app uit te schakelen tijdens je isolatieperiode door het stoppen van de blootstellingsregistratie. Na je isolatieperiode kan je de app weer gebruiken."; "language" = "nl"; diff --git a/src/xcode/ENA/ENA/Source/View Helpers/AppStrings.swift b/src/xcode/ENA/ENA/Source/View Helpers/AppStrings.swift index 0efa4668b..30939c898 100644 --- a/src/xcode/ENA/ENA/Source/View Helpers/AppStrings.swift +++ b/src/xcode/ENA/ENA/Source/View Helpers/AppStrings.swift @@ -100,14 +100,7 @@ enum AppStrings { static let procedure = NSLocalizedString("ExposureSubmissionResult_Procedure", comment: "") static let testAdded = NSLocalizedString("ExposureSubmissionResult_testAdded", comment: "") static let warnOthers = NSLocalizedString("ExposureSubmissionResult_warnOthers", comment: "") - static let testPositive = NSLocalizedString("ExposureSubmissionResult_testPositive", comment: "") static let testAddedDesc = NSLocalizedString("ExposureSubmissionResult_testAddedDesc", comment: "") - static let testPositiveDesc = NSLocalizedString("ExposureSubmissionResult_testPositiveDesc", comment: "") - static let testPositiveIsolationDesc = NSLocalizedString("ExposureSubmissionResult_testPositiveIsolationDesc", comment: "") - static let testPositiveWarnOthersDesc = NSLocalizedString("ExposureSubmissionResult_testPositiveWarnOthersDesc", comment: "") - static let testPositiveAutomaticDeletionDesc = NSLocalizedString("ExposureSubmissionResult_testPositiveAutomaticDeletionDesc", comment: "") - static let testNegative = NSLocalizedString("ExposureSubmissionResult_testNegative", comment: "") - static let testNegativeDesc = NSLocalizedString("ExposureSubmissionResult_testNegativeDesc", comment: "") static let testInvalid = NSLocalizedString("ExposureSubmissionResult_testInvalid", comment: "") static let testInvalidDesc = NSLocalizedString("ExposureSubmissionResult_testInvalidDesc", comment: "") static let testPending = NSLocalizedString("ExposureSubmissionResult_testPending", comment: "") @@ -186,13 +179,7 @@ enum AppStrings { static let button = NSLocalizedString("ExposureSubmissionSuccess_Button", comment: "") static let description = NSLocalizedString("ExposureSubmissionSuccess_Description", comment: "") static let listTitle = NSLocalizedString("ExposureSubmissionSuccess_listTitle", comment: "") - static let listItem1 = NSLocalizedString("ExposureSubmissionSuccess_listItem1", comment: "") - static let listItem2 = NSLocalizedString("ExposureSubmissionSuccess_listItem2", comment: "") static let subTitle = NSLocalizedString("ExposureSubmissionSuccess_subTitle", comment: "") - static let listItem2_1 = NSLocalizedString("ExposureSubmissionSuccess_listItem2_1", comment: "") - static let listItem2_2 = NSLocalizedString("ExposureSubmissionSuccess_listItem2_2", comment: "") - static let listItem2_3 = NSLocalizedString("ExposureSubmissionSuccess_listItem2_3", comment: "") - static let listItem2_4 = NSLocalizedString("ExposureSubmissionSuccess_listItem2_4", comment: "") } enum ExposureSubmissionError { @@ -239,18 +226,6 @@ enum AppStrings { static let behaviorTitle = NSLocalizedString("ExposureDetection_Behavior_Title", comment: "") static let behaviorSubtitle = NSLocalizedString("ExposureDetection_Behavior_Subtitle", comment: "") - static let guideHands = NSLocalizedString("ExposureDetection_Guide_Hands", comment: "") - static let guideMask = NSLocalizedString("ExposureDetection_Guide_Mask", comment: "") - static let guideDistance = NSLocalizedString("ExposureDetection_Guide_Distance", comment: "") - static let guideSneeze = NSLocalizedString("ExposureDetection_Guide_Sneeze", comment: "") - static let getTested = NSLocalizedString("ExposureDetection_Guide_GetTested", comment: "") - static let guideHome = NSLocalizedString("ExposureDetection_Guide_Home", comment: "") - static let guideHotline1 = NSLocalizedString("ExposureDetection_Guide_Hotline1", comment: "") - static let guideHotline2 = NSLocalizedString("ExposureDetection_Guide_Hotline2", comment: "") - static let guideHotline3 = NSLocalizedString("ExposureDetection_Guide_Hotline3", comment: "") - static let guideHotline4 = NSLocalizedString("ExposureDetection_Guide_Hotline4", comment: "") - static let guideHotline5 = NSLocalizedString("ExposureDetection_Guide_Hotline5", comment: "") - static let explanationTitle = NSLocalizedString("ExposureDetection_Explanation_Title", comment: "") static let explanationSubtitleActive = NSLocalizedString("ExposureDetection_Explanation_Subtitle_Active", comment: "") static let explanationSubtitleInactive = NSLocalizedString("ExposureDetection_Explanation_Subtitle_Inactive", comment: "") @@ -452,26 +427,11 @@ enum AppStrings { static let riskCardStatusCheckTitle = NSLocalizedString("Home_Risk_Status_Check_Title", comment: "") static let riskCardStatusCheckBody = NSLocalizedString("Home_Risk_Status_Check_Body", comment: "") - // Thank you card - static let thankYouCardTitle = NSLocalizedString("Home_Thank_You_Card_Title", comment: "") - static let thankYouCardBody = NSLocalizedString("Home_Thank_You_Card_Body", comment: "") - static let thankYouCardNoteTitle = NSLocalizedString("Home_Thank_You_Card_Note_Title", comment: "") - static let thankYouCardPhoneItemTitle = NSLocalizedString("Home_Thank_You_Card_Phone_Item_Title", comment: "") - static let thankYouCardHomeItemTitle = NSLocalizedString("Home_Thank_You_Card_Home_Item_Title", comment: "") - static let thankYouCardFurtherInfoItemTitle = NSLocalizedString("Home_Thank_You_Card_Further_Info_Item_Title", comment: "") - static let thankYouCard14DaysItemTitle = NSLocalizedString("Home_Thank_You_Card_14Days_Item_Title", comment: "") - static let thankYouCardContactsItemTitle = NSLocalizedString("Home_Thank_You_Card_Contacts_Item_Title", comment: "") - static let thankYouCardAppItemTitle = NSLocalizedString("Home_Thank_You_Card_App_Item_Title", comment: "") - static let thankYouCardNoSymptomsItemTitle = NSLocalizedString("Home_Thank_You_Card_NoSymptoms_Item_Title", comment: "") - // Finding positive card static let findingPositiveCardTitle = NSLocalizedString("Home_Finding_Positive_Card_Title", comment: "") static let findingPositiveCardStatusTitle = NSLocalizedString("Home_Finding_Positive_Card_Status_Title", comment: "") static let findingPositiveCardStatusSubtitle = NSLocalizedString("Home_Finding_Positive_Card_Status_Subtitle", comment: "") static let findingPositiveCardNoteTitle = NSLocalizedString("Home_Finding_Positive_Card_Note_Title", comment: "") - static let findingPositivePhoneItemTitle = NSLocalizedString("Home_Finding_Positive_Card_Phone_Item_Title", comment: "") - static let findingPositiveHomeItemTitle = NSLocalizedString("Home_Finding_Positive_Card_Home_Item_Title", comment: "") - static let findingPositiveShareItemTitle = NSLocalizedString("Home_Finding_Positive_Card_Share_Item_Title", comment: "") static let findingPositiveCardButton = NSLocalizedString("Home_Finding_Positive_Card_Button", comment: "") // Submit Card From f89f02c1d511e3e95c869ef653b44089730ed992 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:32:05 +0100 Subject: [PATCH 06/17] Update assets --- .../dt_delete.imageset/Contents.json | 2 +- .../Icons_Grey_Entfernen-Dark.pdf | Bin 48305 -> 6303 bytes .../dt_exclamation.imageset/Contents.json | 2 +- .../Icons_Grey_Error-Dark.pdf | Bin 44210 -> 6019 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json index b9322bb6c..f7278b2df 100644 --- a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Contents.json @@ -11,6 +11,6 @@ }, "properties" : { "preserves-vector-representation" : true, - "template-rendering-intent" : "original" + "template-rendering-intent" : "template" } } diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Icons_Grey_Entfernen-Dark.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_delete.imageset/Icons_Grey_Entfernen-Dark.pdf index 60149f548b2bd6e65808506723663f8079f61815..d32fb619705cb219e46ec29a788b9def010e4a00 100644 GIT binary patch literal 6303 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 XV`mp^4t?KXs5nTJ6bMw*R3iNs1K84D literal 48305 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 diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json index 53726640b..0e7f0eb1d 100644 --- a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json +++ b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Contents.json @@ -11,6 +11,6 @@ }, "properties" : { "preserves-vector-representation" : true, - "template-rendering-intent" : "original" + "template-rendering-intent" : "template" } } diff --git a/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Icons_Grey_Error-Dark.pdf b/src/xcode/ENA/ENA/Resources/Assets/Assets.xcassets/Dynamic Text/dt_exclamation.imageset/Icons_Grey_Error-Dark.pdf index 57312e175df31005925c2e6f31fd45277f909939..858a20379938738f2938b6901fbc68520e2c18ef 100644 GIT binary patch literal 6019 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 literal 44210 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

I3GpSTGPv?ziv+ly+gH1ti-6W_kJ< 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 From a40e7a1f2792325151ec91a5a4a5f26290b34217 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:32:22 +0100 Subject: [PATCH 07/17] Add screenshot generation for dark mode --- src/xcode/fastlane/Snapfile | 1 - 1 file changed, 1 deletion(-) diff --git a/src/xcode/fastlane/Snapfile b/src/xcode/fastlane/Snapfile index 9818924f6..117114778 100644 --- a/src/xcode/fastlane/Snapfile +++ b/src/xcode/fastlane/Snapfile @@ -23,7 +23,6 @@ languages([ scheme("ENAUITests") # Where should the resulting screenshots be stored? -output_directory("./screenshots") # remove the '#' to clear all previously generated screenshots before creating new ones clear_previous_screenshots(true) From bd59666cdabf772bbd2078eba61a95f5b7b352f0 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:33:07 +0100 Subject: [PATCH 08/17] Add screenshot generation for dark mode --- src/xcode/fastlane/Fastfile | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/xcode/fastlane/Fastfile b/src/xcode/fastlane/Fastfile index 801fc11d5..4f0309871 100644 --- a/src/xcode/fastlane/Fastfile +++ b/src/xcode/fastlane/Fastfile @@ -153,7 +153,14 @@ platform :ios do end lane :screenshots do - capture_screenshots + capture_screenshots( + output_directory: "./screenshots_dark", + dark_mode: true + ) + + capture_screenshots( + output_directory: "./screenshots_light" + ) end desc "Build and upload for App Store" From 3e21ecdb0c121eeb7d8983cc88789b1537158260 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:34:34 +0100 Subject: [PATCH 09/17] Add dynamic texts (still missing the correct endpoint URL) --- .../BEDynamicTextDownloadService.swift | 84 ++++ .../BE/DynamicText/BEDynamicTextService.swift | 246 +++++++++++- .../BE/DynamicText/Model/BEDynamicText.swift | 91 +++++ .../Model/BEDynamicTextLanguage.swift | 41 ++ .../Model/BEDynamicTextScreenName.swift | 6 +- .../Model/BEDynamicTextScreenSection.swift | 30 +- .../BEDynamicTextScreenSectionName.swift | 2 +- .../BEDynamicTextScreenSection+Cells.swift | 105 +++++ .../__tests__/BEDynamicTextTests.swift | 228 +++++++++++ .../missingLanguageDynamicTexts.json | 128 +++++++ .../__tests__/missingScreensDynamicTexts.json | 166 ++++++++ .../__tests__/testDownloadedTexts.json | 228 +++++++++++ .../__tests__/testDynamicTexts.json | 228 +++++++++++ .../__tests__/wrongStructureDynamicTexts.json | 229 +++++++++++ .../BEFileManager.swift} | 13 +- src/xcode/ENA/BE/Extensions/BEUIImage.swift | 4 + src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 72 +++- src/xcode/ENA/ENA/Resources/dynamicTexts.json | 358 +++++++++++++----- src/xcode/ENA/ENA/Source/AppDelegate.swift | 15 +- src/xcode/ENA/ENA/Source/Client/Client.swift | 5 + .../HTTPClient+Configuration.swift | 12 + .../Client/HTTP Client/HTTPClient.swift | 21 + .../Client/__tests__/Mocks/ClientMock.swift | 9 + ...eFindingPositiveRiskCellConfigurator.swift | 27 +- .../HomeHighRiskCellConfigurator.swift | 6 +- .../HomeInactiveRiskCellConfigurator.swift | 7 +- .../HomeLowRiskCellConfigurator.swift | 8 +- .../HomeThankYouRiskCellConfigurator.swift | 47 +-- .../HomeUnknown48hRiskCellConfigurator.swift | 4 +- .../HomeRiskImageItemViewConfigurator.swift | 8 +- src/xcode/ENA/ENA/Source/SceneDelegate.swift | 7 + ...ViewController+DynamicTableViewModel.swift | 51 ++- ...osureSubmissionSuccessViewController.swift | 74 ++-- ...reSubmissionTestResultViewController.swift | 100 ++--- 34 files changed, 2337 insertions(+), 323 deletions(-) create mode 100644 src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicText.swift create mode 100644 src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextLanguage.swift create mode 100644 src/xcode/ENA/BE/DynamicText/View/BEDynamicTextScreenSection+Cells.swift create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/missingLanguageDynamicTexts.json create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/missingScreensDynamicTexts.json create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/testDownloadedTexts.json create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/testDynamicTexts.json create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/wrongStructureDynamicTexts.json rename src/xcode/ENA/BE/{DynamicText/Model/BEDynamicTextScreen.swift => Extensions/BEFileManager.swift} (66%) diff --git a/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift b/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift new file mode 100644 index 000000000..dfb882320 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift @@ -0,0 +1,84 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +class BEDynamicTextDownloadService { + typealias DynamicTextLoader = () -> Void + + private static + + var dynamicText:BEDynamicText! + + private let client: Client + private var textService: BEDynamicTextService + private let outdatedTimeInterval: TimeInterval + + init(client: Client, textService: BEDynamicTextService, textOutdatedTimeInterval:TimeInterval = TimeInterval(24 * 60 * 60)) { + self.client = client + self.textService = textService + self.outdatedTimeInterval = textOutdatedTimeInterval + } + + func downloadTextsIfNeeded(completion: @escaping DynamicTextLoader) { + if + let attributes = try? FileManager.default.attributesOfItem(atPath: BEDynamicTextService.cacheURL.path), + let modificationDate = attributes[.modificationDate] as? Date { + + if modificationDate.timeIntervalSinceNow > -self.outdatedTimeInterval { + DispatchQueue.main.async { + log(message: "Cached file \(modificationDate) too recent. Will not update") + completion() + } + + return + } + } + + downloadTexts(completion) + } + + /// Download the texts from the server + /// We ignore errors here in the callback since there isn't much we can do and we'll fallback to the previous version of the text anyway + private func downloadTexts(_ completion: @escaping DynamicTextLoader) { + log(message: "Downloading texts") + client.getDynamicTexts { result in + + /// Since dynamic texts are used from the main thread (UI) we make sure there is no other thread manipulating + /// files that while they are being read from the main thread. + DispatchQueue.main.async { + switch result { + case .success(let data): + do { + try self.textService.updateTexts(data) + log(message: "Download texts success") + } catch { + logError(message: "Failed saving text from server: \(error.localizedDescription)") + } + case .failure(let error): + logError(message: "Failed loading text from server: \(error.localizedDescription)") + } + + completion() + } + } + } + + +} diff --git a/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift b/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift index 68ead4424..72aaf4764 100644 --- a/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift +++ b/src/xcode/ENA/BE/DynamicText/BEDynamicTextService.swift @@ -19,20 +19,250 @@ import Foundation +enum BEDynamicTextServiceError: Error { + case cachingError + case missingLanguage + case missingScreen + case missingScreenSection + case wrongSectionFields +} + class BEDynamicTextService { - typealias DynamicTextLoader = (Error?) -> Void + static let cacheURL = FileManager.default.applicationSupportURL("dynamicTexts.json") + static let defaultBundleURL = Bundle.main.url(forResource: "dynamicTexts", withExtension: "json")! + + var dynamicText:BEDynamicText! + var bundleURL: URL! - var screens:[BEDynamicTextScreenName:BEDynamicTextScreen] + // if this throws there is a big issue with the data stored inside the bundle + init(_ defaultFileURL:URL = defaultBundleURL) { + bundleURL = defaultFileURL + + do { + try copyBundleToCacheIfMoreRecent() + dynamicText = try Self.loadTextFromCache() + return + } catch { + logError(message: "\(error.localizedDescription)") + } - private let client: Client - private let store: Store + // if that fails, copy the data in the bundle and try again + do { + try copyBundleTextsToCache() + dynamicText = try Self.loadTextFromCache() + } catch { + logError(message: "\(error.localizedDescription)") + fatalError("Should never happen") + } + } + + func updateTexts(_ data: Data) throws { + if let text = try? Self.loadTextFromData(data) { + do { + try data.write(to: Self.cacheURL, options: .atomic) + dynamicText = text + } catch { + } + } else { + logError(message: "Failed updating text") + } + } + + func screen(_ screenName: BEDynamicTextScreenName, language: BEDynamicTextLanguage = .current) -> [BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]] { + guard + let screen = dynamicText.structure[screenName], + let translations = dynamicText.texts[language] else { + fatalError("Should never happen") + } + + let returnValue = screen.mapValues{ sections in + return sections.map{ $0.translate(translations) } + } + + return returnValue + } + + func sections(_ screenName: BEDynamicTextScreenName, section: BEDynamicTextScreenSectionName,language: BEDynamicTextLanguage = .current) -> [BEDynamicTextScreenSection] { + let dynamicScreen = screen(screenName, language: language) + guard + let dynamicSections: [BEDynamicTextScreenSection] = dynamicScreen[section] else { + fatalError("Should never happen") + } - init(client: Client, store: Store) { - self.client = client - self.store = store + return dynamicSections } - func loadTexts(completion: @escaping DynamicTextLoader) { + static func validateLoadedText(_ dynamicText: BEDynamicText) throws { + try BEDynamicTextLanguage.allCases.forEach{ language in + if dynamicText.texts[language] == nil { + logError(message: "Missing language \(language)") + throw BEDynamicTextServiceError.missingLanguage + } + } + + try BEDynamicTextScreenName.allCases.forEach{ screenName in + if dynamicText.structure[screenName] == nil { + logError(message: "Missing screen \(screenName)") + throw BEDynamicTextServiceError.missingScreen + } + } + + guard + let standard = dynamicText.structure[.standard], + let highRisk = dynamicText.structure[.highRisk], + let positiveTestResultCard = dynamicText.structure[.positiveTestResultCard], + let positiveTestResult = dynamicText.structure[.positiveTestResult], + let negativeTestResult = dynamicText.structure[.negativeTestResult], + let thankYou = dynamicText.structure[.thankYou] else { + throw BEDynamicTextServiceError.missingScreen + } + + try validateRiskScreen(standard) + try validateRiskScreen(highRisk) + try validatePositiveTestResultCard(positiveTestResultCard) + try validateTestResult(positiveTestResult) + try validateTestResult(negativeTestResult) + try validateThankYou(thankYou) + } + + private func copyBundleToCacheIfMoreRecent() throws { + let sourceAttributes = try FileManager.default.attributesOfItem(atPath: bundleURL.path) + let cacheAttributes = try FileManager.default.attributesOfItem(atPath: Self.cacheURL.path) + + guard + let sourceModificationDate = sourceAttributes[.modificationDate] as? Date, + let destinationModificationDate = cacheAttributes[.modificationDate] as? Date else { + throw BEDynamicTextServiceError.cachingError + } + + if sourceModificationDate > destinationModificationDate { + log(message:"Bundle file is more recent than cache. Overwriting cache") + try copyBundleTextsToCache() + } + } + + private func copyBundleTextsToCache() throws { + log(message: "Copy text to cache") + guard + let data = try? Data(contentsOf: bundleURL) + else { + fatalError("Should never happen") + } + + try data.write(to: Self.cacheURL, options: .atomic) + + // also copy the modification date + let sourceAttributes = try FileManager.default.attributesOfItem(atPath: bundleURL.path) + var destinationAttributes = try FileManager.default.attributesOfItem(atPath: Self.cacheURL.path) + + guard let modificationDate = sourceAttributes[.modificationDate] as? Date else { + throw BEDynamicTextServiceError.cachingError + } + + destinationAttributes[.modificationDate] = modificationDate + + try FileManager.default.setAttributes(destinationAttributes, ofItemAtPath: Self.cacheURL.path) + } + + static private func loadTextFromCache() throws -> BEDynamicText { + log(message: "Load text from cache") + let data = try Data(contentsOf: Self.cacheURL) + + return try loadTextFromData(data) + } + + static private func loadTextFromData(_ data: Data) throws -> BEDynamicText { + let decoder = JSONDecoder() + let result = try decoder.decode(BEDynamicText.self, from: data) + + // do some sanity checks + try Self.validateLoadedText(result) + + return result + } + + static private func validateRiskScreen(_ screen:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]) throws { + guard let preventiveMeasures = screen[.preventiveMeasures] else { + throw BEDynamicTextServiceError.missingScreenSection + } + + try preventiveMeasures.forEach{ entry in + if entry.icon == nil || entry.text == nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + + if entry.title != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + } + } + + static private func validatePositiveTestResultCard(_ screen:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]) throws { + guard let explanation = screen[.explanation] else { + throw BEDynamicTextServiceError.missingScreenSection + } + + try explanation.forEach{ entry in + if entry.icon == nil || entry.text == nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + + if entry.title != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + + if entry.paragraphs != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + } + } + + static private func validateTestResult(_ screen:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]) throws { + guard let explanation = screen[.explanation] else { + throw BEDynamicTextServiceError.missingScreenSection + } + + try explanation.forEach{ entry in + if entry.icon == nil || entry.text == nil || entry.title == nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + } + } + + static private func validateThankYou(_ screen:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]) throws { + guard + let pleaseNote = screen[.pleaseNote], + let otherInformation = screen[.otherInformation] else { + throw BEDynamicTextServiceError.missingScreenSection + } + + try pleaseNote.forEach{ entry in + if entry.icon == nil || entry.text == nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + + if entry.title != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + + if entry.paragraphs != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + } + try otherInformation.forEach{ entry in + if entry.icon != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + if entry.text != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + if entry.title != nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + if entry.paragraphs == nil { + throw BEDynamicTextServiceError.wrongSectionFields + } + } } } diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicText.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicText.swift new file mode 100644 index 000000000..ebd3c006b --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicText.swift @@ -0,0 +1,91 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +struct BEDynamicText { + let structure: [BEDynamicTextScreenName:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]] + let texts:[BEDynamicTextLanguage:[String:String]] + + enum CodingKeys: String, CodingKey { + case structure + case texts + } +} + + +/// If Swift would support string enums in dictionary keys we wouldn't have to implement all this ... + +extension BEDynamicTextLanguage: CodingKey { + +} + +extension BEDynamicTextScreenName: CodingKey { + +} + +extension BEDynamicText: Decodable { + + init(from decoder: Decoder) throws { + let container = try decoder.container(keyedBy: CodingKeys.self) + let structureContainer = try container.nestedContainer(keyedBy: BEDynamicTextScreenName.self, forKey: .structure) + + var structureDictionary = [BEDynamicTextScreenName: [BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]]() + + for enumKey in structureContainer.allKeys { + guard let screenName = BEDynamicTextScreenName(rawValue: enumKey.rawValue) else { + let context = DecodingError.Context(codingPath: [], debugDescription: "Could not parse json key to a BEDynamicTextScreenName object") + throw DecodingError.dataCorrupted(context) + } + let value = try structureContainer.decode([String:[BEDynamicTextScreenSection]].self, forKey: enumKey) + var convertedValue = [BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]]() + + try value.keys.forEach{ key in + guard let enumKey = BEDynamicTextScreenSectionName(rawValue: key) else { + let context = DecodingError.Context(codingPath: [], debugDescription: "Could not parse json key to a BEDynamicTextScreenSectionName object") + throw DecodingError.dataCorrupted(context) + } + guard let keyValue = value[key] else { + let context = DecodingError.Context(codingPath: [], debugDescription: "Cast error") + throw DecodingError.dataCorrupted(context) + } + convertedValue[enumKey] = keyValue + } + + structureDictionary[screenName] = convertedValue + } + + self.structure = structureDictionary + + let textContainer = try container.nestedContainer(keyedBy: BEDynamicTextLanguage.self, forKey: .texts) + var textDictionary = [BEDynamicTextLanguage: [String:String]]() + + for enumKey in textContainer.allKeys { + guard let languageName = BEDynamicTextLanguage(rawValue: enumKey.rawValue) else { + let context = DecodingError.Context(codingPath: [], debugDescription: "Could not parse json key to a BEDynamicTextLanguage object") + throw DecodingError.dataCorrupted(context) + } + + let value = try textContainer.decode([String:String].self, forKey: enumKey) + textDictionary[languageName] = value + } + + self.texts = textDictionary + } +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextLanguage.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextLanguage.swift new file mode 100644 index 000000000..2b0d00573 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextLanguage.swift @@ -0,0 +1,41 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation + +/// Make sure these stay in sync with the JSON +enum BEDynamicTextLanguage: String, Decodable, CaseIterable { + case english = "en" + case french = "fr" + case dutch = "nl" + case german = "de" +} + +extension BEDynamicTextLanguage { + static var current: BEDynamicTextLanguage { + let translatedLanguage = NSLocalizedString("language", comment:"") + + guard let result = BEDynamicTextLanguage(rawValue: translatedLanguage) else { + logError(message: "Wrong language \(translatedLanguage), reverting to default") + return .english + } + + return result + } +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift index 16b4164d4..862c23549 100644 --- a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenName.swift @@ -20,10 +20,12 @@ import Foundation /// Make sure these stay in sync with the JSON -enum BEDynamicTextScreenName: String, Decodable { - case lowRisk = "lowRisk" +enum BEDynamicTextScreenName: String, Decodable, CaseIterable { + case standard = "standard" case highRisk = "highRisk" + case positiveTestResultCard = "positiveTestResultCard" case positiveTestResult = "positiveTestResult" case negativeTestResult = "negativeTestResult" case thankYou = "thankYou" } + diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift index 44ddd7d81..0078fe318 100644 --- a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSection.swift @@ -22,9 +22,9 @@ import UIKit struct BEDynamicTextScreenSection : Decodable { let icon:UIImage? - let title:String? - let text:String? - let paragraphs:[String]? + var title:String? + var text:String? + var paragraphs:[String]? enum CodingKeys: String, CodingKey { case icon @@ -36,9 +36,9 @@ struct BEDynamicTextScreenSection : Decodable { init(from decoder: Decoder) throws { let container = try decoder.container(keyedBy: CodingKeys.self) - title = try container.decode(String.self, forKey: .title) - text = try container.decode(String.self, forKey: .text) - paragraphs = try container.decode([String].self, forKey: .paragraphs) + title = try? container.decode(String.self, forKey: .title) + text = try? container.decode(String.self, forKey: .text) + paragraphs = try? container.decode([String].self, forKey: .paragraphs) if let iconTitle = try? container.decode(String.self, forKey: .icon) { icon = UIImage(named: iconTitle) @@ -46,4 +46,22 @@ struct BEDynamicTextScreenSection : Decodable { icon = nil } } + + func translate(_ translationDict: [String:String]) -> BEDynamicTextScreenSection { + var result = self + + if let title = self.title { + result.title = translationDict[title] ?? title + } + + if let text = self.text { + result.text = translationDict[text] ?? text + } + + if let paragraphs = self.paragraphs { + result.paragraphs = paragraphs.map{ translationDict[$0] ?? $0 } + } + + return result + } } diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift index 919b645f0..a194a8386 100644 --- a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift +++ b/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreenSectionName.swift @@ -20,7 +20,7 @@ import Foundation /// Make sure these stay in sync with the JSON -enum BEDynamicTextScreenSectionName: String, Decodable { +enum BEDynamicTextScreenSectionName: String, Decodable, CodingKey { case explanation = "explanation" case pleaseNote = "pleaseNote" case otherInformation = "otherInformation" diff --git a/src/xcode/ENA/BE/DynamicText/View/BEDynamicTextScreenSection+Cells.swift b/src/xcode/ENA/BE/DynamicText/View/BEDynamicTextScreenSection+Cells.swift new file mode 100644 index 000000000..931c70fa8 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/View/BEDynamicTextScreenSection+Cells.swift @@ -0,0 +1,105 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import Foundation +import UIKit + +/// What a mess, but changing the app into a fully generic dynamic text system on all screens would take a very long time + +extension BEDynamicTextScreenSection { + func buildRiskLevelDynamicCell() -> DynamicCell { + if var paragraphs = self.paragraphs { + if let text = self.text { + paragraphs.insert(text, at: 0) + } + return DynamicCell.guide(image: self.icon, text: paragraphs) + } + + if let text = self.text { + return DynamicCell.guide(text: text, image: self.icon) + } + + + return DynamicCell.guide(image: self.icon, text: []) + } +} + +extension BEDynamicTextScreenSection { + func buildSuccessViewControllerStepCells(iconTint:UIColor? = nil) -> [DynamicCell] { + if let text = self.text, + let icon = self.icon { + return [ + ExposureSubmissionDynamicCell.stepCell( + style:.body, + title: text, + icon: icon, + iconTint: iconTint, + hairline: .none, + bottomSpacing: .normal + ) + ] + } + + if let paragraphs = self.paragraphs { + return paragraphs.map{ + ExposureSubmissionDynamicCell.stepCell( + bulletPoint: $0, + hairline: .topAttached + ) + } + } + + fatalError("Should never happen") + } +} + +extension BEDynamicTextScreenSection { + func buildTestResultStepCells(iconTint:UIColor? = nil) -> [DynamicCell] { + guard + let title = self.title else { + if let paragraphs = self.paragraphs { + /// Only paragraphs, make a bullet point list + return paragraphs.map{ ExposureSubmissionDynamicCell.stepCell(bulletPoint: $0)} + } else { + fatalError("Should not happen") + } + } + + let firstCell = ExposureSubmissionDynamicCell.stepCell( + title: title, + description: self.text, + icon: self.icon, + iconTint: iconTint, + hairline: .topAttached + ) + + var result = [firstCell] + + if let paragraphs = self.paragraphs { + result.append(contentsOf: paragraphs.map{ + ExposureSubmissionDynamicCell.stepCell( + bulletPoint: $0, + hairline: .topAttached + ) + }) + } + + return result + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift b/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift new file mode 100644 index 000000000..29b5447a3 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift @@ -0,0 +1,228 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import XCTest +@testable import ENA + +class BEDynamicTextTests: XCTestCase { + + private func createDynamicTextService(_ filename: String) -> BEDynamicTextService { + let testBundle = Bundle(for: type(of: self)) + let url = testBundle.url(forResource: filename, withExtension: "json")! + + return BEDynamicTextService(url) + } + + private func loadDynamicText(_ filename: String) -> BEDynamicText { + let testBundle = Bundle(for: type(of: self)) + let url = testBundle.url(forResource: filename, withExtension: "json")! + let decoder = JSONDecoder() + let data = try! Data(contentsOf: url) + let result = try! decoder.decode(BEDynamicText.self, from: data) + + return result + } + + private func getFirstScreenSectionEntry(service:BEDynamicTextService, name: BEDynamicTextScreenName, section: BEDynamicTextScreenSectionName, language:BEDynamicTextLanguage = .current) -> BEDynamicTextScreenSection { + let screen = service.screen(name, language: language) + XCTAssertNotNil(screen[section]) + XCTAssertNotNil(screen[section]![0]) + + return screen[.preventiveMeasures]![0] + } + + override class func tearDown() { + BEDynamicTextService.deleteCachedFile() + } + + /// test the texts in the bundle + func testLoadTexts() throws { + let url = Bundle.main.url(forResource: "dynamicTexts", withExtension: "json")! + let data = try Data(contentsOf: url) + + let decoder = JSONDecoder() + + XCTAssertNotNil(try decoder.decode(BEDynamicText.self, from: data)) + } + + func testMissingLanguage() throws { + let dynamicText = loadDynamicText("missingLanguageDynamicTexts") + XCTAssertThrowsError(try BEDynamicTextService.validateLoadedText(dynamicText)) + } + + func testMissingScreen() throws { + let dynamicText = loadDynamicText("missingScreensDynamicTexts") + XCTAssertThrowsError(try BEDynamicTextService.validateLoadedText(dynamicText)) + } + + func testWrongStructure() throws { + let dynamicText = loadDynamicText("wrongStructureDynamicTexts") + XCTAssertThrowsError(try BEDynamicTextService.validateLoadedText(dynamicText)) + } + + func testLoadScreen() throws { + BEDynamicTextService.deleteCachedFile() + let service = createDynamicTextService("testDynamicTexts") + let sectionEntry = getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + } + + /// Test that the texts keep on working after a download error + func testDownloadTextsWithError() throws { + BEDynamicTextService.deleteCachedFile() + let client = ClientMock() + let service = createDynamicTextService("testDynamicTexts") + let downloader = BEDynamicTextDownloadService(client: client, textService: service) + let expectation = self.expectation(description: "finished") + + downloader.downloadTextsIfNeeded { + let sectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + expectation.fulfill() + } + + waitForExpectations(timeout: 0.2) + } + + /// Test that the texts keep on working after a download of non-JSON data + func testDownloadTextsCorruptData() throws { + BEDynamicTextService.deleteCachedFile() + let client = ClientMock() + let service = createDynamicTextService("testDynamicTexts") + let downloader = BEDynamicTextDownloadService(client: client, textService: service) + let expectation = self.expectation(description: "finished") + + client.dynamicTextsDownloadData = Data() + + downloader.downloadTextsIfNeeded { + let sectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + expectation.fulfill() + } + + waitForExpectations(timeout: 0.2) + } + + /// Test that the texts are updated after a download + func testDownloadTexts() throws { + BEDynamicTextService.deleteCachedFile() + let client = ClientMock() + let service = createDynamicTextService("testDynamicTexts") + let downloader = BEDynamicTextDownloadService(client: client, textService: service, textOutdatedTimeInterval: 1) + let expectation = self.expectation(description: "finished") + + let testBundle = Bundle(for: type(of: self)) + let url = testBundle.url(forResource: "testDownloadedTexts", withExtension: "json")! + + client.dynamicTextsDownloadData = try Data(contentsOf: url) + + downloader.downloadTextsIfNeeded { + let englishSectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures, language: .english) + let frenchSectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures, language: .french) + XCTAssertEqual(englishSectionEntry.text, "If possible, hide on the moon.") + XCTAssertEqual(frenchSectionEntry.text, "Si possible, cachez-vous sur la lune.") + expectation.fulfill() + } + + waitForExpectations(timeout: 0.2) + } + + /// Test that the texts are not updated after a download which does not contain all screens + func testDownloadMissingTexts() throws { + BEDynamicTextService.deleteCachedFile() + let client = ClientMock() + let service = createDynamicTextService("testDynamicTexts") + let downloader = BEDynamicTextDownloadService(client: client, textService: service, textOutdatedTimeInterval: 1) + let expectation = self.expectation(description: "finished") + + let testBundle = Bundle(for: type(of: self)) + let url = testBundle.url(forResource: "missingScreensDynamicTexts", withExtension: "json")! + + client.dynamicTextsDownloadData = try Data(contentsOf: url) + + downloader.downloadTextsIfNeeded { + let sectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + expectation.fulfill() + } + + waitForExpectations(timeout: 0.2) + } + + /// Test that the texts are downloaded, cached and that a new instance uses the cached version + func testDownloadAndUseCache() throws { + BEDynamicTextService.deleteCachedFile() + let client = ClientMock() + let service = createDynamicTextService("testDynamicTexts") + let downloader = BEDynamicTextDownloadService(client: client, textService: service, textOutdatedTimeInterval: 1) + let expectation = self.expectation(description: "finished") + + let sectionEntry = getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + + + let testBundle = Bundle(for: type(of: self)) + let url = testBundle.url(forResource: "testDownloadedTexts", withExtension: "json")! + + client.dynamicTextsDownloadData = try Data(contentsOf: url) + + downloader.downloadTextsIfNeeded { + let sectionEntry = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures, language: .english) + XCTAssertEqual(sectionEntry.text, "If possible, hide on the moon.") + + let service = self.createDynamicTextService("testDynamicTexts") + let sectionEntryFromCache = self.getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures, language: .english) + + XCTAssertEqual(sectionEntryFromCache.text, "If possible, hide on the moon.") + + + expectation.fulfill() + } + + waitForExpectations(timeout: 2) + } + + /// Test that corrupting the cached file will reuse the file from the bundle + func testCorruptCache() throws { + BEDynamicTextService.corruptCache() + let service = createDynamicTextService("testDynamicTexts") + let sectionEntry = getFirstScreenSectionEntry(service: service, name: .highRisk, section: .preventiveMeasures) + XCTAssertEqual(sectionEntry.text, "If possible, please go home and stay at home.") + } +} + + +extension BEDynamicTextService { + static func deleteCachedFile() { + do { + try FileManager.default.removeItem(at: cacheURL) + } catch { + logError(message: "\(error.localizedDescription)") + } + } + + static func corruptCache() { + do { + let data = "hahahaha".data(using: .utf8)! + try data.write(to: cacheURL) + } catch { + logError(message: "\(error.localizedDescription)") + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/missingLanguageDynamicTexts.json b/src/xcode/ENA/BE/DynamicText/__tests__/missingLanguageDynamicTexts.json new file mode 100644 index 000000000..838da38c4 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/missingLanguageDynamicTexts.json @@ -0,0 +1,128 @@ +{ + "structure": { + "standard": { + "preventiveMeasures": [ + { + "icon": "dt_washHands", + "text": "standard.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "standard.preventiveMeasures.2.text" + }, + { + "icon": "dt_mouthMask", + "text": "standard.preventiveMeasures.3.text" + }, + { + "icon": "dt_sneeze", + "text": "standard.preventiveMeasures.4.text" + } + ] + }, + "highRisk": { + "preventiveMeasures": [ + { + "icon": "dt_home", + "text": "highRisk.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "highRisk.preventiveMeasures.2.text" + }, + { + "icon": "dt_phone", + "text": "highRisk.preventiveMeasures.3.text", + "paragraphs": [ + "highRisk.preventiveMeasures.3.paragraphs.1", + "highRisk.preventiveMeasures.3.paragraphs.2" + ] + }, + { + "icon": "dt_exclamation", + "text": "highRisk.preventiveMeasures.4.text", + "paragraphs": [ + "highRisk.preventiveMeasures.4.paragraphs.1" + ] + } + ] + }, + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text", + "paragraphs": [ + "positiveTestResult.explanation.1.paragraphs.1", + "positiveTestResult.explanation.1.paragraphs.2", + "positiveTestResult.explanation.1.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [{ + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ]}] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/missingScreensDynamicTexts.json b/src/xcode/ENA/BE/DynamicText/__tests__/missingScreensDynamicTexts.json new file mode 100644 index 000000000..578c8d5bc --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/missingScreensDynamicTexts.json @@ -0,0 +1,166 @@ +{ + "structure": { + + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text", + "paragraphs": [ + "positiveTestResult.explanation.1.paragraphs.1", + "positiveTestResult.explanation.1.paragraphs.2", + "positiveTestResult.explanation.1.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_exclamatio", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [{ + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ]}] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "fr": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "de": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "nl": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/testDownloadedTexts.json b/src/xcode/ENA/BE/DynamicText/__tests__/testDownloadedTexts.json new file mode 100644 index 000000000..85fb57436 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/testDownloadedTexts.json @@ -0,0 +1,228 @@ +{ + "structure": { + "standard": { + "preventiveMeasures": [ + { + "icon": "dt_washHands", + "text": "standard.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "standard.preventiveMeasures.2.text" + }, + { + "icon": "dt_mouthMask", + "text": "standard.preventiveMeasures.3.text" + }, + { + "icon": "dt_sneeze", + "text": "standard.preventiveMeasures.4.text" + } + ] + }, + "highRisk": { + "preventiveMeasures": [ + { + "icon": "dt_home", + "text": "highRisk.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "highRisk.preventiveMeasures.2.text" + }, + { + "icon": "dt_phone", + "text": "highRisk.preventiveMeasures.3.text", + "paragraphs": [ + "highRisk.preventiveMeasures.3.paragraphs.1", + "highRisk.preventiveMeasures.3.paragraphs.2" + ] + }, + { + "icon": "dt_exclamation", + "text": "highRisk.preventiveMeasures.4.text", + "paragraphs": [ + "highRisk.preventiveMeasures.4.paragraphs.1" + ] + } + ] + }, + "positiveTestResultCard": { + "explanation": [ + { + "icon": "dt_phone", + "text": "positiveTestResultCard.explanation.1.text" + }, + { + "icon": "dt_home", + "text": "positiveTestResultCard.explanation.2.text" + }, + { + "icon": "dt_exclamation", + "text": "positiveTestResultCard.explanation.3.text" + } + ] + }, + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text", + "paragraphs": [ + "positiveTestResult.explanation.1.paragraphs.1", + "positiveTestResult.explanation.1.paragraphs.2", + "positiveTestResult.explanation.1.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [{ + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ]}] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, hide on the moon.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "fr": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "Si possible, cachez-vous sur la lune.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "de": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "I don't speak German", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "nl": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "Indien mogelijk, verstop jezelf op de maan", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/testDynamicTexts.json b/src/xcode/ENA/BE/DynamicText/__tests__/testDynamicTexts.json new file mode 100644 index 000000000..5ace46e77 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/testDynamicTexts.json @@ -0,0 +1,228 @@ +{ + "structure": { + "standard": { + "preventiveMeasures": [ + { + "icon": "dt_washHands", + "text": "standard.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "standard.preventiveMeasures.2.text" + }, + { + "icon": "dt_mouthMask", + "text": "standard.preventiveMeasures.3.text" + }, + { + "icon": "dt_sneeze", + "text": "standard.preventiveMeasures.4.text" + } + ] + }, + "highRisk": { + "preventiveMeasures": [ + { + "icon": "dt_home", + "text": "highRisk.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "highRisk.preventiveMeasures.2.text" + }, + { + "icon": "dt_phone", + "text": "highRisk.preventiveMeasures.3.text", + "paragraphs": [ + "highRisk.preventiveMeasures.3.paragraphs.1", + "highRisk.preventiveMeasures.3.paragraphs.2" + ] + }, + { + "icon": "dt_exclamation", + "text": "highRisk.preventiveMeasures.4.text", + "paragraphs": [ + "highRisk.preventiveMeasures.4.paragraphs.1" + ] + } + ] + }, + "positiveTestResultCard": { + "explanation": [ + { + "icon": "dt_phone", + "text": "positiveTestResultCard.explanation.1.text" + }, + { + "icon": "dt_home", + "text": "positiveTestResultCard.explanation.2.text" + }, + { + "icon": "dt_exclamation", + "text": "positiveTestResultCard.explanation.3.text" + } + ] + }, + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text", + "paragraphs": [ + "positiveTestResult.explanation.1.paragraphs.1", + "positiveTestResult.explanation.1.paragraphs.2", + "positiveTestResult.explanation.1.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [{ + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ]}] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "fr": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "de": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "nl": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/wrongStructureDynamicTexts.json b/src/xcode/ENA/BE/DynamicText/__tests__/wrongStructureDynamicTexts.json new file mode 100644 index 000000000..7b3559d12 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/wrongStructureDynamicTexts.json @@ -0,0 +1,229 @@ +{ + "structure": { + "standard": { + "preventiveMeasures": [ + { + "icon": "dt_washHands", + "text": "standard.preventiveMeasures.1.text", + "title":"WASH YOUR HANDS" + }, + { + "icon": "dt_distance", + "text": "standard.preventiveMeasures.2.text" + }, + { + "icon": "dt_mouthMask", + "text": "standard.preventiveMeasures.3.text" + }, + { + "icon": "dt_sneeze", + "text": "standard.preventiveMeasures.4.text" + } + ] + }, + "highRisk": { + "preventiveMeasures": [ + { + "icon": "dt_home", + "text": "highRisk.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "highRisk.preventiveMeasures.2.text" + }, + { + "icon": "dt_phone", + "text": "highRisk.preventiveMeasures.3.text", + "paragraphs": [ + "highRisk.preventiveMeasures.3.paragraphs.1", + "highRisk.preventiveMeasures.3.paragraphs.2" + ] + }, + { + "icon": "dt_exclamation", + "text": "highRisk.preventiveMeasures.4.text", + "paragraphs": [ + "highRisk.preventiveMeasures.4.paragraphs.1" + ] + } + ] + }, + "positiveTestResultCard": { + "explanation": [ + { + "icon": "dt_phone", + "text": "positiveTestResultCard.explanation.1.text" + }, + { + "icon": "dt_home", + "text": "positiveTestResultCard.explanation.2.text" + }, + { + "icon": "dt_exclamation", + "text": "positiveTestResultCard.explanation.3.text" + } + ] + }, + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text", + "paragraphs": [ + "positiveTestResult.explanation.1.paragraphs.1", + "positiveTestResult.explanation.1.paragraphs.2", + "positiveTestResult.explanation.1.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_exclamation", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [{ + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ]}] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "fr": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "de": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "nl": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResult.explanation.1.title": "Positive Diagnosis", + "positiveTestResult.explanation.1.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.1.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.1.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.1.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Negative Diagnosis", + "negativeTestResult.explanation.1.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.2.title": "Delete Test", + "negativeTestResult.explanation.2.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone or by letter.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + } + } +} diff --git a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift b/src/xcode/ENA/BE/Extensions/BEFileManager.swift similarity index 66% rename from src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift rename to src/xcode/ENA/BE/Extensions/BEFileManager.swift index f00cfb899..d6501a8ad 100644 --- a/src/xcode/ENA/BE/DynamicText/Model/BEDynamicTextScreen.swift +++ b/src/xcode/ENA/BE/Extensions/BEFileManager.swift @@ -19,6 +19,15 @@ import Foundation -struct BEDynamicTextScreen : Decodable { - let sections:[BEDynamicTextScreenSectionName:[BEDynamicTextScreenSection]] +extension FileManager { + func applicationSupportURL(_ file: String? = nil) -> URL { + let urls = self.urls(for: .applicationSupportDirectory, in: .userDomainMask) + let applicationSupportURL = urls[0] + + if let filePath = file { + return applicationSupportURL.appendingPathComponent(filePath) + } + + return applicationSupportURL + } } diff --git a/src/xcode/ENA/BE/Extensions/BEUIImage.swift b/src/xcode/ENA/BE/Extensions/BEUIImage.swift index f760618d5..8844c06f9 100644 --- a/src/xcode/ENA/BE/Extensions/BEUIImage.swift +++ b/src/xcode/ENA/BE/Extensions/BEUIImage.swift @@ -23,6 +23,10 @@ import CoreImage extension UIImage { + convenience init(forceNamed: String) { + self.init(named: forceNamed)! + } + static func generateQRCode(_ contents:String,size:CGFloat) -> UIImage { let context = CIContext() let filter = CIFilter(name: "CIQRCodeGenerator")! diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index 66f979340..c4e1cb6a8 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -252,13 +252,23 @@ A92076E624ED407A00AE8748 /* BEFakeRequestsExecutor.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076E524ED407A00AE8748 /* BEFakeRequestsExecutor.swift */; }; A92076E924ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076E824ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift */; }; A92076EC24ED542900AE8748 /* BEMockURLSession.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92076EB24ED542900AE8748 /* BEMockURLSession.swift */; }; - A9221A312542C1F200853CEF /* BEDynamicTextService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A302542C1F200853CEF /* BEDynamicTextService.swift */; }; + A9221A312542C1F200853CEF /* BEDynamicTextDownloadService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A302542C1F200853CEF /* BEDynamicTextDownloadService.swift */; }; A9221A332542C2C200853CEF /* dynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A322542C2C200853CEF /* dynamicTexts.json */; }; - A9221A362542F02900853CEF /* BEDynamicTextScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */; }; A9221A382542F06E00853CEF /* BEDynamicTextScreenSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */; }; A9221A3A2542F10300853CEF /* BEDynamicTextScreenName.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */; }; A9221A3C2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */; }; A9221A3E2543524900853CEF /* KeychainHelperTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A3D2543524900853CEF /* KeychainHelperTests.swift */; }; + A9221A402544606800853CEF /* BEDynamicText.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A3F2544606800853CEF /* BEDynamicText.swift */; }; + A9221A422546C39700853CEF /* BEFileManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A412546C39700853CEF /* BEFileManager.swift */; }; + A9221A452546F3BF00853CEF /* BEDynamicTextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A442546F3BF00853CEF /* BEDynamicTextTests.swift */; }; + A9221A472546F62900853CEF /* BEDynamicTextService.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A462546F62900853CEF /* BEDynamicTextService.swift */; }; + A9221A492546FB1A00853CEF /* BEDynamicTextLanguage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A482546FB1A00853CEF /* BEDynamicTextLanguage.swift */; }; + A9221A4C25470F7700853CEF /* missingLanguageDynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A4A25470F7700853CEF /* missingLanguageDynamicTexts.json */; }; + A9221A4D25470F7700853CEF /* missingScreensDynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A4B25470F7700853CEF /* missingScreensDynamicTexts.json */; }; + A9221A502547222E00853CEF /* testDynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A4E2547216300853CEF /* testDynamicTexts.json */; }; + A9221A5225472CB300853CEF /* testDownloadedTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A5125472CB200853CEF /* testDownloadedTexts.json */; }; + A9221A572549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A562549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift */; }; + A9221A592549B92600853CEF /* wrongStructureDynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A582549B92600853CEF /* wrongStructureDynamicTexts.json */; }; A929A71724DC3EE50039B997 /* BEHTTPClientSubmitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */; }; A92B66AD251CBF9B00F9B8DD /* BEUILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */; }; A935EE5624E0060400B33B66 /* BEENAUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935EE5524E0060400B33B66 /* BEENAUITests.swift */; }; @@ -739,13 +749,23 @@ A92076E524ED407A00AE8748 /* BEFakeRequestsExecutor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEFakeRequestsExecutor.swift; sourceTree = ""; }; A92076E824ED41F400AE8748 /* BEFakeRequestsExecutorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEFakeRequestsExecutorTests.swift; sourceTree = ""; }; A92076EB24ED542900AE8748 /* BEMockURLSession.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEMockURLSession.swift; sourceTree = ""; }; - A9221A302542C1F200853CEF /* BEDynamicTextService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextService.swift; sourceTree = ""; }; + A9221A302542C1F200853CEF /* BEDynamicTextDownloadService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextDownloadService.swift; sourceTree = ""; }; A9221A322542C2C200853CEF /* dynamicTexts.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = dynamicTexts.json; sourceTree = ""; }; - A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreen.swift; sourceTree = ""; }; A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenSection.swift; sourceTree = ""; }; A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenName.swift; sourceTree = ""; }; A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextScreenSectionName.swift; sourceTree = ""; }; A9221A3D2543524900853CEF /* KeychainHelperTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeychainHelperTests.swift; sourceTree = ""; }; + A9221A3F2544606800853CEF /* BEDynamicText.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicText.swift; sourceTree = ""; }; + A9221A412546C39700853CEF /* BEFileManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEFileManager.swift; sourceTree = ""; }; + A9221A442546F3BF00853CEF /* BEDynamicTextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextTests.swift; sourceTree = ""; }; + A9221A462546F62900853CEF /* BEDynamicTextService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextService.swift; sourceTree = ""; }; + A9221A482546FB1A00853CEF /* BEDynamicTextLanguage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEDynamicTextLanguage.swift; sourceTree = ""; }; + A9221A4A25470F7700853CEF /* missingLanguageDynamicTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = missingLanguageDynamicTexts.json; sourceTree = ""; }; + A9221A4B25470F7700853CEF /* missingScreensDynamicTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = missingScreensDynamicTexts.json; sourceTree = ""; }; + A9221A4E2547216300853CEF /* testDynamicTexts.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = testDynamicTexts.json; sourceTree = ""; }; + A9221A5125472CB200853CEF /* testDownloadedTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = testDownloadedTexts.json; sourceTree = ""; }; + A9221A562549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BEDynamicTextScreenSection+Cells.swift"; sourceTree = ""; }; + A9221A582549B92600853CEF /* wrongStructureDynamicTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wrongStructureDynamicTexts.json; sourceTree = ""; }; A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEHTTPClientSubmitTests.swift; sourceTree = ""; }; A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEUILabel.swift; sourceTree = ""; }; A935EE5524E0060400B33B66 /* BEENAUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEENAUITests.swift; sourceTree = ""; }; @@ -1758,8 +1778,11 @@ A9221A2F2542C1DD00853CEF /* DynamicText */ = { isa = PBXGroup; children = ( + A9221A532548494500853CEF /* View */, + A9221A432546F3A900853CEF /* __tests__ */, A9221A342542F00C00853CEF /* Model */, - A9221A302542C1F200853CEF /* BEDynamicTextService.swift */, + A9221A302542C1F200853CEF /* BEDynamicTextDownloadService.swift */, + A9221A462546F62900853CEF /* BEDynamicTextService.swift */, ); path = DynamicText; sourceTree = ""; @@ -1767,14 +1790,36 @@ A9221A342542F00C00853CEF /* Model */ = { isa = PBXGroup; children = ( - A9221A352542F02900853CEF /* BEDynamicTextScreen.swift */, A9221A372542F06E00853CEF /* BEDynamicTextScreenSection.swift */, A9221A392542F10300853CEF /* BEDynamicTextScreenName.swift */, A9221A3B2542F1AB00853CEF /* BEDynamicTextScreenSectionName.swift */, + A9221A3F2544606800853CEF /* BEDynamicText.swift */, + A9221A482546FB1A00853CEF /* BEDynamicTextLanguage.swift */, ); path = Model; sourceTree = ""; }; + A9221A432546F3A900853CEF /* __tests__ */ = { + isa = PBXGroup; + children = ( + A9221A582549B92600853CEF /* wrongStructureDynamicTexts.json */, + A9221A4A25470F7700853CEF /* missingLanguageDynamicTexts.json */, + A9221A4B25470F7700853CEF /* missingScreensDynamicTexts.json */, + A9221A4E2547216300853CEF /* testDynamicTexts.json */, + A9221A5125472CB200853CEF /* testDownloadedTexts.json */, + A9221A442546F3BF00853CEF /* BEDynamicTextTests.swift */, + ); + path = __tests__; + sourceTree = ""; + }; + A9221A532548494500853CEF /* View */ = { + isa = PBXGroup; + children = ( + A9221A562549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift */, + ); + path = View; + sourceTree = ""; + }; A929A71324DC3C470039B997 /* __tests__ */ = { isa = PBXGroup; children = ( @@ -1938,6 +1983,7 @@ A95EE81B24FD0A6A00AFECBD /* BEUIStackView.swift */, A94BF68825012C5B009404D2 /* BEENTemporaryExposureKey.swift */, A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */, + A9221A412546C39700853CEF /* BEFileManager.swift */, ); path = Extensions; sourceTree = ""; @@ -2704,10 +2750,15 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + A9221A4C25470F7700853CEF /* missingLanguageDynamicTexts.json in Resources */, + A9221A5225472CB300853CEF /* testDownloadedTexts.json in Resources */, + A9221A4D25470F7700853CEF /* missingScreensDynamicTexts.json in Resources */, + A9221A502547222E00853CEF /* testDynamicTexts.json in Resources */, B1F8AE482479B4C30093A588 /* api-response-day-2020-05-16 in Resources */, 01678E9C249A5F08003B048B /* testStore.sqlite in Resources */, A189E45F248C325E001D0996 /* de-config in Resources */, A9D9D1AB24D54A9F009BEDD9 /* countries.json in Resources */, + A9221A592549B92600853CEF /* wrongStructureDynamicTexts.json in Resources */, F252472F2483955B00C5556B /* DynamicTableViewControllerFake.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -2766,6 +2817,7 @@ B11E619B246EE4B0004A056A /* DynamicTypeLabel.swift in Sources */, B1D7D69224766D2100E4DA5D /* apple_export.pb.swift in Sources */, 7187A5582481231C00FCC755 /* DynamicTableViewAction.swift in Sources */, + A9221A572549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift in Sources */, A128F059248B459F00EC7F6C /* PublicKeyStore.swift in Sources */, 71C0BEDD2498DD07009A17A0 /* ENANavigationFooterView.swift in Sources */, A9221A382542F06E00853CEF /* BEDynamicTextScreenSection.swift in Sources */, @@ -2781,6 +2833,7 @@ CD99A3A9245C272400BF12AF /* ExposureSubmissionService.swift in Sources */, A9D0BF8224F585A200DEBD99 /* BECountdownTimer.swift in Sources */, 71F54191248BF677006DB793 /* HtmlTextView.swift in Sources */, + A9221A472546F62900853CEF /* BEDynamicTextService.swift in Sources */, 51B5B41C246EC8B800DC5D3E /* HomeCardCollectionViewCell.swift in Sources */, B1EDFD8D248E74D000E7EAFF /* URL+StaticString.swift in Sources */, A9DD2D0724D02DFC0035081A /* BEExposureSubmissionService.swift in Sources */, @@ -2791,7 +2844,8 @@ CD8638532477EBD400A5A07C /* SettingsViewModel.swift in Sources */, A9DD2CF624CF379F0035081A /* BEUIImage.swift in Sources */, 51CE1BB52460AC83002CF42A /* UICollectionView+Dequeue.swift in Sources */, - A9221A312542C1F200853CEF /* BEDynamicTextService.swift in Sources */, + A9221A312542C1F200853CEF /* BEDynamicTextDownloadService.swift in Sources */, + A9221A402544606800853CEF /* BEDynamicText.swift in Sources */, B17F2D48248CEB4C00CAA38F /* DetectionMode.swift in Sources */, 137846492488027600A50AB8 /* OnboardingInfoViewController+Extension.swift in Sources */, 85E33444247EB357006E74EC /* CircularProgressView.swift in Sources */, @@ -2921,6 +2975,7 @@ 514EE999246D4C2E00DE4884 /* UITableViewCell+Identifier.swift in Sources */, 13722044247AEEAD00152764 /* UNNotificationCenter+Extension.swift in Sources */, B10FD5ED246EAADC00E9D7F2 /* AppInformationDetailViewController.swift in Sources */, + A9221A422546C39700853CEF /* BEFileManager.swift in Sources */, A951618524DAEB3A00631519 /* BEDecimal.swift in Sources */, CDCE11D9247D64C600F30825 /* NotificationSettingsOnTableViewCell.swift in Sources */, A9221A3A2542F10300853CEF /* BEDynamicTextScreenName.swift in Sources */, @@ -2948,6 +3003,7 @@ 713EA25B247818B000AB7EE8 /* DynamicTypeButton.swift in Sources */, CDA262F824AB808800612E15 /* Coordinator.swift in Sources */, 51C77910248684F5004582F8 /* HomeRiskListItemViewConfigurator.swift in Sources */, + A9221A492546FB1A00853CEF /* BEDynamicTextLanguage.swift in Sources */, B1D6B004247DA4920079DDD3 /* UIApplication+CoronaWarn.swift in Sources */, 51CE1BC32460B28D002CF42A /* HomeInfoCellConfigurator.swift in Sources */, 138910C5247A909000D739F6 /* ENATaskScheduler.swift in Sources */, @@ -3022,7 +3078,6 @@ A92076D124E426D600AE8748 /* BEMockExposureSubmissionService.swift in Sources */, A92B66AD251CBF9B00F9B8DD /* BEUILabel.swift in Sources */, B1221BE02492ECE800E6C4E4 /* CFDictionary+KeychainQuery.swift in Sources */, - A9221A362542F02900853CEF /* BEDynamicTextScreen.swift in Sources */, FEDCE77AED78E9C25999BB35 /* SceneDelegate+State.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -3078,6 +3133,7 @@ 516E430224B89AED0008CC30 /* CoordinatorTests.swift in Sources */, B117521A248ACFFC00C3325C /* SAP_RiskScoreClass+LowAndHighTests.swift in Sources */, B11655932491437600316087 /* RiskProvidingConfigurationTests.swift in Sources */, + A9221A452546F3BF00853CEF /* BEDynamicTextTests.swift in Sources */, A9D0BF8424F5864000DEBD99 /* BECountdownTimerTests.swift in Sources */, B1A76E9F24714AC700EA5208 /* HTTPClient+Configuration.swift in Sources */, 516E430024B777B20008CC30 /* HomeHighRiskCellConfiguratorTests.swift in Sources */, diff --git a/src/xcode/ENA/ENA/Resources/dynamicTexts.json b/src/xcode/ENA/ENA/Resources/dynamicTexts.json index 24835f16c..806c8d900 100644 --- a/src/xcode/ENA/ENA/Resources/dynamicTexts.json +++ b/src/xcode/ENA/ENA/Resources/dynamicTexts.json @@ -1,97 +1,269 @@ { - "lowRisk": { - "preventiveMeasures": [ - { - "icon": "dt_washHands", - "text": "Wash your hands regularly and thoroughly with soap and water." - }, - { - "icon": "dt_distance", - "text": "Keep at least 1.5m away from people who are not close to you." - }, - { - "icon": "dt_mouthMask", - "text": "Wear a nose and mouth mask when you come into contact with other people and where required." - }, - { - "icon": "dt_sneeze", - "text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards." - } - ] - }, - "highRisk": { - "preventiveMeasures": [ - { - "icon": "dt_home", - "text": "If possible, please go home and stay at home." - }, - { - "icon": "dt_distance", - "text": "Keep at least 1.5m away from people who are not close to you." - }, - { - "icon": "dt_phone", - "text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", - "paragraphs": [ - "Your general practitioner", - "Medical out-of-hours service at 1733" - ] - }, - { - "icon": "dt_exclamation", - "text": "Do you have no symptoms?", - "paragraphs": [ - "Observe a 10-day quarantine." - ] - } - ] - }, - "positiveTestResult": { - "explanation": [ - { - "icon": "dt_exclamation", - "title": "Positive Diagnosis", - "text": "Your test result is positive. This means that you are infected.", - "paragraphs": [ - "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", - "You can warn other people with whom you came into contact.", - "This test result will be removed from your smartphone after 48 hours." - ] - } - ] - }, - "negativeTestResult": { - "explanation": [ - { - "icon": "dt_exclamatio", - "title": "Negative Diagnosis", - "text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2." - }, - { - "icon": "dt_delete", - "title": "Delete Test", - "text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours." - } - ] - }, - "thankYou": { - "pleaseNote": [ - { - "icon": "dt_phone", - "text": "The public health authority will contact you within the next few days by telephone or by letter." - }, - { - "icon": "dt_home", - "text": "You are infectious. Isolate yourself from other people." - } - ], - "otherInformation": { - "paragraphs": [ - "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", - "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", - "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", - "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + "structure": { + "standard": { + "preventiveMeasures": [ + { + "icon": "dt_washHands", + "text": "standard.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "standard.preventiveMeasures.2.text" + }, + { + "icon": "dt_mouthMask", + "text": "standard.preventiveMeasures.3.text" + }, + { + "icon": "dt_sneeze", + "text": "standard.preventiveMeasures.4.text" + } + ] + }, + "highRisk": { + "preventiveMeasures": [ + { + "icon": "dt_home", + "text": "highRisk.preventiveMeasures.1.text" + }, + { + "icon": "dt_distance", + "text": "highRisk.preventiveMeasures.2.text" + }, + { + "icon": "dt_phone", + "text": "highRisk.preventiveMeasures.3.text", + "paragraphs": [ + "highRisk.preventiveMeasures.3.paragraphs.1", + "highRisk.preventiveMeasures.3.paragraphs.2" + ] + }, + { + "icon": "dt_exclamation", + "text": "highRisk.preventiveMeasures.4.text", + "paragraphs": [ + "highRisk.preventiveMeasures.4.paragraphs.1" + ] + } + ] + }, + "positiveTestResultCard": { + "explanation": [ + { + "icon": "dt_phone", + "text": "positiveTestResultCard.explanation.1.text" + }, + { + "icon": "dt_home", + "text": "positiveTestResultCard.explanation.2.text" + }, + { + "icon": "dt_exclamation", + "text": "positiveTestResultCard.explanation.3.text" + } ] + }, + "positiveTestResult": { + "explanation": [ + { + "icon": "dt_check", + "title": "positiveTestResult.explanation.1.title", + "text": "positiveTestResult.explanation.1.text" + }, + { + "icon": "dt_exclamation", + "title": "positiveTestResult.explanation.2.title", + "text": "positiveTestResult.explanation.2.text", + "paragraphs": [ + "positiveTestResult.explanation.2.paragraphs.1", + "positiveTestResult.explanation.2.paragraphs.2", + "positiveTestResult.explanation.2.paragraphs.3" + ] + } + ] + }, + "negativeTestResult": { + "explanation": [ + { + "icon": "dt_check", + "title": "negativeTestResult.explanation.1.title", + "text": "negativeTestResult.explanation.1.text" + }, + { + "icon": "dt_exclamation", + "title": "negativeTestResult.explanation.2.title", + "text": "negativeTestResult.explanation.2.text" + }, + { + "icon": "dt_delete", + "title": "negativeTestResult.explanation.3.title", + "text": "negativeTestResult.explanation.3.text" + } + ] + }, + "thankYou": { + "pleaseNote": [ + { + "icon": "dt_phone", + "text": "thankYou.pleaseNote.1.text" + }, + { + "icon": "dt_home", + "text": "thankYou.pleaseNote.2.text" + } + ], + "otherInformation": [ + { + "paragraphs": [ + "otherInformation.paragraphs.1", + "otherInformation.paragraphs.2", + "otherInformation.paragraphs.3", + "otherInformation.paragraphs.4" + ] + } + ] + } + }, + "texts": { + "en": { + "standard.preventiveMeasures.1.text": "Wash your hands regularly and thoroughly with soap and water.", + "standard.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "standard.preventiveMeasures.3.text": "Wear a nose and mouth mask when you come into contact with other people and where required.", + "standard.preventiveMeasures.4.text": "Sneeze or cough into your elbow or into a tissue that you throw away immediately afterwards.", + "highRisk.preventiveMeasures.1.text": "If possible, please go home and stay at home.", + "highRisk.preventiveMeasures.2.text": "Keep at least 1.5m away from people who are not close to you.", + "highRisk.preventiveMeasures.3.text": "Do you have any symptoms indicating Covid-19, such as fatigue, fever, dry cough, headache, loss of taste or smell? Please contact one of the following persons:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Your general practitioner", + "highRisk.preventiveMeasures.3.paragraphs.2": "Medical out-of-hours service at 1733", + "highRisk.preventiveMeasures.4.text": "Do you have no symptoms?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Observe a 10-day quarantine.", + "positiveTestResultCard.explanation.1.text": "The public health authority will contact you within the next few days by telephone.", + "positiveTestResultCard.explanation.2.text": "You are infectious. Isolate yourself from other people.", + "positiveTestResultCard.explanation.3.text": "Share your random IDs so that others can be warned.", + "positiveTestResult.explanation.1.title": "Test added successfully", + "positiveTestResult.explanation.1.text": "Your test has been stored in Coronalert.", + "positiveTestResult.explanation.2.title": "Positive Diagnosis", + "positiveTestResult.explanation.2.text": "Your test result is positive. This means that you are infected.", + "positiveTestResult.explanation.2.paragraphs.1": "You are infected and therefore you must stay at home in isolation for at least 7 days. Don't leave your home until the symptoms have passed.", + "positiveTestResult.explanation.2.paragraphs.2": "You can warn other people with whom you came into contact.", + "positiveTestResult.explanation.2.paragraphs.3": "This test result will be removed from your smartphone after 48 hours.", + "negativeTestResult.explanation.1.title": "Test added succesfully", + "negativeTestResult.explanation.1.text": "Your test has been stored in Coronalert.", + "negativeTestResult.explanation.2.title": "Negative Diagnosis", + "negativeTestResult.explanation.2.text": "The laboratory result indicates no verification that you have coronavirus SARS-CoV-2.", + "negativeTestResult.explanation.3.title": "Delete Test", + "negativeTestResult.explanation.3.text": "Please delete the test from Coronalert, so that you can save a new test code here if necessary.\nThis test result will be removed from your smartphone after 48 hours.", + "thankYou.pleaseNote.1.text": "The public health authority will contact you within the next few days by telephone.", + "thankYou.pleaseNote.2.text": "You are infectious. Isolate yourself from other people.", + "otherInformation.paragraphs.1": "Your quarantine period is usually 7 days. Please observe your symptoms and monitor how they develop.", + "otherInformation.paragraphs.2": "You will be asked by your public health authority to create a list of people you have had contact with. This should include all people with whom you have had close contact with (less than 2 meters, face-to-face conversation) for over 15 minutes in the two days before you developed symptoms.", + "otherInformation.paragraphs.3": "Please particularly consider people who will not be notified directly by the app since they don't own a smartphone, or haven't installed the app.", + "otherInformation.paragraphs.4": "Even when you no longer have any symptoms and you feel well again, you could still be infectious." + }, + "nl": { + "standard.preventiveMeasures.1.text": "Was je handen regelmatig en grondig, met water en zeep.", + "standard.preventiveMeasures.2.text": "Houd minstens 1,5m afstand van mensen die niet tot je nauwe contacten behoren.", + "standard.preventiveMeasures.3.text": "Draag een neus- en mondmasker wanneer je in contact komt met andere mensen en waar dit verplicht is.", + "standard.preventiveMeasures.4.text": "Nies of hoest in je elleboog of in een papieren zakdoek die je daarna onmiddellijk weggooit.", + "highRisk.preventiveMeasures.1.text": "Ga indien mogelijk naar huis en blijf thuis.", + "highRisk.preventiveMeasures.2.text": "Houd minstens 1,5m afstand van mensen die niet tot je nauwe contacten behoren.", + "highRisk.preventiveMeasures.3.text": "Heb je symptomen die kunnen wijzen op Covid-19, zoals vermoeidheid, koorts, droge hoest, hoofdpijn, verlies van smaak of reuk? Contacteer dan één van volgende personen:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Je huisarts", + "highRisk.preventiveMeasures.3.paragraphs.2": "De medische wachtdienst op het nummer 1733", + "highRisk.preventiveMeasures.4.text": "Heb je geen symptomen?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Respecteer 10 dagen quarantaine.", + "positiveTestResultCard.explanation.1.text": "De dienst volksgezondheid neemt binnen enkele dagen telefonisch of per brief contact met u op.", + "positiveTestResultCard.explanation.2.text": "Je bent besmettelijk. Ga in zelfisolatie.", + "positiveTestResultCard.explanation.3.text": "Deel je willekeurige ID's, zodat anderen gewaarschuwd kunnen worden.", + "positiveTestResult.explanation.1.title": "Test succesvol toegevoegd", + "positiveTestResult.explanation.1.text": "Je test is opgeslagen in Coronalert.", + "positiveTestResult.explanation.2.title": "Positieve diagnose", + "positiveTestResult.explanation.2.text": "Je testresultaat is positief. Dit betekent dat je besmet bent.", + "positiveTestResult.explanation.2.paragraphs.1": "Je bent besmet en daarom moet je minstens 7 dagen thuis in isolatie blijven. Verlaat je huis niet tot de symptomen voorbij zijn.", + "positiveTestResult.explanation.2.paragraphs.2": "Je kan andere personen met wie je in contact kwam waarschuwen.", + "positiveTestResult.explanation.2.paragraphs.3": "Dit testresultaat wordt na 48 uur van uw smartphone verwijderd.", + "negativeTestResult.explanation.1.title": "Test succesvol toegevoegd", + "negativeTestResult.explanation.1.text": "Je test is opgeslagen in Coronalert.", + "negativeTestResult.explanation.2.title": "Negatieve diagnose", + "negativeTestResult.explanation.2.text": "Het laboratoriumresultaat wijst er niet op dat je het coronavirus SARS-CoV-2 hebt.", + "negativeTestResult.explanation.3.title": "Test verwijderen", + "negativeTestResult.explanation.3.text": "Verwijder de test uit Coronalert, zodat je hier indien nodig een nieuwe testcode kunt opslaan.\nDit testresultaat wordt na 48 uur van uw smartphone verwijderd.", + "thankYou.pleaseNote.1.text": "De dienst volksgezondheid neemt binnen enkele dagen telefonisch contact met u op.", + "thankYou.pleaseNote.2.text": "Je bent besmettelijk. Ga in zelfisolatie.", + "otherInformation.paragraphs.1": "Je gaat normaal gesproken 7 dagen in quarantaine. Let goed op je symptomen en volg op hoe ze zich ontwikkelen.", + "otherInformation.paragraphs.2": "De dienst volksgezondheid zal je vragen een lijst op te stellen van mensen met wie je contact hebt gehad. Noteer iedereen met wie je gedurende meer dan 15 minuten nauw contact hebt gehad (minder dan 2 meter, persoonlijk gesprek) in de twee dagen voordat je symptomen ontwikkelde.", + "otherInformation.paragraphs.3": "Denk vooral aan mensen die niet rechtstreeks door de app op de hoogte worden gesteld, omdat ze geen smartphone hebben of de app niet hebben geïnstalleerd.", + "otherInformation.paragraphs.4": "Zelfs als je geen symptomen meer hebt en zich weer goed voelt, kan je nog steeds besmettelijk zijn." + }, + "fr": { + "standard.preventiveMeasures.1.text": "Lavez-vous les mains régulièrement et soigneusement avec de l'eau et du savon.", + "standard.preventiveMeasures.2.text": "Tenez-vous à au moins 1,5 m des personnes qui ne sont pas proches de vous.", + "standard.preventiveMeasures.3.text": "Portez un masque nasal et buccal lorsque vous entrez en contact avec d'autres personnes et si nécessaire.", + "standard.preventiveMeasures.4.text": "Éternuez ou toussez dans votre coude ou dans un mouchoir que vous jetez immédiatement après.", + "highRisk.preventiveMeasures.1.text": "Si possible, rentrez et restez chez vous.", + "highRisk.preventiveMeasures.2.text": "Tenez-vous à au moins 1,5 m des personnes qui ne sont pas proches de vous.", + "highRisk.preventiveMeasures.3.text": "Avez-vous des symptômes qui peuvent indiquer la présence de Covid-19, tels que fatigue, fièvre, toux sèche, maux de tête, perte de goût ou d'odorat ? Veuillez contacter l'une des personnes suivantes :", + "highRisk.preventiveMeasures.3.paragraphs.1": "Votre médecin généraliste", + "highRisk.preventiveMeasures.3.paragraphs.2": "Le service de garde médical sur le numéro 1733", + "highRisk.preventiveMeasures.4.text": "Vous n'avez pas de symptômes ?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Respectez une quarantaine de 10 jours.", + "positiveTestResultCard.explanation.1.text": "L'autorité de santé publique vous contactera dans les prochains jours par téléphone ou par courrier.", + "positiveTestResultCard.explanation.2.text": "Vous êtes contagieux. Isolez-vous des autres personnes.", + "positiveTestResultCard.explanation.3.text": "Partagez vos identifiants aléatoires afin que les autres puissent être avertis.", + "positiveTestResult.explanation.1.title": "Test ajouté avec succès", + "positiveTestResult.explanation.1.text": "Votre test a été enregistré dans l'application Coronalert.", + "positiveTestResult.explanation.2.title": "Diagnostic positif", + "positiveTestResult.explanation.2.text": "Le résultat de votre test est positif. Cela signifie que vous êtes infecté.", + "positiveTestResult.explanation.2.paragraphs.1": "Vous êtes infecté et vous devez donc rester à la maison en isolement pendant au moins 7 jours. Ne quittez pas votre domicile tant que les symptômes ne sont pas passés.", + "positiveTestResult.explanation.2.paragraphs.2": "Vous pouvez avertir les autres personnes avec lesquelles vous êtes entré en contact.", + "positiveTestResult.explanation.2.paragraphs.3": "Le résultat de ce test sera supprimé de votre smartphone après 48 heures.", + "negativeTestResult.explanation.1.title": "Test ajouté avec succès", + "negativeTestResult.explanation.1.text": "Votre test a été enregistré dans l'application Coronalert.", + "negativeTestResult.explanation.2.title": "Diagnostic négatif", + "negativeTestResult.explanation.2.text": "Le résultat du laboratoire indique que vous n'êtes pas porteur du coronavirus SRAS-CoV-2.", + "negativeTestResult.explanation.3.title": "Supprimer le test", + "negativeTestResult.explanation.3.text": "Veuillez supprimer le test de l'application Coronalert, afin de pouvoir enregistrer un nouveau code de test ici si nécessaire.\nLe résultat de ce test sera supprimé de votre smartphone après 48 heures.", + "thankYou.pleaseNote.1.text": "L'autorité de santé publique vous contactera dans les prochains jours par téléphone.", + "thankYou.pleaseNote.2.text": "Vous êtes contagieux. Isolez-vous des autres personnes.", + "otherInformation.paragraphs.1": "Votre période de quarantaine est généralement de 7 jours. Veuillez observer vos symptômes et surveiller leur évolution.", + "otherInformation.paragraphs.2": "Votre autorité de santé publique vous demandera d'établir une liste des personnes avec lesquelles vous avez été en contact. Cette liste doit inclure toutes les personnes avec lesquelles vous avez été en contact étroit (moins de 2 mètres, conversation en face à face) pendant plus de 15 minutes au cours des deux jours précédant l'apparition des symptômes.", + "otherInformation.paragraphs.3": "Veuillez considérer tout particulièrement les personnes qui ne seront pas directement averties par l'application puisqu'elles ne possèdent pas de smartphone ou n'ont pas installé l'application.", + "otherInformation.paragraphs.4": "Même si vous n'avez plus de symptômes et que vous vous sentez bien, vous pouvez toujours être contagieux. " + }, + "de": { + "standard.preventiveMeasures.1.text": "Waschen Sie Ihre Hände regelmäßig und gründlich mit Wasser und Seife.", + "standard.preventiveMeasures.2.text": "Halten Sie mindestens 1,5 m Abstand zu Personen, die sich nicht in Ihrer Nähe befinden.", + "standard.preventiveMeasures.3.text": "Tragen Sie eine Nasen- und Mundmaske, wenn Sie mit anderen Personen in Kontakt kommen und wo dies erforderlich ist.", + "standard.preventiveMeasures.4.text": "Niesen oder husten Sie in Ihren Ellbogen oder in ein Taschentuch, das Sie unmittelbar danach wegwerfen.", + "highRisk.preventiveMeasures.1.text": "Gehen Sie, wenn möglich, nach Hause bzw. bleiben Sie zu Hause.", + "highRisk.preventiveMeasures.2.text": "Halten Sie mindestens 1,5 m Abstand zu Personen, die sich nicht in Ihrer Nähe befinden.", + "highRisk.preventiveMeasures.3.text": "Haben Sie Symptome, die auf Covid-19 hinweisen können, wie z.B. Müdigkeit, Fieber, trockener Husten, Kopfschmerzen, Geschmacks- oder Geruchsverlust? Bitte kontaktieren Sie eine der folgenden Personen:", + "highRisk.preventiveMeasures.3.paragraphs.1": "Ihr Hausarzt", + "highRisk.preventiveMeasures.3.paragraphs.2": "Den medizinischen Bereitschaftsdienst auf der Nummer 1733", + "highRisk.preventiveMeasures.4.text": "Haben Sie keine Symptome?", + "highRisk.preventiveMeasures.4.paragraphs.1": "Bitte respektieren Sie die Quarantäne für 10 Tage.", + "positiveTestResultCard.explanation.1.text": "Das Gesundheitsamt meldet sich demnächst telefonisch oder schriftlich bei Ihnen.", + "positiveTestResultCard.explanation.2.text": "Sie sind ansteckend. Isolieren Sie sich von anderen Menschen.", + "positiveTestResultCard.explanation.3.text": "Teilen Sie Ihre Zufallscodes, damit andere gewarnt werden können.", + "positiveTestResult.explanation.1.title": "Test erfolgreich hinzugefügt", + "positiveTestResult.explanation.1.text": "Ihr Test wurde in Coronalert gespeichert.", + "positiveTestResult.explanation.2.title": "Befund positiv", + "positiveTestResult.explanation.2.text": "Ihr Testergebnis ist positiv. Dies bedeutet, dass Sie infiziert sind.", + "positiveTestResult.explanation.2.paragraphs.1": "Sie sind infiziert und müssen daher mindestens 7 Tage isoliert zu Hause bleiben. Verlassen Sie Ihr Zuhause erst, wenn die Symptome verschwunden sind.", + "positiveTestResult.explanation.2.paragraphs.2": "Sie können andere Personen warnen, mit denen Sie in Kontakt gekommen sind.", + "positiveTestResult.explanation.2.paragraphs.3": "Dieses Testergebnis wird nach 48 Stunden von Ihrem Smartphone entfernt.", + "negativeTestResult.explanation.1.title": "Test erfolgreich hinzugefügt", + "negativeTestResult.explanation.1.text": "Ihr Test wurde in Coronalert gespeichert.", + "negativeTestResult.explanation.2.title": "Befund negativ", + "negativeTestResult.explanation.2.text": "Der Labortest ergab für Sie keine Coronavirus SARS-CoV-2-Diagnose.", + "negativeTestResult.explanation.3.title": "Test löschen", + "negativeTestResult.explanation.3.text": "Bitte löschen Sie den Test wieder aus Coronalert, damit Sie bei Bedarf einen neuen Test speichern können.\nDieses Testergebnis wird nach 48 Stunden von Ihrem Smartphone entfernt.", + "thankYou.pleaseNote.1.text": "Das Gesundheitsamt meldet sich demnächst telefonisch bei Ihnen.", + "thankYou.pleaseNote.2.text": "Sie sind ansteckend. Isolieren Sie sich von anderen Menschen.", + "otherInformation.paragraphs.1": "Ihre Quarantäne dauert meistens 7 Tage. Bitte beobachten und erfassen Sie den Verlauf Ihrer Symptome genau.", + "otherInformation.paragraphs.2": "Ihre Gesundheitsbehörde wird Sie auffordern, eine Liste der Personen zu erstellen, mit denen Sie Kontakt gehabt haben, d.h., aller Personen, mit denen Sie in den zwei Tagen, bevor Symptome auftraten, länger als 15 Minuten engen Kontakt hatten (weniger als 2 Meter, Gespräch von Angesicht zu Angesicht).", + "otherInformation.paragraphs.3": "Bitte berücksichtigen Sie vor allem Personen, die nicht von der App informiert werden, da sie kein Handy haben oder die App nicht installiert haben.", + "otherInformation.paragraphs.4": "Auch wenn Sie keine Symptome aufweisen und sich wieder gesund fühlen, könnten Sie noch ansteckend sein." } } -} \ No newline at end of file +} diff --git a/src/xcode/ENA/ENA/Source/AppDelegate.swift b/src/xcode/ENA/ENA/Source/AppDelegate.swift index 008003130..187c02584 100644 --- a/src/xcode/ENA/ENA/Source/AppDelegate.swift +++ b/src/xcode/ENA/ENA/Source/AppDelegate.swift @@ -203,7 +203,10 @@ extension AppDelegate: ENATaskExecutionDelegate { log(message: "Fetch test results done") self.executeExposureDetectionRequest { log(message: "Exposure detection done") - completion(true) + self.updateDynamicTexts { + log(message: "Dynamic text updates done") + completion(true) + } } } } @@ -269,4 +272,14 @@ extension AppDelegate: ENATaskExecutionDelegate { completion() } } + + private func updateDynamicTexts(completion: @escaping (() -> Void)) { + log(message: "Start dynamic text updates...") + let dynamicTextService = BEDynamicTextService() + let dynamicTextDownloadService = BEDynamicTextDownloadService(client: client, textService: dynamicTextService) + + dynamicTextDownloadService.downloadTextsIfNeeded { + completion() + } + } } diff --git a/src/xcode/ENA/ENA/Source/Client/Client.swift b/src/xcode/ENA/ENA/Source/Client/Client.swift index b61ea9e85..40adfa898 100644 --- a/src/xcode/ENA/ENA/Source/Client/Client.swift +++ b/src/xcode/ENA/ENA/Source/Client/Client.swift @@ -105,9 +105,14 @@ protocol Client { // :BE: typealias InfectionSummaryHandler = (Result) -> Void + typealias DynamicTextsHandler = (Result) -> Void /// Stats func getInfectionSummary(completion: @escaping InfectionSummaryHandler) + + /// dynamic texts + func getDynamicTexts(completion: @escaping DynamicTextsHandler) + /// Acknowledge we downloaded a test result func ackTestDownload(forDevice registrationToken: String, completionBlock: @escaping(() -> Void)) diff --git a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift index 9c0353881..d6c9437d1 100644 --- a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift +++ b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift @@ -31,6 +31,7 @@ extension HTTPClient { static let submissionBaseURL = URL(string: "https://c19-submission-\(BEEnvironment.current.urlSuffix()).ixor.be")! static let verificationBaseURL = URL(string: "https://c19-verification-\(BEEnvironment.current.urlSuffix()).ixor.be")! static let statisticsBaseURL = URL(string: "https://c19statcdn-\(BEEnvironment.current.urlSuffix()).ixor.be")! + static let dynamicTextsURL = URL(string: "https://localhost:8888")! // swiftlint:enable force_unwrapping // MARK: Default Instances @@ -58,6 +59,10 @@ extension HTTPClient { statistics: .init( baseURL: statisticsBaseURL, requiresTrailingSlash: false + ), + dynamicTexts: .init( + baseURL: dynamicTextsURL, + requiresTrailingSlash: false ) ) ) @@ -219,6 +224,12 @@ extension HTTPClient { "statistics.json" ) } + + var dynamicTextsURL: URL { + endpoints + .dynamicTexts + .appending("dynamicTexts.json") + } } } @@ -264,5 +275,6 @@ extension HTTPClient.Configuration { // :BE: add statistics let statistics: Endpoint + let dynamicTexts: Endpoint } } diff --git a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient.swift b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient.swift index 85d9bc126..241d6b7a9 100644 --- a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient.swift +++ b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient.swift @@ -488,6 +488,27 @@ final class HTTPClient: Client { } } } + + func getDynamicTexts(completion: @escaping DynamicTextsHandler) { + let url = configuration.dynamicTextsURL + self.session.GET(url) { result in + switch result { + case let .success(response): + guard response.hasAcceptableStatusCode else { + completion(.failure(.serverError(response.statusCode))) + return + } + + guard let responseData = response.body else { + completion(.failure(.invalidResponse)) + return + } + completion(.success(responseData)) + case let .failure(error): + completion(.failure(error)) + } + } + } } // MARK: Extensions diff --git a/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift b/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift index b932a9c08..8c6a27004 100644 --- a/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift +++ b/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift @@ -55,6 +55,7 @@ final class ClientMock { var onAppConfiguration: (AppConfigurationCompletion) -> Void = { $0(nil) } var onGetTestResult: ((String, TestResultHandler) -> Void)? + var dynamicTextsDownloadData:Data? } extension ClientMock: Client { @@ -132,4 +133,12 @@ extension ClientMock: Client { func getInfectionSummary(completion: @escaping InfectionSummaryHandler) { completion(.failure(.noResponse)) } + + func getDynamicTexts(completion: @escaping DynamicTextsHandler) { + if let data = dynamicTextsDownloadData { + completion(.success(data)) + } else { + completion(.failure(.noResponse)) + } + } } diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeFindingPositiveRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeFindingPositiveRiskCellConfigurator.swift index 27be1717a..79650f436 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeFindingPositiveRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeFindingPositiveRiskCellConfigurator.swift @@ -26,7 +26,8 @@ final class HomeFindingPositiveRiskCellConfigurator: HomeRiskCellConfigurator { // MARK: Configuration func configure(cell: RiskFindingPositiveCollectionViewCell) { - + let dynamicTextService = BEDynamicTextService() + let screenSections = dynamicTextService.sections(.positiveTestResultCard, section: .explanation) cell.delegate = self let title = AppStrings.Home.findingPositiveCardTitle @@ -40,21 +41,22 @@ final class HomeFindingPositiveRiskCellConfigurator: HomeRiskCellConfigurator { let noteTitle = AppStrings.Home.findingPositiveCardNoteTitle cell.configureNoteLabel(title: noteTitle) - let iconColor: UIColor = .enaColor(for: .riskHigh) - let phoneTitle = AppStrings.Home.findingPositivePhoneItemTitle - let phoneItem = HomeRiskImageItemViewConfigurator(title: phoneTitle, titleColor: titleColor, iconImageName: "Icons - Hotline", iconTintColor: iconColor, color: .clear, separatorColor: .clear) - phoneItem.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) - let homeTitle = AppStrings.Home.findingPositiveHomeItemTitle - let homeItem = HomeRiskImageItemViewConfigurator(title: homeTitle, titleColor: titleColor, iconImageName: "Icons - Home", iconTintColor: iconColor, color: .clear, separatorColor: .clear) - homeItem.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) + let configurators: [HomeRiskImageItemViewConfigurator] = screenSections.map { section in + guard + let icon = section.icon, + let text = section.text else { + fatalError("Not suppored") + } + + let item = HomeRiskImageItemViewConfigurator(title: text, titleColor: titleColor, iconImage: icon, iconTintColor: iconColor, color: .clear, separatorColor: .clear) + item.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) - let shareTitle = AppStrings.Home.findingPositiveShareItemTitle - let shareItem = HomeRiskImageItemViewConfigurator(title: shareTitle, titleColor: titleColor, iconImageName: "Icons - Warnen", iconTintColor: iconColor, color: .clear, separatorColor: .clear) - shareItem.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) + return item + } - cell.configureNotesRiskViews(cellConfigurators: [phoneItem, homeItem, shareItem]) + cell.configureNotesRiskViews(cellConfigurators: configurators) let buttonTitle = AppStrings.Home.findingPositiveCardButton @@ -77,6 +79,7 @@ final class HomeFindingPositiveRiskCellConfigurator: HomeRiskCellConfigurator { let topContainerText = cell.titleLabel.text ?? "" cell.topContainer.accessibilityLabel = topContainerText cell.topContainer.accessibilityTraits = [.button, .header] + cell.nextButton.accessibilityIdentifier = AccessibilityIdentifiers.Home.resultCardShowResultButton } // MARK: Hashable diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeHighRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeHighRiskCellConfigurator.swift index 2682deb6c..5dc283da7 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeHighRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeHighRiskCellConfigurator.swift @@ -63,11 +63,11 @@ final class HomeHighRiskCellConfigurator: HomeRiskLevelCellConfigurator { } else { let numberOfDaysSinceLastExposure = daysSinceLastExposure ?? 0 let numberContactsTitle = String(format: AppStrings.Home.riskCardNumberContactsItemTitle, numberRiskContacts) - let item1 = HomeRiskImageItemViewConfigurator(title: numberContactsTitle, titleColor: titleColor, iconImageName: "Icons_RisikoBegegnung", iconTintColor: titleColor, color: color, separatorColor: separatorColor) + let item1 = HomeRiskImageItemViewConfigurator(title: numberContactsTitle, titleColor: titleColor, iconImage: UIImage(forceNamed: "Icons_RisikoBegegnung"), iconTintColor: titleColor, color: color, separatorColor: separatorColor) let lastContactTitle = String(format: AppStrings.Home.riskCardLastContactItemTitle, numberOfDaysSinceLastExposure) - let item2 = HomeRiskImageItemViewConfigurator(title: lastContactTitle, titleColor: titleColor, iconImageName: "Icons_Calendar", iconTintColor: titleColor, color: color, separatorColor: separatorColor) + let item2 = HomeRiskImageItemViewConfigurator(title: lastContactTitle, titleColor: titleColor, iconImage: UIImage(forceNamed: "Icons_Calendar"), iconTintColor: titleColor, color: color, separatorColor: separatorColor) let dateTitle = String(format: AppStrings.Home.riskCardDateItemTitle, lastUpdateDateString) - let item3 = HomeRiskImageItemViewConfigurator(title: dateTitle, titleColor: titleColor, iconImageName: "Icons_Aktualisiert", iconTintColor: titleColor, color: color, separatorColor: separatorColor) + let item3 = HomeRiskImageItemViewConfigurator(title: dateTitle, titleColor: titleColor, iconImage: UIImage(forceNamed: "Icons_Aktualisiert"), iconTintColor: titleColor, color: color, separatorColor: separatorColor) itemCellConfigurators.append(contentsOf: [item1, item2, item3]) } cell.configureRiskViews(cellConfigurators: itemCellConfigurators) diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeInactiveRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeInactiveRiskCellConfigurator.swift index 2baf3ff91..efdff0f9a 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeInactiveRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeInactiveRiskCellConfigurator.swift @@ -104,7 +104,7 @@ final class HomeInactiveRiskCellConfigurator: HomeRiskCellConfigurator { HomeRiskImageItemViewConfigurator( title: activateItemTitle, titleColor: .enaColor(for: .textPrimary1), - iconImageName: "Icons_LetzteErmittlung-Light", + iconImage: UIImage(forceNamed: "Icons_LetzteErmittlung-Light"), iconTintColor: .enaColor(for: .riskNeutral), color: .enaColor(for: .background), separatorColor: .enaColor(for: .hairline) @@ -114,7 +114,7 @@ final class HomeInactiveRiskCellConfigurator: HomeRiskCellConfigurator { HomeRiskImageItemViewConfigurator( title: dateTitle, titleColor: .enaColor(for: .textPrimary1), - iconImageName: "Icons_Aktualisiert", + iconImage: UIImage(forceNamed: "Icons_Aktualisiert"), iconTintColor: .enaColor(for: .riskNeutral), color: .enaColor(for: .background), separatorColor: .enaColor(for: .hairline) @@ -137,6 +137,9 @@ final class HomeInactiveRiskCellConfigurator: HomeRiskCellConfigurator { let topContainerText = cell.titleLabel.text ?? "" cell.topContainer.accessibilityLabel = topContainerText cell.topContainer.accessibilityTraits = [.button, .header] + + cell.topContainer.accessibilityIdentifier = AccessibilityIdentifiers.RiskCollectionViewCell.topContainer + cell.bodyLabel.accessibilityIdentifier = AccessibilityIdentifiers.RiskCollectionViewCell.bodyLabel } // MARK: - Configuration. diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeLowRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeLowRiskCellConfigurator.swift index d61487299..52d373bdd 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeLowRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeLowRiskCellConfigurator.swift @@ -73,18 +73,18 @@ final class HomeLowRiskCellConfigurator: HomeRiskLevelCellConfigurator { HomeRiskImageItemViewConfigurator( title: numberContactsTitle, titleColor: titleColor, - iconImageName: "Icons_KeineRisikoBegegnung", + iconImage: UIImage(forceNamed: "Icons_KeineRisikoBegegnung"), iconTintColor: titleColor, color: color, separatorColor: separatorColor ) ) - let progressImage: String = numberDays >= totalDays ? "Icons_TracingCircleFull - Dark" : "Icons_TracingCircle-Dark_Step \(activeTracing.inDays)" + let progressImage: UIImage = numberDays >= totalDays ? UIImage(forceNamed: "Icons_TracingCircleFull - Dark") : UIImage(forceNamed: "Icons_TracingCircle-Dark_Step \(activeTracing.inDays)") itemCellConfigurators.append( HomeRiskImageItemViewConfigurator( title: activeTracing.localizedDuration, titleColor: titleColor, - iconImageName: progressImage, + iconImage: progressImage, iconTintColor: titleColor, color: color, separatorColor: separatorColor @@ -96,7 +96,7 @@ final class HomeLowRiskCellConfigurator: HomeRiskLevelCellConfigurator { HomeRiskImageItemViewConfigurator( title: dateTitle, titleColor: titleColor, - iconImageName: "Icons_Aktualisiert", + iconImage: UIImage(forceNamed: "Icons_Aktualisiert"), iconTintColor: titleColor, color: color, separatorColor: separatorColor diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeThankYouRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeThankYouRiskCellConfigurator.swift index 750a0a668..5f07e2caf 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeThankYouRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeThankYouRiskCellConfigurator.swift @@ -2,6 +2,9 @@ // Corona-Warn-App // // SAP SE and all other contributors / +// +// Modified by Devside SRL +// // copyright owners license this file to you under the Apache // License, Version 2.0 (the "License"); you may not use this // file except in compliance with the License. @@ -24,48 +27,8 @@ final class HomeThankYouRiskCellConfigurator: HomeRiskCellConfigurator { // MARK: Configuration func configure(cell: RiskThankYouCollectionViewCell) { - - let title = AppStrings.Home.thankYouCardTitle - let titleColor: UIColor = .enaColor(for: .textPrimary1) - cell.configureTitle(title: title, titleColor: titleColor) - - let imageName = "Illu_Submission_VielenDank" - cell.configureImage(imageName: imageName) - - let body = AppStrings.Home.thankYouCardBody - cell.configureBody(text: body, bodyColor: titleColor) - - let noteTitle = AppStrings.Home.thankYouCardNoteTitle - cell.configureNoteLabel(title: noteTitle) - - let iconColor: UIColor = .enaColor(for: .riskHigh) - let phoneTitle = AppStrings.Home.thankYouCardPhoneItemTitle - let phoneItem = HomeRiskImageItemViewConfigurator(title: phoneTitle, titleColor: titleColor, iconImageName: "Icons - Hotline", iconTintColor: iconColor, color: .clear, separatorColor: .clear) - phoneItem.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) - - let homeTitle = AppStrings.Home.thankYouCardHomeItemTitle - let homeItem = HomeRiskImageItemViewConfigurator(title: homeTitle, titleColor: titleColor, iconImageName: "Icons - Home", iconTintColor: iconColor, color: .clear, separatorColor: .clear) - homeItem.containerInsets = .init(top: 10.0, left: 0.0, bottom: 10.0, right: 0) - cell.configureNoteRiskViews(cellConfigurators: [phoneItem, homeItem]) - - - let furtherInfoTitle = AppStrings.Home.thankYouCardFurtherInfoItemTitle - cell.configureFurtherInfoLabel(title: furtherInfoTitle) - - let info1Text = AppStrings.Home.thankYouCard14DaysItemTitle - let info1 = HomeRiskListItemViewConfigurator(text: info1Text, titleColor: titleColor) - let info2Text = AppStrings.Home.thankYouCardContactsItemTitle - let info2 = HomeRiskListItemViewConfigurator(text: info2Text, titleColor: titleColor) - let info3Text = AppStrings.Home.thankYouCardAppItemTitle - let info3 = HomeRiskListItemViewConfigurator(text: info3Text, titleColor: titleColor) - let info4Text = AppStrings.Home.thankYouCardNoSymptomsItemTitle - let info4 = HomeRiskListItemViewConfigurator(text: info4Text, titleColor: titleColor) - cell.configureFurtherInfoRiskViews(cellConfigurators: [info1, info2, info3, info4]) - - let backgroundColor = UIColor.enaColor(for: .background) - cell.configureBackgroundColor(color: backgroundColor) - - setupAccessibility(cell) + + // we no longer support the thank you cell since we reset the app } func setupAccessibility(_ cell: RiskThankYouCollectionViewCell) { diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeUnknown48hRiskCellConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeUnknown48hRiskCellConfigurator.swift index ead0e1928..0e8bf98e8 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeUnknown48hRiskCellConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskCellConfigurators/HomeUnknown48hRiskCellConfigurator.swift @@ -98,7 +98,7 @@ final class HomeUnknown48hRiskCellConfigurator: HomeRiskLevelCellConfigurator { HomeRiskImageItemViewConfigurator( title: activateItemTitle, titleColor: .enaColor(for: .textContrast), - iconImageName: "Icons_LetzteErmittlung-Light", + iconImage: UIImage(forceNamed: "Icons_LetzteErmittlung-Light"), iconTintColor: .enaColor(for: .textContrast), color: .enaColor(for: .riskNeutral), separatorColor: .enaColor(for: .hairlineContrast)), @@ -107,7 +107,7 @@ final class HomeUnknown48hRiskCellConfigurator: HomeRiskLevelCellConfigurator { HomeRiskImageItemViewConfigurator( title: dateTitle, titleColor: .enaColor(for: .textContrast), - iconImageName: "Icons_Aktualisiert", + iconImage: UIImage(forceNamed: "Icons_Aktualisiert"), iconTintColor: .enaColor(for: .textContrast), color: .enaColor(for: .riskNeutral), separatorColor: .enaColor(for: .hairlineContrast) diff --git a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskViewConfigurators/HomeRiskImageItemViewConfigurator.swift b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskViewConfigurators/HomeRiskImageItemViewConfigurator.swift index 81fa020e1..f13e2f5b7 100644 --- a/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskViewConfigurators/HomeRiskImageItemViewConfigurator.swift +++ b/src/xcode/ENA/ENA/Source/Models/Home/HomeRiskCellConfigurator/HomeRiskViewConfigurators/HomeRiskImageItemViewConfigurator.swift @@ -20,24 +20,24 @@ import UIKit final class HomeRiskImageItemViewConfigurator: HomeRiskViewConfigurator { var title: String var titleColor: UIColor - var iconImageName: String + var iconImage: UIImage var iconTintColor: UIColor var color: UIColor var separatorColor: UIColor var containerInsets: UIEdgeInsets? - init(title: String, titleColor: UIColor, iconImageName: String, iconTintColor: UIColor, color: UIColor, separatorColor: UIColor) { + init(title: String, titleColor: UIColor, iconImage: UIImage, iconTintColor: UIColor, color: UIColor, separatorColor: UIColor) { self.title = title self.titleColor = titleColor - self.iconImageName = iconImageName + self.iconImage = iconImage self.iconTintColor = iconTintColor self.color = color self.separatorColor = separatorColor } func configure(riskView: RiskImageItemView) { - riskView.iconImageView?.image = UIImage(named: iconImageName) + riskView.iconImageView?.image = iconImage riskView.iconImageView.tintColor = iconTintColor riskView.textLabel?.text = title riskView.textLabel?.textColor = titleColor diff --git a/src/xcode/ENA/ENA/Source/SceneDelegate.swift b/src/xcode/ENA/ENA/Source/SceneDelegate.swift index 813d3f092..22d67d3ec 100644 --- a/src/xcode/ENA/ENA/Source/SceneDelegate.swift +++ b/src/xcode/ENA/ENA/Source/SceneDelegate.swift @@ -139,6 +139,13 @@ final class SceneDelegate: UIResponder, UIWindowSceneDelegate, RequiresAppDepend // :BE: get stats, ignore errors and result statisticsService.getInfectionSummary { _ in } + + // Update dynamic texts + let dynamicTextService = BEDynamicTextService() + let dynamicTextDownloadService = BEDynamicTextDownloadService(client: client, textService: dynamicTextService) + + dynamicTextDownloadService.downloadTextsIfNeeded {} + let exposureSubmissionService = BEExposureSubmissionServiceImpl(diagnosiskeyRetrieval: self.exposureManager, client: self.client, store: self.store) // remove test result if it is too old diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureDetection/ExposureDetectionViewController+DynamicTableViewModel.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureDetection/ExposureDetectionViewController+DynamicTableViewModel.swift index 09c0ec1da..30594cfb7 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureDetection/ExposureDetectionViewController+DynamicTableViewModel.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureDetection/ExposureDetectionViewController+DynamicTableViewModel.swift @@ -58,7 +58,7 @@ private extension DynamicHeader { // MARK: - Supported Cell Types -private extension DynamicCell { +extension DynamicCell { private enum ReusableCellIdentifer: String, TableViewCellReuseIdentifiers { case risk = "riskCell" case riskText = "riskTextCell" @@ -250,15 +250,29 @@ extension ExposureDetectionViewController { } private var standardGuideSection: DynamicSection { - .section( + let dynamicTextService = BEDynamicTextService() + let dynamicSections = dynamicTextService.sections(.standard, section: .preventiveMeasures) + var cells: [DynamicCell] = [.header(title: AppStrings.ExposureDetection.behaviorTitle, subtitle: AppStrings.ExposureDetection.behaviorSubtitle)] + + cells.append(contentsOf: dynamicSections.map { $0.buildRiskLevelDynamicCell() }) + + return .section( header: .backgroundSpace(height: 16), - cells: [ - .header(title: AppStrings.ExposureDetection.behaviorTitle, subtitle: AppStrings.ExposureDetection.behaviorSubtitle), - .guide(text: AppStrings.ExposureDetection.guideHands, image: UIImage(named: "Icons - Hands")), - .guide(text: AppStrings.ExposureDetection.guideDistance, image: UIImage(named: "Icons - Abstand")), - .guide(text: AppStrings.ExposureDetection.guideMask, image: UIImage(named: "Icons - Mundschutz")), - .guide(text: AppStrings.ExposureDetection.guideSneeze, image: UIImage(named: "Icons - Niesen")) - ] + cells: cells + ) + } + + private var highRiskGuideSection: DynamicSection { + let dynamicTextService = BEDynamicTextService() + let dynamicSections = dynamicTextService.sections(.highRisk, section: .preventiveMeasures) + + var cells: [DynamicCell] = [.header(title: AppStrings.ExposureDetection.behaviorTitle, subtitle: AppStrings.ExposureDetection.behaviorSubtitle)] + + cells.append(contentsOf: dynamicSections.map { $0.buildRiskLevelDynamicCell() }) + + return .section( + header: .backgroundSpace(height: 16), + cells: cells ) } @@ -379,24 +393,7 @@ extension ExposureDetectionViewController { .riskRefreshed(text: AppStrings.ExposureDetection.refreshed, image: UIImage(named: "Icons_Aktualisiert")) ]), riskLoadingSection, - .section( - header: .backgroundSpace(height: 16), - cells: [ - .header(title: AppStrings.ExposureDetection.behaviorTitle, subtitle: AppStrings.ExposureDetection.behaviorSubtitle), - .guide(text: AppStrings.ExposureDetection.guideHome, image: UIImage(named: "Icons - Home")), - .guide(text: AppStrings.ExposureDetection.guideDistance, image: UIImage(named: "Icons - Abstand")), -// .guide(text: AppStrings.ExposureDetection.getTested, image: UIImage(named: "Icons -Warning")), - .guide(image: UIImage(named: "Icons - Hotline"), text: [ - AppStrings.ExposureDetection.guideHotline1, - AppStrings.ExposureDetection.guideHotline2, - AppStrings.ExposureDetection.guideHotline3 - ]), - .guide(image: UIImage(named: "Icons -Warning"), text: [ - AppStrings.ExposureDetection.guideHotline4, - AppStrings.ExposureDetection.guideHotline5 - ]) - ] - ), + highRiskGuideSection, activeTracingSection( accessibilityIdentifier: AccessibilityIdentifiers.ExposureDetection.activeTracingSectionText ) diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift index 3a59fc53f..ddb85630c 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift @@ -55,7 +55,7 @@ final class ExposureSubmissionSuccessViewController: DynamicTableViewController, private func setUpView() { navigationItem.hidesBackButton = true tableView.register(UINib(nibName: String(describing: ExposureSubmissionStepCell.self), bundle: nil), forCellReuseIdentifier: CustomCellReuseIdentifiers.stepCell.rawValue) - dynamicTableViewModel = .data + dynamicTableViewModel = .thankYouData } private func setupTitle() { @@ -77,47 +77,43 @@ extension ExposureSubmissionSuccessViewController { } private extension DynamicTableViewModel { - static let data = DynamicTableViewModel([ - DynamicSection.section( - header: .image( - UIImage(named: "Illu_Submission_VielenDank"), - accessibilityLabel: AppStrings.ExposureSubmissionSuccess.accImageDescription, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.accImageDescription - ), - separators: false, - cells: [ - .body(text: AppStrings.ExposureSubmissionSuccess.description, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.description), - .title2(text: AppStrings.ExposureSubmissionSuccess.listTitle, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.listTitle), - - ExposureSubmissionDynamicCell.stepCell( - style: .body, - title: AppStrings.ExposureSubmissionSuccess.listItem1, - icon: UIImage(named: "Icons - Hotline"), - iconTint: .enaColor(for: .riskHigh), - hairline: .none, - bottomSpacing: .normal - ), - ExposureSubmissionDynamicCell.stepCell( - style: .body, - title: AppStrings.ExposureSubmissionSuccess.listItem2, - icon: UIImage(named: "Icons - Home"), - iconTint: .enaColor(for: .riskHigh), - hairline: .none, - bottomSpacing: .large + static var thankYouData: DynamicTableViewModel { + let dynamicTextService = BEDynamicTextService() + let pleaseNoteSections = dynamicTextService.sections(.thankYou, section: .pleaseNote) + let otherInformationSections = dynamicTextService.sections(.thankYou, section: .otherInformation) + + let pleaseNoteCells = Array(pleaseNoteSections.map({$0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh))}).joined()) + let otherInformationCells = Array(otherInformationSections.map({$0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh))}).joined()) + + var cells: [DynamicCell] = [ + .body(text: AppStrings.ExposureSubmissionSuccess.description, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.description), + .title2(text: AppStrings.ExposureSubmissionSuccess.listTitle, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.listTitle), + ] + + cells.append(contentsOf: pleaseNoteCells) + cells.append( + .title2(text: AppStrings.ExposureSubmissionSuccess.subTitle, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.subTitle) + ) + cells.append(contentsOf: otherInformationCells) + + + return DynamicTableViewModel([ + DynamicSection.section( + header: .image( + UIImage(named: "Illu_Submission_VielenDank"), + accessibilityLabel: AppStrings.ExposureSubmissionSuccess.accImageDescription, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.accImageDescription ), + separators: false, + cells:cells - .title2(text: AppStrings.ExposureSubmissionSuccess.subTitle, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.subTitle), + ) + ]) + } - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionSuccess.listItem2_1), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionSuccess.listItem2_2), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionSuccess.listItem2_3), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionSuccess.listItem2_4) - ] - ) - ]) } // MARK: - Cell reuse identifiers. diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionTestResultViewController.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionTestResultViewController.swift index 0ac8bca19..1c7e1c00b 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionTestResultViewController.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionTestResultViewController.swift @@ -280,7 +280,17 @@ private extension ExposureSubmissionTestResultViewController { } private func positiveTestResultSection() -> DynamicSection { - .section( + let dynamicTextService = BEDynamicTextService() + let textSections = dynamicTextService.sections(.positiveTestResult, section: .explanation) + let tintColor = UIColor.enaColor(for: .riskHigh) + let stepCells = Array(textSections.map({ $0.buildTestResultStepCells(iconTint: tintColor) }).joined()) + + var cells: [DynamicCell] = [.title2(text: AppStrings.ExposureSubmissionResult.procedure, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.procedure)] + + cells.append(contentsOf: stepCells) + + return .section( header: .identifier( ExposureSubmissionTestResultViewController.HeaderReuseIdentifier.testResult, configure: { view, _ in @@ -288,42 +298,31 @@ private extension ExposureSubmissionTestResultViewController { } ), separators: false, - cells: [ - .title2(text: AppStrings.ExposureSubmissionResult.procedure, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.procedure), - - ExposureSubmissionDynamicCell.stepCell( - title: AppStrings.ExposureSubmissionResult.testAdded, - description: AppStrings.ExposureSubmissionResult.testAddedDesc, - icon: UIImage(named: "Icons_Grey_Check"), - hairline: .iconAttached - ), - - ExposureSubmissionDynamicCell.stepCell( - title: AppStrings.ExposureSubmissionResult.testPositive, - description: AppStrings.ExposureSubmissionResult.testPositiveDesc, - icon: UIImage(named: "Icons -Warning"), - hairline: .topAttached - ), - - ExposureSubmissionDynamicCell.stepCell( - bulletPoint: AppStrings.ExposureSubmissionResult.testPositiveIsolationDesc, - hairline: .topAttached - ), - ExposureSubmissionDynamicCell.stepCell( - bulletPoint: AppStrings.ExposureSubmissionResult.testPositiveWarnOthersDesc, - hairline: .topAttached - ), - ExposureSubmissionDynamicCell.stepCell( - bulletPoint: AppStrings.ExposureSubmissionResult.testPositiveAutomaticDeletionDesc, - hairline: .topAttached - ) - ] + cells:cells ) } private func negativeTestResultSection() -> DynamicSection { - .section( + let dynamicTextService = BEDynamicTextService() + let textSections = dynamicTextService.sections(.negativeTestResult, section: .explanation) + let tintColor = UIColor.enaColor(for: .riskLow) + let stepCells = Array(textSections.map({ $0.buildTestResultStepCells(iconTint: tintColor) }).joined()) + + var cells: [DynamicCell] = [.title2(text: AppStrings.ExposureSubmissionResult.procedure, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.procedure)] + + cells.append(contentsOf: stepCells) + + cells.append(contentsOf: [ + .title2(text: AppStrings.ExposureSubmissionResult.furtherInfos_Title, + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.furtherInfos_Title), + ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem1), + ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem2), + ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem3), + ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_TestAgain) + ]) + + return .section( header: .identifier( ExposureSubmissionTestResultViewController.HeaderReuseIdentifier.testResult, configure: { view, _ in @@ -331,40 +330,7 @@ private extension ExposureSubmissionTestResultViewController { } ), separators: false, - cells: [ - .title2(text: AppStrings.ExposureSubmissionResult.procedure, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.procedure), - - - ExposureSubmissionDynamicCell.stepCell( - title: AppStrings.ExposureSubmissionResult.testAdded, - description: AppStrings.ExposureSubmissionResult.testAddedDesc, - icon: UIImage(named: "Icons_Grey_Check"), - hairline: .iconAttached - ), - - ExposureSubmissionDynamicCell.stepCell( - title: AppStrings.ExposureSubmissionResult.testNegative, - description: AppStrings.ExposureSubmissionResult.testNegativeDesc, - icon: UIImage(named: "Icons_Grey_Error"), - hairline: .topAttached - ), - - ExposureSubmissionDynamicCell.stepCell( - title: AppStrings.ExposureSubmissionResult.testRemove, - description: AppStrings.ExposureSubmissionResult.testRemoveDesc, - icon: UIImage(named: "Icons_Grey_Entfernen"), - hairline: .none - ), - - .title2(text: AppStrings.ExposureSubmissionResult.furtherInfos_Title, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionResult.furtherInfos_Title), - - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem1), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem2), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_ListItem3), - ExposureSubmissionDynamicCell.stepCell(bulletPoint: AppStrings.ExposureSubmissionResult.furtherInfos_TestAgain) - ] + cells: cells ) } From 8ff3ee3c686fbe041aa92655a84b0daa669754eb Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 11:35:02 +0100 Subject: [PATCH 10/17] upstep version --- src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index c4e1cb6a8..c09a58422 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -3367,7 +3367,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.3.0; OTHER_CFLAGS = ( "-DSQLITE_HAS_CODEC", "-DSQLITE_TEMP_STORE=3", @@ -3526,7 +3526,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.3.0; OTHER_CFLAGS = ( "-DSQLITE_HAS_CODEC", "-DSQLITE_TEMP_STORE=3", @@ -3742,7 +3742,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.3.0; OTHER_CFLAGS = ( "-DSQLITE_HAS_CODEC", "-DSQLITE_TEMP_STORE=3", @@ -3779,7 +3779,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.2.1; + MARKETING_VERSION = 1.3.0; OTHER_CFLAGS = ( "-DSQLITE_HAS_CODEC", "-DSQLITE_TEMP_STORE=3", From d5c4a171ad8bd0196adaa33ec3dcc2fcedd3f08a Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 12:58:45 +0100 Subject: [PATCH 11/17] fix wrong code removal --- .../ExposureSubmissionCoordinating.swift | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift index a97bf3a66..0c3a43a7e 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/ExposureSubmissionCoordinating.swift @@ -99,8 +99,13 @@ extension ExposureSubmissionCoordinator { } /// This method selects the correct initial view controller among the following options: - /// :BE: REMOVED private func getInitialViewController(with result: TestResult? = nil) -> UIViewController { + + // We got a test result and can jump straight into the test result view controller. + if let result = result, exposureSubmissionService.hasRegistrationToken() { + return createTestResultViewController(with: result) + } + return createIntroViewController() } From 1acd172d4b8c6903552beed42813e456f8396bda Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 13:39:43 +0100 Subject: [PATCH 12/17] make linter happy --- src/xcode/ENA/ENA/Source/AppDelegate.swift | 2 +- .../ENA/Source/Client/__tests__/Mocks/ClientMock.swift | 2 +- src/xcode/ENA/ENA/Source/Extensions/ENAColor.swift | 1 - .../DynamicTableViewController.swift | 1 - .../ExposureSubmissionSuccessViewController.swift | 8 ++++---- .../Mock Objects/MockExposureSubmissionService.swift | 6 ++++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/xcode/ENA/ENA/Source/AppDelegate.swift b/src/xcode/ENA/ENA/Source/AppDelegate.swift index 187c02584..2b2fb4fb0 100644 --- a/src/xcode/ENA/ENA/Source/AppDelegate.swift +++ b/src/xcode/ENA/ENA/Source/AppDelegate.swift @@ -118,7 +118,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { case "INACTIVE": provider.setInactiveRiskForTesting() default: - fatalError() + fatalError("Should never happen") } } #endif diff --git a/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift b/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift index 8c6a27004..77f316190 100644 --- a/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift +++ b/src/xcode/ENA/ENA/Source/Client/__tests__/Mocks/ClientMock.swift @@ -55,7 +55,7 @@ final class ClientMock { var onAppConfiguration: (AppConfigurationCompletion) -> Void = { $0(nil) } var onGetTestResult: ((String, TestResultHandler) -> Void)? - var dynamicTextsDownloadData:Data? + var dynamicTextsDownloadData: Data? } extension ClientMock: Client { diff --git a/src/xcode/ENA/ENA/Source/Extensions/ENAColor.swift b/src/xcode/ENA/ENA/Source/Extensions/ENAColor.swift index 14c1a2e05..cf03ddeca 100644 --- a/src/xcode/ENA/ENA/Source/Extensions/ENAColor.swift +++ b/src/xcode/ENA/ENA/Source/Extensions/ENAColor.swift @@ -71,7 +71,6 @@ public extension UIColor { } #if TARGET_INTERFACE_BUILDER - // swiftlint:disable:next cyclomatic_complexity static func enaColor(for style: ENAColor, interface: UIUserInterfaceStyle = .unspecified) -> UIColor { switch style { case .background: return UIColor(rgb: 0xFFFFFF, alpha: 1.0) diff --git a/src/xcode/ENA/ENA/Source/Scenes/DynamicTableViewController/DynamicTableViewController.swift b/src/xcode/ENA/ENA/Source/Scenes/DynamicTableViewController/DynamicTableViewController.swift index 738f814aa..a2b238ede 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/DynamicTableViewController/DynamicTableViewController.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/DynamicTableViewController/DynamicTableViewController.swift @@ -90,7 +90,6 @@ extension DynamicTableViewController { } } - // swiftlint:disable:next cyclomatic_complexity private func tableView(_ tableView: UITableView, viewForHeaderFooter headerFooter: DynamicHeader, inSection section: Int) -> UIView? { switch headerFooter { case let .space(_, color): diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift index ddb85630c..db3d30825 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/View/Controller/ExposureSubmissionSuccessViewController.swift @@ -82,14 +82,14 @@ private extension DynamicTableViewModel { let pleaseNoteSections = dynamicTextService.sections(.thankYou, section: .pleaseNote) let otherInformationSections = dynamicTextService.sections(.thankYou, section: .otherInformation) - let pleaseNoteCells = Array(pleaseNoteSections.map({$0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh))}).joined()) - let otherInformationCells = Array(otherInformationSections.map({$0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh))}).joined()) + let pleaseNoteCells = Array(pleaseNoteSections.map({ $0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh)) }).joined()) + let otherInformationCells = Array(otherInformationSections.map({ $0.buildSuccessViewControllerStepCells(iconTint: .enaColor(for: .riskHigh)) }).joined()) var cells: [DynamicCell] = [ .body(text: AppStrings.ExposureSubmissionSuccess.description, accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.description), .title2(text: AppStrings.ExposureSubmissionSuccess.listTitle, - accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.listTitle), + accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.listTitle) ] cells.append(contentsOf: pleaseNoteCells) @@ -108,7 +108,7 @@ private extension DynamicTableViewModel { accessibilityIdentifier: AccessibilityIdentifiers.ExposureSubmissionSuccess.accImageDescription ), separators: false, - cells:cells + cells: cells ) ]) diff --git a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/__tests__/Mock Objects/MockExposureSubmissionService.swift b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/__tests__/Mock Objects/MockExposureSubmissionService.swift index a0b27c371..08076da02 100644 --- a/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/__tests__/Mock Objects/MockExposureSubmissionService.swift +++ b/src/xcode/ENA/ENA/Source/Scenes/ExposureSubmission/__tests__/Mock Objects/MockExposureSubmissionService.swift @@ -75,9 +75,11 @@ class MockExposureSubmissionService: BEExposureSubmissionService { } func generateMobileTestId(_ symptomsDate: Date?) -> BEMobileTestId { - mobileTestId = BEMobileTestId.generate(symptomsDate) + let generatedTestId = BEMobileTestId.generate(symptomsDate) - return mobileTestId! + mobileTestId = generatedTestId + + return generatedTestId } func retrieveDiagnosisKeys(completionHandler: @escaping BEExposureSubmissionGetKeysHandler) { From 2681188871e32126ae19920004fe8afec014e076 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 15:12:51 +0100 Subject: [PATCH 13/17] More linter fixes --- src/xcode/ENA/BE/BEEnvironment.swift | 4 ++-- .../DynamicText/__tests__/BEDynamicTextTests.swift | 10 +++++++--- .../TestActivation/BEMobileTestIdActivator.swift | 14 +++++++------- 3 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/xcode/ENA/BE/BEEnvironment.swift b/src/xcode/ENA/BE/BEEnvironment.swift index 09908584e..79a71fc22 100644 --- a/src/xcode/ENA/BE/BEEnvironment.swift +++ b/src/xcode/ENA/BE/BEEnvironment.swift @@ -19,7 +19,7 @@ import Foundation -enum BEEnvironment: String { +enum BEEnvironment: String, CaseIterable { case production = "production" case staging = "staging" case test = "test" @@ -38,7 +38,7 @@ enum BEEnvironment: String { static var current: BEEnvironment { if let value = Bundle.main.infoDictionary?["BEEnvironment"] as? String { guard let environment = BEEnvironment(rawValue: value) else { - fatalError() + fatalError("Should never happen") } return environment diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift b/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift index 29b5447a3..d4d98273f 100644 --- a/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift +++ b/src/xcode/ENA/BE/DynamicText/__tests__/BEDynamicTextTests.swift @@ -33,10 +33,14 @@ class BEDynamicTextTests: XCTestCase { let testBundle = Bundle(for: type(of: self)) let url = testBundle.url(forResource: filename, withExtension: "json")! let decoder = JSONDecoder() - let data = try! Data(contentsOf: url) - let result = try! decoder.decode(BEDynamicText.self, from: data) + do { + let data = try Data(contentsOf: url) + let result = try decoder.decode(BEDynamicText.self, from: data) + return result + } catch { + fatalError("Something went wrong \(error.localizedDescription)") + } - return result } private func getFirstScreenSectionEntry(service:BEDynamicTextService, name: BEDynamicTextScreenName, section: BEDynamicTextScreenSectionName, language:BEDynamicTextLanguage = .current) -> BEDynamicTextScreenSection { diff --git a/src/xcode/ENA/BE/TestActivation/BEMobileTestIdActivator.swift b/src/xcode/ENA/BE/TestActivation/BEMobileTestIdActivator.swift index 7478ad61f..9ff93b62a 100644 --- a/src/xcode/ENA/BE/TestActivation/BEMobileTestIdActivator.swift +++ b/src/xcode/ENA/BE/TestActivation/BEMobileTestIdActivator.swift @@ -36,20 +36,20 @@ class BEMobileTestIdActivator { private static let paths = ["corona-alert-form","coronalert-formulier","coronalert-formular","formulaire-coronalert"] private let exposureSubmissionService: BEExposureSubmissionService - private let url:URL + private let url: URL /// the viewcontroller that will contain all the generated view controllers for this flow - private weak var parentViewController:UINavigationController! + private weak var parentViewController: UINavigationController! /// the container viewcontroller for the form - private var activateMobileTestIdNavigationController:UINavigationController? + private var activateMobileTestIdNavigationController: UINavigationController? private var mobileTestIdGenerator: BEMobileTestIdGenerator? - private var generatedNewMobileTestId:Bool = false + private var generatedNewMobileTestId: Bool = false private weak var delegate: BEMobileTestIdActivatorDelegate? - init?(_ exposureSubmissionService: BEExposureSubmissionService, parentViewController: UINavigationController, url:URL, delegate:BEMobileTestIdActivatorDelegate?) { + init?(_ exposureSubmissionService: BEExposureSubmissionService, parentViewController: UINavigationController, url:URL, delegate: BEMobileTestIdActivatorDelegate?) { if !Self.validateURL(url) { return nil @@ -76,7 +76,7 @@ class BEMobileTestIdActivator { // MARK: - URL validation - static private func validateURL(_ url:URL) -> Bool { + static private func validateURL(_ url: URL) -> Bool { guard let components = URLComponents(url: url, resolvingAgainstBaseURL: false) else { logError(message: "URL problem \(url)") return false @@ -97,7 +97,7 @@ class BEMobileTestIdActivator { return true } - static private func getActivationCodeFromURL(_ components:URLComponents) -> String? { + static private func getActivationCodeFromURL(_ components: URLComponents) -> String? { let activationCodeParameterName = "pcr" guard let queryItems = components.queryItems else { From 96cc151d5687ac6b60fc872e5796ca5291da0d98 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 15:13:11 +0100 Subject: [PATCH 14/17] add correct dynamic text url --- .../Client/HTTP Client/HTTPClient+Configuration.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift index d6c9437d1..410bd7cb4 100644 --- a/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift +++ b/src/xcode/ENA/ENA/Source/Client/HTTP Client/HTTPClient+Configuration.swift @@ -31,7 +31,7 @@ extension HTTPClient { static let submissionBaseURL = URL(string: "https://c19-submission-\(BEEnvironment.current.urlSuffix()).ixor.be")! static let verificationBaseURL = URL(string: "https://c19-verification-\(BEEnvironment.current.urlSuffix()).ixor.be")! static let statisticsBaseURL = URL(string: "https://c19statcdn-\(BEEnvironment.current.urlSuffix()).ixor.be")! - static let dynamicTextsURL = URL(string: "https://localhost:8888")! + static let dynamicTextsURL = URL(string: "https://coronalert-\(BEEnvironment.current.urlSuffix()).ixor.be")! // swiftlint:enable force_unwrapping // MARK: Default Instances @@ -228,7 +228,10 @@ extension HTTPClient { var dynamicTextsURL: URL { endpoints .dynamicTexts - .appending("dynamicTexts.json") + .appending( + "dynamictext", + "dynamicTexts.json" + ) } } } From d31958856c1ee7945ac0018162682cad2e952f1c Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 16:50:32 +0100 Subject: [PATCH 15/17] validate files online too --- .../__tests__/BEOnlineDynamicTextTests.swift | 49 +++++++++++++++++++ src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 4 ++ 2 files changed, 53 insertions(+) create mode 100644 src/xcode/ENA/BE/DynamicText/__tests__/BEOnlineDynamicTextTests.swift diff --git a/src/xcode/ENA/BE/DynamicText/__tests__/BEOnlineDynamicTextTests.swift b/src/xcode/ENA/BE/DynamicText/__tests__/BEOnlineDynamicTextTests.swift new file mode 100644 index 000000000..a98533198 --- /dev/null +++ b/src/xcode/ENA/BE/DynamicText/__tests__/BEOnlineDynamicTextTests.swift @@ -0,0 +1,49 @@ +// +// Coronalert +// +// Devside and all other contributors +// copyright owners license this file to you under the Apache +// License, Version 2.0 (the "License"); you may not use this +// file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. +// + +import XCTest +@testable import ENA +class BEOnlineDynamicTextTests: XCTestCase { + private func dynamicTextsURL(_ environment: BEEnvironment) -> URL { + let dynamicTextsURL = URL(string: "https://coronalert-\(environment.urlSuffix()).ixor.be")! + return dynamicTextsURL.appendingPathComponent("dynamictext/dynamicTexts.json") + } + + func testURL() throws { + let configuration = HTTPClient.Configuration.backendBaseURLs + let urlToTest = dynamicTextsURL(.test) + + XCTAssertEqual(configuration.dynamicTextsURL,urlToTest) + } + + func testEnvironments() throws { + try BEEnvironment.allCases.forEach{ environment in + try testDynamicTextOnUrl(dynamicTextsURL(environment)) + } + } + + func testDynamicTextOnUrl(_ url: URL) throws { + let data = try Data(contentsOf: url) + let decoder = JSONDecoder() + let result = try decoder.decode(BEDynamicText.self, from: data) + + try BEDynamicTextService.validateLoadedText(result) + } + +} diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index c09a58422..59a4381b7 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -269,6 +269,7 @@ A9221A5225472CB300853CEF /* testDownloadedTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A5125472CB200853CEF /* testDownloadedTexts.json */; }; A9221A572549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A562549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift */; }; A9221A592549B92600853CEF /* wrongStructureDynamicTexts.json in Resources */ = {isa = PBXBuildFile; fileRef = A9221A582549B92600853CEF /* wrongStructureDynamicTexts.json */; }; + A9221A5B254B02B400853CEF /* BEOnlineDynamicTextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9221A5A254B02B400853CEF /* BEOnlineDynamicTextTests.swift */; }; A929A71724DC3EE50039B997 /* BEHTTPClientSubmitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */; }; A92B66AD251CBF9B00F9B8DD /* BEUILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */; }; A935EE5624E0060400B33B66 /* BEENAUITests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A935EE5524E0060400B33B66 /* BEENAUITests.swift */; }; @@ -766,6 +767,7 @@ A9221A5125472CB200853CEF /* testDownloadedTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = testDownloadedTexts.json; sourceTree = ""; }; A9221A562549692D00853CEF /* BEDynamicTextScreenSection+Cells.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BEDynamicTextScreenSection+Cells.swift"; sourceTree = ""; }; A9221A582549B92600853CEF /* wrongStructureDynamicTexts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = wrongStructureDynamicTexts.json; sourceTree = ""; }; + A9221A5A254B02B400853CEF /* BEOnlineDynamicTextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEOnlineDynamicTextTests.swift; sourceTree = ""; }; A929A71624DC3EE50039B997 /* BEHTTPClientSubmitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEHTTPClientSubmitTests.swift; sourceTree = ""; }; A92B66AC251CBF9B00F9B8DD /* BEUILabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEUILabel.swift; sourceTree = ""; }; A935EE5524E0060400B33B66 /* BEENAUITests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BEENAUITests.swift; sourceTree = ""; }; @@ -1808,6 +1810,7 @@ A9221A4E2547216300853CEF /* testDynamicTexts.json */, A9221A5125472CB200853CEF /* testDownloadedTexts.json */, A9221A442546F3BF00853CEF /* BEDynamicTextTests.swift */, + A9221A5A254B02B400853CEF /* BEOnlineDynamicTextTests.swift */, ); path = __tests__; sourceTree = ""; @@ -3148,6 +3151,7 @@ A372DA4124BF33F9003248BB /* MockExposureSubmissionCoordinatorDelegate.swift in Sources */, B163D1102499068D001A322C /* SettingsViewModelTests.swift in Sources */, A1654F0224B43E8500C0E115 /* DynamicTableViewTextViewCellTests.swift in Sources */, + A9221A5B254B02B400853CEF /* BEOnlineDynamicTextTests.swift in Sources */, A1E419462495479D0016E52A /* HTTPClient+MockNetworkStack.swift in Sources */, B1CD333E24865E0000B06E9B /* TracingStatusHistoryTests.swift in Sources */, B1FE13ED24891D0400D012E5 /* RiskProviderTests.swift in Sources */, From d710f27bf57b6a5d63d7c1a2b1a13d1da014a8d2 Mon Sep 17 00:00:00 2001 From: Joris Mans Date: Thu, 29 Oct 2020 20:57:37 +0100 Subject: [PATCH 16/17] faster updates in staging and test --- .../BEDynamicTextDownloadService.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift b/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift index dfb882320..df933fb62 100644 --- a/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift +++ b/src/xcode/ENA/BE/DynamicText/BEDynamicTextDownloadService.swift @@ -30,7 +30,7 @@ class BEDynamicTextDownloadService { private var textService: BEDynamicTextService private let outdatedTimeInterval: TimeInterval - init(client: Client, textService: BEDynamicTextService, textOutdatedTimeInterval:TimeInterval = TimeInterval(24 * 60 * 60)) { + init(client: Client, textService: BEDynamicTextService, textOutdatedTimeInterval:TimeInterval = .textOutdatedTimeInterval) { self.client = client self.textService = textService self.outdatedTimeInterval = textOutdatedTimeInterval @@ -79,6 +79,17 @@ class BEDynamicTextDownloadService { } } } - +} +extension TimeInterval { + static var textOutdatedTimeInterval: TimeInterval { + switch BEEnvironment.current { + case .production: + return TimeInterval(24 * 60 * 60) + case .staging: + return TimeInterval(60) + case .test: + return TimeInterval(60) + } + } } From 7d182b05e3057703830b69cc3d784f9a5640dacd Mon Sep 17 00:00:00 2001 From: Distiller Date: Thu, 29 Oct 2020 23:23:54 +0000 Subject: [PATCH 17/17] [skip ci] version bump --- src/xcode/ENA/ENA.xcodeproj/project.pbxproj | 8 ++++---- src/xcode/ENA/ENA/Resources/Info.plist | 2 +- src/xcode/ENA/ENATests/Info.plist | 2 +- src/xcode/ENA/ENAUITests/Info.plist | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj index 59a4381b7..a49817a57 100644 --- a/src/xcode/ENA/ENA.xcodeproj/project.pbxproj +++ b/src/xcode/ENA/ENA.xcodeproj/project.pbxproj @@ -3357,7 +3357,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENACommunity.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 85; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3517,7 +3517,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENACommunity.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 85; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3733,7 +3733,7 @@ CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENATest.entitlements"; CODE_SIGN_IDENTITY = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 85; DEVELOPMENT_TEAM = UK48F668XR; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", @@ -3773,7 +3773,7 @@ CODE_SIGN_ENTITLEMENTS = "${PROJECT}/Resources/ENA.entitlements"; CODE_SIGN_IDENTITY = "iPhone Distribution"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 84; + CURRENT_PROJECT_VERSION = 85; DEVELOPMENT_TEAM = UK48F668XR; GCC_OPTIMIZATION_LEVEL = s; GCC_PREPROCESSOR_DEFINITIONS = "SQLITE_HAS_CODEC=1"; diff --git a/src/xcode/ENA/ENA/Resources/Info.plist b/src/xcode/ENA/ENA/Resources/Info.plist index 3208bb979..38afeec7f 100644 --- a/src/xcode/ENA/ENA/Resources/Info.plist +++ b/src/xcode/ENA/ENA/Resources/Info.plist @@ -26,7 +26,7 @@ CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion - 84 + 85 ENAPIVersion 1 ENDeveloperRegion diff --git a/src/xcode/ENA/ENATests/Info.plist b/src/xcode/ENA/ENATests/Info.plist index 95967e54b..575304bac 100644 --- a/src/xcode/ENA/ENATests/Info.plist +++ b/src/xcode/ENA/ENATests/Info.plist @@ -17,6 +17,6 @@ CFBundleShortVersionString 0.5.0 CFBundleVersion - 84 + 85 diff --git a/src/xcode/ENA/ENAUITests/Info.plist b/src/xcode/ENA/ENAUITests/Info.plist index 95967e54b..575304bac 100644 --- a/src/xcode/ENA/ENAUITests/Info.plist +++ b/src/xcode/ENA/ENAUITests/Info.plist @@ -17,6 +17,6 @@ CFBundleShortVersionString 0.5.0 CFBundleVersion - 84 + 85