Giter Club home page Giter Club logo

covid-green-app's Introduction

Getting Started

Following these instructions will allow you to run and build the project on your local machine for development and testing purposes.

Currently, Google / Apple are only making the ENS entitlement (GAEN API) required by this application to function available to one app per country / state and the account has to be associated with the government or public health authority. It's not currently possible for individual developers to have this entitlement enabled on their accounts. See https://www.google.com/covid19/exposurenotifications/ and https://developer.apple.com/contact/request/download/Exposure_Notification_Addendum.pdf for details. The Linux Foundation Public Health Project provides a template that may be used to start the process of requesting entitlement.

Prerequisites

Follow the official guide "Setting up the development environment" to set up your local machine to develop iOS and Android applications with React Native.

Install an Xcode version that supports iOS 13.5, required by the ExposureNotification framework used by the app. The Exposure Notification capability is not yet available in iOS 14 beta (last beta published: beta 2).

Install yarn globally:

npm install -g yarn

For other installation methods, follow the official Installation guide.

Installing

Clone this repository.

Install the npm dependencies:

yarn install

Create your .env file or copy it from the .env.sample:

cp .env.sample .env

Move to ios/ folder and install the CocoaPods dependencies:

cd ios && pod install

Running the applications locally

Running the app in a simulator

Start the React Native bundler:

yarn start

To start the Android application, run:

yarn android

To start the iOS one, run:

yarn ios

Adding and optimizing icons

Any new SVG icons which are included within assets/icons should be optimized with npm run optimize:svg.

Translations

There are import and export scripts located in translations-script. These can be run with npm run translations:import and npm run:translations:export. The output file(output.xlsx) is output in the translations-script directory.

The import script expects an input.xlsx file to be located in the translations-script directory.

Creating a test/beta build

Install fastlane

bundle install

Build for iOS

In order to build, sign, and upload your app to TestFlight, you need to have configured a provisioning profile (with the Exposure Notification entitlement) and added a signing key to your Keychain.

Copy and then customize the dotenv file with your developer account information:

cd ios
cp .env.default.sample .env.default

Use fastlane to build the app and upload it to TestFlight:

cd ios
fastlane beta

This command will increment the build number. It will not change the app version. That must be done in the project settings manually.

Build for Android

In order to build, sign, and upload your app to an internal test track, you need to have configured an app in the Play console that has been enabled for the Exposure Notification API, and installed an upload key and API access key locally. You will also need to know the keystore and key passwords.

Copy and then customize the dotenv file with your signing information:

cd android
cp .env.default.sample .env.default

Use fastlane to build the app and push it to a draft Internal Test Track:

cd android
fastlane internal

This command will increment the build number. It will not change the app version. That must be done in the project settings manually.

Team

Lead Maintainers

Core Team

Contributors

Past Contributors

  • TBD
  • TBD

Hosted By

Linux Foundation Public Health

Acknowledgements

License

Copyright (c) 2020 HSEIreland Copyright (c) The COVID Green Contributors

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

[http://www.apache.org/licenses/LICENSE-2.0](http://www.apache.org/licenses/LICENSE-2.0)

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

covid-green-app's People

Contributors

alansl avatar colmharte avatar dharding avatar johnagill avatar ckiss avatar shaunbaker avatar floridemai avatar segfault avatar helloantoine avatar jasnell avatar jh3y avatar dankohn avatar hizo avatar andreaforni avatar jackmurdoch avatar bre7 avatar

Stargazers

Dara Adib avatar  avatar Jake Brown avatar Bob Vants avatar  avatar  avatar

Watchers

James Cloos avatar Denise Dresbach avatar

Forkers

krnl-panic

covid-green-app's Issues

DOH UAT - County Selection Causes Fatal App Crash (CRITICAL)

Build: 1.0.0 (13)
OS: Both iOS and Android

When toggling to the different county charts on the NY COVID Data screen for the counties Warren, Washington, Westchester, Wyoming and Yates, the app crashes completely. Attempts to restart app are met with a blank purple screen (Android), and a blank white screen (iOS). Restart of device did not fix. Uninstalling and redownloading the app was needed to return back to normal functionality. Clearing data from the Android Settings menu for the COVID app also allowed it to start again, but in default state. Clearing only the cached data from the Android Settings menu for the COVID app did not fix the issue.

DOH UAT - Can Log Multiple My Health Logs on Same Day (HIGH)

Build: 1.0.0 (13)
OS: Android

Android: Replicated by pressing 'I am feeling well today' then using the Back function of the Android device to return to the entry and pressing 'I am feeling well today'. Can be done multiple times and also with symptoms as long as 'Done' is not pressed on the next screen. Screenshot added.

iOS: You can also enter multiple logs. If you select "I am feeling well today" then swipe the screen from left to right to go back, it will allow you to enter another log for the same day and saves multiple logs.

Multiple My Health Log

Integrate Firebase Remote Config

In order to be able to update the configuration of the app without releasing a new build to the app stores, we want to integrate with remote config. The app should fetch the latest remote config upon launch as well as when the app comes to the foreground.

Implement Health Log

A user should be able to answer optional demographic questions and then daily answer the "My Health Today" symptoms.

If only 1 of the first 7 symptoms is selected (Fatigue -> Diarrhea), the user is shown a "low risk" version of the screen. If any of the last 4 symptoms (Fever -> New loss..) or more than one symptoms overall are selected, a "high risk" version of the screen is presented. This is documented in the flow below:

https://miro.com/app/board/o9J_kogLK_M=/?moveToWidget=3074457349247704214&cot=13

Android App Crashes When Submitting Exposure Keys (CRITICAL)

The Android version of the app crashes when trying to share exposure keys.

Platform: Android
Build: 13

Error:

AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
Process: gov.ny.health.proximity, PID: 19935
AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference
AndroidRuntime: 	at android.util.Base64.decode(Base64.java:119)
AndroidRuntime: 	at com.rajivshah.safetynet.RNGoogleSafetyNetModule.stringToBytes(Unknown Source:1)
AndroidRuntime: 	at com.rajivshah.safetynet.RNGoogleSafetyNetModule.sendAttestationRequest(Unknown Source:0)
AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
AndroidRuntime: 	at com.facebook.react.bridge.JavaMethodWrapper.invoke(Unknown Source:149)
AndroidRuntime: 	at com.facebook.react.bridge.JavaModuleWrapper.invoke(Unknown Source:21)
AndroidRuntime: 	at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:883)
AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:100)
AndroidRuntime: 	at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(Unknown Source:0)
AndroidRuntime: 	at android.os.Looper.loop(Looper.java:214)
AndroidRuntime: 	at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(Unknown Source:37)
AndroidRuntime: 	at java.lang.Thread.run(Thread.java:919)

Steps to reproduce:

  1. Complete the onboarding normally
  2. Go to the "My COVID Alerts" tab
  3. Tap on "What to do if you test positive COVID-19"
  4. Tap on "Share your Close Contact Codes"
  5. Enter any code
  6. Tap the "Next" button
  7. App will either crash at this point or after you allow Android to share your keys (depending on if you have allowed this successfully before)

Share Icon and Text Incorrect

iPhone X, iOS 13.6, text size set to 3rd stop from the left, TestFlight build 1.0.0 (4)

Scope: Onboarding Screens

Issue: When you click on the Share Icon, or the button to Share the App, the icon and associated text on the iOS screen are incorrect. Should display the NYS COVID App icon and text. See attached screenshot.
Share Icon

Improve Translation Import/Export

We currently have some simple script to import and export text content for the app in various languages.

As discussed in #32 this issue collects the improvements to be implemented.

  • Make the import/export scripts DRY
  • Make the import/export scripts not dependant on hardcoded language definitions (eg read from spreadsheet columns/files in directory)

Content needs translation

@kevin-sheldon , can you kindly get the following content translated in the columns it is in? If possible this should be translated in the same file. If you need to break it up into smaller sheets, your call, but if the app changes and the number of labels changes, we'll have a lot of trouble mapping it back. It would be best if the translators can do their translations and put them in directly in the correct cells. Please ask the translators to use the InVision prototype to obtain context. Our goal would be to replace as much of the Google translations to be manually translated as possible. Also, maybe mark each cell's background green so that we can easily keep track of which cells are done and which aren't? Thank you.

https://docs.google.com/spreadsheets/d/1yxC3TaVjPuXtbHp7qWEG0t_7UZUQ7nOvWvxAQ5It5us/edit?ts=5f3cf952#gid=149430619

@colmharte can you kindly double-check that this is the most up-to-date set of labels? If the labels are changed, we need to carefully merge it into this file. If we can pull in the content from this file mid-week so we can test some of the manual translations, that'd be great.

Integrate codepush

In order to update the app bundle without a new app store build for critical/timely updates, we should integrate with codepush and write a script to generate targeted codepush bundles.

Allow tel: links to be defined in Markdown

Follows on from #47

Where Markdown copy describes a telephone number, it'd be useful to be able to define that in the Markdown so that it is rendered in the app as a pressable telephone number link.

Close icon requires 2 or 3 taps

Close icon on top left of most overlays is not usable. Requires many, indeterminate number of taps before it activates. You can see this in "How It Works" and any of the Health Log selectors.

DOH UAT - Enhancement - Ability to Edit My Health Log for Current Day

Will check with DOH business stakeholders, but submitting enhancement idea to allow for an individual to edit the My Health Log entry for current day only.

Business Use Case: I enter at 7am that I have no symptoms, but by 4pm same day, I develop Fever, Cough, and other symptoms. Should I have the ability to edit my entry for the day and based on edited results, be presented with the correct result screen.

Update README.md to describe TEST_TOKEN

The verification process while in the simulator requires a TEST_TOKEN to be defined in the .env file because the DeviceCheck API does not work. Update the README.md to expain this.

DOH UAT - Clicking "Device Settings" to Enable EN Does Not Bring You to Appropriate Settings Screen (HIGH)

iOS 13.6
Build: 1.0.0 (13)

If you click on "Device Settings" to enable Exposure Notifications, it just brings you to the main iOS settings page. It should bring you directly to the settings screen to enable EN (Settings > Privacy > Health). If the user tries to enable or re-enable EN after the onboarding process, they will not know how to get to the screen to enable if it just brings them to the main iOS settings page.
DeviceSettings_1
DeviceSettings_2

DOH UAT - My COVID Alerts "Setup" Button Not Working to Enable Closeness Sensing (HIGH)

iOS 13.6
iPhone XS Max
Build: 1.0.0 (13)

If you skip onboarding process ("Skip for now" button) and do not enable Exposure Notifications, the "Setup" button does not work to allow you to enable Exposure Notifications at a later time. If you then try to enable My COVID Alerts via the Settings option, there is no option to enable Exposure Notifications.

MYCOVIDALERT_1

MYCOVIDALERT_2

MYCOVIDALERT_3

Refactor BUILD_VERSION

In order to avoid having to remember to update the build/marketing version of the app in multiple places, we should refactor how we set the version to be set in a single place and then referenced in all appropriate places (e.g. build.gradle, xcode project, app version display).

Define a list of test devices

As part of the AWS Device Farm configuration, we will need to define a list of devices, both Android and iOS-based, upon which our tests will be executed. I have reached out to Apple for any information they have regarding the number and types of iPhones in NYS. The Android devices would be so varied that we would be better off selecting a representative set across the most popular manufacturers and screen sizes.

Integrate CircleCI

We are planning to use github actions to trigger a CircleCI build (and test suite run, under another ticket).

DOH UAT - "Find a Site Near You" URL Not Correct (HIGH)

Build: 1.0.0 (13)
OS: Both iOS and Android

Within My Health Log, when you log enough qualifying symptoms, and you are brought to the screen with the "Find a Site Near You" link, the link brings you to google.ro instead of the appropriate provider page.

Select a CI/CD Solution Including Automated Testing

We would like to automate builds for iOS and Android, run automated tests on real devices, and push passing builds to their respective store platforms for approval/review using a complete CI/CD solution.

  • Document options for CI/CD solutions
  • Document options for automated testing
  • Select build solution
  • Select automated testing solution

Change the name of the app from "COVID Smart NY" to "COVID Alert NY"

Kindly change "COVID Smart NY" to "COVID Alert NY" in:

  1. the app and prototype visuals
  2. all references in the copy of the app, and

Assigning to @stuartgiles as the first step. Stuart, NYS requested we archive the current artwork so we don't lose it entirely if a future comparison has to be made. Also, can we kindly make the changes to the InVision prototype as well after you take care of the app itself? We still have a number of eye-balls on this and leaving InVision unchanged will cause a ton of confusion.

Thank you.

DOH UAT - Allowed to Put "Placeholder" Text in My Health Log Overlay (LOW)

Build: 1.0.0 (13)
OS: Android

When using the search function in the My Health Log county picker, user was able to put in any text then hit the "X" button and the text still remained on the screen. User couldn't save entries though, likely because the word entered wasn't a valid county. This issue does not seem to exist on iOS.

Placeholder

Spanish translation isn't hooked up

Spanish translation isn't hooked up. It's in the spreadsheet as an auto-translation for now and so at least that should work prior to manual translations being available.

Translations to languages other than Russian and Chinese are not functioning

Translations are not working. For example, here are the translations for the "Back" button:

navbar.back | Back | Retounen | назад | পেছনে | 뒤 | 背部 | Espalda |

If you just stay on the "My Language" page and switch to the first two languages after "English", the "Back" label does change. But if you go to the 4th language onwards ("Kreyol ayisyen"/Haitian Creole), the label switches back to the Russian version (lang #2, назад). If you navigate out, you will see that all the labels remain in Russian instead of translating to the specified language. Spanish maps back to English.

Please fix to include at least Google translations of these languages while we obtain manual translations. Thank you.

Inconsistent behavior when Bluetooth is disabled (Android and iOS)

Repro steps:

  • complete on-boarding flow, consenting to both EN and push notifications.
  • land on app in "ready" state
  • background the app
  • turn off Bluetooth
    ==> On Android this triggers a push notification. On foregrounding the app, both platforms I see the app continues to report it is in the "contact tracing active" state.
    ==> On iOS I do not get a push notification. On my installation, the app indicates it is still tracing. My colleague's app does not present a push notification, but DOES indicate tracing is not happening and prompts the user to enable bluetooth.

Another tweak on this flow (I am seeing this behavior on iOS and Android):

  • turn off Bluetooth
  • then complete the onboarding.
    ==> I was expecting the app to turn on Bluetooth for me, or maybe prompt to tell me this is what it would do. It does neither for me. The app reports is it contact tracing.

Devices used: iPhone 11 Max Pro running 13.6; Pixel 4 XL running Android 10

Need internal jump menu

For QC purposes, we need an "internal" menu to jump to the screens/states that are otherwise inaccessible, such as proximity alerts, positive cases, error conditions, etc.

DOH UAT - My Health Log Not Saving If You Close App (HIGH)

Build 1.0.0 (13)
Tested on both iOS and Android

If you submit your responses for My Health Log for the day, and close out of the app (not delete, but full app close) then restart, the current submission deletes and user is forced to start over again.

Configure APNS Entitlement for iOS builds

The current project setup does not include an APNS entitlement. This can be added, but I do not want to add it unless we are actually planning to use remote push notifications in the NY app. Until that time, App Store Connect will send a warning for all uploaded builds that the app uses APNS but does not have the entitlement. You can ignore this for internal TestFlight builds for the time being.

Failure to register inaccurately indicates that the user is offline

If for some reason the register call fails (e.g. iOS version does not support DeviceCheck, the app is running in the iOS simulator without a TEST_TOKEN, other network related issue with the API call) the app displays an error indicating that the device has a connection issue. This will lead to a user being confused and checking their internet settings.

The error should be related to the actual problem.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.