mirror of
https://github.com/AU-COVIDSafe/mobile-ios.git
synced 2025-01-18 16:56:33 +00:00
COVIDSafe code from version 1.6 (#6)
This commit is contained in:
parent
149daee2e9
commit
2063cea613
38 changed files with 1963 additions and 1664 deletions
|
@ -20,8 +20,6 @@
|
||||||
0BA617CE242E09B200E6C631 /* FeedbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA617CD242E09B200E6C631 /* FeedbackViewController.swift */; };
|
0BA617CE242E09B200E6C631 /* FeedbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BA617CD242E09B200E6C631 /* FeedbackViewController.swift */; };
|
||||||
0BC141AC24305D9C00399FA8 /* NSMutableString + Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC141AB24305D9C00399FA8 /* NSMutableString + Extensions.swift */; };
|
0BC141AC24305D9C00399FA8 /* NSMutableString + Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC141AB24305D9C00399FA8 /* NSMutableString + Extensions.swift */; };
|
||||||
0BC141AE2430685800399FA8 /* UIColor + Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC141AD2430685800399FA8 /* UIColor + Extensions.swift */; };
|
0BC141AE2430685800399FA8 /* UIColor + Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0BC141AD2430685800399FA8 /* UIColor + Extensions.swift */; };
|
||||||
0BDE12302431DCE6003BC44C /* Questions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1B86118D24303E7D00EA4B6B /* Questions.storyboard */; };
|
|
||||||
1B86118E24303E7D00EA4B6B /* Questions.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 1B86118D24303E7D00EA4B6B /* Questions.storyboard */; };
|
|
||||||
1B86119124303EF200EA4B6B /* Question1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119024303EF200EA4B6B /* Question1ViewController.swift */; };
|
1B86119124303EF200EA4B6B /* Question1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119024303EF200EA4B6B /* Question1ViewController.swift */; };
|
||||||
1B86119324303F4A00EA4B6B /* Question2ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119224303F4A00EA4B6B /* Question2ViewController.swift */; };
|
1B86119324303F4A00EA4B6B /* Question2ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119224303F4A00EA4B6B /* Question2ViewController.swift */; };
|
||||||
1B86119524303F5E00EA4B6B /* Question3ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119424303F5E00EA4B6B /* Question3ViewController.swift */; };
|
1B86119524303F5E00EA4B6B /* Question3ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B86119424303F5E00EA4B6B /* Question3ViewController.swift */; };
|
||||||
|
@ -98,17 +96,27 @@
|
||||||
59F25D69245B917A002A7ED8 /* Spinner_home.json in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D68245B917A002A7ED8 /* Spinner_home.json */; };
|
59F25D69245B917A002A7ED8 /* Spinner_home.json in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D68245B917A002A7ED8 /* Spinner_home.json */; };
|
||||||
59F25D6A245B917A002A7ED8 /* Spinner_home.json in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D68245B917A002A7ED8 /* Spinner_home.json */; };
|
59F25D6A245B917A002A7ED8 /* Spinner_home.json in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D68245B917A002A7ED8 /* Spinner_home.json */; };
|
||||||
59F25D6F245BED80002A7ED8 /* Debug.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D6E245BED80002A7ED8 /* Debug.storyboard */; };
|
59F25D6F245BED80002A7ED8 /* Debug.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 59F25D6E245BED80002A7ED8 /* Debug.storyboard */; };
|
||||||
|
5B110C10248F275B00B68291 /* SelectCountryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B110C0F248F275A00B68291 /* SelectCountryViewController.swift */; };
|
||||||
|
5B110C11248F275B00B68291 /* SelectCountryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B110C0F248F275A00B68291 /* SelectCountryViewController.swift */; };
|
||||||
5B337AAB245A9BBC00537620 /* UploadDataErrorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */; };
|
5B337AAB245A9BBC00537620 /* UploadDataErrorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */; };
|
||||||
5B337AAC245A9EEC00537620 /* UploadDataPrefaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */; };
|
5B337AAC245A9EEC00537620 /* UploadDataPrefaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */; };
|
||||||
5B337AAD245A9EF800537620 /* UploadDataErrorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */; };
|
5B337AAD245A9EF800537620 /* UploadDataErrorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */; };
|
||||||
5B337AAF245AA26300537620 /* Spinner_upload.json in Resources */ = {isa = PBXBuildFile; fileRef = 5B337AAE245AA26300537620 /* Spinner_upload.json */; };
|
5B337AAF245AA26300537620 /* Spinner_upload.json in Resources */ = {isa = PBXBuildFile; fileRef = 5B337AAE245AA26300537620 /* Spinner_upload.json */; };
|
||||||
5B337AB0245AA26300537620 /* Spinner_upload.json in Resources */ = {isa = PBXBuildFile; fileRef = 5B337AAE245AA26300537620 /* Spinner_upload.json */; };
|
5B337AB0245AA26300537620 /* Spinner_upload.json in Resources */ = {isa = PBXBuildFile; fileRef = 5B337AAE245AA26300537620 /* Spinner_upload.json */; };
|
||||||
|
5B51ED502485D658008CE722 /* UILocalization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B51ED4F2485D658008CE722 /* UILocalization.swift */; };
|
||||||
|
5B51ED512485DF9C008CE722 /* UILocalization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B51ED4F2485D658008CE722 /* UILocalization.swift */; };
|
||||||
|
5B51ED55248627A8008CE722 /* UploadData.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5B51ED58248627A8008CE722 /* UploadData.storyboard */; };
|
||||||
|
5B51ED56248627A8008CE722 /* UploadData.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5B51ED58248627A8008CE722 /* UploadData.storyboard */; };
|
||||||
|
5B51ED61248715DE008CE722 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B51ED64248715DE008CE722 /* InfoPlist.strings */; };
|
||||||
|
5B51ED62248715DE008CE722 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B51ED64248715DE008CE722 /* InfoPlist.strings */; };
|
||||||
5B577815245A584C0088F111 /* UploadDataPrefaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */; };
|
5B577815245A584C0088F111 /* UploadDataPrefaceViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */; };
|
||||||
5B7ABF25244D3BC600BB249B /* IsolationSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */; };
|
5B7ABF25244D3BC600BB249B /* IsolationSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */; };
|
||||||
5B7ABF26244D3BC600BB249B /* IsolationSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */; };
|
5B7ABF26244D3BC600BB249B /* IsolationSuccessViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */; };
|
||||||
5B7ABF28244D6BE100BB249B /* UnderSixteenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF27244D6BE100BB249B /* UnderSixteenViewController.swift */; };
|
5B7ABF28244D6BE100BB249B /* UnderSixteenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B7ABF27244D6BE100BB249B /* UnderSixteenViewController.swift */; };
|
||||||
5B82435E2480DC2100705CB1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B8243612480DC2100705CB1 /* Localizable.strings */; };
|
5B82435E2480DC2100705CB1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B8243612480DC2100705CB1 /* Localizable.strings */; };
|
||||||
5B82435F2480DC2100705CB1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B8243612480DC2100705CB1 /* Localizable.strings */; };
|
5B82435F2480DC2100705CB1 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 5B8243612480DC2100705CB1 /* Localizable.strings */; };
|
||||||
|
5B900FC12485C4EE00CAA419 /* String+Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B900FC02485C4EE00CAA419 /* String+Localization.swift */; };
|
||||||
|
5B900FC22485C4EE00CAA419 /* String+Localization.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B900FC02485C4EE00CAA419 /* String+Localization.swift */; };
|
||||||
5B92D663243011B40049877B /* CovidSafe-config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5B92D662243011B30049877B /* CovidSafe-config.plist */; };
|
5B92D663243011B40049877B /* CovidSafe-config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5B92D662243011B30049877B /* CovidSafe-config.plist */; };
|
||||||
5B92D66B243018040049877B /* UIProgressView + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */; };
|
5B92D66B243018040049877B /* UIProgressView + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */; };
|
||||||
5B92D66D243018040049877B /* tracer.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5DD41D7723DE141700FD4AB0 /* tracer.xcdatamodeld */; };
|
5B92D66D243018040049877B /* tracer.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 5DD41D7723DE141700FD4AB0 /* tracer.xcdatamodeld */; };
|
||||||
|
@ -179,14 +187,11 @@
|
||||||
5B92D6B5243018040049877B /* Encounter+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8DD06023E319B300E097EF /* Encounter+CoreDataProperties.swift */; };
|
5B92D6B5243018040049877B /* Encounter+CoreDataProperties.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D8DD06023E319B300E097EF /* Encounter+CoreDataProperties.swift */; };
|
||||||
5B92D6B6243018040049877B /* Issue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A767D2FF242DF1B000DC9E2A /* Issue.swift */; };
|
5B92D6B6243018040049877B /* Issue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A767D2FF242DF1B000DC9E2A /* Issue.swift */; };
|
||||||
5B92D6BA243018040049877B /* help_center_article_style.css in Resources */ = {isa = PBXBuildFile; fileRef = D8EB201C23FBE216001C60EC /* help_center_article_style.css */; };
|
5B92D6BA243018040049877B /* help_center_article_style.css in Resources */ = {isa = PBXBuildFile; fileRef = D8EB201C23FBE216001C60EC /* help_center_article_style.css */; };
|
||||||
5B92D6BB243018040049877B /* UploadData.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6932CE624260E2B003D1810 /* UploadData.storyboard */; };
|
|
||||||
5B92D6BD243018040049877B /* JMCTarget.json in Resources */ = {isa = PBXBuildFile; fileRef = A767D2DA242DF1B000DC9E2A /* JMCTarget.json */; };
|
5B92D6BD243018040049877B /* JMCTarget.json in Resources */ = {isa = PBXBuildFile; fileRef = A767D2DA242DF1B000DC9E2A /* JMCTarget.json */; };
|
||||||
5B92D6BF243018040049877B /* NewFeedbackFlow.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */; };
|
5B92D6BF243018040049877B /* NewFeedbackFlow.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */; };
|
||||||
5B92D6C7243018040049877B /* CovidSafe-config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5B92D666243012330049877B /* CovidSafe-config.plist */; };
|
5B92D6C7243018040049877B /* CovidSafe-config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 5B92D666243012330049877B /* CovidSafe-config.plist */; };
|
||||||
5B92D6C8243018040049877B /* NewFeedbackFlow.strings in Resources */ = {isa = PBXBuildFile; fileRef = A767D2B2242DF1B000DC9E2A /* NewFeedbackFlow.strings */; };
|
|
||||||
5B92D6C9243018040049877B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */; };
|
5B92D6C9243018040049877B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */; };
|
||||||
5B92D6CB243018040049877B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */; };
|
5B92D6CB243018040049877B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */; };
|
||||||
5B92D6CC243018040049877B /* Feedback.strings in Resources */ = {isa = PBXBuildFile; fileRef = A767D2B0242DF1B000DC9E2A /* Feedback.strings */; };
|
|
||||||
5B92D6CF243018040049877B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */; };
|
5B92D6CF243018040049877B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */; };
|
||||||
5B92D74F243022EF0049877B /* DataUploadS3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59ACB575242F404500E63E3C /* DataUploadS3.swift */; };
|
5B92D74F243022EF0049877B /* DataUploadS3.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59ACB575242F404500E63E3C /* DataUploadS3.swift */; };
|
||||||
5B92D750243022F20049877B /* InitiateUploadAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59ACB573242F195A00E63E3C /* InitiateUploadAPI.swift */; };
|
5B92D750243022F20049877B /* InitiateUploadAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59ACB573242F195A00E63E3C /* InitiateUploadAPI.swift */; };
|
||||||
|
@ -215,8 +220,6 @@
|
||||||
7FACD53A23F25A9A0042A33A /* InitialScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FACD53923F25A9A0042A33A /* InitialScreenViewController.swift */; };
|
7FACD53A23F25A9A0042A33A /* InitialScreenViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FACD53923F25A9A0042A33A /* InitialScreenViewController.swift */; };
|
||||||
7FEC361523F16A1E00127AFB /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FEC361423F16A1E00127AFB /* UIViewExtension.swift */; };
|
7FEC361523F16A1E00127AFB /* UIViewExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FEC361423F16A1E00127AFB /* UIViewExtension.swift */; };
|
||||||
7FF75C222429FEE800C11FEA /* CountriesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FF75C212429FEE800C11FEA /* CountriesData.swift */; };
|
7FF75C222429FEE800C11FEA /* CountriesData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FF75C212429FEE800C11FEA /* CountriesData.swift */; };
|
||||||
A767D30E242DF1B000DC9E2A /* Feedback.strings in Resources */ = {isa = PBXBuildFile; fileRef = A767D2B0242DF1B000DC9E2A /* Feedback.strings */; };
|
|
||||||
A767D30F242DF1B000DC9E2A /* NewFeedbackFlow.strings in Resources */ = {isa = PBXBuildFile; fileRef = A767D2B2242DF1B000DC9E2A /* NewFeedbackFlow.strings */; };
|
|
||||||
A767D312242DF1B000DC9E2A /* NewFeedbackFlow.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */; };
|
A767D312242DF1B000DC9E2A /* NewFeedbackFlow.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */; };
|
||||||
A767D313242DF1B000DC9E2A /* JMCTarget.json in Resources */ = {isa = PBXBuildFile; fileRef = A767D2DA242DF1B000DC9E2A /* JMCTarget.json */; };
|
A767D313242DF1B000DC9E2A /* JMCTarget.json in Resources */ = {isa = PBXBuildFile; fileRef = A767D2DA242DF1B000DC9E2A /* JMCTarget.json */; };
|
||||||
A767D316242DF1B000DC9E2A /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A767D2EB242DF1B000DC9E2A /* Logging.swift */; };
|
A767D316242DF1B000DC9E2A /* Logging.swift in Sources */ = {isa = PBXBuildFile; fileRef = A767D2EB242DF1B000DC9E2A /* Logging.swift */; };
|
||||||
|
@ -247,7 +250,6 @@
|
||||||
B60F8BE4242659810007A641 /* UILabelExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B60F8BE3242659810007A641 /* UILabelExtension.swift */; };
|
B60F8BE4242659810007A641 /* UILabelExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B60F8BE3242659810007A641 /* UILabelExtension.swift */; };
|
||||||
B615C5A723F8EB1700345969 /* UIProgressView + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */; };
|
B615C5A723F8EB1700345969 /* UIProgressView + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */; };
|
||||||
B615C5A923FA403500345969 /* UIViewController + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A823FA403400345969 /* UIViewController + Extension.swift */; };
|
B615C5A923FA403500345969 /* UIViewController + Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = B615C5A823FA403400345969 /* UIViewController + Extension.swift */; };
|
||||||
B6932CE724260E2B003D1810 /* UploadData.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B6932CE624260E2B003D1810 /* UploadData.storyboard */; };
|
|
||||||
C5046D5C23EF18600046E96D /* OnboardingStep1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5046D5B23EF18600046E96D /* OnboardingStep1ViewController.swift */; };
|
C5046D5C23EF18600046E96D /* OnboardingStep1ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5046D5B23EF18600046E96D /* OnboardingStep1ViewController.swift */; };
|
||||||
C56CF43F23F18A15006B05B0 /* OnboardingStep4ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */; };
|
C56CF43F23F18A15006B05B0 /* OnboardingStep4ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */; };
|
||||||
C585C83B23EEB99B0061B7C6 /* GradientButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C585C83A23EEB99B0061B7C6 /* GradientButton.swift */; };
|
C585C83B23EEB99B0061B7C6 /* GradientButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = C585C83A23EEB99B0061B7C6 /* GradientButton.swift */; };
|
||||||
|
@ -276,7 +278,6 @@
|
||||||
0BC141AD2430685800399FA8 /* UIColor + Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor + Extensions.swift"; sourceTree = "<group>"; };
|
0BC141AD2430685800399FA8 /* UIColor + Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor + Extensions.swift"; sourceTree = "<group>"; };
|
||||||
122AF4E79D17C983066C1CEB /* Pods-CovidSafe-staging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe-staging.release.xcconfig"; path = "Target Support Files/Pods-CovidSafe-staging/Pods-CovidSafe-staging.release.xcconfig"; sourceTree = "<group>"; };
|
122AF4E79D17C983066C1CEB /* Pods-CovidSafe-staging.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe-staging.release.xcconfig"; path = "Target Support Files/Pods-CovidSafe-staging/Pods-CovidSafe-staging.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
1925EA5F4413AD52AC198894 /* Pods-CovidSafe.covid-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe.covid-production.xcconfig"; path = "Target Support Files/Pods-CovidSafe/Pods-CovidSafe.covid-production.xcconfig"; sourceTree = "<group>"; };
|
1925EA5F4413AD52AC198894 /* Pods-CovidSafe.covid-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe.covid-production.xcconfig"; path = "Target Support Files/Pods-CovidSafe/Pods-CovidSafe.covid-production.xcconfig"; sourceTree = "<group>"; };
|
||||||
1B86118D24303E7D00EA4B6B /* Questions.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Questions.storyboard; sourceTree = "<group>"; };
|
|
||||||
1B86119024303EF200EA4B6B /* Question1ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question1ViewController.swift; sourceTree = "<group>"; };
|
1B86119024303EF200EA4B6B /* Question1ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question1ViewController.swift; sourceTree = "<group>"; };
|
||||||
1B86119224303F4A00EA4B6B /* Question2ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question2ViewController.swift; sourceTree = "<group>"; };
|
1B86119224303F4A00EA4B6B /* Question2ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question2ViewController.swift; sourceTree = "<group>"; };
|
||||||
1B86119424303F5E00EA4B6B /* Question3ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question3ViewController.swift; sourceTree = "<group>"; };
|
1B86119424303F5E00EA4B6B /* Question3ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Question3ViewController.swift; sourceTree = "<group>"; };
|
||||||
|
@ -327,12 +328,20 @@
|
||||||
59B7416F24514126006E1EEA /* RegistrationConsentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationConsentViewController.swift; sourceTree = "<group>"; };
|
59B7416F24514126006E1EEA /* RegistrationConsentViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RegistrationConsentViewController.swift; sourceTree = "<group>"; };
|
||||||
59F25D68245B917A002A7ED8 /* Spinner_home.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Spinner_home.json; sourceTree = "<group>"; };
|
59F25D68245B917A002A7ED8 /* Spinner_home.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Spinner_home.json; sourceTree = "<group>"; };
|
||||||
59F25D6E245BED80002A7ED8 /* Debug.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Debug.storyboard; sourceTree = "<group>"; };
|
59F25D6E245BED80002A7ED8 /* Debug.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = Debug.storyboard; sourceTree = "<group>"; };
|
||||||
|
5B110C0F248F275A00B68291 /* SelectCountryViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SelectCountryViewController.swift; sourceTree = "<group>"; };
|
||||||
5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UploadDataErrorViewController.swift; sourceTree = "<group>"; };
|
5B337AAA245A9BBC00537620 /* UploadDataErrorViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UploadDataErrorViewController.swift; sourceTree = "<group>"; };
|
||||||
5B337AAE245AA26300537620 /* Spinner_upload.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Spinner_upload.json; sourceTree = "<group>"; };
|
5B337AAE245AA26300537620 /* Spinner_upload.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = Spinner_upload.json; sourceTree = "<group>"; };
|
||||||
|
5B51ED4F2485D658008CE722 /* UILocalization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UILocalization.swift; sourceTree = "<group>"; };
|
||||||
|
5B51ED63248715DE008CE722 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||||
|
5B51ED6D248776CA008CE722 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/NewFeedbackFlow.storyboard; sourceTree = "<group>"; };
|
||||||
|
5B51ED6E248776CA008CE722 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/UploadData.storyboard; sourceTree = "<group>"; };
|
||||||
|
5B51ED6F248776CB008CE722 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
||||||
5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UploadDataPrefaceViewController.swift; sourceTree = "<group>"; };
|
5B577814245A584C0088F111 /* UploadDataPrefaceViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UploadDataPrefaceViewController.swift; sourceTree = "<group>"; };
|
||||||
5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IsolationSuccessViewController.swift; sourceTree = "<group>"; };
|
5B7ABF24244D3BC600BB249B /* IsolationSuccessViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IsolationSuccessViewController.swift; sourceTree = "<group>"; };
|
||||||
5B7ABF27244D6BE100BB249B /* UnderSixteenViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnderSixteenViewController.swift; sourceTree = "<group>"; };
|
5B7ABF27244D6BE100BB249B /* UnderSixteenViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = UnderSixteenViewController.swift; sourceTree = "<group>"; };
|
||||||
|
5B7B031D2490703500296DE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
||||||
5B8243602480DC2100705CB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
5B8243602480DC2100705CB1 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||||
|
5B900FC02485C4EE00CAA419 /* String+Localization.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Localization.swift"; sourceTree = "<group>"; };
|
||||||
5B92D662243011B30049877B /* CovidSafe-config.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "CovidSafe-config.plist"; path = "Resources/PROD/CovidSafe-config.plist"; sourceTree = "<group>"; };
|
5B92D662243011B30049877B /* CovidSafe-config.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "CovidSafe-config.plist"; path = "Resources/PROD/CovidSafe-config.plist"; sourceTree = "<group>"; };
|
||||||
5B92D666243012330049877B /* CovidSafe-config.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "CovidSafe-config.plist"; path = "Resources/STG/CovidSafe-config.plist"; sourceTree = "<group>"; };
|
5B92D666243012330049877B /* CovidSafe-config.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = "CovidSafe-config.plist"; path = "Resources/STG/CovidSafe-config.plist"; sourceTree = "<group>"; };
|
||||||
5B92D6D9243018040049877B /* COVIDSafe-staging.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "COVIDSafe-staging.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
5B92D6D9243018040049877B /* COVIDSafe-staging.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "COVIDSafe-staging.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
@ -352,9 +361,7 @@
|
||||||
5DC7B8D2242B8D87008E1715 /* BluetraceUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetraceUtils.swift; sourceTree = "<group>"; };
|
5DC7B8D2242B8D87008E1715 /* BluetraceUtils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BluetraceUtils.swift; sourceTree = "<group>"; };
|
||||||
5DD41D3723DCB03B00FD4AB0 /* COVIDSafe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = COVIDSafe.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
5DD41D3723DCB03B00FD4AB0 /* COVIDSafe.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = COVIDSafe.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
5DD41D3A23DCB03B00FD4AB0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
5DD41D3A23DCB03B00FD4AB0 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||||
5DD41D4123DCB03B00FD4AB0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
|
|
||||||
5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
5DD41D4623DCB03D00FD4AB0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
|
|
||||||
5DD41D4823DCB03D00FD4AB0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
5DD41D4823DCB03D00FD4AB0 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
5DD41D4E23DCB05600FD4AB0 /* CentralController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralController.swift; sourceTree = "<group>"; };
|
5DD41D4E23DCB05600FD4AB0 /* CentralController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CentralController.swift; sourceTree = "<group>"; };
|
||||||
5DD41D5223DD4CA400FD4AB0 /* PeripheralController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralController.swift; sourceTree = "<group>"; };
|
5DD41D5223DD4CA400FD4AB0 /* PeripheralController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PeripheralController.swift; sourceTree = "<group>"; };
|
||||||
|
@ -369,9 +376,6 @@
|
||||||
7FEC361423F16A1E00127AFB /* UIViewExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewExtension.swift; sourceTree = "<group>"; };
|
7FEC361423F16A1E00127AFB /* UIViewExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIViewExtension.swift; sourceTree = "<group>"; };
|
||||||
7FF75C212429FEE800C11FEA /* CountriesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountriesData.swift; sourceTree = "<group>"; };
|
7FF75C212429FEE800C11FEA /* CountriesData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CountriesData.swift; sourceTree = "<group>"; };
|
||||||
81B28CDCE1F29BA0F1D30CCE /* Pods-CovidSafe-staging.covid-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe-staging.covid-production.xcconfig"; path = "Target Support Files/Pods-CovidSafe-staging/Pods-CovidSafe-staging.covid-production.xcconfig"; sourceTree = "<group>"; };
|
81B28CDCE1F29BA0F1D30CCE /* Pods-CovidSafe-staging.covid-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-CovidSafe-staging.covid-production.xcconfig"; path = "Target Support Files/Pods-CovidSafe-staging/Pods-CovidSafe-staging.covid-production.xcconfig"; sourceTree = "<group>"; };
|
||||||
A767D2B6242DF1B000DC9E2A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Feedback.strings; sourceTree = "<group>"; };
|
|
||||||
A767D2B7242DF1B000DC9E2A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/NewFeedbackFlow.strings; sourceTree = "<group>"; };
|
|
||||||
A767D2D1242DF1B000DC9E2A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/NewFeedbackFlow.storyboard; sourceTree = "<group>"; };
|
|
||||||
A767D2DA242DF1B000DC9E2A /* JMCTarget.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = JMCTarget.json; sourceTree = "<group>"; };
|
A767D2DA242DF1B000DC9E2A /* JMCTarget.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = JMCTarget.json; sourceTree = "<group>"; };
|
||||||
A767D2E8242DF1B000DC9E2A /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
A767D2E8242DF1B000DC9E2A /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
|
||||||
A767D2EB242DF1B000DC9E2A /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = "<group>"; };
|
A767D2EB242DF1B000DC9E2A /* Logging.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Logging.swift; sourceTree = "<group>"; };
|
||||||
|
@ -402,7 +406,6 @@
|
||||||
B60F8BE3242659810007A641 /* UILabelExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UILabelExtension.swift; sourceTree = "<group>"; };
|
B60F8BE3242659810007A641 /* UILabelExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UILabelExtension.swift; sourceTree = "<group>"; };
|
||||||
B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIProgressView + Extension.swift"; sourceTree = "<group>"; };
|
B615C5A623F8EB1700345969 /* UIProgressView + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIProgressView + Extension.swift"; sourceTree = "<group>"; };
|
||||||
B615C5A823FA403400345969 /* UIViewController + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController + Extension.swift"; sourceTree = "<group>"; };
|
B615C5A823FA403400345969 /* UIViewController + Extension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIViewController + Extension.swift"; sourceTree = "<group>"; };
|
||||||
B6932CE624260E2B003D1810 /* UploadData.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = UploadData.storyboard; sourceTree = "<group>"; };
|
|
||||||
C5046D5B23EF18600046E96D /* OnboardingStep1ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingStep1ViewController.swift; sourceTree = "<group>"; };
|
C5046D5B23EF18600046E96D /* OnboardingStep1ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingStep1ViewController.swift; sourceTree = "<group>"; };
|
||||||
C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingStep4ViewController.swift; sourceTree = "<group>"; };
|
C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingStep4ViewController.swift; sourceTree = "<group>"; };
|
||||||
C585C83A23EEB99B0061B7C6 /* GradientButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientButton.swift; sourceTree = "<group>"; };
|
C585C83A23EEB99B0061B7C6 /* GradientButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GradientButton.swift; sourceTree = "<group>"; };
|
||||||
|
@ -487,6 +490,7 @@
|
||||||
7F2F0BA123EFFF75006D7404 /* OnboardingStep2ViewController.swift */,
|
7F2F0BA123EFFF75006D7404 /* OnboardingStep2ViewController.swift */,
|
||||||
C58D817623F169DB00345771 /* OnboardingStep2bViewController.swift */,
|
C58D817623F169DB00345771 /* OnboardingStep2bViewController.swift */,
|
||||||
C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */,
|
C56CF43E23F18A15006B05B0 /* OnboardingStep4ViewController.swift */,
|
||||||
|
5B110C0F248F275A00B68291 /* SelectCountryViewController.swift */,
|
||||||
5D8DD05923E2F08400E097EF /* ContactViewController.swift */,
|
5D8DD05923E2F08400E097EF /* ContactViewController.swift */,
|
||||||
5D8DD05B23E2F0A700E097EF /* LogViewController.swift */,
|
5D8DD05B23E2F0A700E097EF /* LogViewController.swift */,
|
||||||
5D8DD05D23E2F0BA00E097EF /* InfoViewController.swift */,
|
5D8DD05D23E2F0BA00E097EF /* InfoViewController.swift */,
|
||||||
|
@ -535,10 +539,12 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B605A7B02427429D008BA819 /* PlistHelper.swift */,
|
B605A7B02427429D008BA819 /* PlistHelper.swift */,
|
||||||
|
5B900FC02485C4EE00CAA419 /* String+Localization.swift */,
|
||||||
0B1810112431EE610005D11F /* PhoneNumberParser.swift */,
|
0B1810112431EE610005D11F /* PhoneNumberParser.swift */,
|
||||||
596B189B24499591003E190F /* UploadHelper.swift */,
|
596B189B24499591003E190F /* UploadHelper.swift */,
|
||||||
59898602245173C200966E61 /* URLHelper.swift */,
|
59898602245173C200966E61 /* URLHelper.swift */,
|
||||||
59F25D6E245BED80002A7ED8 /* Debug.storyboard */,
|
59F25D6E245BED80002A7ED8 /* Debug.storyboard */,
|
||||||
|
5B51ED4F2485D658008CE722 /* UILocalization.swift */,
|
||||||
);
|
);
|
||||||
name = Utils;
|
name = Utils;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -606,6 +612,7 @@
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
5B8243612480DC2100705CB1 /* Localizable.strings */,
|
5B8243612480DC2100705CB1 /* Localizable.strings */,
|
||||||
|
5B51ED64248715DE008CE722 /* InfoPlist.strings */,
|
||||||
);
|
);
|
||||||
name = Internationalization;
|
name = Internationalization;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -693,7 +700,6 @@
|
||||||
30FADD6C23F520F5006C125F /* Utils */,
|
30FADD6C23F520F5006C125F /* Utils */,
|
||||||
5DD41D7723DE141700FD4AB0 /* tracer.xcdatamodeld */,
|
5DD41D7723DE141700FD4AB0 /* tracer.xcdatamodeld */,
|
||||||
5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */,
|
5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */,
|
||||||
1B86118D24303E7D00EA4B6B /* Questions.storyboard */,
|
|
||||||
D8EB201C23FBE216001C60EC /* help_center_article_style.css */,
|
D8EB201C23FBE216001C60EC /* help_center_article_style.css */,
|
||||||
5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */,
|
5DD41D4323DCB03D00FD4AB0 /* Assets.xcassets */,
|
||||||
5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */,
|
5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */,
|
||||||
|
@ -726,8 +732,6 @@
|
||||||
A767D2AF242DF1B000DC9E2A /* Resources */ = {
|
A767D2AF242DF1B000DC9E2A /* Resources */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
A767D2B0242DF1B000DC9E2A /* Feedback.strings */,
|
|
||||||
A767D2B2242DF1B000DC9E2A /* NewFeedbackFlow.strings */,
|
|
||||||
A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */,
|
A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */,
|
||||||
A767D2DA242DF1B000DC9E2A /* JMCTarget.json */,
|
A767D2DA242DF1B000DC9E2A /* JMCTarget.json */,
|
||||||
);
|
);
|
||||||
|
@ -780,7 +784,7 @@
|
||||||
B6932CE8242627A9003D1810 /* Upload Data */ = {
|
B6932CE8242627A9003D1810 /* Upload Data */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
B6932CE624260E2B003D1810 /* UploadData.storyboard */,
|
5B51ED58248627A8008CE722 /* UploadData.storyboard */,
|
||||||
30E91BE823EFE514002D592A /* UploadDataVC.swift */,
|
30E91BE823EFE514002D592A /* UploadDataVC.swift */,
|
||||||
5BD3EE8224330E1A0004A007 /* UploadDataStep2VC.swift */,
|
5BD3EE8224330E1A0004A007 /* UploadDataStep2VC.swift */,
|
||||||
0B69E7E82430C22E00561DD9 /* UploadDataHomeViewController.swift */,
|
0B69E7E82430C22E00561DD9 /* UploadDataHomeViewController.swift */,
|
||||||
|
@ -897,30 +901,6 @@
|
||||||
knownRegions = (
|
knownRegions = (
|
||||||
en,
|
en,
|
||||||
Base,
|
Base,
|
||||||
de,
|
|
||||||
ja,
|
|
||||||
nb,
|
|
||||||
"en-GB",
|
|
||||||
is,
|
|
||||||
da,
|
|
||||||
et,
|
|
||||||
it,
|
|
||||||
sk,
|
|
||||||
sv,
|
|
||||||
cs,
|
|
||||||
ko,
|
|
||||||
hu,
|
|
||||||
pl,
|
|
||||||
"pt-BR",
|
|
||||||
ru,
|
|
||||||
fr,
|
|
||||||
fi,
|
|
||||||
nl,
|
|
||||||
pt,
|
|
||||||
"pt-PT",
|
|
||||||
ro,
|
|
||||||
zh,
|
|
||||||
es,
|
|
||||||
);
|
);
|
||||||
mainGroup = 5DD41D2E23DCB03B00FD4AB0;
|
mainGroup = 5DD41D2E23DCB03B00FD4AB0;
|
||||||
productRefGroup = 5DD41D3823DCB03B00FD4AB0 /* Products */;
|
productRefGroup = 5DD41D3823DCB03B00FD4AB0 /* Products */;
|
||||||
|
@ -939,23 +919,21 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
5B92D6BA243018040049877B /* help_center_article_style.css in Resources */,
|
5B92D6BA243018040049877B /* help_center_article_style.css in Resources */,
|
||||||
5B92D6BB243018040049877B /* UploadData.storyboard in Resources */,
|
5B51ED62248715DE008CE722 /* InfoPlist.strings in Resources */,
|
||||||
|
5B51ED56248627A8008CE722 /* UploadData.storyboard in Resources */,
|
||||||
5B92D6BD243018040049877B /* JMCTarget.json in Resources */,
|
5B92D6BD243018040049877B /* JMCTarget.json in Resources */,
|
||||||
5B92D6BF243018040049877B /* NewFeedbackFlow.storyboard in Resources */,
|
5B92D6BF243018040049877B /* NewFeedbackFlow.storyboard in Resources */,
|
||||||
59AF2EA92435801400ACCAF2 /* SFSRootCAG2.cer in Resources */,
|
59AF2EA92435801400ACCAF2 /* SFSRootCAG2.cer in Resources */,
|
||||||
0BDE12302431DCE6003BC44C /* Questions.storyboard in Resources */,
|
|
||||||
59F25D6A245B917A002A7ED8 /* Spinner_home.json in Resources */,
|
59F25D6A245B917A002A7ED8 /* Spinner_home.json in Resources */,
|
||||||
5B82435F2480DC2100705CB1 /* Localizable.strings in Resources */,
|
5B82435F2480DC2100705CB1 /* Localizable.strings in Resources */,
|
||||||
5B92D6C7243018040049877B /* CovidSafe-config.plist in Resources */,
|
5B92D6C7243018040049877B /* CovidSafe-config.plist in Resources */,
|
||||||
59AF2EA0243560FD00ACCAF2 /* AmazonRootCA1.cer in Resources */,
|
59AF2EA0243560FD00ACCAF2 /* AmazonRootCA1.cer in Resources */,
|
||||||
5B92D6C8243018040049877B /* NewFeedbackFlow.strings in Resources */,
|
|
||||||
5961ABEE2474E464004040DF /* spinner_migrating_db.json in Resources */,
|
5961ABEE2474E464004040DF /* spinner_migrating_db.json in Resources */,
|
||||||
59AF2EAD2435801400ACCAF2 /* AmazonRootCA4.cer in Resources */,
|
59AF2EAD2435801400ACCAF2 /* AmazonRootCA4.cer in Resources */,
|
||||||
59F25D6F245BED80002A7ED8 /* Debug.storyboard in Resources */,
|
59F25D6F245BED80002A7ED8 /* Debug.storyboard in Resources */,
|
||||||
5B92D6C9243018040049877B /* LaunchScreen.storyboard in Resources */,
|
5B92D6C9243018040049877B /* LaunchScreen.storyboard in Resources */,
|
||||||
59AF2EAF2435801400ACCAF2 /* AmazonRootCA2.cer in Resources */,
|
59AF2EAF2435801400ACCAF2 /* AmazonRootCA2.cer in Resources */,
|
||||||
5B92D6CB243018040049877B /* Assets.xcassets in Resources */,
|
5B92D6CB243018040049877B /* Assets.xcassets in Resources */,
|
||||||
5B92D6CC243018040049877B /* Feedback.strings in Resources */,
|
|
||||||
5B337AB0245AA26300537620 /* Spinner_upload.json in Resources */,
|
5B337AB0245AA26300537620 /* Spinner_upload.json in Resources */,
|
||||||
59AF2EAB2435801400ACCAF2 /* AmazonRootCA3.cer in Resources */,
|
59AF2EAB2435801400ACCAF2 /* AmazonRootCA3.cer in Resources */,
|
||||||
5B92D6CF243018040049877B /* Main.storyboard in Resources */,
|
5B92D6CF243018040049877B /* Main.storyboard in Resources */,
|
||||||
|
@ -967,21 +945,19 @@
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
D8EB201D23FBE216001C60EC /* help_center_article_style.css in Resources */,
|
D8EB201D23FBE216001C60EC /* help_center_article_style.css in Resources */,
|
||||||
B6932CE724260E2B003D1810 /* UploadData.storyboard in Resources */,
|
5B51ED55248627A8008CE722 /* UploadData.storyboard in Resources */,
|
||||||
A767D313242DF1B000DC9E2A /* JMCTarget.json in Resources */,
|
A767D313242DF1B000DC9E2A /* JMCTarget.json in Resources */,
|
||||||
1B86118E24303E7D00EA4B6B /* Questions.storyboard in Resources */,
|
|
||||||
59AF2EA82435801400ACCAF2 /* SFSRootCAG2.cer in Resources */,
|
59AF2EA82435801400ACCAF2 /* SFSRootCAG2.cer in Resources */,
|
||||||
A767D312242DF1B000DC9E2A /* NewFeedbackFlow.storyboard in Resources */,
|
A767D312242DF1B000DC9E2A /* NewFeedbackFlow.storyboard in Resources */,
|
||||||
59F25D69245B917A002A7ED8 /* Spinner_home.json in Resources */,
|
59F25D69245B917A002A7ED8 /* Spinner_home.json in Resources */,
|
||||||
5B82435E2480DC2100705CB1 /* Localizable.strings in Resources */,
|
5B82435E2480DC2100705CB1 /* Localizable.strings in Resources */,
|
||||||
5B92D663243011B40049877B /* CovidSafe-config.plist in Resources */,
|
5B92D663243011B40049877B /* CovidSafe-config.plist in Resources */,
|
||||||
59AF2E9F243560FD00ACCAF2 /* AmazonRootCA1.cer in Resources */,
|
59AF2E9F243560FD00ACCAF2 /* AmazonRootCA1.cer in Resources */,
|
||||||
A767D30F242DF1B000DC9E2A /* NewFeedbackFlow.strings in Resources */,
|
5B51ED61248715DE008CE722 /* InfoPlist.strings in Resources */,
|
||||||
59AF2EAC2435801400ACCAF2 /* AmazonRootCA4.cer in Resources */,
|
59AF2EAC2435801400ACCAF2 /* AmazonRootCA4.cer in Resources */,
|
||||||
5DD41D4723DCB03D00FD4AB0 /* LaunchScreen.storyboard in Resources */,
|
5DD41D4723DCB03D00FD4AB0 /* LaunchScreen.storyboard in Resources */,
|
||||||
59AF2EAE2435801400ACCAF2 /* AmazonRootCA2.cer in Resources */,
|
59AF2EAE2435801400ACCAF2 /* AmazonRootCA2.cer in Resources */,
|
||||||
5DD41D4423DCB03D00FD4AB0 /* Assets.xcassets in Resources */,
|
5DD41D4423DCB03D00FD4AB0 /* Assets.xcassets in Resources */,
|
||||||
A767D30E242DF1B000DC9E2A /* Feedback.strings in Resources */,
|
|
||||||
5B337AAF245AA26300537620 /* Spinner_upload.json in Resources */,
|
5B337AAF245AA26300537620 /* Spinner_upload.json in Resources */,
|
||||||
59AF2EAA2435801400ACCAF2 /* AmazonRootCA3.cer in Resources */,
|
59AF2EAA2435801400ACCAF2 /* AmazonRootCA3.cer in Resources */,
|
||||||
5961ABED2474E464004040DF /* spinner_migrating_db.json in Resources */,
|
5961ABED2474E464004040DF /* spinner_migrating_db.json in Resources */,
|
||||||
|
@ -1096,6 +1072,7 @@
|
||||||
5B92D67E243018040049877B /* InfoViewController.swift in Sources */,
|
5B92D67E243018040049877B /* InfoViewController.swift in Sources */,
|
||||||
5B92D67F243018040049877B /* PogoInstructionsViewController.swift in Sources */,
|
5B92D67F243018040049877B /* PogoInstructionsViewController.swift in Sources */,
|
||||||
FBBBFCE82430A933002B174D /* OnboardingStep1aViewController.swift in Sources */,
|
FBBBFCE82430A933002B174D /* OnboardingStep1aViewController.swift in Sources */,
|
||||||
|
5B51ED512485DF9C008CE722 /* UILocalization.swift in Sources */,
|
||||||
594E77C3247387B1009B8B34 /* EncounterDB+migration.swift in Sources */,
|
594E77C3247387B1009B8B34 /* EncounterDB+migration.swift in Sources */,
|
||||||
590C99332432C1C400A5EC71 /* UploadDataHomeViewController.swift in Sources */,
|
590C99332432C1C400A5EC71 /* UploadDataHomeViewController.swift in Sources */,
|
||||||
59B7417124514126006E1EEA /* RegistrationConsentViewController.swift in Sources */,
|
59B7417124514126006E1EEA /* RegistrationConsentViewController.swift in Sources */,
|
||||||
|
@ -1110,6 +1087,7 @@
|
||||||
5B92D686243018040049877B /* AppDelegate.swift in Sources */,
|
5B92D686243018040049877B /* AppDelegate.swift in Sources */,
|
||||||
5B92D687243018040049877B /* PhoneNumberViewController.swift in Sources */,
|
5B92D687243018040049877B /* PhoneNumberViewController.swift in Sources */,
|
||||||
5961ABEB2474E358004040DF /* MigrationViewController.swift in Sources */,
|
5961ABEB2474E358004040DF /* MigrationViewController.swift in Sources */,
|
||||||
|
5B110C11248F275B00B68291 /* SelectCountryViewController.swift in Sources */,
|
||||||
5B92D688243018040049877B /* BluetraceUtils.swift in Sources */,
|
5B92D688243018040049877B /* BluetraceUtils.swift in Sources */,
|
||||||
5B92D689243018040049877B /* NewFeedbackFlowController.swift in Sources */,
|
5B92D689243018040049877B /* NewFeedbackFlowController.swift in Sources */,
|
||||||
5B92D68A243018040049877B /* Outcome.swift in Sources */,
|
5B92D68A243018040049877B /* Outcome.swift in Sources */,
|
||||||
|
@ -1177,6 +1155,7 @@
|
||||||
59898604245173C200966E61 /* URLHelper.swift in Sources */,
|
59898604245173C200966E61 /* URLHelper.swift in Sources */,
|
||||||
590888B32431B9F2008C9B9F /* Question1ViewController.swift in Sources */,
|
590888B32431B9F2008C9B9F /* Question1ViewController.swift in Sources */,
|
||||||
590888B62431BA7C008C9B9F /* Question3ErrorViewController.swift in Sources */,
|
590888B62431BA7C008C9B9F /* Question3ErrorViewController.swift in Sources */,
|
||||||
|
5B900FC22485C4EE00CAA419 /* String+Localization.swift in Sources */,
|
||||||
59AF2E9D2435581600ACCAF2 /* CovidNetworking.swift in Sources */,
|
59AF2E9D2435581600ACCAF2 /* CovidNetworking.swift in Sources */,
|
||||||
596B189D24499591003E190F /* UploadHelper.swift in Sources */,
|
596B189D24499591003E190F /* UploadHelper.swift in Sources */,
|
||||||
590888AF2431B9E3008C9B9F /* UITextView + Extensions.swift in Sources */,
|
590888AF2431B9E3008C9B9F /* UITextView + Extensions.swift in Sources */,
|
||||||
|
@ -1234,6 +1213,7 @@
|
||||||
596B189924496D32003E190F /* Encounter+Util.swift in Sources */,
|
596B189924496D32003E190F /* Encounter+Util.swift in Sources */,
|
||||||
5961ABEA2474E358004040DF /* MigrationViewController.swift in Sources */,
|
5961ABEA2474E358004040DF /* MigrationViewController.swift in Sources */,
|
||||||
30BE1CB523F15D47005DCE4F /* OTPViewController.swift in Sources */,
|
30BE1CB523F15D47005DCE4F /* OTPViewController.swift in Sources */,
|
||||||
|
5B900FC12485C4EE00CAA419 /* String+Localization.swift in Sources */,
|
||||||
5D8DD06123E319B300E097EF /* Encounter+CoreDataClass.swift in Sources */,
|
5D8DD06123E319B300E097EF /* Encounter+CoreDataClass.swift in Sources */,
|
||||||
594E77BF24736B77009B8B34 /* EncounterDB.swift in Sources */,
|
594E77BF24736B77009B8B34 /* EncounterDB.swift in Sources */,
|
||||||
FB12C4C1242F0480007E893B /* RespondToAuthChallengeAPI.swift in Sources */,
|
FB12C4C1242F0480007E893B /* RespondToAuthChallengeAPI.swift in Sources */,
|
||||||
|
@ -1260,6 +1240,7 @@
|
||||||
5D5F83AD23F023F600770DEF /* EncounterMessageManager.swift in Sources */,
|
5D5F83AD23F023F600770DEF /* EncounterMessageManager.swift in Sources */,
|
||||||
7FF75C222429FEE800C11FEA /* CountriesData.swift in Sources */,
|
7FF75C222429FEE800C11FEA /* CountriesData.swift in Sources */,
|
||||||
0B55E1922430760600C9E798 /* UITextView + Extensions.swift in Sources */,
|
0B55E1922430760600C9E798 /* UITextView + Extensions.swift in Sources */,
|
||||||
|
5B110C10248F275B00B68291 /* SelectCountryViewController.swift in Sources */,
|
||||||
A767D321242DF1B100DC9E2A /* AlertController.swift in Sources */,
|
A767D321242DF1B100DC9E2A /* AlertController.swift in Sources */,
|
||||||
5D5F83AD23F023F600770DEF /* EncounterMessageManager.swift in Sources */,
|
5D5F83AD23F023F600770DEF /* EncounterMessageManager.swift in Sources */,
|
||||||
FB12C4C3242F0FE9007E893B /* GetTempIdAPI.swift in Sources */,
|
FB12C4C3242F0FE9007E893B /* GetTempIdAPI.swift in Sources */,
|
||||||
|
@ -1289,6 +1270,7 @@
|
||||||
7F36305F23F7F81400CC6E1D /* PushNotificationConstants.swift in Sources */,
|
7F36305F23F7F81400CC6E1D /* PushNotificationConstants.swift in Sources */,
|
||||||
59AF2E9C2435581600ACCAF2 /* CovidNetworking.swift in Sources */,
|
59AF2E9C2435581600ACCAF2 /* CovidNetworking.swift in Sources */,
|
||||||
596B189C24499591003E190F /* UploadHelper.swift in Sources */,
|
596B189C24499591003E190F /* UploadHelper.swift in Sources */,
|
||||||
|
5B51ED502485D658008CE722 /* UILocalization.swift in Sources */,
|
||||||
1B86119724303F8500EA4B6B /* Question1ErrorViewController.swift in Sources */,
|
1B86119724303F8500EA4B6B /* Question1ErrorViewController.swift in Sources */,
|
||||||
B615C5A923FA403500345969 /* UIViewController + Extension.swift in Sources */,
|
B615C5A923FA403500345969 /* UIViewController + Extension.swift in Sources */,
|
||||||
1B86119324303F4A00EA4B6B /* Question2ViewController.swift in Sources */,
|
1B86119324303F4A00EA4B6B /* Question2ViewController.swift in Sources */,
|
||||||
|
@ -1301,6 +1283,22 @@
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
|
5B51ED58248627A8008CE722 /* UploadData.storyboard */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
5B51ED6E248776CA008CE722 /* Base */,
|
||||||
|
);
|
||||||
|
name = UploadData.storyboard;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
|
5B51ED64248715DE008CE722 /* InfoPlist.strings */ = {
|
||||||
|
isa = PBXVariantGroup;
|
||||||
|
children = (
|
||||||
|
5B51ED63248715DE008CE722 /* en */,
|
||||||
|
);
|
||||||
|
name = InfoPlist.strings;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
5B8243612480DC2100705CB1 /* Localizable.strings */ = {
|
5B8243612480DC2100705CB1 /* Localizable.strings */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -1312,7 +1310,7 @@
|
||||||
5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */ = {
|
5DD41D4023DCB03B00FD4AB0 /* Main.storyboard */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
5DD41D4123DCB03B00FD4AB0 /* Base */,
|
5B51ED6F248776CB008CE722 /* Base */,
|
||||||
);
|
);
|
||||||
name = Main.storyboard;
|
name = Main.storyboard;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1320,31 +1318,15 @@
|
||||||
5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */ = {
|
5DD41D4523DCB03D00FD4AB0 /* LaunchScreen.storyboard */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
5DD41D4623DCB03D00FD4AB0 /* Base */,
|
5B7B031D2490703500296DE0 /* Base */,
|
||||||
);
|
);
|
||||||
name = LaunchScreen.storyboard;
|
name = LaunchScreen.storyboard;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
A767D2B0242DF1B000DC9E2A /* Feedback.strings */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
A767D2B6242DF1B000DC9E2A /* en */,
|
|
||||||
);
|
|
||||||
name = Feedback.strings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A767D2B2242DF1B000DC9E2A /* NewFeedbackFlow.strings */ = {
|
|
||||||
isa = PBXVariantGroup;
|
|
||||||
children = (
|
|
||||||
A767D2B7242DF1B000DC9E2A /* en */,
|
|
||||||
);
|
|
||||||
name = NewFeedbackFlow.strings;
|
|
||||||
sourceTree = "<group>";
|
|
||||||
};
|
|
||||||
A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */ = {
|
A767D2D0242DF1B000DC9E2A /* NewFeedbackFlow.storyboard */ = {
|
||||||
isa = PBXVariantGroup;
|
isa = PBXVariantGroup;
|
||||||
children = (
|
children = (
|
||||||
A767D2D1242DF1B000DC9E2A /* Base */,
|
5B51ED6D248776CA008CE722 /* Base */,
|
||||||
);
|
);
|
||||||
name = NewFeedbackFlow.storyboard;
|
name = NewFeedbackFlow.storyboard;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1356,6 +1338,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
@ -1421,7 +1404,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1429,7 +1412,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_NAME = COVIDSafe;
|
PRODUCT_NAME = COVIDSafe;
|
||||||
|
@ -1445,6 +1428,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
@ -1504,7 +1488,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1512,7 +1496,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_NAME = COVIDSafe;
|
PRODUCT_NAME = COVIDSafe;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
@ -1532,7 +1516,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1540,7 +1524,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
|
@ -1562,7 +1546,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1570,7 +1554,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
|
@ -1592,7 +1576,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1600,7 +1584,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_MODULE_NAME = COVIDSafe;
|
PRODUCT_MODULE_NAME = COVIDSafe;
|
||||||
|
@ -1622,7 +1606,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1630,7 +1614,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG";
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_MODULE_NAME = COVIDSafe;
|
PRODUCT_MODULE_NAME = COVIDSafe;
|
||||||
|
@ -1648,6 +1632,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
@ -1709,6 +1694,7 @@
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
|
CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
|
||||||
|
@ -1768,7 +1754,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1776,7 +1762,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
ONLY_ACTIVE_ARCH = YES;
|
ONLY_ACTIVE_ARCH = YES;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_NAME = COVIDSafe;
|
PRODUCT_NAME = COVIDSafe;
|
||||||
|
@ -1796,7 +1782,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "CovidSafe/Project Bluetrace.entitlements";
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 31;
|
CURRENT_PROJECT_VERSION = 37;
|
||||||
DEVELOPMENT_TEAM = 45792XH5L8;
|
DEVELOPMENT_TEAM = 45792XH5L8;
|
||||||
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
INFOPLIST_FILE = "$(SRCROOT)/CovidSafe/Info.plist";
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
|
||||||
|
@ -1804,7 +1790,7 @@
|
||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.5;
|
MARKETING_VERSION = 1.6;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
PRODUCT_BUNDLE_IDENTIFIER = au.gov.health.covidsafe;
|
||||||
PRODUCT_NAME = COVIDSafe;
|
PRODUCT_NAME = COVIDSafe;
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|
|
@ -16,7 +16,9 @@ class PhoneValidationAPI {
|
||||||
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
|
guard let apiHost = PlistHelper.getvalueFromInfoPlist(withKey: "API_Host", plistName: "CovidSafe-config") else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let params = [
|
let params = [
|
||||||
|
"country_code": "+\(regInfo.countryPhoneCode ?? "61")",
|
||||||
"phone_number": regInfo.phoneNumber,
|
"phone_number": regInfo.phoneNumber,
|
||||||
"age": String(regInfo.age),
|
"age": String(regInfo.age),
|
||||||
"postcode": regInfo.postcode,
|
"postcode": regInfo.postcode,
|
||||||
|
@ -45,6 +47,7 @@ struct RegistrationRequest {
|
||||||
var age: Int
|
var age: Int
|
||||||
var isMinor: Bool
|
var isMinor: Bool
|
||||||
var phoneNumber: String
|
var phoneNumber: String
|
||||||
|
var countryPhoneCode: String?
|
||||||
}
|
}
|
||||||
|
|
||||||
struct AuthResponse: Decodable {
|
struct AuthResponse: Decodable {
|
||||||
|
|
|
@ -26,6 +26,9 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
UserDefaults.standard.set(true, forKey: "HasBeenLaunched")
|
UserDefaults.standard.set(true, forKey: "HasBeenLaunched")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UIBarButtonItem.appearance().setTitleTextAttributes([.foregroundColor: UIColor.covidSafeColor], for: .normal)
|
||||||
|
UINavigationBar.appearance().tintColor = UIColor.covidSafeColor
|
||||||
|
|
||||||
let hasUserConsent = true
|
let hasUserConsent = true
|
||||||
let hasUserCompletedOnboarding = UserDefaults.standard.bool(forKey: "turnedOnBluetooth")
|
let hasUserCompletedOnboarding = UserDefaults.standard.bool(forKey: "turnedOnBluetooth")
|
||||||
let bluetoothAuthorised = BluetraceManager.shared.isBluetoothAuthorized()
|
let bluetoothAuthorised = BluetraceManager.shared.isBluetoothAuthorized()
|
||||||
|
@ -98,13 +101,33 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
if !UserDefaults.standard.bool(forKey: "sentBluetoothStatusNotif") {
|
if !UserDefaults.standard.bool(forKey: "sentBluetoothStatusNotif") {
|
||||||
UserDefaults.standard.set(true, forKey: "sentBluetoothStatusNotif")
|
UserDefaults.standard.set(true, forKey: "sentBluetoothStatusNotif")
|
||||||
self.triggerIntervalLocalPushNotifications(pnContent: PushNotificationConstants.btStatusPushNotifContents[btStatusMagicNumber], identifier: "bluetoothStatusNotifId")
|
self.triggerIntervalLocalPushNotifications(pnContent: PushNotificationConstants.btStatusPushNotifContents[btStatusMagicNumber], identifier: "bluetoothStatusNotifId")
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
switch state {
|
||||||
|
case .poweredOff, .unauthorized:
|
||||||
|
DLog("*** Setup reminders - BL OFF, UNAUTH check/set reminders")
|
||||||
|
self.checkAndScheduleReminderNotifications()
|
||||||
|
default:
|
||||||
|
// leave reminder notifications as they are, when an encounter occurs the notifications will be deferred
|
||||||
|
// or removed when app becomes active
|
||||||
|
DLog("*** Setup reminders - Default leave reminders")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func cancelPreviouslyScheduledNotifications() {
|
fileprivate func getReminderNotificationsIdentifiers() -> [String] {
|
||||||
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
|
var identifiers: [String] = []
|
||||||
|
for interval in intervals {
|
||||||
|
identifiers.append(getReminderNotificationIdentifier(interval: interval))
|
||||||
|
}
|
||||||
|
return identifiers
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func cancelScheduledReminderNotifications() {
|
||||||
|
DLog("*** Cancel reminders")
|
||||||
|
let identifiers = getReminderNotificationsIdentifiers()
|
||||||
|
UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: identifiers)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func triggerIntervalLocalPushNotifications(pnContent: [String : String], identifier: String) {
|
fileprivate func triggerIntervalLocalPushNotifications(pnContent: [String : String], identifier: String) {
|
||||||
|
@ -128,8 +151,30 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
let intervals: [TimeInterval] = [TimeInterval(60 * 60 * 48)]
|
let intervals: [TimeInterval] = [TimeInterval(60 * 60 * 48)]
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fileprivate func scheduleReminderNotifications() {
|
fileprivate func getReminderNotificationIdentifier(interval: TimeInterval) -> String {
|
||||||
|
return "reminder-\(interval)"
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func checkAndScheduleReminderNotifications() {
|
||||||
|
let identifiers = getReminderNotificationsIdentifiers()
|
||||||
|
DLog("*** Setup reminders - checking pending reminders")
|
||||||
|
// check all reminders are scheduled and pending
|
||||||
|
UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationsRequest) in
|
||||||
|
var scheduledRemindersCount = 0
|
||||||
|
for notification in notificationsRequest {
|
||||||
|
if identifiers.firstIndex(of: notification.identifier) != nil {
|
||||||
|
scheduledRemindersCount += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// re-schedule reminders unless they are all pending
|
||||||
|
if scheduledRemindersCount != identifiers.count {
|
||||||
|
self.scheduleReminderNotifications()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fileprivate func scheduleReminderNotifications() {
|
||||||
|
DLog("*** Set reminders")
|
||||||
let reminderContent = PushNotificationConstants.reminderPushNotifContents
|
let reminderContent = PushNotificationConstants.reminderPushNotifContents
|
||||||
guard
|
guard
|
||||||
let title = reminderContent["contentTitle"],
|
let title = reminderContent["contentTitle"],
|
||||||
|
@ -141,7 +186,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
for interval in intervals {
|
for interval in intervals {
|
||||||
let content = UNMutableNotificationContent()
|
let content = UNMutableNotificationContent()
|
||||||
|
let identifier = getReminderNotificationIdentifier(interval: interval)
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
content.title = "\(title) \(interval / 60) min"
|
content.title = "\(title) \(interval / 60) min"
|
||||||
#else
|
#else
|
||||||
|
@ -152,14 +197,14 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: false)
|
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: interval, repeats: false)
|
||||||
|
|
||||||
let request = UNNotificationRequest(identifier: "reminder-\(interval)", content: content, trigger: trigger)
|
let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
|
||||||
notificationCenter.add(request)
|
notificationCenter.add(request)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
func deferReminderNotifications(_ notification: Notification) {
|
func deferReminderNotifications(_ notification: Notification) {
|
||||||
cancelPreviouslyScheduledNotifications()
|
// no need to cancel, if same ID used the notification is updated
|
||||||
scheduleReminderNotifications()
|
scheduleReminderNotifications()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,13 +213,20 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
|
|
||||||
startAccelerometerUpdates()
|
startAccelerometerUpdates()
|
||||||
clearOldDataInContext()
|
clearOldDataInContext()
|
||||||
|
|
||||||
|
// if Bluetooth is ON, remove reminders, leave otherwise.
|
||||||
|
if BluetraceManager.shared.isBluetoothOn() {
|
||||||
|
cancelScheduledReminderNotifications()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationWillResignActive(_ application: UIApplication) {
|
func applicationWillResignActive(_ application: UIApplication) {
|
||||||
DLog("applicationWillResignActive")
|
DLog("applicationWillResignActive")
|
||||||
// Retry in case it failed on become active
|
// Retry in case it failed on become active
|
||||||
clearOldDataInContext()
|
clearOldDataInContext()
|
||||||
scheduleReminderNotifications()
|
|
||||||
|
// check if reminders pending and set if needed
|
||||||
|
checkAndScheduleReminderNotifications()
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationDidEnterBackground(_ application: UIApplication) {
|
func applicationDidEnterBackground(_ application: UIApplication) {
|
||||||
|
@ -187,8 +239,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||||
func applicationWillEnterForeground(_ application: UIApplication) {
|
func applicationWillEnterForeground(_ application: UIApplication) {
|
||||||
DLog("applicationWillEnterForeground")
|
DLog("applicationWillEnterForeground")
|
||||||
self.dismissBlackscreen()
|
self.dismissBlackscreen()
|
||||||
|
|
||||||
cancelPreviouslyScheduledNotifications()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func applicationWillTerminate(_ application: UIApplication) {
|
func applicationWillTerminate(_ application: UIApplication) {
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -15,24 +15,11 @@
|
||||||
<navigationBar key="navigationBar" hidden="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="qRv-Xf-UaQ">
|
<navigationBar key="navigationBar" hidden="YES" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="qRv-Xf-UaQ">
|
||||||
<autoresizingMask key="autoresizingMask"/>
|
<autoresizingMask key="autoresizingMask"/>
|
||||||
</navigationBar>
|
</navigationBar>
|
||||||
<connections>
|
|
||||||
<segue destination="Elx-xe-4zu" kind="relationship" relationship="rootViewController" id="CP0-Er-dpJ"/>
|
|
||||||
</connections>
|
|
||||||
</navigationController>
|
</navigationController>
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="NBS-3a-gxj" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
<placeholder placeholderIdentifier="IBFirstResponder" id="NBS-3a-gxj" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="-674" y="-1872"/>
|
<point key="canvasLocation" x="-674" y="-1872"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Questions-->
|
|
||||||
<scene sceneID="pBE-qy-Y8H">
|
|
||||||
<objects>
|
|
||||||
<viewControllerPlaceholder storyboardName="Questions" id="Elx-xe-4zu" sceneMemberID="viewController">
|
|
||||||
<navigationItem key="navigationItem" id="mWG-RM-ehP"/>
|
|
||||||
</viewControllerPlaceholder>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="hfk-Su-78X" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
|
||||||
</objects>
|
|
||||||
<point key="canvasLocation" x="526" y="-1873"/>
|
|
||||||
</scene>
|
|
||||||
<!--Upload Data Step2VC-->
|
<!--Upload Data Step2VC-->
|
||||||
<scene sceneID="MLs-LJ-G0a">
|
<scene sceneID="MLs-LJ-G0a">
|
||||||
<objects>
|
<objects>
|
||||||
|
@ -67,6 +54,9 @@
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UD2_Title"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ft1-PF-Epb">
|
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontForContentSizeCategory="YES" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Ft1-PF-Epb">
|
||||||
<rect key="frame" x="32" y="105.5" width="301" height="86.5"/>
|
<rect key="frame" x="32" y="105.5" width="301" height="86.5"/>
|
||||||
|
@ -74,6 +64,9 @@
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UD2_Intro"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mKA-1q-WgQ" customClass="CodeInputView" customModule="COVIDSafe" customModuleProvider="target">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="mKA-1q-WgQ" customClass="CodeInputView" customModule="COVIDSafe" customModuleProvider="target">
|
||||||
<rect key="frame" x="26" y="208" width="317" height="54"/>
|
<rect key="frame" x="26" y="208" width="317" height="54"/>
|
||||||
|
@ -128,6 +121,9 @@
|
||||||
<state key="normal" title="Upload my information">
|
<state key="normal" title="Upload my information">
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</state>
|
</state>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UD2_Button"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="njp-EI-wJ9"/>
|
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="njp-EI-wJ9"/>
|
||||||
</connections>
|
</connections>
|
||||||
|
@ -146,6 +142,9 @@ Please do not close the app.</string>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UploadingInfo"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XWM-sx-BWy">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="XWM-sx-BWy">
|
||||||
<rect key="frame" x="40" y="0.0" width="231" height="231"/>
|
<rect key="frame" x="40" y="0.0" width="231" height="231"/>
|
||||||
|
@ -255,6 +254,9 @@ Please do not close the app.</string>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDE_Message"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sEL-Fh-3RO" customClass="GradientButton" customModule="COVIDSafe" customModuleProvider="target">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="sEL-Fh-3RO" customClass="GradientButton" customModule="COVIDSafe" customModuleProvider="target">
|
||||||
<rect key="frame" x="0.0" y="357.5" width="311" height="48"/>
|
<rect key="frame" x="0.0" y="357.5" width="311" height="48"/>
|
||||||
|
@ -267,6 +269,9 @@ Please do not close the app.</string>
|
||||||
<state key="normal" title="Try again">
|
<state key="normal" title="Try again">
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</state>
|
</state>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDE_TryAgain"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="onBackTapped:" destination="Bpf-Xp-F3m" eventType="touchUpInside" id="WS1-R8-wUd"/>
|
<action selector="onBackTapped:" destination="Bpf-Xp-F3m" eventType="touchUpInside" id="WS1-R8-wUd"/>
|
||||||
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="WRe-bP-cIQ"/>
|
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="WRe-bP-cIQ"/>
|
||||||
|
@ -283,6 +288,9 @@ Please do not close the app.</string>
|
||||||
<state key="normal" title="Cancel">
|
<state key="normal" title="Cancel">
|
||||||
<color key="titleColor" red="0.0" green="0.54117647059999996" blue="0.13725490200000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="titleColor" red="0.0" green="0.54117647059999996" blue="0.13725490200000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
</state>
|
</state>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDE_Cancel"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="onBackTapped:" destination="Bpf-Xp-F3m" eventType="touchUpInside" id="zlB-kb-MRy"/>
|
<action selector="onBackTapped:" destination="Bpf-Xp-F3m" eventType="touchUpInside" id="zlB-kb-MRy"/>
|
||||||
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="uoS-ai-Rn8"/>
|
<action selector="uploadDataBtnTapped:" destination="a6e-KY-ZKO" eventType="touchUpInside" id="uoS-ai-Rn8"/>
|
||||||
|
@ -364,6 +372,9 @@ Please do not close the app.</string>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDP_Title"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tqv-D9-PS3">
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="tqv-D9-PS3">
|
||||||
<rect key="frame" x="32" y="385.5" width="311" height="192"/>
|
<rect key="frame" x="32" y="385.5" width="311" height="192"/>
|
||||||
|
@ -374,6 +385,9 @@ Once you press ‘Yes’ you’ll need to provide consent to upload your informa
|
||||||
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDP_Content"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</textView>
|
</textView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
@ -416,6 +430,7 @@ Once you press ‘Yes’ you’ll need to provide consent to upload your informa
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||||
<real key="value" value="0.0"/>
|
<real key="value" value="0.0"/>
|
||||||
</userDefinedRuntimeAttribute>
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDP_NoButton"/>
|
||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="onBackTapped:" destination="HPs-l8-CC5" eventType="touchUpInside" id="nta-yE-3yq"/>
|
<action selector="onBackTapped:" destination="HPs-l8-CC5" eventType="touchUpInside" id="nta-yE-3yq"/>
|
||||||
|
@ -436,6 +451,7 @@ Once you press ‘Yes’ you’ll need to provide consent to upload your informa
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||||
<real key="value" value="0.0"/>
|
<real key="value" value="0.0"/>
|
||||||
</userDefinedRuntimeAttribute>
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDP_YesButton"/>
|
||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="GKP-u6-wgj" kind="show" id="Qa7-iF-RFi"/>
|
<segue destination="GKP-u6-wgj" kind="show" id="Qa7-iF-RFi"/>
|
||||||
|
@ -485,6 +501,9 @@ Once you press ‘Yes’ you’ll need to provide consent to upload your informa
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDC_Title"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ryL-BN-XeS">
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ryL-BN-XeS">
|
||||||
<rect key="frame" x="32" y="105.5" width="311" height="280"/>
|
<rect key="frame" x="32" y="105.5" width="311" height="280"/>
|
||||||
|
@ -497,6 +516,9 @@ Read the COVIDSafe *privacy policy* for further details.
Select 'I agree' t
|
||||||
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDC_Content"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</textView>
|
</textView>
|
||||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c1v-Px-kY5">
|
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="c1v-Px-kY5">
|
||||||
<rect key="frame" x="16" y="16" width="44" height="44"/>
|
<rect key="frame" x="16" y="16" width="44" height="44"/>
|
||||||
|
@ -550,6 +572,7 @@ Read the COVIDSafe *privacy policy* for further details.
Select 'I agree' t
|
||||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius">
|
||||||
<real key="value" value="0.0"/>
|
<real key="value" value="0.0"/>
|
||||||
</userDefinedRuntimeAttribute>
|
</userDefinedRuntimeAttribute>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDC_Button"/>
|
||||||
</userDefinedRuntimeAttributes>
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<segue destination="a6e-KY-ZKO" kind="show" id="lxD-W9-vGv"/>
|
<segue destination="a6e-KY-ZKO" kind="show" id="lxD-W9-vGv"/>
|
||||||
|
@ -578,16 +601,6 @@ Read the COVIDSafe *privacy policy* for further details.
Select 'I agree' t
|
||||||
</objects>
|
</objects>
|
||||||
<point key="canvasLocation" x="-2168.1159420289855" y="-3626.0869565217395"/>
|
<point key="canvasLocation" x="-2168.1159420289855" y="-3626.0869565217395"/>
|
||||||
</scene>
|
</scene>
|
||||||
<!--Questions-->
|
|
||||||
<scene sceneID="Yjc-4h-Yma">
|
|
||||||
<objects>
|
|
||||||
<viewControllerPlaceholder storyboardName="Questions" id="Kzd-qE-07a" sceneMemberID="viewController">
|
|
||||||
<navigationItem key="navigationItem" id="BDJ-wD-Fwl"/>
|
|
||||||
</viewControllerPlaceholder>
|
|
||||||
<placeholder placeholderIdentifier="IBFirstResponder" id="iD5-lB-pPC" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
|
||||||
</objects>
|
|
||||||
<point key="canvasLocation" x="-881" y="-3763"/>
|
|
||||||
</scene>
|
|
||||||
<!--Upload Data Thank You Home View Controller-->
|
<!--Upload Data Thank You Home View Controller-->
|
||||||
<scene sceneID="mXp-nc-2a6">
|
<scene sceneID="mXp-nc-2a6">
|
||||||
<objects>
|
<objects>
|
||||||
|
@ -616,6 +629,9 @@ Read the COVIDSafe *privacy policy* for further details.
Select 'I agree' t
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDTY_Title"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bP5-GQ-GQk">
|
<textView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" scrollEnabled="NO" delaysContentTouches="NO" editable="NO" textAlignment="natural" adjustsFontForContentSizeCategory="YES" translatesAutoresizingMaskIntoConstraints="NO" id="bP5-GQ-GQk">
|
||||||
<rect key="frame" x="32" y="309.5" width="311" height="214"/>
|
<rect key="frame" x="32" y="309.5" width="311" height="214"/>
|
||||||
|
@ -626,6 +642,9 @@ State or territory health officials will notify other COVIDSafe users that have
|
||||||
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
<color key="textColor" systemColor="labelColor" cocoaTouchSystemColor="darkTextColor"/>
|
||||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||||
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
<textInputTraits key="textInputTraits" autocapitalizationType="sentences"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDTY_Content"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</textView>
|
</textView>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
@ -662,6 +681,9 @@ State or territory health officials will notify other COVIDSafe users that have
|
||||||
<state key="normal" title="Continue">
|
<state key="normal" title="Continue">
|
||||||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||||
</state>
|
</state>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="UDTY_Button"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
<connections>
|
<connections>
|
||||||
<action selector="doneBtnTapped:" destination="Vno-TX-yIM" eventType="touchUpInside" id="3xk-nY-dMS"/>
|
<action selector="doneBtnTapped:" destination="Vno-TX-yIM" eventType="touchUpInside" id="3xk-nY-dMS"/>
|
||||||
</connections>
|
</connections>
|
|
@ -2,16 +2,226 @@
|
||||||
// Countries.swift
|
// Countries.swift
|
||||||
// CovidSafe
|
// CovidSafe
|
||||||
//
|
//
|
||||||
// Copyright © 2020 Joel Kek. All rights reserved.
|
// Copyright © 2020 All rights reserved.
|
||||||
//
|
//
|
||||||
|
import FlagKit
|
||||||
|
|
||||||
struct CountriesData {
|
struct CountriesData {
|
||||||
|
|
||||||
static let countryArray = ["Australia"]
|
static let countryArray = ["Australia"]
|
||||||
|
|
||||||
static let countryCodes =
|
static let countries =
|
||||||
[
|
[
|
||||||
"Australia": "+61"
|
// Country(name: "Country_AF".localizedString(), isoCode:"AF",phoneCode:"93", flag:Flag(countryCode: "AF")),
|
||||||
|
Country(name: "Country_AL".localizedString(), isoCode:"AL",phoneCode:"355", flag:Flag(countryCode: "AL")),
|
||||||
|
Country(name: "Country_DZ".localizedString(), isoCode:"DZ",phoneCode:"213", flag:Flag(countryCode: "DZ")),
|
||||||
|
// Country(name: "Country_AD".localizedString(), isoCode:"AD",phoneCode:"376", flag:Flag(countryCode: "AD")),
|
||||||
|
Country(name: "Country_AO".localizedString(), isoCode:"AO",phoneCode:"244", flag:Flag(countryCode: "AO")),
|
||||||
|
Country(name: "Country_AI".localizedString(), isoCode:"AI",phoneCode:"1", flag:Flag(countryCode: "AI")),
|
||||||
|
Country(name: "Country_AG".localizedString(), isoCode:"AG",phoneCode:"1", flag:Flag(countryCode: "AG")),
|
||||||
|
Country(name: "Country_AR".localizedString(), isoCode:"AR",phoneCode:"54", flag:Flag(countryCode: "AR")),
|
||||||
|
Country(name: "Country_AM".localizedString(), isoCode:"AM",phoneCode:"374", flag:Flag(countryCode: "AM")),
|
||||||
|
Country(name: "Country_AW".localizedString(), isoCode:"AW",phoneCode:"297", flag:Flag(countryCode: "AW")),
|
||||||
|
// Country(name: "Country_AU".localizedString(), isoCode:"AU",phoneCode:"61", flag:Flag(countryCode: "AU")),
|
||||||
|
Country(name: "Country_AT".localizedString(), isoCode:"AT",phoneCode:"43", flag:Flag(countryCode: "AT")),
|
||||||
|
Country(name: "Country_AZ".localizedString(), isoCode:"AZ",phoneCode:"994", flag:Flag(countryCode: "AZ")),
|
||||||
|
Country(name: "Country_BS".localizedString(), isoCode:"BS",phoneCode:"1", flag:Flag(countryCode: "BS")),
|
||||||
|
Country(name: "Country_BH".localizedString(), isoCode:"BH",phoneCode:"973", flag:Flag(countryCode: "BH")),
|
||||||
|
Country(name: "Country_BD".localizedString(), isoCode:"BD",phoneCode:"880", flag:Flag(countryCode: "BD")),
|
||||||
|
Country(name: "Country_BB".localizedString(), isoCode:"BB",phoneCode:"1", flag:Flag(countryCode: "BB")),
|
||||||
|
Country(name: "Country_BY".localizedString(), isoCode:"BY",phoneCode:"375", flag:Flag(countryCode: "BY")),
|
||||||
|
Country(name: "Country_BE".localizedString(), isoCode:"BE",phoneCode:"32", flag:Flag(countryCode: "BE")),
|
||||||
|
Country(name: "Country_BZ".localizedString(), isoCode:"BZ",phoneCode:"501", flag:Flag(countryCode: "BZ")),
|
||||||
|
Country(name: "Country_BJ".localizedString(), isoCode:"BJ",phoneCode:"229", flag:Flag(countryCode: "BJ")),
|
||||||
|
Country(name: "Country_BM".localizedString(), isoCode:"BM",phoneCode:"1", flag:Flag(countryCode: "BM")),
|
||||||
|
// Country(name: "Country_BT".localizedString(), isoCode:"BT",phoneCode:"975", flag:Flag(countryCode: "BT")),
|
||||||
|
Country(name: "Country_BO".localizedString(), isoCode:"BO",phoneCode:"591", flag:Flag(countryCode: "BO")),
|
||||||
|
Country(name: "Country_BA".localizedString(), isoCode:"BA",phoneCode:"387", flag:Flag(countryCode: "BA")),
|
||||||
|
Country(name: "Country_BW".localizedString(), isoCode:"BW",phoneCode:"267", flag:Flag(countryCode: "BW")),
|
||||||
|
Country(name: "Country_BR".localizedString(), isoCode:"BR",phoneCode:"55", flag:Flag(countryCode: "BR")),
|
||||||
|
// Country(name: "Country_BN".localizedString(), isoCode:"BN",phoneCode:"673", flag:Flag(countryCode: "BN")),
|
||||||
|
Country(name: "Country_BG".localizedString(), isoCode:"BG",phoneCode:"359", flag:Flag(countryCode: "BG")),
|
||||||
|
Country(name: "Country_BF".localizedString(), isoCode:"BF",phoneCode:"226", flag:Flag(countryCode: "BF")),
|
||||||
|
// Country(name: "Country_BI".localizedString(), isoCode:"BI",phoneCode:"257", flag:Flag(countryCode: "BI")),
|
||||||
|
Country(name: "Country_KH".localizedString(), isoCode:"KH",phoneCode:"855", flag:Flag(countryCode: "KH")),
|
||||||
|
Country(name: "Country_CM".localizedString(), isoCode:"CM",phoneCode:"237", flag:Flag(countryCode: "CM")),
|
||||||
|
Country(name: "Country_CA".localizedString(), isoCode:"CA",phoneCode:"1", flag:Flag(countryCode: "CA")),
|
||||||
|
Country(name: "Country_CV".localizedString(), isoCode:"CV",phoneCode:"238", flag:Flag(countryCode: "CV")),
|
||||||
|
Country(name: "Country_KY".localizedString(), isoCode:"KY",phoneCode:"1", flag:Flag(countryCode: "KY")),
|
||||||
|
// Country(name: "Country_CF".localizedString(), isoCode:"CF",phoneCode:"236", flag:Flag(countryCode: "CF")),
|
||||||
|
// Country(name: "Country_TD".localizedString(), isoCode:"TD",phoneCode:"235", flag:Flag(countryCode: "TD")),
|
||||||
|
Country(name: "Country_CL".localizedString(), isoCode:"CL",phoneCode:"56", flag:Flag(countryCode: "CL")),
|
||||||
|
Country(name: "Country_CN".localizedString(), isoCode:"CN",phoneCode:"86", flag:Flag(countryCode: "CN")),
|
||||||
|
Country(name: "Country_CO".localizedString(), isoCode:"CO",phoneCode:"57", flag:Flag(countryCode: "CO")),
|
||||||
|
// Country(name: "Country_KM".localizedString(), isoCode:"KM",phoneCode:"269", flag:Flag(countryCode: "KM")),
|
||||||
|
// Country(name: "Country_CK".localizedString(), isoCode:"CK",phoneCode:"682", flag:Flag(countryCode: "CK")),
|
||||||
|
Country(name: "Country_CR".localizedString(), isoCode:"CR",phoneCode:"506", flag:Flag(countryCode: "CR")),
|
||||||
|
Country(name: "Country_HR".localizedString(), isoCode:"HR",phoneCode:"385", flag:Flag(countryCode: "HR")),
|
||||||
|
Country(name: "Country_CU".localizedString(), isoCode:"CU",phoneCode:"53", flag:Flag(countryCode: "CU")),
|
||||||
|
Country(name: "Country_CW".localizedString(), isoCode:"CW",phoneCode:"599", flag:Flag(countryCode: "CW")),
|
||||||
|
Country(name: "Country_CY".localizedString(), isoCode:"CY",phoneCode:"357", flag:Flag(countryCode: "CY")),
|
||||||
|
Country(name: "Country_CZ".localizedString(), isoCode:"CZ",phoneCode:"420", flag:Flag(countryCode: "CZ")),
|
||||||
|
// Country(name: "Country_CD".localizedString(), isoCode:"CD",phoneCode:"243", flag:Flag(countryCode: "CD")),
|
||||||
|
Country(name: "Country_DK".localizedString(), isoCode:"DK",phoneCode:"45", flag:Flag(countryCode: "DK")),
|
||||||
|
// Country(name: "Country_DJ".localizedString(), isoCode:"DJ",phoneCode:"253", flag:Flag(countryCode: "DJ")),
|
||||||
|
Country(name: "Country_DM".localizedString(), isoCode:"DM",phoneCode:"1", flag:Flag(countryCode: "DM")),
|
||||||
|
Country(name: "Country_DO".localizedString(), isoCode:"DO",phoneCode:"1", flag:Flag(countryCode: "DO")),
|
||||||
|
// Country(name: "Country_TL".localizedString(), isoCode:"TL",phoneCode:"670", flag:Flag(countryCode: "TL")),
|
||||||
|
Country(name: "Country_EC".localizedString(), isoCode:"EC",phoneCode:"593", flag:Flag(countryCode: "EC")),
|
||||||
|
// Country(name: "Country_EG".localizedString(), isoCode:"EG",phoneCode:"20", flag:Flag(countryCode: "EG")),
|
||||||
|
Country(name: "Country_SV".localizedString(), isoCode:"SV",phoneCode:"503", flag:Flag(countryCode: "SV")),
|
||||||
|
// Country(name: "Country_GQ".localizedString(), isoCode:"GQ",phoneCode:"240", flag:Flag(countryCode: "GQ")),
|
||||||
|
Country(name: "Country_EE".localizedString(), isoCode:"EE",phoneCode:"372", flag:Flag(countryCode: "EE")),
|
||||||
|
// Country(name: "Country_ET".localizedString(), isoCode:"ET",phoneCode:"251", flag:Flag(countryCode: "ET")),
|
||||||
|
// Country(name: "Country_FO".localizedString(), isoCode:"FO",phoneCode:"298", flag:Flag(countryCode: "FO")),
|
||||||
|
Country(name: "Country_FJ".localizedString(), isoCode:"FJ",phoneCode:"679", flag:Flag(countryCode: "FJ")),
|
||||||
|
Country(name: "Country_FI".localizedString(), isoCode:"FI",phoneCode:"358", flag:Flag(countryCode: "FI")),
|
||||||
|
Country(name: "Country_FR".localizedString(), isoCode:"FR",phoneCode:"33", flag:Flag(countryCode: "FR")),
|
||||||
|
// Country(name: "Country_GF".localizedString(), isoCode:"GF",phoneCode:"995", flag:Flag(countryCode: "GF")),
|
||||||
|
Country(name: "Country_GA".localizedString(), isoCode:"GA",phoneCode:"241", flag:Flag(countryCode: "GA")),
|
||||||
|
// Country(name: "Country_GM".localizedString(), isoCode:"GM",phoneCode:"220", flag:Flag(countryCode: "GM")),
|
||||||
|
Country(name: "Country_GE".localizedString(), isoCode:"GE",phoneCode:"995", flag:Flag(countryCode: "GE")),
|
||||||
|
Country(name: "Country_DE".localizedString(), isoCode:"DE",phoneCode:"49", flag:Flag(countryCode: "DE")),
|
||||||
|
Country(name: "Country_GH".localizedString(), isoCode:"GH",phoneCode:"233", flag:Flag(countryCode: "GH")),
|
||||||
|
// Country(name: "Country_GI".localizedString(), isoCode:"GI",phoneCode:"350", flag:Flag(countryCode: "GI")),
|
||||||
|
Country(name: "Country_GR".localizedString(), isoCode:"GR",phoneCode:"30", flag:Flag(countryCode: "GR")),
|
||||||
|
// Country(name: "Country_GL".localizedString(), isoCode:"GL",phoneCode:"299", flag:Flag(countryCode: "GL")),
|
||||||
|
Country(name: "Country_GD".localizedString(), isoCode:"GD",phoneCode:"1", flag:Flag(countryCode: "GD")),
|
||||||
|
// Country(name: "Country_GP".localizedString(), isoCode:"GP",phoneCode:"224", flag:Flag(countryCode: "GP")),
|
||||||
|
Country(name: "Country_GU".localizedString(), isoCode:"GU",phoneCode:"1", flag:Flag(countryCode: "GU")),
|
||||||
|
Country(name: "Country_GT".localizedString(), isoCode:"GT",phoneCode:"502", flag:Flag(countryCode: "GT")),
|
||||||
|
// Country(name: "Country_GN".localizedString(), isoCode:"GN",phoneCode:"224", flag:Flag(countryCode: "GN")),
|
||||||
|
Country(name: "Country_GW".localizedString(), isoCode:"GW",phoneCode:"245", flag:Flag(countryCode: "GW")),
|
||||||
|
// Country(name: "Country_GY".localizedString(), isoCode:"GY",phoneCode:"592", flag:Flag(countryCode: "GY")),
|
||||||
|
Country(name: "Country_HT".localizedString(), isoCode:"HT",phoneCode:"509", flag:Flag(countryCode: "HT")),
|
||||||
|
Country(name: "Country_HN".localizedString(), isoCode:"HN",phoneCode:"504", flag:Flag(countryCode: "HN")),
|
||||||
|
Country(name: "Country_HK".localizedString(), isoCode:"HK",phoneCode:"852", flag:Flag(countryCode: "HK")),
|
||||||
|
Country(name: "Country_HU".localizedString(), isoCode:"HU",phoneCode:"36", flag:Flag(countryCode: "HU")),
|
||||||
|
Country(name: "Country_IS".localizedString(), isoCode:"IS",phoneCode:"354", flag:Flag(countryCode: "IS")),
|
||||||
|
Country(name: "Country_IN".localizedString(), isoCode:"IN",phoneCode:"91", flag:Flag(countryCode: "IN")),
|
||||||
|
Country(name: "Country_ID".localizedString(), isoCode:"ID",phoneCode:"62", flag:Flag(countryCode: "ID")),
|
||||||
|
Country(name: "Country_IQ".localizedString(), isoCode:"IQ",phoneCode:"964", flag:Flag(countryCode: "IQ")),
|
||||||
|
Country(name: "Country_IE".localizedString(), isoCode:"IE",phoneCode:"353", flag:Flag(countryCode: "IE")),
|
||||||
|
Country(name: "Country_IL".localizedString(), isoCode:"IL",phoneCode:"972", flag:Flag(countryCode: "IL")),
|
||||||
|
Country(name: "Country_IR".localizedString(), isoCode:"IR",phoneCode:"98", flag:Flag(countryCode: "IR")),
|
||||||
|
// Country(name: "Country_IT".localizedString(), isoCode:"IT",phoneCode:"39", flag:Flag(countryCode: "IT")),
|
||||||
|
Country(name: "Country_CI".localizedString(), isoCode:"CI",phoneCode:"225", flag:Flag(countryCode: "CI")),
|
||||||
|
Country(name: "Country_JM".localizedString(), isoCode:"JM",phoneCode:"1", flag:Flag(countryCode: "JM")),
|
||||||
|
Country(name: "Country_JP".localizedString(), isoCode:"JP",phoneCode:"81", flag:Flag(countryCode: "JP")),
|
||||||
|
Country(name: "Country_JO".localizedString(), isoCode:"JO",phoneCode:"962", flag:Flag(countryCode: "JO")),
|
||||||
|
Country(name: "Country_KZ".localizedString(), isoCode:"KZ",phoneCode:"7", flag:Flag(countryCode: "KZ")),
|
||||||
|
Country(name: "Country_KE".localizedString(), isoCode:"KE",phoneCode:"254", flag:Flag(countryCode: "KE")),
|
||||||
|
// Country(name: "Country_KI".localizedString(), isoCode:"KI",phoneCode:"686", flag:Flag(countryCode: "KI")),
|
||||||
|
Country(name: "Country_KW".localizedString(), isoCode:"KW",phoneCode:"965", flag:Flag(countryCode: "KW")),
|
||||||
|
Country(name: "Country_KG".localizedString(), isoCode:"KG",phoneCode:"996", flag:Flag(countryCode: "KG")),
|
||||||
|
Country(name: "Country_LA".localizedString(), isoCode:"LA",phoneCode:"856", flag:Flag(countryCode: "LA")),
|
||||||
|
Country(name: "Country_LV".localizedString(), isoCode:"LV",phoneCode:"371", flag:Flag(countryCode: "LV")),
|
||||||
|
Country(name: "Country_LB".localizedString(), isoCode:"LB",phoneCode:"961", flag:Flag(countryCode: "LB")),
|
||||||
|
// Country(name: "Country_LS".localizedString(), isoCode:"LS",phoneCode:"266", flag:Flag(countryCode: "LS")),
|
||||||
|
// Country(name: "Country_LR".localizedString(), isoCode:"LR",phoneCode:"231", flag:Flag(countryCode: "LR")),
|
||||||
|
// Country(name: "Country_LY".localizedString(), isoCode:"LY",phoneCode:"218", flag:Flag(countryCode: "LY")),
|
||||||
|
Country(name: "Country_LI".localizedString(), isoCode:"LI",phoneCode:"423", flag:Flag(countryCode: "LI")),
|
||||||
|
Country(name: "Country_LT".localizedString(), isoCode:"LT",phoneCode:"370", flag:Flag(countryCode: "LT")),
|
||||||
|
Country(name: "Country_LU".localizedString(), isoCode:"LU",phoneCode:"352", flag:Flag(countryCode: "LU")),
|
||||||
|
Country(name: "Country_MO".localizedString(), isoCode:"MO",phoneCode:"853", flag:Flag(countryCode: "MO")),
|
||||||
|
Country(name: "Country_MK".localizedString(), isoCode:"MK",phoneCode:"389", flag:Flag(countryCode: "MK")),
|
||||||
|
// Country(name: "Country_MG".localizedString(), isoCode:"MG",phoneCode:"261", flag:Flag(countryCode: "MG")),
|
||||||
|
// Country(name: "Country_MW".localizedString(), isoCode:"MW",phoneCode:"265", flag:Flag(countryCode: "MW")),
|
||||||
|
Country(name: "Country_MY".localizedString(), isoCode:"MY",phoneCode:"60", flag:Flag(countryCode: "MY")),
|
||||||
|
// Country(name: "Country_MV".localizedString(), isoCode:"MV",phoneCode:"960", flag:Flag(countryCode: "MV")),
|
||||||
|
Country(name: "Country_ML".localizedString(), isoCode:"ML",phoneCode:"223", flag:Flag(countryCode: "ML")),
|
||||||
|
Country(name: "Country_MT".localizedString(), isoCode:"MT",phoneCode:"356", flag:Flag(countryCode: "MT")),
|
||||||
|
Country(name: "Country_MQ".localizedString(), isoCode:"MQ",phoneCode:"1", flag:Flag(countryCode: "MQ")),
|
||||||
|
// Country(name: "Country_MR".localizedString(), isoCode:"MR",phoneCode:"222", flag:Flag(countryCode: "MR")),
|
||||||
|
Country(name: "Country_MU".localizedString(), isoCode:"MU",phoneCode:"230", flag:Flag(countryCode: "MU")),
|
||||||
|
Country(name: "Country_MX".localizedString(), isoCode:"MX",phoneCode:"52", flag:Flag(countryCode: "MX")),
|
||||||
|
Country(name: "Country_MD".localizedString(), isoCode:"MD",phoneCode:"373", flag:Flag(countryCode: "MD")),
|
||||||
|
// Country(name: "Country_MC".localizedString(), isoCode:"MC",phoneCode:"377", flag:Flag(countryCode: "MC")),
|
||||||
|
// Country(name: "Country_MO".localizedString(), isoCode:"MO",phoneCode:"853", flag:Flag(countryCode: "MO")),
|
||||||
|
// Country(name: "Country_ME".localizedString(), isoCode:"ME",phoneCode:"382", flag:Flag(countryCode: "ME")),
|
||||||
|
Country(name: "Country_MS".localizedString(), isoCode:"MS",phoneCode:"1", flag:Flag(countryCode: "MS")),
|
||||||
|
Country(name: "Country_MA".localizedString(), isoCode:"MA",phoneCode:"212", flag:Flag(countryCode: "MA")),
|
||||||
|
Country(name: "Country_MZ".localizedString(), isoCode:"MZ",phoneCode:"258", flag:Flag(countryCode: "MZ")),
|
||||||
|
Country(name: "Country_MM".localizedString(), isoCode:"MM",phoneCode:"95", flag:Flag(countryCode: "MM")),
|
||||||
|
Country(name: "Country_NA".localizedString(), isoCode:"NA",phoneCode:"264", flag:Flag(countryCode: "NA")),
|
||||||
|
Country(name: "Country_NP".localizedString(), isoCode:"NP",phoneCode:"977", flag:Flag(countryCode: "NP")),
|
||||||
|
Country(name: "Country_NL".localizedString(), isoCode:"NL",phoneCode:"31", flag:Flag(countryCode: "NL")),
|
||||||
|
// Country(name: "Country_AN".localizedString(), isoCode:"AN",phoneCode:"599", flag:Flag(countryCode: "AN")),
|
||||||
|
// Country(name: "Country_NC".localizedString(), isoCode:"NC",phoneCode:"687", flag:Flag(countryCode: "NC")),
|
||||||
|
Country(name: "Country_NZ".localizedString(), isoCode:"NZ",phoneCode:"64", flag:Flag(countryCode: "NZ")),
|
||||||
|
Country(name: "Country_NI".localizedString(), isoCode:"NI",phoneCode:"505", flag:Flag(countryCode: "NI")),
|
||||||
|
Country(name: "Country_NE".localizedString(), isoCode:"NE",phoneCode:"227", flag:Flag(countryCode: "NE")),
|
||||||
|
Country(name: "Country_NG".localizedString(), isoCode:"NG",phoneCode:"234", flag:Flag(countryCode: "NG")),
|
||||||
|
Country(name: "Country_NO".localizedString(), isoCode:"NO",phoneCode:"47", flag:Flag(countryCode: "NO")),
|
||||||
|
Country(name: "Country_OM".localizedString(), isoCode:"OM",phoneCode:"968", flag:Flag(countryCode: "OM")),
|
||||||
|
Country(name: "Country_PK".localizedString(), isoCode:"PK",phoneCode:"92", flag:Flag(countryCode: "PK")),
|
||||||
|
// Country(name: "Country_PW".localizedString(), isoCode:"PW",phoneCode:"680", flag:Flag(countryCode: "PW")),
|
||||||
|
// Country(name: "Country_PS".localizedString(), isoCode:"PS",phoneCode:"970", flag:Flag(countryCode: "PS")),
|
||||||
|
Country(name: "Country_PA".localizedString(), isoCode:"PA",phoneCode:"507", flag:Flag(countryCode: "PA")),
|
||||||
|
Country(name: "Country_PG".localizedString(), isoCode:"PG",phoneCode:"675", flag:Flag(countryCode: "PG")),
|
||||||
|
Country(name: "Country_PY".localizedString(), isoCode:"PY",phoneCode:"595", flag:Flag(countryCode: "PY")),
|
||||||
|
Country(name: "Country_PE".localizedString(), isoCode:"PE",phoneCode:"51", flag:Flag(countryCode: "PE")),
|
||||||
|
Country(name: "Country_PH".localizedString(), isoCode:"PH",phoneCode:"63", flag:Flag(countryCode: "PH")),
|
||||||
|
Country(name: "Country_PL".localizedString(), isoCode:"PL",phoneCode:"48", flag:Flag(countryCode: "PL")),
|
||||||
|
Country(name: "Country_PT".localizedString(), isoCode:"PT",phoneCode:"351", flag:Flag(countryCode: "PT")),
|
||||||
|
Country(name: "Country_PR".localizedString(), isoCode:"PR",phoneCode:"1", flag:Flag(countryCode: "PR")),
|
||||||
|
Country(name: "Country_QA".localizedString(), isoCode:"QA",phoneCode:"974", flag:Flag(countryCode: "QA")),
|
||||||
|
// Country(name: "Country_CG".localizedString(), isoCode:"CG",phoneCode:"242", flag:Flag(countryCode: "CG")),
|
||||||
|
// Country(name: "Country_RE".localizedString(), isoCode:"RE",phoneCode:"262", flag:Flag(countryCode: "RE")),
|
||||||
|
// Country(name: "Country_RO".localizedString(), isoCode:"RO",phoneCode:"40", flag:Flag(countryCode: "RO")),
|
||||||
|
Country(name: "Country_RU".localizedString(), isoCode:"RU",phoneCode:"7", flag:Flag(countryCode: "RU")),
|
||||||
|
Country(name: "Country_RW".localizedString(), isoCode:"RW",phoneCode:"250", flag:Flag(countryCode: "RW")),
|
||||||
|
Country(name: "Country_KN".localizedString(), isoCode:"KN",phoneCode:"1", flag:Flag(countryCode: "KN")),
|
||||||
|
Country(name: "Country_LC".localizedString(), isoCode:"LC",phoneCode:"1", flag:Flag(countryCode: "LC")),
|
||||||
|
Country(name: "Country_VC".localizedString(), isoCode:"VC",phoneCode:"1", flag:Flag(countryCode: "VC")),
|
||||||
|
// Country(name: "Country_WS".localizedString(), isoCode:"WS",phoneCode:"685", flag:Flag(countryCode: "WS")),
|
||||||
|
// Country(name: "Country_ST".localizedString(), isoCode:"ST",phoneCode:"239", flag:Flag(countryCode: "ST")),
|
||||||
|
// Country(name: "Country_SA".localizedString(), isoCode:"SA",phoneCode:"966", flag:Flag(countryCode: "SA")),
|
||||||
|
Country(name: "Country_SN".localizedString(), isoCode:"SN",phoneCode:"221", flag:Flag(countryCode: "SN")),
|
||||||
|
Country(name: "Country_RS".localizedString(), isoCode:"RS",phoneCode:"381", flag:Flag(countryCode: "RS")),
|
||||||
|
// Country(name: "Country_SC".localizedString(), isoCode:"SC",phoneCode:"248", flag:Flag(countryCode: "SC")),
|
||||||
|
Country(name: "Country_SD".localizedString(), isoCode:"SD",phoneCode:"249", flag:Flag(countryCode: "SD")),
|
||||||
|
// Country(name: "Country_SL".localizedString(), isoCode:"SL",phoneCode:"232", flag:Flag(countryCode: "SL")),
|
||||||
|
Country(name: "Country_SG".localizedString(), isoCode:"SG",phoneCode:"65", flag:Flag(countryCode: "SG")),
|
||||||
|
Country(name: "Country_SK".localizedString(), isoCode:"SK",phoneCode:"421", flag:Flag(countryCode: "SK")),
|
||||||
|
Country(name: "Country_SI".localizedString(), isoCode:"SI",phoneCode:"386", flag:Flag(countryCode: "SI")),
|
||||||
|
Country(name: "Country_SB".localizedString(), isoCode:"SB",phoneCode:"677", flag:Flag(countryCode: "SB")),
|
||||||
|
// Country(name: "Country_SO".localizedString(), isoCode:"SO",phoneCode:"252", flag:Flag(countryCode: "SO")),
|
||||||
|
Country(name: "Country_ZA".localizedString(), isoCode:"ZA",phoneCode:"27", flag:Flag(countryCode: "ZA")),
|
||||||
|
Country(name: "Country_KR".localizedString(), isoCode:"KR",phoneCode:"82", flag:Flag(countryCode: "KR")),
|
||||||
|
// Country(name: "Country_SS".localizedString(), isoCode:"SS",phoneCode:"211", flag:Flag(countryCode: "SS")),
|
||||||
|
Country(name: "Country_ES".localizedString(), isoCode:"ES",phoneCode:"34", flag:Flag(countryCode: "ES")),
|
||||||
|
Country(name: "Country_LK".localizedString(), isoCode:"LK",phoneCode:"94", flag:Flag(countryCode: "LK")),
|
||||||
|
// Country(name: "Country_SR".localizedString(), isoCode:"SR",phoneCode:"597", flag:Flag(countryCode: "SR")),
|
||||||
|
// Country(name: "Country_SZ".localizedString(), isoCode:"SZ",phoneCode:"268", flag:Flag(countryCode: "SZ")),
|
||||||
|
Country(name: "Country_SE".localizedString(), isoCode:"SE",phoneCode:"46", flag:Flag(countryCode: "SE")),
|
||||||
|
Country(name: "Country_CH".localizedString(), isoCode:"CH",phoneCode:"41", flag:Flag(countryCode: "CH")),
|
||||||
|
Country(name: "Country_TW".localizedString(), isoCode:"TW",phoneCode:"886", flag:Flag(countryCode: "TW")),
|
||||||
|
Country(name: "Country_TJ".localizedString(), isoCode:"TJ",phoneCode:"992", flag:Flag(countryCode: "TJ")),
|
||||||
|
Country(name: "Country_TZ".localizedString(), isoCode:"TZ",phoneCode:"255", flag:Flag(countryCode: "TZ")),
|
||||||
|
Country(name: "Country_TH".localizedString(), isoCode:"TH",phoneCode:"66", flag:Flag(countryCode: "TH")),
|
||||||
|
Country(name: "Country_TG".localizedString(), isoCode:"TG",phoneCode:"228", flag:Flag(countryCode: "TG")),
|
||||||
|
// Country(name: "Country_TO".localizedString(), isoCode:"TO",phoneCode:"676", flag:Flag(countryCode: "TO")),
|
||||||
|
Country(name: "Country_TT".localizedString(), isoCode:"TT",phoneCode:"1", flag:Flag(countryCode: "TT")),
|
||||||
|
Country(name: "Country_TN".localizedString(), isoCode:"TN",phoneCode:"216", flag:Flag(countryCode: "TN")),
|
||||||
|
Country(name: "Country_TR".localizedString(), isoCode:"TR",phoneCode:"90", flag:Flag(countryCode: "TR")),
|
||||||
|
Country(name: "Country_TM".localizedString(), isoCode:"TM",phoneCode:"993", flag:Flag(countryCode: "TM")),
|
||||||
|
Country(name: "Country_TC".localizedString(), isoCode:"TC",phoneCode:"1", flag:Flag(countryCode: "TC")),
|
||||||
|
Country(name: "Country_UG".localizedString(), isoCode:"UG",phoneCode:"256", flag:Flag(countryCode: "UG")),
|
||||||
|
Country(name: "Country_UA".localizedString(), isoCode:"UA",phoneCode:"380", flag:Flag(countryCode: "UA")),
|
||||||
|
Country(name: "Country_AE".localizedString(), isoCode:"AE",phoneCode:"971", flag:Flag(countryCode: "AE")),
|
||||||
|
Country(name: "Country_GB".localizedString(), isoCode:"GB",phoneCode:"44", flag:Flag(countryCode: "GB")),
|
||||||
|
Country(name: "Country_US".localizedString(), isoCode:"US",phoneCode:"1", flag:Flag(countryCode: "US")),
|
||||||
|
Country(name: "Country_UY".localizedString(), isoCode:"UY",phoneCode:"598", flag:Flag(countryCode: "UY")),
|
||||||
|
Country(name: "Country_UZ".localizedString(), isoCode:"UZ",phoneCode:"998", flag:Flag(countryCode: "UZ")),
|
||||||
|
// Country(name: "Country_VU".localizedString(), isoCode:"VU",phoneCode:"678", flag:Flag(countryCode: "VU")),
|
||||||
|
Country(name: "Country_VE".localizedString(), isoCode:"VE",phoneCode:"58", flag:Flag(countryCode: "VE")),
|
||||||
|
Country(name: "Country_VN".localizedString(), isoCode:"VN",phoneCode:"84", flag:Flag(countryCode: "VN")),
|
||||||
|
Country(name: "Country_VG".localizedString(), isoCode:"VG",phoneCode:"1", flag:Flag(countryCode: "VG")),
|
||||||
|
Country(name: "Country_VI".localizedString(), isoCode:"VI",phoneCode:"1", flag:Flag(countryCode: "VI")),
|
||||||
|
Country(name: "Country_YE".localizedString(), isoCode:"YE",phoneCode:"967", flag:Flag(countryCode: "YE")),
|
||||||
|
Country(name: "Country_ZM".localizedString(), isoCode:"ZM",phoneCode:"260", flag:Flag(countryCode: "ZM")),
|
||||||
|
Country(name: "Country_ZW".localizedString(), isoCode:"ZW",phoneCode:"263", flag:Flag(countryCode: "ZW")),
|
||||||
]
|
]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,7 @@ class EncounterMessageManager {
|
||||||
|
|
||||||
if let newPayload = self.advertisedPayload {
|
if let newPayload = self.advertisedPayload {
|
||||||
onComplete(newPayload)
|
onComplete(newPayload)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
onComplete(nil)
|
onComplete(nil)
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,6 +30,9 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
<fontDescription key="fontDescription" type="system" pointSize="18"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="FoundIssueWithApp"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a6i-hw-Hlf" userLabel="Compose Issue View">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="a6i-hw-Hlf" userLabel="Compose Issue View">
|
||||||
<rect key="frame" x="0.0" y="53.5" width="359" height="50"/>
|
<rect key="frame" x="0.0" y="53.5" width="359" height="50"/>
|
||||||
|
@ -46,6 +49,9 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
<color key="textColor" systemColor="placeholderTextColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="placeholderTextColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.29999999999999999" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="IssueDescPlaceholder"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZsZ-Vk-6gd" userLabel="Separator View">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZsZ-Vk-6gd" userLabel="Separator View">
|
||||||
<rect key="frame" x="0.0" y="49" width="359" height="1"/>
|
<rect key="frame" x="0.0" y="49" width="359" height="1"/>
|
||||||
|
@ -77,6 +83,9 @@
|
||||||
<rect key="frame" x="0.0" y="0.0" width="359" height="96.5"/>
|
<rect key="frame" x="0.0" y="0.0" width="359" height="96.5"/>
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
<fontDescription key="fontDescription" type="system" pointSize="16"/>
|
||||||
<textInputTraits key="textInputTraits" textContentType="email"/>
|
<textInputTraits key="textInputTraits" textContentType="email"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="EmailPlaceholder"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</textField>
|
</textField>
|
||||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Hzk-03-ymA" userLabel="Separator View">
|
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Hzk-03-ymA" userLabel="Separator View">
|
||||||
<rect key="frame" x="0.0" y="98.5" width="359" height="1"/>
|
<rect key="frame" x="0.0" y="98.5" width="359" height="1"/>
|
||||||
|
@ -90,6 +99,9 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
<fontDescription key="fontDescription" type="system" pointSize="11"/>
|
||||||
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
<color key="textColor" systemColor="secondaryLabelColor" red="0.23529411759999999" green="0.23529411759999999" blue="0.26274509800000001" alpha="0.59999999999999998" colorSpace="custom" customColorSpace="sRGB"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="IssueFooter"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
@ -135,6 +147,9 @@
|
||||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||||
<nil key="textColor"/>
|
<nil key="textColor"/>
|
||||||
<nil key="highlightedColor"/>
|
<nil key="highlightedColor"/>
|
||||||
|
<userDefinedRuntimeAttributes>
|
||||||
|
<userDefinedRuntimeAttribute type="string" keyPath="localizationKey" value="IssueThankYou"/>
|
||||||
|
</userDefinedRuntimeAttributes>
|
||||||
</label>
|
</label>
|
||||||
</subviews>
|
</subviews>
|
||||||
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
<color key="backgroundColor" systemColor="systemBackgroundColor" cocoaTouchSystemColor="whiteColor"/>
|
||||||
|
|
Binary file not shown.
|
@ -1,12 +0,0 @@
|
||||||
|
|
||||||
/* Class = "UILabel"; text = "Share your feedback…"; ObjectID = "OZa-NP-7UE"; */
|
|
||||||
"OZa-NP-7UE.text" = "Share your feedback about COVIDSafe";
|
|
||||||
|
|
||||||
/* Class = "UITextView"; text = "."; ObjectID = "f9d-gY-osK"; */
|
|
||||||
"f9d-gY-osK.text" = ".";
|
|
||||||
|
|
||||||
/* Class = "UILabel"; text = "Screenshot"; ObjectID = "gny-Yi-vdL"; */
|
|
||||||
"gny-Yi-vdL.text" = "Screenshot";
|
|
||||||
|
|
||||||
/* Class = "UILabel"; text = "Sending"; ObjectID = "jxY-0S-cFE"; */
|
|
||||||
"jxY-0S-cFE.text" = "Sending";
|
|
|
@ -29,16 +29,16 @@ final class FeedbackViewController: UIViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private lazy var sendBarButtonItem: UIBarButtonItem = {
|
private lazy var sendBarButtonItem: UIBarButtonItem = {
|
||||||
let item = UIBarButtonItem(title: NSLocalizedString("global_send_button_title",
|
let item = UIBarButtonItem(title: "global_send_button_title".localizedString(comment: "Send Button"),
|
||||||
tableName: "Feedback",
|
style: .done,
|
||||||
bundle: Bundle.main,
|
target: self,
|
||||||
comment: "Send"), style: .done, target: self, action: #selector(sendButtonTapped))
|
action: #selector(sendButtonTapped))
|
||||||
item.tintColor = .covidCareColor
|
item.tintColor = .covidSafeColor
|
||||||
return item
|
return item
|
||||||
}()
|
}()
|
||||||
|
|
||||||
private lazy var doneButtonItem: UIBarButtonItem = {
|
private lazy var doneButtonItem: UIBarButtonItem = {
|
||||||
let item = UIBarButtonItem(title: NSLocalizedString("Done", comment: "Done"), style: .done, target: self, action: #selector(doneButtonTapped))
|
let item = UIBarButtonItem(title: "Done".localizedString(), style: .done, target: self, action: #selector(doneButtonTapped))
|
||||||
item.tintColor = .covidSafeColor
|
item.tintColor = .covidSafeColor
|
||||||
return item
|
return item
|
||||||
}()
|
}()
|
||||||
|
@ -110,11 +110,7 @@ final class FeedbackViewController: UIViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
private func setup() {
|
private func setup() {
|
||||||
self.title = NSLocalizedString("newFeedbackFlow_navigationTitle",
|
self.title = "newFeedbackFlow_navigationTitle".localizedString(comment: "Title for feedback flow navigation")
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Title for feedback flow navigation"
|
|
||||||
)
|
|
||||||
|
|
||||||
issueTextView.textContainer.lineFragmentPadding = 0.0
|
issueTextView.textContainer.lineFragmentPadding = 0.0
|
||||||
setupDelegates()
|
setupDelegates()
|
||||||
|
@ -148,8 +144,7 @@ final class FeedbackViewController: UIViewController {
|
||||||
|
|
||||||
@objc private func sendButtonTapped(_ sender: Any) {
|
@objc private func sendButtonTapped(_ sender: Any) {
|
||||||
guard emailTextField.isValid else {
|
guard emailTextField.isValid else {
|
||||||
let errorMessage = NSLocalizedString("newFeedback_invalidEmail_errorMessage",tableName: "Feedback",
|
let errorMessage = "newFeedback_invalidEmail_errorMessage".localizedString(comment: "Please enter a valid email address!")
|
||||||
bundle: Bundle.main, comment: "Please enter a valid email address!")
|
|
||||||
showErrorMessage(errorMessage)
|
showErrorMessage(errorMessage)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -211,11 +206,7 @@ final class FeedbackViewController: UIViewController {
|
||||||
|
|
||||||
case.error:
|
case.error:
|
||||||
self.state = .idle
|
self.state = .idle
|
||||||
let errorMessage = NSLocalizedString("newFeedback_send_errorMessage",
|
let errorMessage = "newFeedback_send_errorMessage".localizedString(comment: "Generic error message shown when feedback could not be sent")
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Generic error message shown when feedback could not be sent"
|
|
||||||
)
|
|
||||||
|
|
||||||
self.showErrorMessage(errorMessage)
|
self.showErrorMessage(errorMessage)
|
||||||
|
|
||||||
|
@ -229,10 +220,7 @@ final class FeedbackViewController: UIViewController {
|
||||||
|
|
||||||
private func showErrorMessage(_ message: String) {
|
private func showErrorMessage(_ message: String) {
|
||||||
let alert = AlertController(title: "COVIDSafe", message: message, preferredStyle: .alert)
|
let alert = AlertController(title: "COVIDSafe", message: message, preferredStyle: .alert)
|
||||||
let okActionTitle = NSLocalizedString("global_ok_button_title",
|
let okActionTitle = "OK".localizedString()
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Title for ok button")
|
|
||||||
let okAction = UIAlertAction(title: okActionTitle, style: .default)
|
let okAction = UIAlertAction(title: okActionTitle, style: .default)
|
||||||
alert.addAction(okAction)
|
alert.addAction(okAction)
|
||||||
present(alert, animated: true)
|
present(alert, animated: true)
|
||||||
|
|
|
@ -115,11 +115,7 @@ extension NewFeedbackFlowController {
|
||||||
// MARK: Factories
|
// MARK: Factories
|
||||||
|
|
||||||
func createCancelBarButtonItem() -> UIBarButtonItem {
|
func createCancelBarButtonItem() -> UIBarButtonItem {
|
||||||
let buttonTitle = NSLocalizedString("global_cancel_button_title",
|
let buttonTitle = "global_cancel_button_title".localizedString()
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Cancel button title"
|
|
||||||
)
|
|
||||||
|
|
||||||
let item = UIBarButtonItem(
|
let item = UIBarButtonItem(
|
||||||
title: buttonTitle,
|
title: buttonTitle,
|
||||||
|
|
|
@ -116,9 +116,7 @@ extension UIViewController {
|
||||||
|
|
||||||
extension AlertController {
|
extension AlertController {
|
||||||
func addNewFeedbackFlowAction() {
|
func addNewFeedbackFlowAction() {
|
||||||
let title = NSLocalizedString("entryPrompt_newFeedback_button_title",
|
let title = "entryPrompt_newFeedback_button_title".localizedString(
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Button title for button that launches new feedback flow"
|
comment: "Button title for button that launches new feedback flow"
|
||||||
)
|
)
|
||||||
self.addDefaultAction(localizedTitle: title) { [weak self] _ in
|
self.addDefaultAction(localizedTitle: title) { [weak self] _ in
|
||||||
|
|
|
@ -22,9 +22,7 @@ extension UIAlertAction {
|
||||||
// MARK: UIAlertController cancel extension
|
// MARK: UIAlertController cancel extension
|
||||||
extension UIAlertController {
|
extension UIAlertController {
|
||||||
func addCancelAction() {
|
func addCancelAction() {
|
||||||
let cancelActionTitle = NSLocalizedString("global_cancel_button_title",
|
let cancelActionTitle = "global_cancel_button_title".localizedString(
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Cancel button title"
|
comment: "Cancel button title"
|
||||||
)
|
)
|
||||||
let cancelAction = UIAlertAction(title: cancelActionTitle, style: .cancel, handler: nil)
|
let cancelAction = UIAlertAction(title: cancelActionTitle, style: .cancel, handler: nil)
|
||||||
|
|
|
@ -5,15 +5,11 @@ import UIKit
|
||||||
class ViewControllerFactory {
|
class ViewControllerFactory {
|
||||||
|
|
||||||
func createPropmtController(_ useCustomTransition: Bool, settings: FeedbackSettings? = nil) -> UIViewController {
|
func createPropmtController(_ useCustomTransition: Bool, settings: FeedbackSettings? = nil) -> UIViewController {
|
||||||
let title = NSLocalizedString("entryPrompt_alert_title",
|
let title = "entryPrompt_alert_title".localizedString(
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Title for initial alert when feedback is launched"
|
comment: "Title for initial alert when feedback is launched"
|
||||||
)
|
)
|
||||||
|
|
||||||
let message = NSLocalizedString("entryPrompt_alert_message",
|
let message = "entryPrompt_alert_message".localizedString(
|
||||||
tableName: "Feedback",
|
|
||||||
bundle: Bundle.main,
|
|
||||||
comment: "Prompt message for initial alert when feedback is launched"
|
comment: "Prompt message for initial alert when feedback is launched"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ class HelpNavController: UINavigationController {
|
||||||
let feedbackButton = UIButton(type: .system)
|
let feedbackButton = UIButton(type: .system)
|
||||||
feedbackButton.translatesAutoresizingMaskIntoConstraints = false
|
feedbackButton.translatesAutoresizingMaskIntoConstraints = false
|
||||||
feedbackButton.addTarget(self, action: #selector(feedbackButtonPressed(_:)), for: .touchUpInside)
|
feedbackButton.addTarget(self, action: #selector(feedbackButtonPressed(_:)), for: .touchUpInside)
|
||||||
feedbackButton.setTitle(NSLocalizedString("ReportAnIssue", comment: "Report an issue"),
|
feedbackButton.setTitle("ReportAnIssue".localizedString(),
|
||||||
for: .normal)
|
for: .normal)
|
||||||
feedbackButton.titleLabel?.font = .systemFont(ofSize: 18)
|
feedbackButton.titleLabel?.font = .systemFont(ofSize: 18)
|
||||||
feedbackButton.tintColor = .covidSafeColor
|
feedbackButton.tintColor = .covidSafeColor
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
import UIKit
|
import UIKit
|
||||||
import Lottie
|
import Lottie
|
||||||
|
import KeychainSwift
|
||||||
import SafariServices
|
import SafariServices
|
||||||
|
|
||||||
class HomeViewController: UIViewController {
|
class HomeViewController: UIViewController {
|
||||||
|
@ -47,7 +48,7 @@ class HomeViewController: UIViewController {
|
||||||
let formattedDate = dateFormatterPrint.string(from: lastUpload)
|
let formattedDate = dateFormatterPrint.string(from: lastUpload)
|
||||||
let newAttributedString = NSMutableAttributedString(
|
let newAttributedString = NSMutableAttributedString(
|
||||||
string: String.localizedStringWithFormat(
|
string: String.localizedStringWithFormat(
|
||||||
NSLocalizedString("InformationUploaded", comment: "Information uploaded template"),
|
"InformationUploaded".localizedString(comment: "Information uploaded template"),
|
||||||
formattedDate)
|
formattedDate)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -78,6 +79,11 @@ class HomeViewController: UIViewController {
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
|
||||||
|
// this is to show the settings prompt initially if bluetooth is off
|
||||||
|
if !BluetraceManager.shared.isBluetoothOn() {
|
||||||
|
BluetraceManager.shared.turnOn()
|
||||||
|
}
|
||||||
|
|
||||||
observer = NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { [unowned self] notification in
|
observer = NotificationCenter.default.addObserver(forName: UIApplication.didBecomeActiveNotification, object: nil, queue: .main) { [unowned self] notification in
|
||||||
self.toggleViews()
|
self.toggleViews()
|
||||||
}
|
}
|
||||||
|
@ -93,7 +99,7 @@ class HomeViewController: UIViewController {
|
||||||
|
|
||||||
if let versionNumber = Bundle.main.versionShort, let buildNumber = Bundle.main.version {
|
if let versionNumber = Bundle.main.versionShort, let buildNumber = Bundle.main.version {
|
||||||
self.versionNumberLabel.text = String.localizedStringWithFormat(
|
self.versionNumberLabel.text = String.localizedStringWithFormat(
|
||||||
NSLocalizedString("VersionNumber", comment: "Version number template"),
|
"VersionNumber".localizedString(comment: "Version number template"),
|
||||||
versionNumber,buildNumber
|
versionNumber,buildNumber
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
@ -124,6 +130,7 @@ class HomeViewController: UIViewController {
|
||||||
super.viewDidAppear(animated)
|
super.viewDidAppear(animated)
|
||||||
self.lottieBluetoothView?.play()
|
self.lottieBluetoothView?.play()
|
||||||
self.becomeFirstResponder()
|
self.becomeFirstResponder()
|
||||||
|
self.updateJWTKeychainAccess()
|
||||||
}
|
}
|
||||||
|
|
||||||
override func viewWillDisappear(_ animated: Bool) {
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
@ -151,9 +158,20 @@ class HomeViewController: UIViewController {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func updateJWTKeychainAccess() {
|
||||||
|
let hasUpdatedKeychainAccess = UserDefaults.standard.bool(forKey: "HasUpdatedKeychainAccess")
|
||||||
|
if (!hasUpdatedKeychainAccess) {
|
||||||
|
let keychain = KeychainSwift()
|
||||||
|
if let jwt = keychain.get("JWT_TOKEN") {
|
||||||
|
if (keychain.set(jwt, forKey: "JWT_TOKEN", withAccess: .accessibleAfterFirstUnlock)) {
|
||||||
|
DLog("Updated access class on JWT")
|
||||||
|
UserDefaults.standard.set(true, forKey: "HasUpdatedKeychainAccess")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fileprivate func toggleViews() {
|
fileprivate func toggleViews() {
|
||||||
|
|
||||||
|
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { [weak self] settings in
|
UNUserNotificationCenter.current().getNotificationSettings(completionHandler: { [weak self] settings in
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
|
@ -216,10 +234,10 @@ class HomeViewController: UIViewController {
|
||||||
self.helpButton.setImage(UIImage(named: "ic-help-selected"), for: .normal)
|
self.helpButton.setImage(UIImage(named: "ic-help-selected"), for: .normal)
|
||||||
self.helpButton.setTitleColor(UIColor.black, for: .normal)
|
self.helpButton.setTitleColor(UIColor.black, for: .normal)
|
||||||
|
|
||||||
self.homeHeaderInfoText.text = NSLocalizedString("HomeHeaderNoAction", comment: "Header with no action req")
|
self.homeHeaderInfoText.text = "HomeHeaderNoAction".localizedString(comment: "Header with no action req")
|
||||||
|
|
||||||
if (!self.allPermissionOn) {
|
if (!self.allPermissionOn) {
|
||||||
self.homeHeaderInfoText.text = NSLocalizedString("HomeHeaderPermissions", comment: "Header with check permisisons text")
|
self.homeHeaderInfoText.text = "HomeHeaderPermissions".localizedString(comment: "Header with check permisisons text")
|
||||||
self.homeHeaderView.backgroundColor = UIColor.covidHomePermissionErrorColor
|
self.homeHeaderView.backgroundColor = UIColor.covidHomePermissionErrorColor
|
||||||
} else {
|
} else {
|
||||||
self.homeHeaderView.backgroundColor = UIColor.covidHomeActiveColor
|
self.homeHeaderView.backgroundColor = UIColor.covidHomeActiveColor
|
||||||
|
@ -229,8 +247,8 @@ class HomeViewController: UIViewController {
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func toggleBluetoothStatusView() {
|
fileprivate func toggleBluetoothStatusView() {
|
||||||
toggleViewVisibility(view: bluetoothStatusOnView, isVisible: !self.allPermissionOn && self.bluetoothStatusOn)
|
toggleViewVisibility(view: bluetoothStatusOnView, isVisible: !self.bluetoothPermissionOn && self.bluetoothStatusOn)
|
||||||
toggleViewVisibility(view: bluetoothStatusOffView, isVisible: !self.allPermissionOn && !self.bluetoothStatusOn)
|
toggleViewVisibility(view: bluetoothStatusOffView, isVisible: self.bluetoothPermissionOn && !self.bluetoothStatusOn)
|
||||||
}
|
}
|
||||||
|
|
||||||
fileprivate func toggleBluetoothPermissionStatusView() {
|
fileprivate func toggleBluetoothPermissionStatusView() {
|
||||||
|
@ -246,10 +264,10 @@ class HomeViewController: UIViewController {
|
||||||
case true:
|
case true:
|
||||||
pushNotificationStatusIcon.isHighlighted = false
|
pushNotificationStatusIcon.isHighlighted = false
|
||||||
pushNotificationStatusTitle.text = NSLocalizedString("NotificationsEnabled", comment: "Notifications Enabled")
|
pushNotificationStatusTitle.text = NSLocalizedString("NotificationsEnabled", comment: "Notifications Enabled")
|
||||||
let newAttributedLabel = NSMutableAttributedString(string: NSLocalizedString("NotificationsEnabledBlurb", comment: "Notifications Enabled content blurb"), attributes: [.font: UIFont.preferredFont(forTextStyle: .caption1)])
|
let newAttributedLabel = NSMutableAttributedString(string: NSLocalizedString("NotificationsEnabledBlurb", comment: "Notifications Enabled content blurb"), attributes: [.font: UIFont.preferredFont(forTextStyle: .callout)])
|
||||||
|
|
||||||
//set some attributes
|
//set some attributes
|
||||||
guard let linkRange = newAttributedLabel.string.range(of: NSLocalizedString("NotificationsBlurbLink", comment: "Notifications blurb link")) else { return }
|
guard let linkRange = newAttributedLabel.string.range(of: "NotificationsBlurbLink".localizedString( comment: "Notifications blurb link")) else { return }
|
||||||
let nsRange = NSRange(linkRange, in: newAttributedLabel.string)
|
let nsRange = NSRange(linkRange, in: newAttributedLabel.string)
|
||||||
newAttributedLabel.addAttribute(.foregroundColor,
|
newAttributedLabel.addAttribute(.foregroundColor,
|
||||||
value: UIColor.covidSafeColor,
|
value: UIColor.covidSafeColor,
|
||||||
|
@ -259,13 +277,12 @@ class HomeViewController: UIViewController {
|
||||||
|
|
||||||
default:
|
default:
|
||||||
pushNotificationStatusIcon.isHighlighted = true
|
pushNotificationStatusIcon.isHighlighted = true
|
||||||
pushNotificationStatusTitle.text = NSLocalizedString("NotificationsDisabled", comment: "Notifications Enabled")
|
pushNotificationStatusTitle.text = "NotificationsDisabled".localizedString(comment: "Notifications Enabled")
|
||||||
let newAttributedLabel = NSMutableAttributedString(string:
|
let newAttributedLabel = NSMutableAttributedString(string:
|
||||||
NSLocalizedString("NotificationsDisabledBlurb", comment: "Notifications Enabled content blurb"), attributes: [.font: UIFont.preferredFont(forTextStyle: .caption1)])
|
NSLocalizedString("NotificationsDisabledBlurb", comment: "Notifications Enabled content blurb"), attributes: [.font: UIFont.preferredFont(forTextStyle: .callout)])
|
||||||
|
|
||||||
//set some attributes
|
//set some attributes
|
||||||
guard let linkRange = newAttributedLabel.string.range(of:
|
guard let linkRange = newAttributedLabel.string.range(of: "NotificationsBlurbLink".localizedString()) else { return }
|
||||||
NSLocalizedString("NotificationsBlurbLink", comment: "Notifications blurb link")) else { return }
|
|
||||||
let nsRange = NSRange(linkRange, in: newAttributedLabel.string)
|
let nsRange = NSRange(linkRange, in: newAttributedLabel.string)
|
||||||
newAttributedLabel.addAttribute(.foregroundColor,
|
newAttributedLabel.addAttribute(.foregroundColor,
|
||||||
value: UIColor.covidSafeColor,
|
value: UIColor.covidSafeColor,
|
||||||
|
@ -275,13 +292,24 @@ class HomeViewController: UIViewController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func onSettingsTapped(_ sender: UITapGestureRecognizer) {
|
func attemptTurnOnBluetooth() {
|
||||||
|
BluetraceManager.shared.toggleScanning(false)
|
||||||
|
BluetraceManager.shared.turnOn()
|
||||||
|
}
|
||||||
|
|
||||||
|
// MARK: IBActions
|
||||||
|
|
||||||
|
@IBAction func onAppSettingsTapped(_ sender: UITapGestureRecognizer) {
|
||||||
guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else {
|
guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
UIApplication.shared.open(settingsURL)
|
UIApplication.shared.open(settingsURL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@IBAction func onBluetoothPhoneSettingsTapped(_ sender: Any) {
|
||||||
|
attemptTurnOnBluetooth()
|
||||||
|
}
|
||||||
|
|
||||||
@IBAction func onShareTapped(_ sender: UITapGestureRecognizer) {
|
@IBAction func onShareTapped(_ sender: UITapGestureRecognizer) {
|
||||||
let shareText = TracerRemoteConfig.defaultShareText
|
let shareText = TracerRemoteConfig.defaultShareText
|
||||||
let activity = UIActivityViewController(activityItems: [shareText], applicationActivities: nil)
|
let activity = UIActivityViewController(activityItems: [shareText], applicationActivities: nil)
|
||||||
|
@ -335,10 +363,6 @@ class HomeViewController: UIViewController {
|
||||||
present(nav, animated: true, completion: nil)
|
present(nav, animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func onPowerSaverButtonTapped(_ sender: Any) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
func appWillResignActive(_ notification: Notification) {
|
func appWillResignActive(_ notification: Notification) {
|
||||||
self.lottieBluetoothView?.stop()
|
self.lottieBluetoothView?.stop()
|
||||||
|
@ -380,7 +404,7 @@ class HomeViewController: UIViewController {
|
||||||
|
|
||||||
struct TracerRemoteConfig {
|
struct TracerRemoteConfig {
|
||||||
static let defaultShareText = """
|
static let defaultShareText = """
|
||||||
\(NSLocalizedString("ShareText", comment: "Share app with friends text")) #COVID19
|
\("ShareText".localizedString(comment: "Share app with friends text")) #COVID19
|
||||||
#coronavirusaustralia #stayhomesavelives https://covidsafe.gov.au
|
#coronavirusaustralia #stayhomesavelives https://covidsafe.gov.au
|
||||||
"""
|
"""
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,14 +23,4 @@ class IsolationSuccessViewController: UIViewController {
|
||||||
@IBAction func doneOntap(_ sender: Any) {
|
@IBAction func doneOntap(_ sender: Any) {
|
||||||
dismiss(animated: true, completion: nil)
|
dismiss(animated: true, completion: nil)
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,10 +87,10 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
|
|
||||||
var numberWithCountryCode = "Unknown"
|
var numberWithCountryCode = "Unknown"
|
||||||
if let regInfo = registrationInfo {
|
if let regInfo = registrationInfo {
|
||||||
numberWithCountryCode = "+61 \(regInfo.phoneNumber)"
|
numberWithCountryCode = "+\(regInfo.countryPhoneCode ?? "61") \(regInfo.phoneNumber)"
|
||||||
}
|
}
|
||||||
self.titleLabel.text = String.localizedStringWithFormat(
|
self.titleLabel.text = String.localizedStringWithFormat(
|
||||||
NSLocalizedString("EnterPINSent", comment: "Enter the PIN sent template"), numberWithCountryCode
|
"EnterPINSent".localizedString(comment: "Enter the PIN sent template"), numberWithCountryCode
|
||||||
)
|
)
|
||||||
startTimer()
|
startTimer()
|
||||||
}
|
}
|
||||||
|
@ -130,7 +130,7 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
countdownFormatted = String(countdown.suffix(from: countdown.index(after: countdown.startIndex)))
|
countdownFormatted = String(countdown.suffix(from: countdown.index(after: countdown.startIndex)))
|
||||||
}
|
}
|
||||||
expiredMessageLabel?.text = String.localizedStringWithFormat(
|
expiredMessageLabel?.text = String.localizedStringWithFormat(
|
||||||
NSLocalizedString("PINWillExpire", comment: "PIN will expire template"), countdownFormatted
|
"PINWillExpire".localizedString(comment: "PIN will expire template"), countdownFormatted
|
||||||
)
|
)
|
||||||
expiredMessageLabel?.isHidden = false
|
expiredMessageLabel?.isHidden = false
|
||||||
if let OTP = codeInputView?.text {
|
if let OTP = codeInputView?.text {
|
||||||
|
@ -139,7 +139,7 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
timer?.invalidate()
|
timer?.invalidate()
|
||||||
expiredMessageLabel?.text = NSLocalizedString("CodeHasExpired", comment: "Your code has expired.")
|
expiredMessageLabel?.text = "CodeHasExpired".localizedString()
|
||||||
expiredMessageLabel?.textColor = UIColor(0xA31919)
|
expiredMessageLabel?.textColor = UIColor(0xA31919)
|
||||||
|
|
||||||
verifyButton?.isEnabled = false
|
verifyButton?.isEnabled = false
|
||||||
|
@ -147,26 +147,16 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
private func verifyPhoneNumber(_ phoneNumber: String) {
|
private func verifyPhoneNumber(_ phoneNumber: String) {
|
||||||
guard self.registrationInfo != nil else {
|
guard self.registrationInfo != nil else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
PhoneValidationAPI.verifyPhoneNumber(regInfo: self.registrationInfo!) {[weak self] (session, error) in
|
PhoneValidationAPI.verifyPhoneNumber(regInfo: self.registrationInfo!) {[weak self] (session, error) in
|
||||||
if let error = error {
|
if let error = error {
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("PhoneVerificationErrorTitle", comment: "Phone verification error title"),
|
let errorAlert = UIAlertController(title: "PhoneVerificationErrorTitle".localizedString(),
|
||||||
message: NSLocalizedString("PhoneVerificationErrorMessage", comment: "Phone verification error message"),
|
message: "PhoneVerificationErrorMessage".localizedString(),
|
||||||
preferredStyle: .alert)
|
preferredStyle: .alert)
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .default, handler: { _ in
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(), style: .default, handler: { _ in
|
||||||
NSLog("Unable to verify phone number")
|
NSLog("Unable to verify phone number")
|
||||||
}))
|
}))
|
||||||
self?.present(errorAlert, animated: true)
|
self?.present(errorAlert, animated: true)
|
||||||
|
@ -193,19 +183,18 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
self.navigationController?.popViewController(animated: true)
|
self.navigationController?.popViewController(animated: true)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let numberWithCountryCode = "+61 \(regInfo.phoneNumber)"
|
|
||||||
|
|
||||||
let result = PhoneNumberParser.parse(numberWithCountryCode)
|
let result = PhoneNumberParser.parse(regInfo.phoneNumber, countryCode: regInfo.countryPhoneCode ?? "61")
|
||||||
|
|
||||||
switch result {
|
switch result {
|
||||||
case .success(let parsedNumber):
|
case .success(let parsedNumber):
|
||||||
verifyPhoneNumber(parsedNumber)
|
verifyPhoneNumber(parsedNumber)
|
||||||
|
|
||||||
case .failure(let error):
|
case .failure(let error):
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("PhoneNumberFormatErrorTitle", comment: "Wrong phone format error title"),
|
let errorAlert = UIAlertController(title: "PhoneNumberFormatErrorTitle".localizedString(),
|
||||||
message: NSLocalizedString("PhoneNumberFormatErrorMessage", comment: "Wrong phone format error message"),
|
message: "PhoneNumberFormatErrorMessage".localizedString(),
|
||||||
preferredStyle: .alert)
|
preferredStyle: .alert)
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .default, handler: { _ in
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(), style: .default, handler: { _ in
|
||||||
self.navigationController?.popViewController(animated: true)
|
self.navigationController?.popViewController(animated: true)
|
||||||
NSLog("Unable to verify phone number")
|
NSLog("Unable to verify phone number")
|
||||||
}))
|
}))
|
||||||
|
@ -241,7 +230,8 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let keychain = KeychainSwift()
|
let keychain = KeychainSwift()
|
||||||
keychain.set(tokenToStore, forKey: "JWT_TOKEN")
|
keychain.set(tokenToStore, forKey: "JWT_TOKEN", withAccess: .accessibleAfterFirstUnlock)
|
||||||
|
UserDefaults.standard.set(true, forKey: "HasUpdatedKeychainAccess")
|
||||||
result(.Success)
|
result(.Success)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,11 +243,11 @@ class OTPViewController: UIViewController, RegistrationHandler {
|
||||||
self.activityIndicator.stopAnimating()
|
self.activityIndicator.stopAnimating()
|
||||||
switch status {
|
switch status {
|
||||||
case .InvalidOTP:
|
case .InvalidOTP:
|
||||||
viewController.errorMessageLabel?.text = NSLocalizedString("InvalidOTP", comment: "Must be a 6-digit code")
|
viewController.errorMessageLabel?.text = "InvalidOTP".localizedString(comment: "Must be a 6-digit code")
|
||||||
self.errorMessageLabel?.isHidden = false
|
self.errorMessageLabel?.isHidden = false
|
||||||
self.codeInputView?.invalidCode = true
|
self.codeInputView?.invalidCode = true
|
||||||
case .WrongOTP:
|
case .WrongOTP:
|
||||||
viewController.errorMessageLabel?.text = NSLocalizedString("WrongOTP", comment: "Wrong PIN entered")
|
viewController.errorMessageLabel?.text = "WrongOTP".localizedString(comment: "Wrong PIN entered")
|
||||||
self.errorMessageLabel?.isHidden = false
|
self.errorMessageLabel?.isHidden = false
|
||||||
self.codeInputView?.invalidCode = true
|
self.codeInputView?.invalidCode = true
|
||||||
case .Success:
|
case .Success:
|
||||||
|
|
|
@ -9,14 +9,5 @@ import UIKit
|
||||||
import SafariServices
|
import SafariServices
|
||||||
|
|
||||||
class OnboardingStep1ViewController: UIViewController {
|
class OnboardingStep1ViewController: UIViewController {
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,14 +56,4 @@ class OnboardingStep1aViewController: UIViewController, UITextViewDelegate {
|
||||||
privacyText.addLink("https://www.health.gov.au/using-our-websites/privacy/privacy-notice-for-covidsafe-app", enclosedIn: "*")
|
privacyText.addLink("https://www.health.gov.au/using-our-websites/privacy/privacy-notice-for-covidsafe-app", enclosedIn: "*")
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,15 +19,4 @@ class OnboardingStep1bViewController: UIViewController {
|
||||||
textView.textContainer.lineFragmentPadding = 0.0
|
textView.textContainer.lineFragmentPadding = 0.0
|
||||||
textView.addLink(URLHelper.getHelpURL(), enclosedIn: "*")
|
textView.addLink(URLHelper.getHelpURL(), enclosedIn: "*")
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
// MARK: - Navigation
|
|
||||||
|
|
||||||
// In a storyboard-based application, you will often want to do a little preparation before navigation
|
|
||||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
|
||||||
// Get the new view controller using segue.destination.
|
|
||||||
// Pass the selected object to the new view controller.
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,17 +21,17 @@ class OnboardingStep2bViewController: UIViewController {
|
||||||
.paragraphStyle: paragraphStyle,
|
.paragraphStyle: paragraphStyle,
|
||||||
.font: UIFont.preferredFont(forTextStyle: .body)
|
.font: UIFont.preferredFont(forTextStyle: .body)
|
||||||
]
|
]
|
||||||
let pointOneText = NSAttributedString(string: NSLocalizedString("PointOne", comment: "Keep phone on you when you leave home"),
|
let pointOneText = NSAttributedString(string: NSLocalizedString("OS2b_Item1", comment: "Keep phone on you when you leave home"),
|
||||||
attributes: labelAtt)
|
attributes: labelAtt)
|
||||||
pointOneLabel.attributedText = pointOneText
|
pointOneLabel.attributedText = pointOneText
|
||||||
|
|
||||||
let pointTwoText = NSAttributedString(string: NSLocalizedString("PointTwo", comment: "Keep bluetooth turned on"),
|
let pointTwoText = NSAttributedString(string: NSLocalizedString("OS2b_Item2", comment: "Keep bluetooth turned on"),
|
||||||
attributes: labelAtt)
|
attributes: labelAtt)
|
||||||
pointTwoLabel.attributedText = pointTwoText
|
pointTwoLabel.attributedText = pointTwoText
|
||||||
|
|
||||||
let pointThreeText = NSMutableAttributedString(string: NSLocalizedString("PointThree", comment: "COVIDSafe does NOT send pairing requests"),
|
let pointThreeText = NSMutableAttributedString(string: NSLocalizedString("OS2b_Item3", comment: "COVIDSafe does NOT send pairing requests"),
|
||||||
attributes: labelAtt)
|
attributes: labelAtt)
|
||||||
let learnMoreRange = pointThreeText.string.range(of: NSLocalizedString("PointThreeUnderline", comment: "Text that should be underlined from PointThree"))!
|
let learnMoreRange = pointThreeText.string.range(of: NSLocalizedString("OS2b_Item3Underline", comment: "Text that should be underlined from PointThree"))!
|
||||||
let nsRange = NSRange(learnMoreRange, in: pointThreeText.string)
|
let nsRange = NSRange(learnMoreRange, in: pointThreeText.string)
|
||||||
pointThreeText.addAttributes([.underlineStyle: NSUnderlineStyle.single.rawValue, .foregroundColor: UIColor.covidSafeColor], range: nsRange)
|
pointThreeText.addAttributes([.underlineStyle: NSUnderlineStyle.single.rawValue, .foregroundColor: UIColor.covidSafeColor], range: nsRange)
|
||||||
pointThreeLabel.attributedText = pointThreeText
|
pointThreeLabel.attributedText = pointThreeText
|
||||||
|
|
|
@ -83,7 +83,13 @@ extension PeripheralController: CBPeripheralManagerDelegate {
|
||||||
DLog("\(["request": request] as AnyObject)")
|
DLog("\(["request": request] as AnyObject)")
|
||||||
EncounterMessageManager.shared.getAdvertisementPayload { (payloadToAdvertise) in
|
EncounterMessageManager.shared.getAdvertisementPayload { (payloadToAdvertise) in
|
||||||
if let payload = payloadToAdvertise {
|
if let payload = payloadToAdvertise {
|
||||||
request.value = payload
|
// check offset
|
||||||
|
if request.offset > payload.count {
|
||||||
|
peripheral.respond(to: request, withResult: .invalidOffset)
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
request.value = payload.advanced(by: request.offset)
|
||||||
peripheral.respond(to: request, withResult: .success)
|
peripheral.respond(to: request, withResult: .success)
|
||||||
} else {
|
} else {
|
||||||
DLog("Error getting payload to advertise")
|
DLog("Error getting payload to advertise")
|
||||||
|
|
|
@ -46,7 +46,7 @@ class PersonalDetailsViewController: UIViewController, UITextFieldDelegate, UIPi
|
||||||
let toolBar = UIToolbar()
|
let toolBar = UIToolbar()
|
||||||
toolBar.sizeToFit()
|
toolBar.sizeToFit()
|
||||||
|
|
||||||
self.nextBarButtonItem = UIBarButtonItem(title: NSLocalizedString("Done", comment: "Done"),
|
self.nextBarButtonItem = UIBarButtonItem(title: "Done".localizedString(),
|
||||||
style: .plain,
|
style: .plain,
|
||||||
target: self,
|
target: self,
|
||||||
action: #selector(self.nextButtonTapped))
|
action: #selector(self.nextButtonTapped))
|
||||||
|
@ -202,7 +202,7 @@ class PersonalDetailsViewController: UIViewController, UITextFieldDelegate, UIPi
|
||||||
|
|
||||||
func textFieldDidBeginEditing(_ textField: UITextField) {
|
func textFieldDidBeginEditing(_ textField: UITextField) {
|
||||||
if (textField == firstnameTextField || textField == postcodeTextField) {
|
if (textField == firstnameTextField || textField == postcodeTextField) {
|
||||||
nextBarButtonItem?.title = NSLocalizedString("Done", comment: "Done")
|
nextBarButtonItem?.title = "Done".localizedString()
|
||||||
if(UIAccessibility.isVoiceOverRunning) {
|
if(UIAccessibility.isVoiceOverRunning) {
|
||||||
firstnameTextField.isAccessibilityElement = true
|
firstnameTextField.isAccessibilityElement = true
|
||||||
postcodeTextField.isAccessibilityElement = true
|
postcodeTextField.isAccessibilityElement = true
|
||||||
|
@ -232,7 +232,7 @@ class PersonalDetailsViewController: UIViewController, UITextFieldDelegate, UIPi
|
||||||
ageTextField.isAccessibilityElement = false
|
ageTextField.isAccessibilityElement = false
|
||||||
UIAccessibility.post(notification: .screenChanged, argument: agePicker)
|
UIAccessibility.post(notification: .screenChanged, argument: agePicker)
|
||||||
}
|
}
|
||||||
nextBarButtonItem?.title = NSLocalizedString("Next", comment: "Next")
|
nextBarButtonItem?.title = "Next".localizedString()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -270,10 +270,10 @@ class PersonalDetailsViewController: UIViewController, UITextFieldDelegate, UIPi
|
||||||
}
|
}
|
||||||
|
|
||||||
func presentValidationError(error: String, fieldToFocus: UITextField) {
|
func presentValidationError(error: String, fieldToFocus: UITextField) {
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("ValidationError", comment: "Validation error"),
|
let errorAlert = UIAlertController(title: "ValidationError".localizedString(comment: "Validation error"),
|
||||||
message: error,
|
message: error,
|
||||||
preferredStyle: .alert)
|
preferredStyle: .alert)
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "OK"),
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(),
|
||||||
style: .default,
|
style: .default,
|
||||||
handler: { _ in
|
handler: { _ in
|
||||||
fieldToFocus.becomeFirstResponder()
|
fieldToFocus.becomeFirstResponder()
|
||||||
|
@ -303,7 +303,7 @@ class PersonalDetailsViewController: UIViewController, UITextFieldDelegate, UIPi
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
guard postCode.range(of: #"^(0[2|8|9]|[1-9][0-9])\d{2}$"#, options: .regularExpression) != nil else {
|
guard postCode.range(of: #"^(0[2|8|9]|[1-9][0-9])\d{2}$"#, options: .regularExpression) != nil else {
|
||||||
presentValidationError(error: NSLocalizedString("PostcodeValidationErrorMessage", comment: "Please enter a valid postcode"),
|
presentValidationError(error: "PostcodeValidationErrorMessage".localizedString(comment: "Please enter a valid postcode"),
|
||||||
fieldToFocus: postcodeTextField)
|
fieldToFocus: postcodeTextField)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,11 @@ import Foundation
|
||||||
final class PhoneNumberParser {
|
final class PhoneNumberParser {
|
||||||
|
|
||||||
// e.g. 412 345 678
|
// e.g. 412 345 678
|
||||||
static let numberOfDigits = 9
|
static let numberOfDigitsAu = 9
|
||||||
static let mobilePhoneNumberPrefix = "4"
|
static let minNumberOfDigitsNorfolkIsland = 5
|
||||||
|
static let maxNumberOfDigitsNorfolkIsland = 6
|
||||||
|
static let mobilePhoneNumberNorfolkIslandPrefix = "3"
|
||||||
|
static let mobilePhoneNumberAuPrefix = "4"
|
||||||
|
|
||||||
enum Error: Swift.Error {
|
enum Error: Swift.Error {
|
||||||
case notDigits
|
case notDigits
|
||||||
|
@ -14,10 +17,11 @@ final class PhoneNumberParser {
|
||||||
case incorrectMobilePhoneNumberPrefix
|
case incorrectMobilePhoneNumberPrefix
|
||||||
}
|
}
|
||||||
|
|
||||||
static func parse(_ string: String) -> Result<String, Error> {
|
static func parse(_ string: String, countryCode: String) -> Result<String, Error> {
|
||||||
// Remove all spaces
|
// Remove all spaces
|
||||||
var string = string.replacingOccurrences(of: " ", with: "")
|
var string = string.replacingOccurrences(of: " ", with: "")
|
||||||
|
|
||||||
|
if countryCode == "61" {
|
||||||
// Remove leading "+61"
|
// Remove leading "+61"
|
||||||
if string.hasPrefix("+61") {
|
if string.hasPrefix("+61") {
|
||||||
string.removeFirst(3)
|
string.removeFirst(3)
|
||||||
|
@ -33,15 +37,47 @@ final class PhoneNumberParser {
|
||||||
string.removeFirst()
|
string.removeFirst()
|
||||||
}
|
}
|
||||||
|
|
||||||
guard string.hasPrefix(mobilePhoneNumberPrefix) else {
|
guard string.hasPrefix(mobilePhoneNumberAuPrefix) else {
|
||||||
return .failure(.incorrectMobilePhoneNumberPrefix)
|
return .failure(.incorrectMobilePhoneNumberPrefix)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check number of digits
|
// Check number of digits
|
||||||
guard string.count == Self.numberOfDigits else {
|
guard string.count == Self.numberOfDigitsAu else {
|
||||||
return .failure(.incorrectDigitCount)
|
return .failure(.incorrectDigitCount)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return .success(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
if countryCode == "672" {
|
||||||
|
// Remove leading "+672"
|
||||||
|
if string.hasPrefix("+672") {
|
||||||
|
string.removeFirst(4)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check for digit only
|
||||||
|
guard string.rangeOfCharacter(from: CharacterSet.decimalDigits.inverted) == nil else {
|
||||||
|
return .failure(.notDigits)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check number of digits
|
||||||
|
guard string.count >= self.minNumberOfDigitsNorfolkIsland && string.count <= self.maxNumberOfDigitsNorfolkIsland else {
|
||||||
|
return .failure(.incorrectDigitCount)
|
||||||
|
}
|
||||||
|
|
||||||
|
if string.count == self.maxNumberOfDigitsNorfolkIsland && !string.hasPrefix(mobilePhoneNumberNorfolkIslandPrefix) {
|
||||||
|
return .failure(.incorrectMobilePhoneNumberPrefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
return .success(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// remove country code if present in the phone number
|
||||||
|
if string.hasPrefix("+\(countryCode)") {
|
||||||
|
string.removeFirst(countryCode.count+1)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return .success(string)
|
return .success(string)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,20 +1,28 @@
|
||||||
// Copyright © 2020 Australian Government All rights reserved.
|
// Copyright © 2020 Australian Government All rights reserved.
|
||||||
import SafariServices
|
import SafariServices
|
||||||
import UIKit
|
import UIKit
|
||||||
|
import FlagKit
|
||||||
|
|
||||||
class PhoneNumberViewController: UIViewController, UITextFieldDelegate, RegistrationHandler {
|
class PhoneNumberViewController: UIViewController, UITextFieldDelegate, RegistrationHandler, CountrySelectionDelegate {
|
||||||
|
|
||||||
@IBOutlet weak var phoneNumberField: UITextField!
|
@IBOutlet weak var phoneNumberField: UITextField!
|
||||||
|
@IBOutlet weak var countryCodeField: UITextField!
|
||||||
@IBOutlet weak var getOTPButton: UIButton!
|
@IBOutlet weak var getOTPButton: UIButton!
|
||||||
@IBOutlet weak var titleLabel: UILabel!
|
@IBOutlet weak var titleLabel: UILabel!
|
||||||
|
@IBOutlet weak var phoneExample: UILabel!
|
||||||
|
@IBOutlet weak var phoneError: UILabel!
|
||||||
|
@IBOutlet weak var phoneLabel: UILabel!
|
||||||
|
var countryFlagContainerView: UIView!
|
||||||
|
var flagImageView: UIImageView!
|
||||||
|
|
||||||
let PHONE_NUMBER_LENGTH = 17 // e.g. "+61 4 12 345 678 " if text is auto-pasted from text message
|
let PHONE_NUMBER_LENGTH = 17 // e.g. "+61 4 12 345 678 " if text is auto-pasted from text message
|
||||||
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
|
@IBOutlet weak var activityIndicator: UIActivityIndicatorView!
|
||||||
@IBOutlet weak var ausPhoneNumberButton: UIButton!
|
var selectedCountry: Country?
|
||||||
var selectedCountry: String? = "Australia"
|
|
||||||
var countryList: [String] = CountriesData.countryArray
|
var countryList: [String] = CountriesData.countryArray
|
||||||
// If this view is part of the reauthentiation flow of an expired JWT
|
// If this view is part of the reauthentiation flow of an expired JWT
|
||||||
var reauthenticating: Bool = false
|
var reauthenticating: Bool = false
|
||||||
var registrationInfo: RegistrationRequest?
|
var registrationInfo: RegistrationRequest?
|
||||||
|
var initialLabelTextColour: UIColor?
|
||||||
|
|
||||||
override func viewDidLoad() {
|
override func viewDidLoad() {
|
||||||
super.viewDidLoad()
|
super.viewDidLoad()
|
||||||
|
@ -23,26 +31,31 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
phoneNumberField.delegate = self
|
phoneNumberField.delegate = self
|
||||||
dismissKeyboardOnTap()
|
dismissKeyboardOnTap()
|
||||||
if (reauthenticating) {
|
if (reauthenticating) {
|
||||||
self.titleLabel.text = NSLocalizedString("EnterPhoneReVerify", comment: "Enter your mobile number to re-verify")
|
self.titleLabel.text = "EnterPhoneReVerify".localizedString(comment: "Enter your mobile number to re-verify")
|
||||||
}
|
}
|
||||||
let ausNumberAtt: [NSAttributedString.Key : Any] = [
|
countryCodeField.text = "(+61) " + "Country_AU".localizedString()
|
||||||
.font: UIFont.preferredFont(forTextStyle: .body),
|
countryCodeField.accessibilityValue = "(+61) " + "Country_AU".localizedString() + " is selected"
|
||||||
.foregroundColor: UIColor.covidSafeColor,
|
|
||||||
.underlineStyle: NSUnderlineStyle.single.rawValue
|
|
||||||
]
|
|
||||||
let ausNumberButtonText = NSAttributedString(string: NSLocalizedString("AusPhoneNumberButton", comment: "Link to help page about using an australian phone number"),
|
|
||||||
attributes: ausNumberAtt)
|
|
||||||
self.ausPhoneNumberButton.setAttributedTitle(ausNumberButtonText, for: .normal)
|
|
||||||
|
|
||||||
}
|
// Set initial Country img
|
||||||
|
countryFlagContainerView = UIView(frame: CGRect(x: 0, y: 0, width: 60, height: 24))
|
||||||
|
let flag = Flag(countryCode: "AU")!
|
||||||
|
let flagImage = flag.originalImage
|
||||||
|
flagImageView = UIImageView(frame: CGRect(x: 0, y: 2, width: 28, height: 20))
|
||||||
|
flagImageView.contentMode = .scaleAspectFit
|
||||||
|
flagImageView.image = flagImage
|
||||||
|
countryFlagContainerView.addSubview(flagImageView)
|
||||||
|
// Set View
|
||||||
|
let chevronImg = UIImage(named: "ChevronRight")
|
||||||
|
let chevronImgView = UIImageView(frame: CGRect(x: 32, y: 0, width: 24, height: 24))
|
||||||
|
chevronImgView.image = chevronImg
|
||||||
|
countryFlagContainerView.addSubview(chevronImgView)
|
||||||
|
|
||||||
override func viewWillAppear(_ animated: Bool) {
|
countryCodeField.rightView = countryFlagContainerView
|
||||||
super.viewWillAppear(animated)
|
countryCodeField.rightViewMode = .always
|
||||||
self.phoneNumberField.becomeFirstResponder()
|
countryCodeField.delegate = self
|
||||||
}
|
|
||||||
|
|
||||||
override func viewDidAppear(_ animated: Bool) {
|
initialLabelTextColour = phoneLabel.textColor
|
||||||
super.viewDidAppear(animated)
|
navigationController?.view.backgroundColor = UIColor.white
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func onBackTapped(_ sender: UIButton) {
|
@IBAction func onBackTapped(_ sender: UIButton) {
|
||||||
|
@ -53,20 +66,11 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
parsePhoneNumberAndProceed(self.phoneNumberField.text ?? "")
|
parsePhoneNumberAndProceed(self.phoneNumberField.text ?? "")
|
||||||
}
|
}
|
||||||
|
|
||||||
@IBAction func onAustralianNumberPressed(_ sender: UIButton) {
|
|
||||||
guard let url = URL(string: URLHelper.getAustralianNumberURL()) else {
|
|
||||||
DLog("Failed to get Aus number URL")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
let safariVC = SFSafariViewController(url: url)
|
|
||||||
present(safariVC, animated: true, completion: nil)
|
|
||||||
}
|
|
||||||
|
|
||||||
@objc
|
@objc
|
||||||
func phoneNumberFieldDidChange() {
|
func phoneNumberFieldDidChange() {
|
||||||
guard let phoneNumberString = self.phoneNumberField.text else { return }
|
guard let phoneNumberString = self.phoneNumberField.text else { return }
|
||||||
if (selectedCountry == "Australia") {
|
if (selectedCountry == nil || selectedCountry?.name == "Australia") {
|
||||||
let result = PhoneNumberParser.parse(phoneNumberString)
|
let result = PhoneNumberParser.parse(phoneNumberString, countryCode: "61")
|
||||||
if case .success = result {
|
if case .success = result {
|
||||||
self.phoneNumberField.resignFirstResponder()
|
self.phoneNumberField.resignFirstResponder()
|
||||||
}
|
}
|
||||||
|
@ -74,7 +78,7 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
}
|
}
|
||||||
|
|
||||||
func parsePhoneNumberAndProceed(_ number: String) {
|
func parsePhoneNumberAndProceed(_ number: String) {
|
||||||
let result = PhoneNumberParser.parse(number)
|
let result = PhoneNumberParser.parse(number, countryCode: selectedCountry?.phoneCode ?? "61")
|
||||||
|
|
||||||
switch result {
|
switch result {
|
||||||
case .success(let parsedNumber):
|
case .success(let parsedNumber):
|
||||||
|
@ -83,10 +87,10 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
verifyPhoneNumber(parsedNumber)
|
verifyPhoneNumber(parsedNumber)
|
||||||
|
|
||||||
case .failure(let error):
|
case .failure(let error):
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("PhoneNumberFormatErrorTitle", comment: "Wrong phone format error title"),
|
let errorAlert = UIAlertController(title: "PhoneNumberFormatErrorTitle".localizedString(),
|
||||||
message: NSLocalizedString("PhoneNumberFormatErrorMessage", comment: "Wrong phone format error message"),
|
message: "PhoneNumberFormatErrorMessage".localizedString(),
|
||||||
preferredStyle: .alert)
|
preferredStyle: .alert)
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .default, handler: { _ in
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(), style: .default, handler: { _ in
|
||||||
NSLog("Unable to verify phone number")
|
NSLog("Unable to verify phone number")
|
||||||
}))
|
}))
|
||||||
present(errorAlert, animated: true)
|
present(errorAlert, animated: true)
|
||||||
|
@ -100,13 +104,15 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
self.registrationInfo?.phoneNumber = phoneNumber
|
self.registrationInfo?.phoneNumber = phoneNumber
|
||||||
|
self.registrationInfo?.countryPhoneCode = selectedCountry?.phoneCode ?? "61"
|
||||||
PhoneValidationAPI.verifyPhoneNumber(regInfo: self.registrationInfo!) {[weak self] (session, error) in
|
PhoneValidationAPI.verifyPhoneNumber(regInfo: self.registrationInfo!) {[weak self] (session, error) in
|
||||||
self?.activityIndicator.stopAnimating()
|
self?.activityIndicator.stopAnimating()
|
||||||
self?.getOTPButton.isEnabled = true
|
self?.getOTPButton.isEnabled = true
|
||||||
if let error = error {
|
if let error = error {
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("PhoneVerificationErrorTitle", comment: "Phone verification error title"),
|
let errorAlert = UIAlertController(title: "PhoneVerificationErrorTitle".localizedString(),
|
||||||
message: NSLocalizedString("PhoneVerificationErrorMessage", comment: "Phone verification error message"), preferredStyle: .alert)
|
message: "PhoneVerificationErrorMessage".localizedString(),
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "Default action"), style: .default, handler: { _ in
|
preferredStyle: .alert)
|
||||||
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(), style: .default, handler: { _ in
|
||||||
DLog("Unable to verify phone number")
|
DLog("Unable to verify phone number")
|
||||||
}))
|
}))
|
||||||
self?.present(errorAlert, animated: true)
|
self?.present(errorAlert, animated: true)
|
||||||
|
@ -123,6 +129,10 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
vc.reauthenticating = self.reauthenticating
|
vc.reauthenticating = self.reauthenticating
|
||||||
vc.registrationInfo = self.registrationInfo
|
vc.registrationInfo = self.registrationInfo
|
||||||
}
|
}
|
||||||
|
if let vc = segue.destination as? SelectCountryViewController {
|
||||||
|
navigationController?.setNavigationBarHidden(false, animated: false)
|
||||||
|
vc.countrySelectionDelegate = self
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// limit text field input to 17 characters
|
// limit text field input to 17 characters
|
||||||
|
@ -136,8 +146,74 @@ class PhoneNumberViewController: UIViewController, UITextFieldDelegate, Registra
|
||||||
return newString.length <= maxLength
|
return newString.length <= maxLength
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func textFieldDidEndEditing(_ textField: UITextField) {
|
||||||
|
if textField == phoneNumberField {
|
||||||
|
validatePhoneNumber()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
|
||||||
|
if textField == countryCodeField {
|
||||||
|
phoneNumberField.resignFirstResponder()
|
||||||
|
performSegue(withIdentifier: "selectCountrySegue", sender: self)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
@objc func action() {
|
@objc func action() {
|
||||||
view.endEditing(true)
|
view.endEditing(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setCountry(country: Country) {
|
||||||
|
selectedCountry = country
|
||||||
|
|
||||||
|
flagImageView.image = selectedCountry?.flag?.originalImage
|
||||||
|
guard let countryName = country.name, let countryPhoneCode = country.phoneCode else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
countryCodeField.text = "(+\(countryPhoneCode)) \(countryName)"
|
||||||
|
countryCodeField.accessibilityValue = "(+\(countryPhoneCode)) \(countryName) is selected"
|
||||||
|
if selectedCountry?.isoCode == "AU2" {
|
||||||
|
phoneExample.isHidden = false
|
||||||
|
} else {
|
||||||
|
phoneExample.isHidden = true
|
||||||
|
}
|
||||||
|
validatePhoneNumber()
|
||||||
|
}
|
||||||
|
|
||||||
|
func validatePhoneNumber() {
|
||||||
|
phoneExample.textColor = initialLabelTextColour
|
||||||
|
phoneLabel.textColor = initialLabelTextColour
|
||||||
|
phoneNumberField.borderWidth = 0
|
||||||
|
phoneError.isHidden = true
|
||||||
|
let countryCode = selectedCountry?.phoneCode ?? "61"
|
||||||
|
|
||||||
|
guard let phoneText = phoneNumberField.text, phoneText.count > 0 else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
let parseResult = PhoneNumberParser.parse(phoneText, countryCode: countryCode)
|
||||||
|
|
||||||
|
switch parseResult {
|
||||||
|
case .failure( _):
|
||||||
|
phoneError.isHidden = false
|
||||||
|
phoneExample.textColor = UIColor.covidSafeErrorColor
|
||||||
|
phoneLabel.textColor = UIColor.covidSafeErrorColor
|
||||||
|
phoneNumberField.borderWidth = 1
|
||||||
|
if selectedCountry == nil || selectedCountry?.isoCode == "AU" {
|
||||||
|
phoneError.text = "AustralianPhoneValidationError".localizedString()
|
||||||
|
} else if selectedCountry?.isoCode == "AU2" {
|
||||||
|
phoneError.text = "NorfolkPhoneValidationError".localizedString()
|
||||||
|
}
|
||||||
|
break
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protocol CountrySelectionDelegate {
|
||||||
|
func setCountry(country: Country)
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,13 +9,13 @@ struct PushNotificationConstants {
|
||||||
// Bluetooth Status
|
// Bluetooth Status
|
||||||
static let btStatusPushNotifContents = [
|
static let btStatusPushNotifContents = [
|
||||||
[
|
[
|
||||||
"contentTitle": "COVIDSafe is currently inactive",
|
"contentTitle": "PN_BluetoothStatusTitle".localizedString(),
|
||||||
"contentBody": "Make sure it's active before you leave home and when in public places by enabling Bluetooth®"
|
"contentBody": "PN_BluetoothStatusBody".localizedString()
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
static let reminderPushNotifContents = [
|
static let reminderPushNotifContents = [
|
||||||
"contentTitle": "Reminder: COVIDSafe app has not been active in the past 48 hours",
|
"contentTitle": "PN_ReminderTitle".localizedString(),
|
||||||
"contentBody": "Tap to open the app and keep Bluetooth enabled."
|
"contentBody": "PN_ReminderBody".localizedString()
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load diff
213
CovidSafe/SelectCountryViewController.swift
Normal file
213
CovidSafe/SelectCountryViewController.swift
Normal file
|
@ -0,0 +1,213 @@
|
||||||
|
//
|
||||||
|
// SelectCountryViewController.swift
|
||||||
|
// CovidSafe
|
||||||
|
//
|
||||||
|
// Copyright © 2020 Australian Government. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import UIKit
|
||||||
|
import FlagKit
|
||||||
|
import SafariServices
|
||||||
|
|
||||||
|
struct Country {
|
||||||
|
var name: String!
|
||||||
|
var isoCode: String!
|
||||||
|
var phoneCode: String!
|
||||||
|
var flag: Flag?
|
||||||
|
}
|
||||||
|
|
||||||
|
class SelectCountryViewController: UITableViewController, UISearchResultsUpdating {
|
||||||
|
|
||||||
|
let searchController = UISearchController(searchResultsController: nil)
|
||||||
|
let AU_OPTIONS_KEY = "OptionsForAustralia"
|
||||||
|
|
||||||
|
var countriesTableData: Dictionary<String, [Country]> = [:]
|
||||||
|
let countriesSortedByName = CountriesData.countries.sorted(by: { (country1, country2) -> Bool in
|
||||||
|
country1.name < country2.name
|
||||||
|
})
|
||||||
|
var filteredCountriesTableData: [Country] = []
|
||||||
|
var countrySelectionDelegate: CountrySelectionDelegate?
|
||||||
|
|
||||||
|
var countriesSectionTitles: [String] = []
|
||||||
|
var isSearchBarEmpty = true
|
||||||
|
var isFiltering: Bool {
|
||||||
|
return searchController.isActive && !isSearchBarEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidLoad() {
|
||||||
|
super.viewDidLoad()
|
||||||
|
let label = UILabel()
|
||||||
|
label.text = "SelectCountryTitle".localizedString()
|
||||||
|
label.font = UIFont.preferredFont(forTextStyle: .headline)
|
||||||
|
self.navigationItem.titleView = label
|
||||||
|
|
||||||
|
searchController.searchResultsUpdater = self
|
||||||
|
searchController.obscuresBackgroundDuringPresentation = false
|
||||||
|
definesPresentationContext = true
|
||||||
|
|
||||||
|
navigationController?.navigationBar.isTranslucent = false
|
||||||
|
navigationController?.navigationBar.barTintColor = UIColor.white
|
||||||
|
//Set search bar
|
||||||
|
if #available(iOS 11.0, *) {
|
||||||
|
navigationItem.searchController = searchController
|
||||||
|
} else {
|
||||||
|
tableView.tableHeaderView = searchController.searchBar
|
||||||
|
searchController.hidesNavigationBarDuringPresentation = false
|
||||||
|
searchController.dimsBackgroundDuringPresentation = false
|
||||||
|
automaticallyAdjustsScrollViewInsets = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the data source of the countries table
|
||||||
|
let norfolkIslandCountry = Country(name: "Country_AU2".localizedString(), isoCode: "AU2", phoneCode: "672", flag: Flag(countryCode: "AU"))
|
||||||
|
let australiaCountry = Country(name: "Country_AU".localizedString(), isoCode: "AU", phoneCode: "61", flag: Flag(countryCode: "AU"))
|
||||||
|
countriesTableData.updateValue([australiaCountry, norfolkIslandCountry], forKey: AU_OPTIONS_KEY)
|
||||||
|
countriesSectionTitles.append(" ")
|
||||||
|
|
||||||
|
for country in countriesSortedByName {
|
||||||
|
let initial = String(country.name[country.name.startIndex])
|
||||||
|
var sectionCountries: [Country] = countriesTableData[initial] ?? []
|
||||||
|
if sectionCountries.count == 0 {
|
||||||
|
countriesSectionTitles.append(initial)
|
||||||
|
}
|
||||||
|
sectionCountries.append(country)
|
||||||
|
countriesTableData.updateValue(sectionCountries, forKey: initial)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillAppear(_ animated: Bool) {
|
||||||
|
super.viewWillAppear(animated)
|
||||||
|
//this is to show the search bar initially
|
||||||
|
if #available(iOS 11.0, *) {
|
||||||
|
navigationItem.hidesSearchBarWhenScrolling = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewDidAppear(_ animated: Bool) {
|
||||||
|
super.viewDidAppear(animated)
|
||||||
|
if #available(iOS 11.0, *) {
|
||||||
|
if !UIAccessibility.isVoiceOverRunning {
|
||||||
|
navigationItem.hidesSearchBarWhenScrolling = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if UIAccessibility.isVoiceOverRunning {
|
||||||
|
UIAccessibility.post(notification: .layoutChanged, argument: self.navigationItem.titleView )
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func viewWillDisappear(_ animated: Bool) {
|
||||||
|
super.viewWillDisappear(animated)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func updateSearchResults(for searchController: UISearchController) {
|
||||||
|
let searchBar = searchController.searchBar
|
||||||
|
let searchBarText = searchBar.text?.lowercased() ?? ""
|
||||||
|
if (searchBarText == "") {
|
||||||
|
isSearchBarEmpty = true
|
||||||
|
filteredCountriesTableData = []
|
||||||
|
tableView.reloadData()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
isSearchBarEmpty = false
|
||||||
|
filteredCountriesTableData = countriesSortedByName.filter({ (country) -> Bool in
|
||||||
|
let countryName = country.name.lowercased()
|
||||||
|
let searchCriteria = searchBarText.lowercased()
|
||||||
|
if countryName.contains(searchCriteria) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
tableView.reloadData()
|
||||||
|
}
|
||||||
|
|
||||||
|
override func sectionIndexTitles(for tableView: UITableView) -> [String]? {
|
||||||
|
if !isFiltering {
|
||||||
|
return countriesSectionTitles
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||||
|
var country: Country
|
||||||
|
if !isFiltering {
|
||||||
|
var sectionIndex = AU_OPTIONS_KEY
|
||||||
|
if indexPath.section > 0 {
|
||||||
|
sectionIndex = countriesSectionTitles[indexPath.section]
|
||||||
|
}
|
||||||
|
guard let sectionCountries = countriesTableData[sectionIndex] else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
country = sectionCountries[indexPath.row]
|
||||||
|
} else {
|
||||||
|
country = filteredCountriesTableData[indexPath.row]
|
||||||
|
}
|
||||||
|
countrySelectionDelegate?.setCountry(country: country)
|
||||||
|
navigationController?.setNavigationBarHidden(true, animated: false)
|
||||||
|
self.navigationController?.popViewController(animated: true)
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
|
||||||
|
if !isFiltering {
|
||||||
|
if section == 0 {
|
||||||
|
return "AustraliaSectionTitle".localizedString()
|
||||||
|
}
|
||||||
|
|
||||||
|
return countriesSectionTitles[section]
|
||||||
|
} else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||||
|
if !isFiltering {
|
||||||
|
var sectionIndex = AU_OPTIONS_KEY
|
||||||
|
if section > 0 {
|
||||||
|
sectionIndex = countriesSectionTitles[section]
|
||||||
|
}
|
||||||
|
return countriesTableData[sectionIndex]?.count ?? 0
|
||||||
|
} else {
|
||||||
|
return filteredCountriesTableData.count
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||||
|
if !isFiltering {
|
||||||
|
return countriesSectionTitles.count
|
||||||
|
} else {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||||
|
let cell = tableView.dequeueReusableCell(withIdentifier: "CountryCell", for: indexPath) as! CountryCellViewCell
|
||||||
|
var country: Country
|
||||||
|
|
||||||
|
if !isFiltering {
|
||||||
|
var sectionIndex = AU_OPTIONS_KEY
|
||||||
|
if indexPath.section > 0 {
|
||||||
|
sectionIndex = countriesSectionTitles[indexPath.section]
|
||||||
|
}
|
||||||
|
guard let sectionCountries = countriesTableData[sectionIndex] else {
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
country = sectionCountries[indexPath.row]
|
||||||
|
} else {
|
||||||
|
country = filteredCountriesTableData[indexPath.row]
|
||||||
|
}
|
||||||
|
|
||||||
|
cell.countryTitleLabel.text = country.name
|
||||||
|
cell.countryPhoneLabel.text = "+\(country.phoneCode ?? "")"
|
||||||
|
cell.countryFlagImageView.image = country.flag?.originalImage
|
||||||
|
|
||||||
|
return cell
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class CountryCellViewCell: UITableViewCell {
|
||||||
|
|
||||||
|
@IBOutlet weak var countryTitleLabel: UILabel!
|
||||||
|
@IBOutlet weak var countryPhoneLabel: UILabel!
|
||||||
|
@IBOutlet weak var countryFlagImageView: UIImageView!
|
||||||
|
}
|
17
CovidSafe/String+Localization.swift
Normal file
17
CovidSafe/String+Localization.swift
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
//
|
||||||
|
// String+Localization.swift
|
||||||
|
// CovidSafe
|
||||||
|
//
|
||||||
|
// Copyright © 2020 Australian Government. All rights reserved.
|
||||||
|
//
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension String {
|
||||||
|
|
||||||
|
func localizedString( comment: String = "") -> String {
|
||||||
|
if self == "" {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
return NSLocalizedString(self, comment: comment)
|
||||||
|
}
|
||||||
|
}
|
93
CovidSafe/UILocalization.swift
Normal file
93
CovidSafe/UILocalization.swift
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
//
|
||||||
|
// UILocalization.swift
|
||||||
|
// CovidSafe
|
||||||
|
//
|
||||||
|
// Copyright © 2020 Australian Government. All rights reserved.
|
||||||
|
//
|
||||||
|
import UIKit
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
extension UILabel {
|
||||||
|
|
||||||
|
static var localizedKey:UInt8 = 0
|
||||||
|
|
||||||
|
@IBInspectable public var localizationKey: String? {
|
||||||
|
set {
|
||||||
|
objc_setAssociatedObject(self, &UILabel.localizedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
return objc_getAssociatedObject(self, &UILabel.localizedKey) as? String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
guard let localizationKey = self.localizationKey, localizationKey != localizationKey.localizedString() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.text = localizationKey.localizedString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UITextView {
|
||||||
|
static var localizedKey:UInt8 = 0
|
||||||
|
|
||||||
|
@IBInspectable public var localizationKey: String? {
|
||||||
|
set {
|
||||||
|
objc_setAssociatedObject(self, &UITextView.localizedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
return objc_getAssociatedObject(self, &UITextView.localizedKey) as? String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
guard let localizationKey = self.localizationKey, localizationKey != localizationKey.localizedString() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.text = localizationKey.localizedString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UITextField {
|
||||||
|
static var localizedKey:UInt8 = 0
|
||||||
|
|
||||||
|
@IBInspectable public var localizationKey: String? {
|
||||||
|
set {
|
||||||
|
objc_setAssociatedObject(self, &UITextView.localizedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
return objc_getAssociatedObject(self, &UITextView.localizedKey) as? String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
guard let localizationKey = self.localizationKey, localizationKey != localizationKey.localizedString() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.placeholder = localizationKey.localizedString()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extension UIButton {
|
||||||
|
static var localizedKey:UInt8 = 0
|
||||||
|
|
||||||
|
@IBInspectable public var localizationKey: String? {
|
||||||
|
set {
|
||||||
|
objc_setAssociatedObject(self, &UITextView.localizedKey, newValue, .OBJC_ASSOCIATION_RETAIN)
|
||||||
|
}
|
||||||
|
get {
|
||||||
|
return objc_getAssociatedObject(self, &UITextView.localizedKey) as? String
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
open override func awakeFromNib() {
|
||||||
|
super.awakeFromNib()
|
||||||
|
guard let localizationKey = self.localizationKey, localizationKey != localizationKey.localizedString() else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
self.setTitle(localizationKey.localizedString(), for: .normal)
|
||||||
|
}
|
||||||
|
}
|
|
@ -32,8 +32,8 @@ class UploadDataStep2VC: UIViewController, CodeInputViewDelegate {
|
||||||
var currentKeyboardFrame: CGRect?
|
var currentKeyboardFrame: CGRect?
|
||||||
var uploadAnimatedView: AnimationView?
|
var uploadAnimatedView: AnimationView?
|
||||||
|
|
||||||
let uploadFailErrMsg = NSLocalizedString("UploadFailed", comment: "Upload failed. Please try again later.")
|
let uploadFailErrMsg = "UploadFailed".localizedString(comment: "Upload failed. Please try again later.")
|
||||||
let invalidPinErrMsg = NSLocalizedString("InvalidPIN", comment: "Invalid PIN, please ask health official to send another PIN.")
|
let invalidPinErrMsg = "InvalidPIN".localizedString(comment: "Invalid PIN, please ask health official to send another PIN.")
|
||||||
|
|
||||||
let verifyEnabledColor = UIColor.covidSafeButtonDarkerColor
|
let verifyEnabledColor = UIColor.covidSafeButtonDarkerColor
|
||||||
let verifyDisabledColor = UIColor(red: 219/255.0, green: 221/255.0, blue: 221.0/255.0, alpha: 1.0)
|
let verifyDisabledColor = UIColor(red: 219/255.0, green: 221/255.0, blue: 221.0/255.0, alpha: 1.0)
|
||||||
|
@ -165,10 +165,10 @@ class UploadDataStep2VC: UIViewController, CodeInputViewDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
func displayUploadDataError() {
|
func displayUploadDataError() {
|
||||||
let errorAlert = UIAlertController(title: NSLocalizedString("UploadFailedErrorTitle", comment: "Upload Failed"),
|
let errorAlert = UIAlertController(title: "UploadFailedErrorTitle".localizedString(),
|
||||||
message: NSLocalizedString("UploadFailedErrorMessage", comment: "Please try again later."),
|
message: "UploadFailedErrorMessage".localizedString(),
|
||||||
preferredStyle: .alert)
|
preferredStyle: .alert)
|
||||||
errorAlert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: "OK"), style: .default, handler: nil))
|
errorAlert.addAction(UIAlertAction(title: "OK".localizedString(), style: .default, handler: nil))
|
||||||
self.present(errorAlert, animated: true)
|
self.present(errorAlert, animated: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
7
CovidSafe/en.lproj/InfoPlist.strings
Normal file
7
CovidSafe/en.lproj/InfoPlist.strings
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
/*
|
||||||
|
InfoPlist.strings
|
||||||
|
CovidSafe
|
||||||
|
|
||||||
|
Copyright © 2020 Australian Government. All rights reserved.
|
||||||
|
*/
|
||||||
|
"BluetoothUsageDesc" = "COVIDSafe exchanges Bluetooth® signals with nearby phones running the same app. These signals contain an anonymised ID, which is encrypted and changes continually to ensure your privacy.";
|
|
@ -7,6 +7,100 @@
|
||||||
//Global
|
//Global
|
||||||
"OK" = "OK";
|
"OK" = "OK";
|
||||||
|
|
||||||
|
// Initial Screen View Controller
|
||||||
|
"IntroLabel" = "Help stop the spread\nand save lives.";
|
||||||
|
|
||||||
|
//Migration View Controller
|
||||||
|
"MigrationLabel" = "COVIDSafe update is in progress.\n\nPlease make sure your phone is not switched off until the update is complete.";
|
||||||
|
|
||||||
|
// Onboarding Step 1 View Controller
|
||||||
|
"OS1_Title" = "Together we can stop the spread of COVID-19";
|
||||||
|
"OS1_Content1" = "COVIDSafe has been developed by the Australian Government to help keep the community safe from the spread of coronavirus.
|
||||||
|
|
||||||
|
COVIDSafe will securely note contact that you have with other users of the app. This will allow state or territory health officials to contact you, if you have been in close contact with someone who has tested positive to the virus.
|
||||||
|
|
||||||
|
Together we can help stop the spread and stay healthy.";
|
||||||
|
"OS1_Button" = "I want to help";
|
||||||
|
|
||||||
|
// Onboarding Step 1b View Controller
|
||||||
|
"OS1b_Title" = "How COVIDSafe works";
|
||||||
|
"OS1b_TopParagraph" = "Bluetooth® signals are used to determine when you're near another COVIDSafe user.";
|
||||||
|
"OS1b_Content" = "Every instance of close contact between you and other COVIDSafe users is noted to create close contact information. This information is encrypted and only stored in your phone.
|
||||||
|
|
||||||
|
If you test positive to COVID-19 as a COVIDSafe user, a state or territory health official will contact you. They will assist with voluntary upload of your close contact information to a highly secure information storage system.
|
||||||
|
|
||||||
|
State or territory health officials can also contact you if you came in close contact with another COVIDSafe user who tested positive.
|
||||||
|
|
||||||
|
For more information please refer to the *Help Topics* page.";
|
||||||
|
"OS1b_Button" = "Next";
|
||||||
|
|
||||||
|
// Onboarding Step 1a View Controller
|
||||||
|
"OS1a_Title" = "Registration and privacy";
|
||||||
|
"OS1a_Content" = "It is important that you read the COVIDSafe *privacy policy* before you register for COVIDSafe.
|
||||||
|
|
||||||
|
If you are under 16 years of age, your parent/guardian must also read the *privacy policy*.
|
||||||
|
|
||||||
|
Use of COVIDSafe is completely voluntary. You can install or delete the application at any time. If you delete COVIDsafe, *you may also ask for your information* to be deleted from the secure server.
|
||||||
|
|
||||||
|
To register for COVIDSafe, you will need to enter a name, mobile number, age range and postcode.
|
||||||
|
|
||||||
|
Information you submit when you register, and information about your use of COVIDSafe will be collected and stored on a highly secure server.
|
||||||
|
|
||||||
|
COVIDSafe will not collect your location information.\n\nCOVIDSafe will note the time of contact and an anonymous ID code of other COVIDSafe users you come into contact with.
|
||||||
|
|
||||||
|
Other COVIDSafe users you come into contact with will note an anonymous ID code and the time of contact with you on their device.
|
||||||
|
|
||||||
|
If another user tests positive to COVID-19, they may upload their contact information and a state or territory health official may contact you for contact tracing purposes.
|
||||||
|
|
||||||
|
Your registration details will only be used or disclosed for contact tracing and for the proper and lawful functioning of COVIDSafe.
|
||||||
|
|
||||||
|
More information is available at the *Australian Government Department of Health website*.
|
||||||
|
|
||||||
|
See the COVIDSafe *privacy policy* for further details about your rights about your information and how it will be handled and shared.";
|
||||||
|
"OS1a_Button" = "Next";
|
||||||
|
|
||||||
|
// Registration Consent View Controller
|
||||||
|
"RC_Title" = "Registration consent";
|
||||||
|
"RC_Intro" = "I consent to the Australian Department of Health collecting:";
|
||||||
|
"RC_Item1" = "My registration information to allow contact tracing by state or territory health officials.";
|
||||||
|
"RC_Item2" = "My contact information from other COVIDSafe users after they test positive for COVID-19.";
|
||||||
|
"RC_Closing" = "Select 'I agree' to confirm consent.";
|
||||||
|
"RC_Button" = "I agree";
|
||||||
|
|
||||||
|
// Personal Details Controller
|
||||||
|
"Done" = "Done";
|
||||||
|
"Next" = "Next";
|
||||||
|
"ValidationError" = "Validation error";
|
||||||
|
"PostcodeValidationErrorMessage" = "Please enter a valid postcode";
|
||||||
|
"PD_Title" = "Enter your details";
|
||||||
|
"PD_Fullname" = "Full name";
|
||||||
|
"PD_FullnameError" = "Please enter your full name.";
|
||||||
|
"PD_AgeRange" = "Age range (select)";
|
||||||
|
"PD_AgeRangeError" = "Please select your age range.";
|
||||||
|
"PD_Postcode" = "Postcode in Australia";
|
||||||
|
"PD_PostcodeError" = "Your Australian postcode number must contain 4 digits.";
|
||||||
|
"PD_Button" = "Continue";
|
||||||
|
|
||||||
|
// Under Sixteen View Controller
|
||||||
|
"US_Title" = "You need the consent of your parent/guardian to proceed";
|
||||||
|
"US_Intro" = "I confirm my parent or guardian consents to the Australian Department of Health collecting:";
|
||||||
|
"US_Item1" = "My registration information to allow contact tracing by state or territory health officials.";
|
||||||
|
"US_Item2" = "My contact information from other COVIDSafe users after they test positive for COVID-19.";
|
||||||
|
"US_Closing" = "Select 'I agree' to confirm consent.";
|
||||||
|
"US_Button" = "I agree";
|
||||||
|
|
||||||
|
// Phone Number View Controller
|
||||||
|
"EnterPhoneReVerify" = "Enter your mobile number to re-verify";
|
||||||
|
"AusPhoneNumberButton" = "Use an Australian phone number";
|
||||||
|
"EnterMobileNumber" = "Enter your mobile number";
|
||||||
|
"SelectCountryRegion" = "Select country or region";
|
||||||
|
"NorfolkExample" = "For Example: 351234";
|
||||||
|
"AustralianPhoneValidationError" = "Australian mobile numbers contain a maximum of 10 digits.";
|
||||||
|
"NorfolkPhoneValidationError" = "Mobile numbers in Norfolk Island contain 5 to 6 digits.";
|
||||||
|
"PN_WillSendPIN" = "We'll send you a 6-digit pin to verify your mobile number.";
|
||||||
|
"PN_WarningContent" = "Trying to register on behalf of a friend or relative?\n\nThey will need to register using their own device and phone number so that COVIDSafe can work for them. ";
|
||||||
|
"PN_Button" = "Get PIN";
|
||||||
|
|
||||||
// OTP View Controller
|
// OTP View Controller
|
||||||
"EnterPINSent" = "Enter the PIN sent to %@";
|
"EnterPINSent" = "Enter the PIN sent to %@";
|
||||||
"PINWillExpire" = "Your PIN will expire in %@";
|
"PINWillExpire" = "Your PIN will expire in %@";
|
||||||
|
@ -21,47 +115,101 @@
|
||||||
"PhoneVerificationErrorMessage" = "Please check your details and try again.";
|
"PhoneVerificationErrorMessage" = "Please check your details and try again.";
|
||||||
"PhoneNumberFormatErrorTitle" = "Wrong number format";
|
"PhoneNumberFormatErrorTitle" = "Wrong number format";
|
||||||
"PhoneNumberFormatErrorMessage" = "Please enter a mobile phone number.";
|
"PhoneNumberFormatErrorMessage" = "Please enter a mobile phone number.";
|
||||||
|
"OTP_Button" = "Verify";
|
||||||
|
|
||||||
|
// Onboarding Step 2 View Controller (Permissions)
|
||||||
|
"OS2_Title" = "App settings";
|
||||||
|
"OS2_Intro" = "COVIDSafe needs Bluetooth® enabled to work. By enabling Notifications, you get updates to remind you when COVIDSafe is not active.\n\nSelect 'Proceed' to enable:\n";
|
||||||
|
"OS2_Item1" = "1. Bluetooth®";
|
||||||
|
"OS2_Item2" = "2. Notifications\n\nCOVIDSafe does not send pairing requests.";
|
||||||
|
"OS2_Button" = "Proceed";
|
||||||
|
|
||||||
//Phone Number View Controller
|
// Onboarding Step 2b View Controller (Success)
|
||||||
"EnterPhoneReVerify" = "Enter your mobile number to re-verify";
|
"OS2b_Title" = "You’ve successfully registered";
|
||||||
"AusPhoneNumberButton" = "Use an Australian phone number";
|
"OS2b_Item1" = "1. When you leave home, keep your phone with you and make sure COVIDSafe is active.";
|
||||||
|
"OS2b_Item2" = "2. Bluetooth® should be kept ON.";
|
||||||
|
"OS2b_Item3" = "3. COVIDSafe does not send pairing requests. Learn more.";
|
||||||
|
"OS2b_Item3Underline" = "Learn more";
|
||||||
|
"OS2b_Button" = "Continue";
|
||||||
|
|
||||||
// Home View Controller
|
// Home View Controller
|
||||||
|
"HelpButton" = "Help";
|
||||||
"PairingRequestsInfo" = "COVIDSafe does not send pairing requests.";
|
"PairingRequestsInfo" = "COVIDSafe does not send pairing requests.";
|
||||||
"PairingRequestsInfoUnderline" = "pairing requests";
|
"PairingRequestsInfoUnderline" = "pairing requests";
|
||||||
"InformationUploaded" = "Your information was uploaded on %@";
|
"InformationUploaded" = "Your information was uploaded on %@";
|
||||||
"VersionNumber" = "Version number: %@ Build: %@";
|
"VersionNumber" = "Version number: %@ Build: %@";
|
||||||
"HomeHeaderNoAction" = "COVIDSafe is active.\nNo further action is required.";
|
"HomeHeaderNoAction" = "COVIDSafe is active.\nNo further action is required.";
|
||||||
"HomeHeaderPermissions" = "COVIDSafe is not active.\nCheck your permissions.";
|
"HomeHeaderPermissions" = "COVIDSafe is not active.\nCheck your settings.";
|
||||||
|
"ShareText" = "Join me in stopping the spread of COVID-19! Download COVIDSafe, an app from the Australian Government.";
|
||||||
|
"CheckPermissions" = "Check your settings";
|
||||||
|
"CheckPermissionsMessage" = "COVIDSafe won't work without the right settings.";
|
||||||
|
"AllowBluetoothON" = "Access to Bluetooth®: ON";
|
||||||
|
"AllowBluetoothOFF" = "Access to Bluetooth®: OFF";
|
||||||
|
"AllowBluetoothOffDesc" = "Allow COVIDSafe to access Bluetooth®";
|
||||||
|
"BluetoothON" = "Bluetooth®: ON";
|
||||||
|
"BluetoothOFF" = "Bluetooth®: OFF";
|
||||||
|
"BluetoothOffDesc" = "Turn on your phone's Bluetooth®. Select 'Allow New Connections' if displayed.";
|
||||||
|
"ShareCovidSafe" = "Share COVIDSafe";
|
||||||
|
"ShareCovidSafeContent" = "Invite others to help. Together, we're stronger.";
|
||||||
|
"UploadData" = "Has a health official contacted you?";
|
||||||
|
"UploadDataContent" = "You can only upload your information if you have tested positive.";
|
||||||
|
"GetCoronaVirusApp" = "Get the Coronavirus app";
|
||||||
|
"GetCoronaVirusAppContent" = "Download the government app for the latest news and advice.";
|
||||||
|
"LatestNews" = "Latest news and updates";
|
||||||
|
"LatestNewsContent" = "Head to aus.gov.au for the latest Coronavirus news.";
|
||||||
|
"HelpTopics" = "Help topics";
|
||||||
|
"HelpTopicsContent" = "If you have issues or questions about the app.";
|
||||||
"NotificationsEnabled" = "Notifications are enabled";
|
"NotificationsEnabled" = "Notifications are enabled";
|
||||||
"NotificationsDisabled" = "Notifications are disabled";
|
"NotificationsDisabled" = "Notifications are disabled";
|
||||||
"NotificationsEnabledBlurb" = "You will receive a notification if COVIDSafe is not active.
Change notification settings";
|
"NotificationsEnabledBlurb" = "You will receive a notification if COVIDSafe is not active.\n\nChange notification settings";
|
||||||
"NotificationsDisabledBlurb" = "You will not receive a notification if COVIDSafe is not active.
Change notification settings";
|
"NotificationsDisabledBlurb" = "You will not receive a notification if COVIDSafe is not active.\n\nChange notification settings";
|
||||||
"NotificationsBlurbLink" = "Change notification settings";
|
"NotificationsBlurbLink" = "Change notification settings";
|
||||||
"ShareText" = "Join me in stopping the spread of COVID-19! Download COVIDSafe, an app from the Australian Government.";
|
"ShareText" = "Join me in stopping the spread of COVID-19! Download COVIDSafe, an app from the Australian Government.";
|
||||||
|
|
||||||
//Successful registration (OnboardingStep2B)
|
|
||||||
"PointOne" = "1. When you leave home, keep your phone with you and make sure COVIDSafe is active.";
|
|
||||||
"PointTwo" = "2. Bluetooth® should be kept ON.";
|
|
||||||
"PointThree" = "3. COVIDSafe does not send pairing requests. Learn more.";
|
|
||||||
"PointThreeUnderline" = "Learn more";
|
|
||||||
|
|
||||||
// Help Nav Controller
|
// Help Nav Controller
|
||||||
"ReportAnIssue" = "Report an issue";
|
"ReportAnIssue" = "Report an issue";
|
||||||
|
"FoundIssueWithApp" = "Found an issue in the COVIDSafe app?";
|
||||||
|
"IssueDescPlaceholder" = "Please describe the issue";
|
||||||
|
"IssueFooter" = "We may contact you for further details about your feedback. Your email address won’t be used for any other purpose.";
|
||||||
|
"IssueThankYou" = "Thank you! We have received your feedback.";
|
||||||
|
|
||||||
// Personal Details View Controller
|
// Upload Data Preface View Controller
|
||||||
"Done" = "Done";
|
"UDP_Title" = "Is a health official asking you to upload your information?";
|
||||||
"Next" = "Next";
|
"UDP_Content" = "Only if you test positive to COVID-19 will a state or territory health official contact you to assist with voluntary upload of your information.\n\nOnce you press 'Yes' you'll need to provide consent to upload your information. ";
|
||||||
"ValidationError" = "Validation error";
|
"UDP_NoButton" = "No";
|
||||||
"PostcodeValidationErrorMessage" = "Please enter a valid postcode";
|
"UDP_YesButton" = "Yes";
|
||||||
|
|
||||||
//Upload Data Step 2 View Controller
|
// Upload Data Home View Controller (Consent)
|
||||||
|
"UDC_Title" = "Upload Consent";
|
||||||
|
"UDC_Content" = "Unless you consent, your close contact information will not be uploaded.\n\nIf you consent, your close contact information will be uploaded and shared with state or territory health officials for contact tracing purposes.\n\nRead the COVIDSafe *privacy policy* for further details.\n\nSelect 'I agree' to confirm consent.";
|
||||||
|
"UDC_Button" = "I agree";
|
||||||
|
|
||||||
|
// Upload Data Step 2 View Controller
|
||||||
|
"UD2_Title" = "Upload your information";
|
||||||
|
"UD2_Intro" = "A state or territory health official will send a PIN to your device via text message. Enter it below to upload your information.";
|
||||||
"UploadFailed" = "Upload failed. Please try again later.";
|
"UploadFailed" = "Upload failed. Please try again later.";
|
||||||
"InvalidPIN" = "Invalid PIN, please ask the health official to send you another PIN.";
|
"InvalidPIN" = "Invalid PIN, please ask the health official to send you another PIN.";
|
||||||
"UploadFailedErrorTitle" = "Upload Failed";
|
"UploadFailedErrorTitle" = "Upload Failed";
|
||||||
"UploadFailedErrorMessage" = "Please try again later.";
|
"UploadFailedErrorMessage" = "Please try again later.";
|
||||||
|
"UploadingInfo" = "Your COVIDSafe information is currently being uploaded.\n\nPlease do not close the app.";
|
||||||
|
"UD2_Button" = "Upload my information";
|
||||||
|
|
||||||
|
// Upload Data Error View Controller
|
||||||
|
"UDE_Message" = "An error occurred while uploading your information, please try again.";
|
||||||
|
"UDE_TryAgain" = "Try again";
|
||||||
|
"UDE_Cancel" = "Cancel";
|
||||||
|
|
||||||
|
// Upload Data Thank You View Controller
|
||||||
|
"UDTY_Title" = "Thank you for helping to stop the spread of COVID-19!";
|
||||||
|
"UDTY_Content" = "You have successfully uploaded your information to the COVIDSafe highly secure storage system.\n\nState or territory health officials will notify other COVIDSafe users that have recorded instances of close contact with you. Your identity will remain anonymous to other users.";
|
||||||
|
"UDTY_Button" = "Continue";
|
||||||
|
|
||||||
|
// Feedback
|
||||||
|
"EmailPlaceholder" = "Localised Enter your email address (required)";
|
||||||
|
|
||||||
|
// Select Country View Controller
|
||||||
|
"SelectCountryTitle" = "Select country or region";
|
||||||
|
"AustraliaSectionTitle" = "Options for Australia";
|
||||||
|
|
||||||
// Unused
|
// Unused
|
||||||
"WrongNumber" = "Wrong number?";
|
"WrongNumber" = "Wrong number?";
|
||||||
|
@ -69,3 +217,255 @@
|
||||||
"NotAValidCode" = "Not a valid code";
|
"NotAValidCode" = "Not a valid code";
|
||||||
"DataUploaded" = "Data uploaded";
|
"DataUploaded" = "Data uploaded";
|
||||||
"DataNotUploaded" = "Data not uploaded";
|
"DataNotUploaded" = "Data not uploaded";
|
||||||
|
|
||||||
|
// Notifications
|
||||||
|
"PN_BluetoothStatusTitle" = "COVIDSafe is not active";
|
||||||
|
"PN_BluetoothStatusBody" = "Make sure it’s active before you leave home and when in public places by enabling Bluetooth®.";
|
||||||
|
"PN_ReminderTitle" = "No encounters detected for 48 hours";
|
||||||
|
"PN_ReminderBody" = "Open COVIDSafe to ensure it is running.";
|
||||||
|
|
||||||
|
// *** Feedback localised strings ***
|
||||||
|
|
||||||
|
"global_cancel_button_title" = "Cancel";
|
||||||
|
"global_send_button_title" = "Send";
|
||||||
|
"global_sending_indication_title" = "Sending";
|
||||||
|
"global_success_indication_title" = "Success";
|
||||||
|
|
||||||
|
// Title for prompt that user sees when opening feeback. Prompt asks user if he/she would like to send new feedback.
|
||||||
|
"entryPrompt_alert_title" = "Feedback Box";
|
||||||
|
|
||||||
|
// Message for prompt that user sees when opening feeback. Prompt asks user if he/she would like to send new feedback.
|
||||||
|
"entryPrompt_alert_message" = "Hello mate, how would you like to proceed?";
|
||||||
|
|
||||||
|
// Title for button that launches new feedback flow.
|
||||||
|
"entryPrompt_newFeedback_button_title" = "New Feedback";
|
||||||
|
|
||||||
|
// Navigation Bar title shown during new feedback flow.
|
||||||
|
"newFeedbackFlow_navigationTitle" = "Report an issue";
|
||||||
|
|
||||||
|
// Messsage shown to user asking to confirm screenshot deletion.
|
||||||
|
"newFeedback_deleteScreenshotConfirmation_message" = "This screenshot will be deleted permanently.";
|
||||||
|
|
||||||
|
// Delete screenshot action sheet action button title.
|
||||||
|
"newFeedback_deleteScreenshot_actionTitle" = "Delete Screenshot";
|
||||||
|
|
||||||
|
// Error message displayed to users when feedback fails to send.
|
||||||
|
"newFeedback_send_errorMessage" = "Error Sending Feedback";
|
||||||
|
|
||||||
|
//Error message displayed to users when feedback has empty description
|
||||||
|
"newFeedback_noMessage_errorMessage" = "Tell us something before sending.";
|
||||||
|
"newFeedback_invalidEmail_errorMessage" = "Please enter a valid email address!";
|
||||||
|
|
||||||
|
|
||||||
|
// Countries
|
||||||
|
"Country_AU2" = "Norfolk Island";
|
||||||
|
"Country_AF" = "Afghanistan";
|
||||||
|
"Country_AL" = "Albania";
|
||||||
|
"Country_DZ" = "Algeria";
|
||||||
|
"Country_AD" = "Andorra";
|
||||||
|
"Country_AO" = "Angola";
|
||||||
|
"Country_AI" = "Anguilla";
|
||||||
|
"Country_AG" = "Antigua and Barbuda";
|
||||||
|
"Country_AR" = "Argentina";
|
||||||
|
"Country_AM" = "Armenia";
|
||||||
|
"Country_AW" = "Aruba";
|
||||||
|
"Country_AU" = "Australia";
|
||||||
|
"Country_AT" = "Austria";
|
||||||
|
"Country_AZ" = "Azerbaijan";
|
||||||
|
"Country_BS" = "Bahamas";
|
||||||
|
"Country_BH" = "Bahrain";
|
||||||
|
"Country_BD" = "Bangladesh";
|
||||||
|
"Country_BB" = "Barbados";
|
||||||
|
"Country_BY" = "Belarus";
|
||||||
|
"Country_BE" = "Belgium";
|
||||||
|
"Country_BZ" = "Belize";
|
||||||
|
"Country_BJ" = "Benin";
|
||||||
|
"Country_BM" = "Bermuda";
|
||||||
|
"Country_BT" = "Bhutan";
|
||||||
|
"Country_BO" = "Bolivia";
|
||||||
|
"Country_BA" = "Bosnia and Herzegovina";
|
||||||
|
"Country_BW" = "Botswana";
|
||||||
|
"Country_BR" = "Brazil";
|
||||||
|
"Country_BN" = "Brunei";
|
||||||
|
"Country_BG" = "Bulgaria";
|
||||||
|
"Country_BF" = "Burkina Faso";
|
||||||
|
"Country_BI" = "Burundi";
|
||||||
|
"Country_KH" = "Cambodia";
|
||||||
|
"Country_CM" = "Cameroon";
|
||||||
|
"Country_CA" = "Canada";
|
||||||
|
"Country_CV" = "Cape Verde";
|
||||||
|
"Country_KY" = "Cayman Islands";
|
||||||
|
"Country_CF" = "Central African Republic";
|
||||||
|
"Country_TD" = "Chad";
|
||||||
|
"Country_CL" = "Chile";
|
||||||
|
"Country_CN" = "China";
|
||||||
|
"Country_CO" = "Colombia";
|
||||||
|
"Country_KM" = "Comoros";
|
||||||
|
"Country_CK" = "Cook Islands";
|
||||||
|
"Country_CR" = "Costa Rica";
|
||||||
|
"Country_HR" = "Croatia";
|
||||||
|
"Country_CU" = "Cuba";
|
||||||
|
"Country_CW" = "Curaçao";
|
||||||
|
"Country_CY" = "Cyprus";
|
||||||
|
"Country_CZ" = "Czech Republic";
|
||||||
|
"Country_CD" = "Democratic Republic of the Congo";
|
||||||
|
"Country_DK" = "Denmark";
|
||||||
|
"Country_DJ" = "Djibouti";
|
||||||
|
"Country_DM" = "Dominica";
|
||||||
|
"Country_DO" = "Dominican Republic";
|
||||||
|
"Country_TL" = "Timor-Leste";
|
||||||
|
"Country_EC" = "Ecuador";
|
||||||
|
"Country_EG" = "Egypt";
|
||||||
|
"Country_SV" = "El Salvador";
|
||||||
|
"Country_GQ" = "Equatorial Guinea";
|
||||||
|
"Country_EE" = "Estonia";
|
||||||
|
"Country_ET" = "Ethiopia";
|
||||||
|
"Country_FO" = "Faroe Islands";
|
||||||
|
"Country_FJ" = "Fiji";
|
||||||
|
"Country_FI" = "Finland";
|
||||||
|
"Country_FR" = "France";
|
||||||
|
"Country_GF" = "French Guiana";
|
||||||
|
"Country_GA" = "Gabon";
|
||||||
|
"Country_GM" = "Gambia";
|
||||||
|
"Country_GE" = "Georgia";
|
||||||
|
"Country_DE" = "Germany";
|
||||||
|
"Country_GH" = "Ghana";
|
||||||
|
"Country_GI" = "Gibraltar";
|
||||||
|
"Country_GR" = "Greece";
|
||||||
|
"Country_GL" = "Greenland";
|
||||||
|
"Country_GD" = "Grenada";
|
||||||
|
"Country_GP" = "Guadeloupe";
|
||||||
|
"Country_GU" = "Guam";
|
||||||
|
"Country_GT" = "Guatemala";
|
||||||
|
"Country_GN" = "Guinea";
|
||||||
|
"Country_GW" = "Guinea-Bissau";
|
||||||
|
"Country_GY" = "Guyana";
|
||||||
|
"Country_HT" = "Haiti";
|
||||||
|
"Country_HN" = "Honduras";
|
||||||
|
"Country_HK" = "Hong Kong";
|
||||||
|
"Country_HU" = "Hungary";
|
||||||
|
"Country_IS" = "Iceland";
|
||||||
|
"Country_IN" = "India";
|
||||||
|
"Country_ID" = "Indonesia";
|
||||||
|
"Country_IQ" = "Iraq";
|
||||||
|
"Country_IE" = "Ireland";
|
||||||
|
"Country_IL" = "Israel";
|
||||||
|
"Country_IR" = "Iran";
|
||||||
|
"Country_IT" = "Italy";
|
||||||
|
"Country_CI" = "Ivory Coast";
|
||||||
|
"Country_JM" = "Jamaica";
|
||||||
|
"Country_JP" = "Japan";
|
||||||
|
"Country_JO" = "Jordan";
|
||||||
|
"Country_KZ" = "Kazakhstan";
|
||||||
|
"Country_KE" = "Kenya";
|
||||||
|
"Country_KI" = "Kiribati";
|
||||||
|
"Country_KW" = "Kuwait";
|
||||||
|
"Country_KG" = "Kyrgyzstan";
|
||||||
|
"Country_LA" = "Laos";
|
||||||
|
"Country_LV" = "Latvia";
|
||||||
|
"Country_LB" = "Lebanon";
|
||||||
|
"Country_LS" = "Lesotho";
|
||||||
|
"Country_LR" = "Liberia";
|
||||||
|
"Country_LY" = "Libya";
|
||||||
|
"Country_LI" = "Liechtenstein";
|
||||||
|
"Country_LT" = "Lithuania";
|
||||||
|
"Country_LU" = "Luxembourg";
|
||||||
|
"Country_MO" = "Macau";
|
||||||
|
"Country_MK" = "Former Yugoslav Republic of Macedonia";
|
||||||
|
"Country_MG" = "Madagascar";
|
||||||
|
"Country_MW" = "Malawi";
|
||||||
|
"Country_MY" = "Malaysia";
|
||||||
|
"Country_MV" = "Maldives";
|
||||||
|
"Country_ML" = "Mali";
|
||||||
|
"Country_MT" = "Malta";
|
||||||
|
"Country_MQ" = "Martinique";
|
||||||
|
"Country_MR" = "Mauritania";
|
||||||
|
"Country_MU" = "Mauritius";
|
||||||
|
"Country_MX" = "Mexico";
|
||||||
|
"Country_MD" = "Moldova";
|
||||||
|
"Country_MC" = "Monaco";
|
||||||
|
"Country_MO" = "Mongolia";
|
||||||
|
"Country_ME" = "Montenegro";
|
||||||
|
"Country_MS" = "Montserrat";
|
||||||
|
"Country_MA" = "Morocco";
|
||||||
|
"Country_MZ" = "Mozambique";
|
||||||
|
"Country_MM" = "Myanmar";
|
||||||
|
"Country_NA" = "Namibia";
|
||||||
|
"Country_NP" = "Nepal";
|
||||||
|
"Country_NL" = "Netherlands";
|
||||||
|
"Country_AN" = "Netherlands Antilles";
|
||||||
|
"Country_NC" = "New Caledonia";
|
||||||
|
"Country_NZ" = "New Zealand";
|
||||||
|
"Country_NI" = "Nicaragua";
|
||||||
|
"Country_NE" = "Niger";
|
||||||
|
"Country_NG" = "Nigeria";
|
||||||
|
"Country_NO" = "Norway";
|
||||||
|
"Country_OM" = "Oman";
|
||||||
|
"Country_PK" = "Pakistan";
|
||||||
|
"Country_PW" = "Palau";
|
||||||
|
"Country_PS" = "Palestinian Territories";
|
||||||
|
"Country_PA" = "Panama";
|
||||||
|
"Country_PG" = "Papua New Guinea";
|
||||||
|
"Country_PY" = "Paraguay";
|
||||||
|
"Country_PE" = "Peru";
|
||||||
|
"Country_PH" = "Philippines";
|
||||||
|
"Country_PL" = "Poland";
|
||||||
|
"Country_PT" = "Portugal";
|
||||||
|
"Country_PR" = "Puerto Rico";
|
||||||
|
"Country_QA" = "Qatar";
|
||||||
|
"Country_CG" = "Republic of the Congo";
|
||||||
|
"Country_RE" = "Reunion Island";
|
||||||
|
"Country_RO" = "Romania";
|
||||||
|
"Country_RU" = "Russia";
|
||||||
|
"Country_RW" = "Rwanda";
|
||||||
|
"Country_KN" = "Saint Kitts and Nevis";
|
||||||
|
"Country_LC" = "Saint Lucia";
|
||||||
|
"Country_VC" = "Saint Vincent and the Grenadines";
|
||||||
|
"Country_WS" = "Samoa";
|
||||||
|
"Country_ST" = "Sao Tome and Principe";
|
||||||
|
"Country_SA" = "Saudi Arabia";
|
||||||
|
"Country_SN" = "Senegal";
|
||||||
|
"Country_RS" = "Serbia";
|
||||||
|
"Country_SC" = "Seychelles";
|
||||||
|
"Country_SL" = "Sierra Leone";
|
||||||
|
"Country_SG" = "Singapore";
|
||||||
|
"Country_SK" = "Slovakia";
|
||||||
|
"Country_SI" = "Slovenia";
|
||||||
|
"Country_SB" = "Solomon Islands";
|
||||||
|
"Country_SO" = "Somalia";
|
||||||
|
"Country_ZA" = "South Africa";
|
||||||
|
"Country_KR" = "South Korea";
|
||||||
|
"Country_SS" = "South Sudan";
|
||||||
|
"Country_ES" = "Spain";
|
||||||
|
"Country_LK" = "Sri Lanka";
|
||||||
|
"Country_SR" = "Suriname";
|
||||||
|
"Country_SD" = "Sudan";
|
||||||
|
"Country_SZ" = "Swaziland";
|
||||||
|
"Country_SE" = "Sweden";
|
||||||
|
"Country_CH" = "Switzerland";
|
||||||
|
"Country_TW" = "Taiwan";
|
||||||
|
"Country_TJ" = "Tajikistan";
|
||||||
|
"Country_TZ" = "Tanzania";
|
||||||
|
"Country_TH" = "Thailand";
|
||||||
|
"Country_TG" = "Togo";
|
||||||
|
"Country_TO" = "Tonga";
|
||||||
|
"Country_TT" = "Trinidad and Tobago";
|
||||||
|
"Country_TN" = "Tunisia";
|
||||||
|
"Country_TR" = "Turkey";
|
||||||
|
"Country_TM" = "Turkmenistan";
|
||||||
|
"Country_TC" = "Turks and Caicos Islands";
|
||||||
|
"Country_UG" = "Uganda";
|
||||||
|
"Country_UA" = "Ukraine";
|
||||||
|
"Country_AE" = "United Arab Emirates";
|
||||||
|
"Country_GB" = "United Kingdom";
|
||||||
|
"Country_US" = "United States";
|
||||||
|
"Country_UY" = "Uruguay";
|
||||||
|
"Country_UZ" = "Uzbekistan";
|
||||||
|
"Country_VU" = "Vanuatu";
|
||||||
|
"Country_VE" = "Venezuela";
|
||||||
|
"Country_VN" = "Vietnam";
|
||||||
|
"Country_VG" = "Virgin Islands, British";
|
||||||
|
"Country_VI" = "Virgin Islands, US";
|
||||||
|
"Country_YE" = "Yemen";
|
||||||
|
"Country_ZM" = "Zambia";
|
||||||
|
"Country_ZW" = "Zimbabwe";
|
||||||
|
|
2
Podfile
2
Podfile
|
@ -15,6 +15,7 @@ target 'CovidSafe' do
|
||||||
pod 'Alamofire'
|
pod 'Alamofire'
|
||||||
pod 'KeychainSwift'
|
pod 'KeychainSwift'
|
||||||
pod 'lottie-ios'
|
pod 'lottie-ios'
|
||||||
|
pod 'FlagKit'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,4 +27,5 @@ target 'CovidSafe-staging' do
|
||||||
pod 'Alamofire'
|
pod 'Alamofire'
|
||||||
pod 'KeychainSwift'
|
pod 'KeychainSwift'
|
||||||
pod 'lottie-ios'
|
pod 'lottie-ios'
|
||||||
|
pod 'FlagKit'
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,24 +1,28 @@
|
||||||
PODS:
|
PODS:
|
||||||
- Alamofire (5.0.5)
|
- Alamofire (5.0.5)
|
||||||
|
- FlagKit (2.2)
|
||||||
- KeychainSwift (19.0.0)
|
- KeychainSwift (19.0.0)
|
||||||
- lottie-ios (3.1.6)
|
- lottie-ios (3.1.6)
|
||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- Alamofire
|
- Alamofire
|
||||||
|
- FlagKit
|
||||||
- KeychainSwift
|
- KeychainSwift
|
||||||
- lottie-ios
|
- lottie-ios
|
||||||
|
|
||||||
SPEC REPOS:
|
SPEC REPOS:
|
||||||
https://github.com/CocoaPods/Specs.git:
|
https://github.com/CocoaPods/Specs.git:
|
||||||
- Alamofire
|
- Alamofire
|
||||||
|
- FlagKit
|
||||||
- KeychainSwift
|
- KeychainSwift
|
||||||
- lottie-ios
|
- lottie-ios
|
||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
Alamofire: df2f8f826963b08b9a870791ad48e07a10090b2e
|
Alamofire: df2f8f826963b08b9a870791ad48e07a10090b2e
|
||||||
|
FlagKit: eca7dc89064b0c986302ba9acefad1bf80a435b1
|
||||||
KeychainSwift: a06190cf933ad46b1e0abc3d77d29c06331715c7
|
KeychainSwift: a06190cf933ad46b1e0abc3d77d29c06331715c7
|
||||||
lottie-ios: 85ce835dd8c53e02509f20729fc7d6a4e6645a0a
|
lottie-ios: 85ce835dd8c53e02509f20729fc7d6a4e6645a0a
|
||||||
|
|
||||||
PODFILE CHECKSUM: 267f7fcda5f8a86683b76b362dfc6c6703e3033f
|
PODFILE CHECKSUM: 5da6b902184340eac7df8e3e031d4faa43a3a7d2
|
||||||
|
|
||||||
COCOAPODS: 1.9.1
|
COCOAPODS: 1.9.1
|
||||||
|
|
21
security.txt
21
security.txt
|
@ -1,17 +1,20 @@
|
||||||
-----BEGIN PGP SIGNED MESSAGE-----
|
-----BEGIN PGP SIGNED MESSAGE-----
|
||||||
Hash: SHA256
|
Hash: SHA256
|
||||||
|
|
||||||
Contact: mailto:support@covidsafe.gov.au
|
Contact: mailto:security@covidsafe.gov.au
|
||||||
Canonical: https://www.covidsafe.gov.au/.well-known/security.txt
|
Canonical: https://www.covidsafe.gov.au/.well-known/security.txt
|
||||||
Encryption: https://www.covidsafe.gov.au/.well-known/pgp-key.txt
|
Encryption: https://www.covidsafe.gov.au/.well-known/pgp-key.txt
|
||||||
-----BEGIN PGP SIGNATURE-----
|
-----BEGIN PGP SIGNATURE-----
|
||||||
|
|
||||||
iQFNBAEBCAA3FiEEbUgetBuPAas8w7zHDyQUNNekxBkFAl6xF6AZHHN1cHBvcnRA
|
iQHOBAEBCAA4FiEEUWgkqhSOHRHwGue2IZjqt5flXH4FAl7Hkw0aHHNlY3VyaXR5
|
||||||
Y292aWRzYWZlLmdvdi5hdQAKCRAPJBQ016TEGd+bCACLrYjCbKRsTsQQyZVVtGxj
|
QGNvdmlkc2FmZS5nb3YuYXUACgkQIZjqt5flXH4KfQv/ZagXzgn9HspSTupO7zQQ
|
||||||
wYKW2AWclnKZWX/sxnTexg6D1tlGbZbB0OJpw0gJ0NpMoOLFd0kRZXOzv8RocIdx
|
t7lpZsNWKJsXddUD3+JQQ8b1uB9kmHhiydIXervEc1yGti6YYZxKybehLdvv7HjV
|
||||||
xd90Nwwl3NQ2ygGCDXR0Y7uRKX/P/Y1xO7XkyiYXAqVq3YWvI9M04pY/TCRvRZ/1
|
Cps9kn3cns9ex3s+KEMMFrU7MykvZ2x+fvCoGfgzWm1UJElxn/cSbOnt38VxmSjC
|
||||||
qBs/WDHv/6eRh2qNy/WGXD66CmTLHBcXilTeihcTZ/27Mny5SPthdfy8odQnhUja
|
wkmh+DGa1z9OB6ZMuivO2XBx+Y0GV5tsoxWKRtXMruQ41bTHZvIJ9lJctYTv2xEK
|
||||||
NfFxDm+8gQuFKUUQmr9rd8FEMPSl6BWf/kQtn0YmTeZRzD01uT1ydeHkyPSgn+nq
|
hYlHmrzkZjLM/sTwGKWj+ARCn1IA0Zp8uxkoBi3/++NonKAlQpSZ4Rk6B780H8GM
|
||||||
k9us35AlkI7aZNfNkFVWJ2v5ZVAdTHDh3pgBRZETwVg1of5DEXhc5XJV6mLsu9bM
|
5lCZVLIRfH1VJzPr7+eSSBF8p0coEapyO7bk/ioBIQB5v4xfvpJRBEc+eI7IZeDa
|
||||||
=tik2
|
TcO/TVZw7Vut89flR+34g9PCSFDCJgv5zR8vE5mB5m/vlfJ7XI99XMwvFNWgpcyL
|
||||||
|
72tFv74uH6tUPZOlbHGZTnBsQLkuj4fwUYaUPcR9TzeMlBHoe21bQ6OeDO02rIy4
|
||||||
|
09bWSTMGe33LvTz2UMuEkZcsNT8vc7J+597GSxgDWoR6
|
||||||
|
=6MOG
|
||||||
-----END PGP SIGNATURE-----
|
-----END PGP SIGNATURE-----
|
||||||
|
|
Loading…
Reference in a new issue