diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 00000000..d8802fdd
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+ios/Libraries/FirebaseMLVisionBarcodeModel.framework/FirebaseMLVisionBarcodeModel filter=lfs diff=lfs merge=lfs -text
diff --git a/.gitignore b/.gitignore
index 9bb16ee1..5fc54fe8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -37,6 +37,7 @@ xcuserdata
/ios/Podfile.lock
/ios/Flutter/App.framework
/ios/Flutter/Flutter.framework
+/ios/Flutter/Flutter.podspec
/ios/Flutter/Generated.xcconfig
/ios/Flutter/.last_build_id
/ios/Flutter/flutter_assets/*
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2d637045..1695fd77 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,17 +6,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## Unreleased
+## [2.10.28] - 2021-05-28
+### Changed
+- Vaccination event processing updated in health rules [#651](https://github.com/rokwire/safer-illinois-app/issues/651).
+### Added
+- Force onboarding if we are upgrading version lower than 2.10.28 [#651](https://github.com/rokwire/safer-illinois-app/issues/651).
+
+
+## [2.10.27] - 2021-05-21
+### Added
+- Control visibility of vaccination badge in HealthStatusPanel from FlexUI, set it currently disabled [#647](https://github.com/rokwire/safer-illinois-app/issues/647).
+- Added vaccination information to consent texts for text results [#649](https://github.com/rokwire/safer-illinois-app/issues/649).
+
+## [2.10.26] - 2021-05-18
+### Changed
+- Flutter 2.0 Integration [#637](https://github.com/rokwire/safer-illinois-app/issues/637).
+
## [2.10.25] - 2021-05-14
+### Added
- Add the External link icon to External links [#635](https://github.com/rokwire/safer-illinois-app/issues/635).
+
+### Fixed
- Android: Fix for frequent notifications [#641](https://github.com/rokwire/safer-illinois-app/issues/641).
## [2.10.23] - 2021-05-07
+### Added
+- Added Japanese language translation provided by @kamya-k
+
+### Changed
- Changed DefaultTestMonitorInterval to reflect production [#624](https://github.com/rokwire/safer-illinois-app/issues/624).
- Removed test result explanation disclaimers [#626](https://github.com/rokwire/safer-illinois-app/issues/626)
-- Android: Fix crash in exposures - removeExpiredTime [#629](https://github.com/rokwire/safer-illinois-app/issues/629).
-- Added Japanese language translation provided by @kamya-k
+
+### Fixed
- Android: Fix crash in exposures - processExposures [#631](https://github.com/rokwire/safer-illinois-app/issues/631).
- Android: Fix crash in exposures - onReceive [#633](https://github.com/rokwire/safer-illinois-app/issues/633).
+- Android: Fix crash in exposures - removeExpiredTime [#629](https://github.com/rokwire/safer-illinois-app/issues/629).
## [2.10.22] - 2021-04-27
### Fixed
diff --git a/README.md b/README.md
index 7039f817..26ea9070 100644
--- a/README.md
+++ b/README.md
@@ -3,11 +3,11 @@ The official COVID-19 app of the University of Illinois. Powered by the [Rokwire
## Requirements
-### [Flutter](https://flutter.dev/docs/get-started/install) v1.22.1
+### [Flutter](https://flutter.dev/docs/get-started/install) v2.0.6
### [Android Studio](https://developer.android.com/studio) 3.6+
-### [Xcode](https://apps.apple.com/us/app/xcode/id497799835) 11.5
+### [Xcode](https://apps.apple.com/us/app/xcode/id497799835) 12.5
### [CocoaPods](https://guides.cocoapods.org/using/getting-started.html) 1.9.3+
diff --git a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
index c410ac6c..2f3a6c10 100644
--- a/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
+++ b/android/app/src/main/java/io/flutter/plugins/GeneratedPluginRegistrant.java
@@ -4,7 +4,6 @@
import androidx.annotation.NonNull;
import io.flutter.embedding.engine.FlutterEngine;
-import io.flutter.embedding.engine.plugins.shim.ShimPluginRegistry;
/**
* Generated file. Do not edit.
@@ -14,13 +13,12 @@
@Keep
public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) {
- ShimPluginRegistry shimPluginRegistry = new ShimPluginRegistry(flutterEngine);
- de.mintware.barcode_scan.BarcodeScanPlugin.registerWith(shimPluginRegistry.registrarFor("de.mintware.barcode_scan.BarcodeScanPlugin"));
+ flutterEngine.getPlugins().add(new de.mintware.barcode_scan.BarcodeScanPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.connectivity.ConnectivityPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.deviceinfo.DeviceInfoPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.core.FlutterFirebaseCorePlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.crashlytics.FlutterFirebaseCrashlyticsPlugin());
- flutterEngine.getPlugins().add(new io.flutter.plugins.firebasemessaging.FirebaseMessagingPlugin());
+ flutterEngine.getPlugins().add(new io.flutter.plugins.firebase.messaging.FlutterFirebaseMessagingPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.firebasemlvision.FirebaseMlVisionPlugin());
flutterEngine.getPlugins().add(new com.example.flutterimagecompress.FlutterImageCompressPlugin());
flutterEngine.getPlugins().add(new com.dexterous.flutterlocalnotifications.FlutterLocalNotificationsPlugin());
@@ -30,13 +28,12 @@ public static void registerWith(@NonNull FlutterEngine flutterEngine) {
flutterEngine.getPlugins().add(new com.lyokone.location.LocationPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.packageinfo.PackageInfoPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
- flutter.plugins.screen.screen.ScreenPlugin.registerWith(shimPluginRegistry.registrarFor("flutter.plugins.screen.screen.ScreenPlugin"));
flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
flutterEngine.getPlugins().add(new name.avioli.unilinks.UniLinksPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.urllauncher.UrlLauncherPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.videoplayer.VideoPlayerPlugin());
- flutterEngine.getPlugins().add(new creativecreatorormaybenot.wakelock.WakelockPlugin());
+ flutterEngine.getPlugins().add(new creativemaybeno.wakelock.WakelockPlugin());
flutterEngine.getPlugins().add(new io.flutter.plugins.webviewflutter.WebViewFlutterPlugin());
}
}
diff --git a/assets/flexUI.json b/assets/flexUI.json
index 10c51361..0edafb36 100644
--- a/assets/flexUI.json
+++ b/assets/flexUI.json
@@ -20,7 +20,9 @@
"settings.notifications": ["covid19"],
"settings.covid19": ["exposure_notifications", "provider_test_result", "qr_code"],
"settings.privacy": ["statement"],
- "settings.account": ["personal_info", "family_members"]
+ "settings.account": ["personal_info", "family_members"],
+
+ "features": ["vaccination_badge"]
},
"rules": {
"roles" : {
@@ -56,7 +58,8 @@
"onboarding.location_auth" : { "os": "android" }
},
"enable" : {
- "onboarding.bluetooth_auth" : false
+ "onboarding.bluetooth_auth" : false,
+ "features.vaccination_badge" : false
}
}
}
diff --git a/assets/health.rules.json b/assets/health.rules.json
index 23607fc1..abc1cf34 100644
--- a/assets/health.rules.json
+++ b/assets/health.rules.json
@@ -9,21 +9,15 @@
"intervals": {
"DefaultTestMonitorInterval": 4,
"UndergraduateTestMonitorInterval": 4,
- "VaccinatedTestMonitorInterval": 30,
"UserTestMonitorInterval": null,
"TestMonitorInterval": {
- "condition": "require-vaccine",
- "params": { "interval": { "scope": "past-and-current" }, "vaccine": "effective" },
- "success": "VaccinatedTestMonitorInterval",
+ "condition": "test-interval", "params": { "interval": "UserTestMonitorInterval" },
+ "success": "UserTestMonitorInterval",
"fail": {
- "condition": "test-interval", "params": { "interval": "UserTestMonitorInterval" },
- "success": "UserTestMonitorInterval",
- "fail": {
- "condition": "test-user", "params": { "card.role": "Undergraduate", "card.student_level": "1U" },
- "success": "UndergraduateTestMonitorInterval",
- "fail": "DefaultTestMonitorInterval"
- }
+ "condition": "test-user", "params": { "card.role": "Undergraduate", "card.student_level": "1U" },
+ "success": "UndergraduateTestMonitorInterval",
+ "fail": "DefaultTestMonitorInterval"
}
}
},
@@ -39,8 +33,7 @@
"color": "#1ACD00",
"name": "code.green.name",
"description": "code.green.description",
- "long_description": "code.green.long_description",
- "visible": false
+ "long_description": "code.green.long_description"
},
{
"code": "yellow",
@@ -134,12 +127,7 @@
"params": {
"interval": { "min": 0, "max": 60, "scope": "future" }
},
- "success": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- },
+ "success": "test-required",
"fail": {
"code": "yellow",
"priority": 3,
@@ -151,52 +139,20 @@
},
"PCR.positive-NIP": {
- "condition": "require-vaccine",
+ "condition": "require-test",
"params": {
- "interval": { "scope": "past" },
- "vaccine": "effective"
+ "interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
},
"success": {
- "condition": "require-test",
- "params": {
- "interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
- },
- "success": {
- "code": "yellow",
- "priority": 3,
- "next_step_html": "positive-nip.step.html",
- "next_step_interval": "TestMonitorInterval",
- "event_explanation": "positive-nip.explanation",
- "warning": "test.future.warning"
- },
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
+ "code": "yellow",
+ "priority": 1,
+ "next_step_html": "positive-nip.step.html",
+ "next_step_interval": "TestMonitorInterval",
+ "event_explanation": "positive-nip.explanation",
+ "warning": "test.future.warning"
},
- "fail": {
- "condition": "require-test",
- "params": {
- "interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
- },
- "success": {
- "code": "yellow",
- "priority": 1,
- "next_step_html": "positive-nip.step.html",
- "next_step_interval": "TestMonitorInterval",
- "event_explanation": "positive-nip.explanation",
- "warning": "test.future.warning"
- },
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
- }
- },
+ "fail": "test-required"
+ },
"PCR.negative": "test-monitor",
@@ -212,25 +168,10 @@
"next_step_interval": 1,
"warning": "test.future.warning"
},
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
+ "fail": "test-required"
},
"test-monitor": {
- "condition": "require-vaccine",
- "params": {
- "interval": { "scope": "past" },
- "vaccine": "effective"
- },
- "success": "test-monitor-vaccinated",
- "fail": "test-monitor-default"
- },
-
- "test-monitor-default": {
"condition": "require-test",
"params": {
"interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
@@ -242,72 +183,16 @@
"next_step_interval": "TestMonitorInterval",
"warning": "test.future.warning"
},
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
- },
- "test-monitor-vaccinated": {
- "condition": "require-test",
- "params": {
- "interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
- },
- "success": {
- "code": "yellow",
- "priority": 3,
- "next_step": "test.monitor.step",
- "next_step_interval": "TestMonitorInterval",
- "warning": "test.future.warning"
- },
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
+ "fail": "test-required"
},
- "force-test": {
- "condition": "require-test",
- "params": {
- "interval": { "min": 0, "scope": "future" }
- },
- "success": {
- "condition": "timeout",
- "params": {
- "interval": { "min": 0, "max": 3, "scope": "future", "origin": "referenceDate" }
- },
- "success": {
- "condition": "require-test",
- "params": {
- "interval": { "min": 4, "scope": "future", "origin": "referenceDate" }
- },
- "success": null,
- "fail": {
- "code": "orange",
- "priority": 4,
- "next_step_html": "test.another.now.step.html",
- "reason": "test.past.reason"
- }
- },
- "fail": {
- "code": "orange",
- "priority": 4,
- "next_step_html": "test.after.step.html",
- "next_step_interval": { "value": 3, "origin": "referenceDate" },
- "reason": "test.after.reason"
- }
- },
- "fail": {
- "code": "orange",
- "priority": 4,
- "next_step_html": "test.multiple.step.html",
- "reason": "test.required.reason"
- }
+ "test-required": {
+ "code": "orange",
+ "priority": 1,
+ "next_step": "test.now.step",
+ "reason": "test.now.reason"
},
-
+
"symptoms-match": {
"code": "orange",
"priority": 1,
@@ -326,12 +211,7 @@
"interval": { "min": 4, "max": null, "scope": "future" }
},
"success": null,
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
+ "fail": "test-required"
},
"fail": {
"code": "orange",
@@ -341,6 +221,14 @@
"reason": "exposure.reason"
}
},
+
+ "vaccinated": {
+ "code": "green",
+ "priority": 4,
+ "next_step_html": "vaccinated.step.html",
+ "reason": "vaccinated.reason",
+ "fcm_topic": "vaccinated"
+ },
"quarantine-on": {
"code": "orange",
@@ -356,14 +244,15 @@
"interval": { "scope": "past" },
"vaccine": "effective"
},
- "success": {
+ "success": "vaccinated",
+ "fail": {
"condition": "require-test",
"params": {
"interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
},
"success": {
"code": "yellow",
- "priority": -3,
+ "priority": -1,
"next_step": "test.resume.step",
"next_step_interval": "TestMonitorInterval",
"warning": "test.future.warning"
@@ -374,28 +263,48 @@
"next_step": "test.now.step",
"reason": "test.now.reason"
}
+ }
+ },
+
+ "force-test": {
+ "condition": "require-test",
+ "params": {
+ "interval": { "min": 0, "scope": "future" }
},
- "fail": {
- "condition": "require-test",
+ "success": {
+ "condition": "timeout",
"params": {
- "interval": { "min": 0, "max": "TestMonitorInterval", "scope": "future", "current": true }
+ "interval": { "min": 0, "max": 3, "scope": "future", "origin": "referenceDate" }
},
"success": {
- "code": "yellow",
- "priority": -1,
- "next_step": "test.resume.step",
- "next_step_interval": "TestMonitorInterval",
- "warning": "test.future.warning"
+ "condition": "require-test",
+ "params": {
+ "interval": { "min": 4, "scope": "future", "origin": "referenceDate" }
},
+ "success": null,
+ "fail": {
+ "code": "orange",
+ "priority": 4,
+ "next_step_html": "test.another.now.step.html",
+ "reason": "test.past.reason"
+ }
+ },
"fail": {
"code": "orange",
- "priority": -1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
+ "priority": 4,
+ "next_step_html": "test.after.step.html",
+ "next_step_interval": { "value": 3, "origin": "referenceDate" },
+ "reason": "test.after.reason"
}
+ },
+ "fail": {
+ "code": "orange",
+ "priority": 4,
+ "next_step_html": "test.multiple.step.html",
+ "reason": "test.required.reason"
}
},
-
+
"out-of-test-compliance": {
"condition": "require-test",
"params": {
@@ -408,12 +317,7 @@
"next_step_interval": 1,
"warning": "test.future.warning"
},
- "fail": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
- }
+ "fail": "test-required"
},
"exempt-on": {
@@ -427,10 +331,13 @@
"interval": { "min": 0, "max": "ExemptInterval", "scope": "future" }
},
"success": {
- "code": "orange",
- "priority": 1,
- "next_step": "test.now.step",
- "reason": "test.now.reason"
+ "condition": "require-vaccine",
+ "params": {
+ "interval": { "scope": "past" },
+ "vaccine": "effective"
+ },
+ "success": "vaccinated",
+ "fail": "test-required"
},
"fail": {
"code": "yellow",
@@ -451,17 +358,45 @@
},
"exempt-off": {
- "code": "orange",
- "priority": -1,
- "next_step": "test.now.step",
- "reason": "Your status changed to Orange because your exempt from testing status was canceled"
+ "condition": "require-vaccine",
+ "params": {
+ "interval": { "scope": "past" },
+ "vaccine": "effective"
+ },
+ "success": {
+ "code": "green",
+ "priority": -4,
+ "next_step_html": "vaccinated.step.html",
+ "reason": "Your status changed to Green because your exempt from testing status was canceled",
+ "fcm_topic": "vaccinated"
+ },
+ "fail": {
+ "code": "orange",
+ "priority": -1,
+ "next_step": "test.now.step",
+ "reason": "Your status changed to Orange because your exempt from testing status was canceled"
+ }
},
"release": {
- "code": "orange",
- "priority": -1,
- "next_step": "release.step",
- "reason": "release.reason"
+ "condition": "require-vaccine",
+ "params": {
+ "interval": { "scope": "past" },
+ "vaccine": "effective"
+ },
+ "success": {
+ "code": "green",
+ "priority": -4,
+ "next_step_html": "vaccinated.step.html",
+ "reason": "Your status changed to Green because your exempt from testing status was canceled",
+ "fcm_topic": "vaccinated"
+ },
+ "fail": {
+ "code": "orange",
+ "priority": -1,
+ "next_step": "release.step",
+ "reason": "release.reason"
+ }
}
},
@@ -850,7 +785,7 @@
"rules": [
{
"vaccine": "effective",
- "status": "test-monitor-vaccinated"
+ "status": "vaccinated"
}
]
},
@@ -879,6 +814,8 @@
"symptoms.reason": "Your status changed to Orange because you self-reported symptoms consistent with the virus.",
"exposure.step.html": "
You have likely been exposed to a person who is infected with COVID-19.
- You must quarantine yourself immediately.
- Stay home. Do not go to work, school, or public areas.
- Separate yourself from others in your home.
- Contact covidwellness@illinois.edu for guidance.
- Get tested after {next_step_date} to see if you have developed the disease.
- More Info: Quarantine and Isolation
",
"exposure.reason": "Your status changed to Orange because you received an exposure notification.",
+ "vaccinated.step.html": "We have a verified record of your completed COVID-19 vaccination on file.
Your vaccination status replaces testing for compliance and building access until further notice.
Please get an on-campus COVID-19 test if you experience symptoms.
Continue to monitor university communications for any changes to your testing policy.
",
+ "vaccinated.reason": "Your status changed to Green because your vaccination is already effective.",
"quarantine-on.step": "Stay at home and avoid contacts",
"quarantine-on.reason": "Your status changed to Orange because the Public Health department placed you in Quarantine.",
"release.step": "Take a SHIELD Saliva Test",
@@ -905,8 +842,8 @@
"symptoms.diarrhea": "Diarrhea",
"code.green.name": "Green",
- "code.green.description": "Recent Antibodies",
- "code.green.long_description": "Green: Recent antibodies",
+ "code.green.description": "Fully vaccinated",
+ "code.green.long_description": "Green: Fully vaccinated",
"code.yellow.name": "Yellow",
"code.yellow.description": "Recent Negative Test",
"code.yellow.long_description": "Yellow: Recent negative test",
@@ -942,6 +879,8 @@
"symptoms.reason": "Su estado cambió a Naranja porque usted mismo informó de síntomas consistentes con el virus.",
"exposure.step.html": "Es probable que haya estado expuesto a una persona infectada con COVID-19.
- Debe ponerse en cuarentena inmediatamente.
- Quedarse en casa. No vaya al trabajo, la escuela o áreas públicas.
- Sepárate de las demás en tu casa.
- Póngase en contacto con covidwellness@illinois.edu para obtener orientación.
- Hágase la prueba después del {next_step_date} para ver si ha desarrollado la enfermedad.
- Más información: Cuarentena y aislamiento
",
"exposure.reason": "Su estado cambió a Naranja porque recibió una notificación de exposición.",
+ "vaccinated.step.html": "Tenemos un registro verificado de su vacunación COVID-19 completa en el archivo.
Su estado de vacunación reemplaza las pruebas de cumplimiento y acceso al edificio hasta nuevo aviso.
Hágase una prueba de COVID-19 en el campus si experimenta síntomas.
Continúe monitoreando las comunicaciones de la universidad para detectar cualquier cambio en su política de exámenes.
",
+ "vaccinated.reason": "Su estado cambió a Verde porque su vacunación ya es efectiva.",
"quarantine-on.step": "Quédese en casa y evite los contactos",
"quarantine-on.reason": "Su estado cambió a Orange porque el departamento de Salud Pública lo puso en cuarentena.",
"release.step": "Realice una prueba de saliva SHIELD",
@@ -968,8 +907,8 @@
"symptoms.diarrhea": "Diarrea",
"code.green.name": "Verde",
- "code.green.description": "Anticuerpos recientes",
- "code.green.long_description": "Verde: anticuerpos recientes",
+ "code.green.description": "Totalmente vacunado",
+ "code.green.long_description": "Verde: totalmente vacunado",
"code.yellow.name": "Amarillo",
"code.yellow.description": "Prueba negativa reciente",
"code.yellow.long_description": "Amarillo: prueba negativa reciente",
@@ -1005,6 +944,8 @@
"symptoms.reason": "您的狀態更改為橙色,因為您自我報告的症狀與病毒一致。",
"exposure.step.html": "您可能已經接觸了感染了COVID-19的人。
",
"exposure.reason": "您的狀態更改為橙色,因為您收到了曝光通知。",
+ "vaccinated.step.html": "我們記錄了您完成的COVID-19疫苗接種的經過驗證的記錄。
您的疫苗接種狀態將取代合規性測試和建立訪問權限,直至另行通知。
如果您出現症狀,請進行校園 COVID-19 測試。
繼續監控大學通訊,了解您的考試政策是否有任何變化。
",
+ "vaccinated.reason": "您的狀態已更改為“綠色”,因為您的疫苗接種已經有效。",
"quarantine-on.step": "呆在家裡,避免接觸",
"quarantine-on.reason": "您的狀態更改為“橙色”,因為公共衛生部門已將您隔離。",
"release.step": "參加SHIELD唾液測試",
@@ -1031,8 +972,8 @@
"symptoms.diarrhea":"腹瀉",
"code.green.name": "绿色",
- "code.green.description": "最近抗體",
- "code.green.long_description": "绿色:最近抗体",
+ "code.green.description": "全面接種",
+ "code.green.long_description": "绿色:全面接種",
"code.yellow.name": "黄色",
"code.yellow.description": "最近的陰性測試",
"code.yellow.long_description": "黄色:最近阴性测试",
@@ -1068,6 +1009,8 @@
"symptoms.reason": "COVID-19の症状と一致する症状を自己申告したため、ステータスがオレンジに変わりました。",
"exposure.step.html": "COVID-19に感染している人と接触した可能性があります。
- 直ちに隔離してください。
- 家にいてください。仕事や学校や公共の場へ行かないでください。
- 家にいる人から離れてください。
- ガイダンスを受けるにはcovidwellness@illinois.eduに連絡してください。
- {next_step_date}の後で検査を受けて、自分が発症しているかどうかを確認してください。
- より詳しい情報: 隔離と孤立
",
"exposure.reason": "接触通知を受信したため、ステータスがオレンジに変更されました。",
+ "vaccinated.step.html": "完了したCOVID-19ワクチン接種の確認済みの記録がファイルにあります。
あなたのワクチン接種状況は、追って通知があるまで、コンプライアンスと建物へのアクセスのテストに取って代わります。
症状が出た場合は、キャンパス内のCOVID-19検査を受けてください。
テストポリシーに変更がないか、大学のコミュニケーションを引き続き監視します。
",
+ "vaccinated.reason": "予防接種がすでに有効になっているため、ステータスが緑に変わりました。",
"quarantine-on.step": "家にいて、他の人との接触を避けてください。",
"quarantine-on.reason": "Public Health departmentにより隔離状態に置かれているため、ステータスがオレンジに変更されました。",
"release.step": "SHIELD唾液検査を受けてください",
@@ -1094,8 +1037,8 @@
"symptoms.diarrhea": "下痢",
"code.green.name": "緑",
- "code.green.description": "抗体が検収されました",
- "code.green.long_description": "緑抗体が検収されました",
+ "code.green.description": "完全に予防接種済み",
+ "code.green.long_description": "緑:完全に予防接種済み",
"code.yellow.name": "黄:",
"code.yellow.description": "最近の陰性結果",
"code.yellow.long_description": "黄:最近の陰性結果",
diff --git a/assets/strings.en.json b/assets/strings.en.json
index db87101f..8702f144 100644
--- a/assets/strings.en.json
+++ b/assets/strings.en.json
@@ -218,7 +218,7 @@
"panel.settings.home.button.feedback.title": "Submit Feedback",
"panel.settings.home.button.feedback.hint": "",
"panel.settings.home.covid19.exposure_notifications": "Exposure Notifications",
- "panel.settings.home.covid19.provider_test_result": "Health Provider Test Results",
+ "panel.settings.home.covid19.provider_test_result": "Health Provider Test Results and Vaccine Information",
"panel.settings.home.covid19.title": "COVID-19",
"panel.settings.home.covid19.qr_code.button.title": "QR Code",
"panel.settings.home.covid19.transfer.button.title": "Transfer",
@@ -462,7 +462,7 @@
"panel.health.onboarding.covid19.consent.label.description": "Exposure Notifications",
"panel.health.onboarding.covid19.consent.label.content1": "If you consent to exposure notifications, you allow your phone to send an anonymous Bluetooth signal to nearby Safer Illinois app users who are also using this feature. Your phone will receive and record a signal from their phones as well. If one of those users tests positive for COVID-19 in the next 14 days, the app will alert you to your potential exposure and advise you on next steps. Your identity and health status will remain anonymous, as will the identity and health status of all other users.",
"panel.health.onboarding.covid19.consent.check_box.label.participate": "I consent to participate in the Exposure Notification System (requires Bluetooth to be ON).",
- "panel.health.onboarding.covid19.consent.check_box.label.allow": "I consent to allow my healthcare provider to provide my test results.",
+ "panel.health.onboarding.covid19.consent.check_box.label.allow": "I consent to allow my healthcare provider to provide my test results and vaccine information.",
"panel.health.onboarding.covid19.consent.label.content2": "Automatic Test Results",
"panel.health.onboarding.covid19.consent.label.content3": "I consent to connect test results from my healthcare provider with the Safer Illinois app.",
"panel.health.onboarding.covid19.consent.label.content4": "Your participation in these COVID-19 features is voluntary, and you can stop at any time",
diff --git a/assets/strings.es.json b/assets/strings.es.json
index be675e33..610cf179 100644
--- a/assets/strings.es.json
+++ b/assets/strings.es.json
@@ -218,7 +218,7 @@
"panel.settings.home.button.feedback.title": "Enviar comentarios",
"panel.settings.home.button.feedback.hint": "",
"panel.settings.home.covid19.exposure_notifications": "Notificaciones de exposición",
- "panel.settings.home.covid19.provider_test_result": "Resultados de la prueba del proveedor de salud",
+ "panel.settings.home.covid19.provider_test_result": "Resultados de las pruebas del proveedor de servicios de salud e información sobre las vacunas",
"panel.settings.home.covid19.title": "COVID-19",
"panel.settings.home.covid19.qr_code.button.title": "Código QR",
"panel.settings.home.covid19.transfer.button.title": "Transferir",
@@ -462,7 +462,7 @@
"panel.health.onboarding.covid19.consent.label.description": "Notificaciones de exposición",
"panel.health.onboarding.covid19.consent.label.content1": "Si acepta las notificaciones de exposición, permite que su teléfono envíe una señal anónima de Bluetooth a los usuarios cercanos de la aplicación Safer Illinois que también usan esta función. Su teléfono también recibirá y grabará una señal de sus teléfonos. Si uno de esos usuarios da positivo por COVID-19 en los próximos 14 días, la aplicación lo alertará sobre su posible exposición y le aconsejará sobre los próximos pasos. Su identidad y estado de salud permanecerán anónimos, al igual que la identidad y el estado de salud de todos los demás usuarios.",
"panel.health.onboarding.covid19.consent.check_box.label.participate": "Doy mi consentimiento para participar en el Sistema de notificación de exposición (requiere que Bluetooth esté activado).",
- "panel.health.onboarding.covid19.consent.check_box.label.allow": "Doy mi consentimiento para permitir que mi proveedor de atención médica proporcione los resultados de mi prueba.",
+ "panel.health.onboarding.covid19.consent.check_box.label.allow": "Doy mi consentimiento para que mi proveedor de atención médica proporcione los resultados de mis pruebas y la información de la vacuna.",
"panel.health.onboarding.covid19.consent.label.content2": "Resultados automáticos de prueba",
"panel.health.onboarding.covid19.consent.label.content3": "Doy mi consentimiento para conectar los resultados de las pruebas de mi proveedor de atención médica con la aplicación Safer Illinois.",
"panel.health.onboarding.covid19.consent.label.content4": "Su participación es voluntaria y puede detenerse en cualquier momento",
diff --git a/assets/strings.ja.json b/assets/strings.ja.json
index 8d40baa4..f9ea6330 100644
--- a/assets/strings.ja.json
+++ b/assets/strings.ja.json
@@ -218,7 +218,7 @@
"panel.settings.home.button.feedback.title": "Submit Feedback",
"panel.settings.home.button.feedback.hint": "",
"panel.settings.home.covid19.exposure_notifications": "接続通知",
- "panel.settings.home.covid19.provider_test_result": "Health Provider Test Results",
+ "panel.settings.home.covid19.provider_test_result": "医療提供者の検査結果とワクチン情報",
"panel.settings.home.covid19.title": "COVID-19",
"panel.settings.home.covid19.qr_code.button.title": "QR Code",
"panel.settings.home.covid19.transfer.button.title": "Transfer",
@@ -462,7 +462,7 @@
"panel.health.onboarding.covid19.consent.label.description": "接続通知",
"panel.health.onboarding.covid19.consent.label.content1": "接続通知に承諾した場合は、スマホがこの機能を使用している近くのSafer Illinoisアプリのユーザーに匿名のBluetooth信号を送信するようになります。同様にスマホは、他のユーザーからの信号を受信して記録します。次の14日以内に他のユーザーがCOVID-19の陽性となった場合、アプリは曝露された可能性があることを警告して次のステップについてアドバイスします。すべてのユーザーの身元と健康ステータスは匿名となります。",
"panel.health.onboarding.covid19.consent.check_box.label.participate": "接続通知システムに参加することに同意します(Bluetoothをオンにする必要があります)。",
- "panel.health.onboarding.covid19.consent.check_box.label.allow": "私は医療従事者が検査結果を提供することに同意します。",
+ "panel.health.onboarding.covid19.consent.check_box.label.allow": "私は、私の医療提供者が私の検査結果とワクチン情報を提供することを許可することに同意します。",
"panel.health.onboarding.covid19.consent.label.content2": "自動検査結果",
"panel.health.onboarding.covid19.consent.label.content3": "医療従事者からの検査結果をSafer Illinoisアプリに接続することに同意します。",
"panel.health.onboarding.covid19.consent.label.content4": "COVID-19機能への参加は自発的なものであり、いつでも同意を撤回することができます。",
diff --git a/assets/strings.zh.json b/assets/strings.zh.json
index add1dcc8..9b0ef908 100644
--- a/assets/strings.zh.json
+++ b/assets/strings.zh.json
@@ -218,7 +218,7 @@
"panel.settings.home.button.feedback.title": "提交反馈",
"panel.settings.home.button.feedback.hint": "",
"panel.settings.home.covid19.exposure_notifications": "接触通知",
- "panel.settings.home.covid19.provider_test_result": "健康提供者测试结果 ",
+ "panel.settings.home.covid19.provider_test_result": "衛生人員測試結果和疫苗信息",
"panel.settings.home.covid19.title": "COVID-19",
"panel.settings.home.covid19.qr_code.button.title": "二維碼",
"panel.settings.home.covid19.transfer.button.title": "傳遞",
@@ -462,7 +462,7 @@
"panel.health.onboarding.covid19.consent.label.description": "接触通知",
"panel.health.onboarding.covid19.consent.label.content1": "如果您同意接触通知,則允許您的手機向附近的也在使用此功能的Safer Illinois應用程序用戶發送匿名藍牙信號。 您的電話也將接收並記錄來自其電話的信號。 如果其中一個用戶在接下來的14天內檢測出COVID-19呈陽性,則該應用程序將提醒您可能的暴露情況,並為您提供下一步建議。 您的身份和健康狀態以及所有其他用戶的身份和健康狀態將保持匿名。",
"panel.health.onboarding.covid19.consent.check_box.label.participate": "我同意参与接触通知系统(需要打开蓝牙).",
- "panel.health.onboarding.covid19.consent.check_box.label.allow": "我同意让我的医疗保健提供者提供我的测试结果.",
+ "panel.health.onboarding.covid19.consent.check_box.label.allow": "我同意允許我的醫療保健提供者提供我的測試結果和疫苗信息。",
"panel.health.onboarding.covid19.consent.label.content2": "自动测试结果",
"panel.health.onboarding.covid19.consent.label.content3": "我同意將我的醫療保健提供者的測試結果與Safer Illinois應用程序聯繫起來。",
"panel.health.onboarding.covid19.consent.label.content4": "您的参与是自愿的,您可以随时停止.",
diff --git a/ios/Flutter/Flutter.podspec b/ios/Flutter/Flutter.podspec
deleted file mode 100644
index 5ca30416..00000000
--- a/ios/Flutter/Flutter.podspec
+++ /dev/null
@@ -1,18 +0,0 @@
-#
-# NOTE: This podspec is NOT to be published. It is only used as a local source!
-#
-
-Pod::Spec.new do |s|
- s.name = 'Flutter'
- s.version = '1.0.0'
- s.summary = 'High-performance, high-fidelity mobile apps.'
- s.description = <<-DESC
-Flutter provides an easy and productive way to build and deploy high-performance mobile apps for Android and iOS.
- DESC
- s.homepage = 'https://flutter.io'
- s.license = { :type => 'MIT' }
- s.author = { 'Flutter Dev Team' => 'flutter-dev@googlegroups.com' }
- s.source = { :git => 'https://github.com/flutter/engine', :tag => s.version.to_s }
- s.ios.deployment_target = '8.0'
- s.vendored_frameworks = 'Flutter.framework'
-end
diff --git a/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/FirebaseMLVisionBarcodeModel b/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/FirebaseMLVisionBarcodeModel
new file mode 100755
index 00000000..31f519a6
--- /dev/null
+++ b/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/FirebaseMLVisionBarcodeModel
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e4adf4794df6c1a75ddee15bc363b1b228c5368d7f526ca3f3ae908579ebcd88
+size 183496104
diff --git a/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/Modules/module.modulemap b/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/Modules/module.modulemap
new file mode 100755
index 00000000..c0c0aadb
--- /dev/null
+++ b/ios/Libraries/FirebaseMLVisionBarcodeModel.framework/Modules/module.modulemap
@@ -0,0 +1,18 @@
+framework module FirebaseMLVisionBarcodeModel {
+ export *
+ module * { export * }
+ link "c++"
+ link "z"
+ link framework "AVFoundation"
+ link framework "Accelerate"
+ link framework "CoreFoundation"
+ link framework "CoreGraphics"
+ link framework "CoreImage"
+ link framework "CoreMedia"
+ link framework "CoreVideo"
+ link framework "Foundation"
+ link framework "QuartzCore"
+ link framework "Security"
+ link framework "SystemConfiguration"
+ link framework "UIKit"
+}
diff --git a/ios/Podfile b/ios/Podfile
index 71bfdc27..6fa5a192 100644
--- a/ios/Podfile
+++ b/ios/Podfile
@@ -36,8 +36,11 @@ target 'Runner' do
pod 'ZXingObjC', '3.6.4'
pod 'PPBlinkID', '~> 5.3.0'
pod 'HKDFKit', '0.0.3'
- pod 'Firebase/MLVisionBarcodeModel'
+# 'Firebase/MLVisionBarcodeModel' is required by 'firebase_ml_vision' plugin from pubspec.yaml.
+# Unable to include it in the podfile due to a conflict with FirebaseCore version number.
+# Temporarly add 'FirebaseMLVisionBarcodeModel.framework' to the project and link it explicitely.
+# pod 'Firebase/MLVisionBarcodeModel'
flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
end
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index d2c3cfbb..48f3625a 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -12,6 +12,7 @@
2605FF55236C13A6002F71BE /* GoogleService-Info-Prod.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2605FF53236C13A6002F71BE /* GoogleService-Info-Prod.plist */; };
2626D94B22DC99C800F6BC2F /* NSString+InaJson.m in Sources */ = {isa = PBXBuildFile; fileRef = 2626D94922DC99C700F6BC2F /* NSString+InaJson.m */; };
2626D94E22DCB80000F6BC2F /* MapMarkerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2626D94D22DCB80000F6BC2F /* MapMarkerView.m */; };
+ 2639CC3B2656607100D8469A /* FirebaseMLVisionBarcodeModel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2639CC3A2656607100D8469A /* FirebaseMLVisionBarcodeModel.framework */; };
266FA50323E0388B00F800F5 /* MapController.m in Sources */ = {isa = PBXBuildFile; fileRef = 266FA50223E0388B00F800F5 /* MapController.m */; };
268F30F122E5DD7900547FE1 /* travel-mode-walk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 268F30ED22E5DD7900547FE1 /* travel-mode-walk@2x.png */; };
268F30F222E5DD7900547FE1 /* travel-mode-transit@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 268F30EE22E5DD7900547FE1 /* travel-mode-transit@2x.png */; };
@@ -92,6 +93,7 @@
2626D94A22DC99C700F6BC2F /* NSString+InaJson.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+InaJson.h"; sourceTree = ""; };
2626D94C22DCB80000F6BC2F /* MapMarkerView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MapMarkerView.h; sourceTree = ""; };
2626D94D22DCB80000F6BC2F /* MapMarkerView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MapMarkerView.m; sourceTree = ""; };
+ 2639CC3A2656607100D8469A /* FirebaseMLVisionBarcodeModel.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = FirebaseMLVisionBarcodeModel.framework; sourceTree = ""; };
2668953022E1E074003CAB94 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; };
266FA50123E0388B00F800F5 /* MapController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MapController.h; sourceTree = ""; };
266FA50223E0388B00F800F5 /* MapController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MapController.m; sourceTree = ""; };
@@ -200,12 +202,21 @@
buildActionMask = 2147483647;
files = (
BB7BF12F5D3356D25889D23A /* Pods_Runner.framework in Frameworks */,
+ 2639CC3B2656607100D8469A /* FirebaseMLVisionBarcodeModel.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
+ 2639CC392656604500D8469A /* Libraries */ = {
+ isa = PBXGroup;
+ children = (
+ 2639CC3A2656607100D8469A /* FirebaseMLVisionBarcodeModel.framework */,
+ );
+ path = Libraries;
+ sourceTree = "";
+ };
2696995822C38A7F00B3290E /* Resources */ = {
isa = PBXGroup;
children = (
@@ -327,6 +338,7 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
A4FE37309F85C78E8A871D27 /* Pods */,
+ 2639CC392656604500D8469A /* Libraries */,
F8180DF05DB99BBF17C34614 /* Frameworks */,
26E0DD772525C5BF002B7B11 /* build.sh */,
);
@@ -595,9 +607,15 @@
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh",
"${BUILT_PRODUCTS_DIR}/FMDB/FMDB.framework",
- "${PODS_ROOT}/../Flutter/Flutter.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework",
+ "${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
"${BUILT_PRODUCTS_DIR}/GTMSessionFetcher/GTMSessionFetcher.framework",
"${BUILT_PRODUCTS_DIR}/GoogleAPIClientForREST/GoogleAPIClientForREST.framework",
+ "${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
"${BUILT_PRODUCTS_DIR}/GoogleToolboxForMac/GoogleToolboxForMac.framework",
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
"${BUILT_PRODUCTS_DIR}/HKDFKit/HKDFKit.framework",
@@ -609,6 +627,7 @@
"${BUILT_PRODUCTS_DIR}/Reachability/Reachability.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImage/SDWebImage.framework",
"${BUILT_PRODUCTS_DIR}/SDWebImageWebPCoder/SDWebImageWebPCoder.framework",
+ "${BUILT_PRODUCTS_DIR}/SwiftProtobuf/SwiftProtobuf.framework",
"${BUILT_PRODUCTS_DIR}/Toast/Toast.framework",
"${BUILT_PRODUCTS_DIR}/ZXingObjC/ZXingObjC.framework",
"${BUILT_PRODUCTS_DIR}/barcode_scan/barcode_scan.framework",
@@ -623,7 +642,6 @@
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
"${BUILT_PRODUCTS_DIR}/package_info/package_info.framework",
"${BUILT_PRODUCTS_DIR}/path_provider/path_provider.framework",
- "${BUILT_PRODUCTS_DIR}/screen/screen.framework",
"${BUILT_PRODUCTS_DIR}/shared_preferences/shared_preferences.framework",
"${BUILT_PRODUCTS_DIR}/sqflite/sqflite.framework",
"${BUILT_PRODUCTS_DIR}/uni_links/uni_links.framework",
@@ -635,9 +653,15 @@
name = "[CP] Embed Pods Frameworks";
outputPaths = (
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FMDB.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Flutter.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCrashlytics.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstanceID.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GTMSessionFetcher.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleAPIClientForREST.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleToolboxForMac.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/HKDFKit.framework",
@@ -649,6 +673,7 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Reachability.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImage.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SDWebImageWebPCoder.framework",
+ "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/SwiftProtobuf.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Toast.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/ZXingObjC.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/barcode_scan.framework",
@@ -663,7 +688,6 @@
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/package_info.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/path_provider.framework",
- "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/screen.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/shared_preferences.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/sqflite.framework",
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/uni_links.framework",
@@ -830,6 +854,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -909,6 +934,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -994,6 +1020,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1073,6 +1100,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1208,6 +1236,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
@@ -1238,6 +1267,7 @@
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/Flutter",
+ "$(PROJECT_DIR)/Libraries",
);
INFOPLIST_FILE = Runner/Info.plist;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
diff --git a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
index 1d526a16..919434a6 100644
--- a/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
+++ b/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -2,6 +2,6 @@
+ location = "self:">
diff --git a/ios/Runner/GeneratedPluginRegistrant.m b/ios/Runner/GeneratedPluginRegistrant.m
index 8fc51a45..d178aa33 100644
--- a/ios/Runner/GeneratedPluginRegistrant.m
+++ b/ios/Runner/GeneratedPluginRegistrant.m
@@ -88,12 +88,6 @@
@import path_provider;
#endif
-#if __has_include()
-#import
-#else
-@import screen;
-#endif
-
#if __has_include()
#import
#else
@@ -153,7 +147,6 @@ + (void)registerWithRegistry:(NSObject*)registry {
[LocationPlugin registerWithRegistrar:[registry registrarForPlugin:@"LocationPlugin"]];
[FLTPackageInfoPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTPackageInfoPlugin"]];
[FLTPathProviderPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTPathProviderPlugin"]];
- [ScreenPlugin registerWithRegistrar:[registry registrarForPlugin:@"ScreenPlugin"]];
[FLTSharedPreferencesPlugin registerWithRegistrar:[registry registrarForPlugin:@"FLTSharedPreferencesPlugin"]];
[SqflitePlugin registerWithRegistrar:[registry registrarForPlugin:@"SqflitePlugin"]];
[UniLinksPlugin registerWithRegistrar:[registry registrarForPlugin:@"UniLinksPlugin"]];
diff --git a/lib/main.dart b/lib/main.dart
index 6eb54de8..863b7557 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -37,6 +37,7 @@ import 'package:illinois/service/Onboarding.dart';
import 'package:illinois/service/Localization.dart';
import 'package:illinois/ui/RootPanel.dart';
import 'package:illinois/service/Styles.dart';
+import 'package:illinois/utils/Utils.dart';
final AppExitListener appExitListener = AppExitListener();
@@ -140,6 +141,12 @@ class _AppState extends State implements NotificationsListener {
// This is just a placeholder to take some action on app upgrade.
String lastRunVersion = Storage().lastRunVersion;
if ((lastRunVersion == null) || (lastRunVersion != Config().appVersion)) {
+
+ // Force unboarding to concent vaccination (#651)
+ if (AppVersion.compareVersions(lastRunVersion, '2.10.28') < 0) {
+ Storage().onBoardingPassed = false;
+ }
+
Storage().lastRunVersion = Config().appVersion;
}
diff --git a/lib/model/Exposure.dart b/lib/model/Exposure.dart
index d3857c38..2afa6276 100644
--- a/lib/model/Exposure.dart
+++ b/lib/model/Exposure.dart
@@ -56,7 +56,7 @@ class ExposureTEK {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
ExposureTEK value;
try { value = ExposureTEK.fromJson((entry as Map)?.cast()); }
@@ -70,7 +70,7 @@ class ExposureTEK {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (ExposureTEK value in values) {
json.add(value?.toJson());
}
@@ -97,7 +97,7 @@ class ExposureTEK {
static List mapToJson(Map entries) {
List json;
if (entries != null) {
- json = [];
+ json = [];
for (ExposureTEK value in entries.values) {
json.add(value?.toJson());
}
diff --git a/lib/model/Groups.dart b/lib/model/Groups.dart
index 8a619455..a3f1f0bc 100644
--- a/lib/model/Groups.dart
+++ b/lib/model/Groups.dart
@@ -127,7 +127,7 @@ class Group {
if(AppCollection.isCollectionNotEmpty(members) && status != null){
return members.where((member) => member.status == status).toList();
}
- return [];
+ return [];
}
Member getMembersById(String id){
@@ -499,7 +499,7 @@ class GroupMembershipStep {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
GroupMembershipStep value;
try { value = GroupMembershipStep.fromJson((entry as Map)?.cast()); }
@@ -513,7 +513,7 @@ class GroupMembershipStep {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (GroupMembershipStep value in values) {
json.add(value?.toJson());
}
@@ -524,7 +524,7 @@ class GroupMembershipStep {
static List listFromOthers(List others) {
List values;
if (others != null) {
- values = [];
+ values = [];
for (GroupMembershipStep other in others) {
values.add(GroupMembershipStep.fromOther(other));
}
@@ -548,7 +548,7 @@ class GroupMembershipQuestion {
static List listFromOthers(List others) {
List values;
if (others != null) {
- values = [];
+ values = [];
for (GroupMembershipQuestion other in others) {
values.add(GroupMembershipQuestion.fromString(other.question));
}
@@ -581,7 +581,7 @@ class GroupMembershipAnswer {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
GroupMembershipAnswer value;
try { value = GroupMembershipAnswer.fromJson((entry as Map)?.cast()); }
@@ -595,7 +595,7 @@ class GroupMembershipAnswer {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (GroupMembershipAnswer value in values) {
json.add(value?.toJson());
}
diff --git a/lib/model/Health.dart b/lib/model/Health.dart
index 07d890a3..4c1683fe 100644
--- a/lib/model/Health.dart
+++ b/lib/model/Health.dart
@@ -492,7 +492,7 @@ class HealthHistory implements Comparable {
static Future> listFromJson(List json, Map privateKeys) async {
if (json != null) {
- List> futures = [];
+ List> futures = >[];
for (dynamic entry in json) {
futures.add(HealthHistory.decryptedFromJson((entry as Map)?.cast(), privateKeys));
}
@@ -505,7 +505,7 @@ class HealthHistory implements Comparable {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthHistory value in values) {
json.add(value?.toJson());
}
@@ -612,7 +612,7 @@ class HealthHistory implements Comparable {
static List pastList(List history) {
List result;
if (history != null) {
- result = List();
+ result = [];
DateTime nowUtc = DateTime.now().toUtc();
for (int index = 0; index < history.length; index++) {
HealthHistory historyEntry = history[index];
@@ -989,7 +989,7 @@ class HealthPendingEvent {
static Future> listFromJson(List json, PrivateKey privateKey) async {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthPendingEvent value = await HealthPendingEvent.decryptedFromJson(entry, privateKey);
values.add(value);
@@ -1155,7 +1155,7 @@ class HealthEventExtra {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthEventExtra value;
try { value = HealthEventExtra.fromJson((entry as Map)?.cast()); }
@@ -1169,7 +1169,7 @@ class HealthEventExtra {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthEventExtra value in values) {
json.add(value?.toJson());
}
@@ -1482,7 +1482,7 @@ class HealthUserAccount {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthUserAccount value;
try { value = HealthUserAccount.fromJson((entry as Map)?.cast()); }
@@ -1506,7 +1506,7 @@ class HealthUserAccount {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthUserAccount value in values) {
json.add(value?.toJson());
}
@@ -1604,7 +1604,7 @@ class HealthServiceProvider {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthServiceProvider value;
try { value = HealthServiceProvider.fromJson((entry as Map)?.cast()); }
@@ -1618,7 +1618,7 @@ class HealthServiceProvider {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthServiceProvider value in values) {
json.add(value?.toJson());
}
@@ -1676,7 +1676,7 @@ String healthServiceMechanismToString(HealthServiceMechanism value) {
List healthServiceMechanismListFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthServiceMechanism value;
try { value = healthServiceMechanismFromString((entry as String)); }
@@ -1690,7 +1690,7 @@ List healthServiceMechanismListFromJson(List js
List healthServiceMechanismListToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthServiceMechanism value in values) {
json.add(healthServiceMechanismToString(value));
}
@@ -1787,7 +1787,7 @@ class HealthServiceLocation {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthServiceLocation value;
try { value = HealthServiceLocation.fromJson((entry as Map)?.cast()); }
@@ -1801,7 +1801,7 @@ class HealthServiceLocation {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthServiceLocation value in values) {
json.add(value?.toJson());
}
@@ -1903,7 +1903,7 @@ class HealthLocationDayOfOperation {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthLocationDayOfOperation value;
try { value = HealthLocationDayOfOperation.fromJson((entry as Map)?.cast()); }
@@ -1961,7 +1961,7 @@ class HealthTestType {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthTestType value;
try { value = HealthTestType.fromJson((entry as Map)?.cast()); }
@@ -1975,7 +1975,7 @@ class HealthTestType {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthTestType value in values) {
json.add(value?.toJson());
}
@@ -2024,7 +2024,7 @@ class HealthTestTypeResult {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthTestTypeResult value;
try { value = HealthTestTypeResult.fromJson((entry as Map)?.cast()); }
@@ -2038,7 +2038,7 @@ class HealthTestTypeResult {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthTestTypeResult value in values) {
json.add(value?.toJson());
}
@@ -2143,7 +2143,7 @@ class HealthCounty {
static List listFromJson(List json, { bool guidelines }) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthCounty value;
try { value = HealthCounty.fromJson((entry as Map)?.cast(), guidelines: guidelines); }
@@ -2157,7 +2157,7 @@ class HealthCounty {
static List listToJson(List values, { bool guidelines }) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthCounty value in values) {
json.add(value?.toJson(guidelines : guidelines));
}
@@ -2191,7 +2191,7 @@ class HealthGuideline {
static List fromJsonList(List jsonList) {
List sections;
if (jsonList != null) {
- sections = List();
+ sections = [];
for (dynamic jsonEntry in jsonList) {
sections.add(HealthGuideline.fromJson(jsonEntry));
}
@@ -2202,7 +2202,7 @@ class HealthGuideline {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthGuideline value in values) {
json.add(value?.toJson());
}
@@ -2243,7 +2243,7 @@ class HealthGuidelineItem {
static List fromJsonList(List jsonList) {
List guidelineItems;
if (jsonList != null) {
- guidelineItems = List();
+ guidelineItems = [];
for (dynamic jsonEntry in jsonList) {
guidelineItems.add(HealthGuidelineItem.fromJson(jsonEntry));
}
@@ -2254,7 +2254,7 @@ class HealthGuidelineItem {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthGuidelineItem value in values) {
json.add(value?.toJson());
}
@@ -2390,7 +2390,7 @@ class HealthFamilyMember {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthFamilyMember value;
try { value = HealthFamilyMember.fromJson((entry as Map)?.cast()); }
@@ -2404,7 +2404,7 @@ class HealthFamilyMember {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthFamilyMember value in values) {
json.add(value?.toJson());
}
@@ -2470,7 +2470,7 @@ class HealthSymptom {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthSymptom value;
try { value = HealthSymptom.fromJson((entry as Map)?.cast()); }
@@ -2484,7 +2484,7 @@ class HealthSymptom {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthSymptom value in values) {
json.add(value?.toJson());
}
@@ -2559,7 +2559,7 @@ class HealthSymptomsGroup {
}
static List getSymptoms(List groups, Set selected) {
- List symptoms = List();
+ List symptoms = [];
if ((groups != null) && (selected != null)) {
for (HealthSymptomsGroup group in groups) {
if ((group.symptoms != null)) {
@@ -2577,7 +2577,7 @@ class HealthSymptomsGroup {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
HealthSymptomsGroup value;
try { value = HealthSymptomsGroup.fromJson((entry as Map)?.cast()); }
@@ -2591,7 +2591,7 @@ class HealthSymptomsGroup {
static List listToJson(List values) {
List json;
if (values != null) {
- json = [];
+ json = [];
for (HealthSymptomsGroup value in values) {
json.add(value?.toJson());
}
@@ -2847,7 +2847,7 @@ class HealthCodeData {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthCodeData.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -2940,7 +2940,7 @@ class HealthTestRule {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthTestRule.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -2986,7 +2986,7 @@ class HealthTestRuleResult {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthTestRuleResult.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -3077,7 +3077,7 @@ class HealthSymptomsRule {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthSymptomsRule.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -3163,7 +3163,7 @@ class HealthContactTraceRule {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthContactTraceRule.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -3238,7 +3238,7 @@ class HealthVaccineRule {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthVaccineRule.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
@@ -3313,7 +3313,7 @@ class HealthActionRule {
static List listFromJson(List json) {
List values;
if (json != null) {
- values = [];
+ values = [];
for (dynamic entry in json) {
try { values.add(HealthActionRule.fromJson((entry as Map)?.cast())); }
catch(e) { print(e?.toString()); }
diff --git a/lib/model/UserProfile.dart b/lib/model/UserProfile.dart
index ff8b5694..3091344a 100644
--- a/lib/model/UserProfile.dart
+++ b/lib/model/UserProfile.dart
@@ -148,7 +148,7 @@ class UserRole {
static List userRolesToList(Set userRoles) {
List userRolesList;
if (userRoles != null) {
- userRolesList = new List();
+ userRolesList = [];
for (UserRole userRole in userRoles) {
userRolesList.add(userRole.toString());
}
@@ -433,7 +433,7 @@ class UserPiiData {
if (list != null) {
if (uuidList == null) {
- uuidList = List();
+ uuidList = [];
}
if (uuidRegExp == null) {
diff --git a/lib/service/DeepLink.dart b/lib/service/DeepLink.dart
index 96ed4c0c..a800dbb6 100644
--- a/lib/service/DeepLink.dart
+++ b/lib/service/DeepLink.dart
@@ -38,7 +38,7 @@ class DeepLink with Service {
// Differentiate initial uri from updated uri
// Cache uris until UI is displayed
- _urisCache = List();
+ _urisCache = [];
// 1. Initial Uri
getInitialUri().then((uri) {
@@ -46,7 +46,7 @@ class DeepLink with Service {
});
// 2. Updated uri
- getUriLinksStream().listen((Uri uri) async {
+ uriLinkStream.listen((Uri uri) async {
NotificationService().notify(notifyUri, uri);
});
}
diff --git a/lib/service/Exposure.dart b/lib/service/Exposure.dart
index 835a1571..79479c63 100644
--- a/lib/service/Exposure.dart
+++ b/lib/service/Exposure.dart
@@ -331,7 +331,7 @@ class Exposure with Service implements NotificationsListener {
List teks;
List json = await _methodChannel.invokeMethod(_teksMethodName);
if (json != null) {
- teks = [];
+ teks = [];
for (dynamic entry in json) {
ExposureTEK tek;
try { tek = ExposureTEK.fromJson((entry as Map)?.cast()); }
@@ -516,7 +516,7 @@ class Exposure with Service implements NotificationsListener {
List