Skip to content

Fighting against COVID-19 via privacy-first Bluetooth tracing

License

Notifications You must be signed in to change notification settings

lucab85/erouska-android

 
 

Repository files navigation

erouska-android

Read our FAQ (Czech only)

eRouška (rouška = face mask in Czech) helps to fight against COVID-19.

eRouška uses Bluetooth to scan the area around the device for other eRouška users and saves the data of these encounters.

When an eRouška user tests positive for COVID-19, the user is contacted by a healthcare authority and is asked to upload the data to create a map of potential secondary infections.

The healthcare authorities then analyse the data and contact the possibly newly infected for further measures (quarantine, testing).

The App is registered with a phone number. The phone numbers are available only for the healthcare authorities.

How do we protect the user's privacy?

  • User can remove all collected data, including the phone number.
  • All data are saved locally on the user's device. Data are uploaded only with the user's consent after a healthcare authority's request.
  • The scanning can be turned off manually at any time.
  • The broadcasted Device ID is changed every hour, so a user cannot be tracked with it. (Only our backend has a knowledge of which Device ID's correspond to which phone number.)
  • The data are kept on backend for 6 hours, then deleted.
  • eRouška is developed open-source from day one.

Who is developing eRouška?

We are an initiative consisting of people from various Czech IT companies and volunteers called COVID19CZ. We are all unpaid volunteers.

The development was subsequently approved by Czech Ministry of Healthcare.

International cooperation

We are open-source from day one and we will be happy to work with people in other countries if they want to develop a similar app. Contact David Vávra for technical details.

We got inspired by similar apps in other countries:

Technical details

eRouška uses:

  • Bluetooth Low Energy (BLE)

  • Firebase Phone Number Authentication for phone number verification and authentication

  • Firebase Storage for uploading the collected user data in CSV format

  • Firebase Functions for getting the Device ID's to broadcast after registration

  • Firebase Crashlytics for App crash monitoring

  • For Android <-> Android Bluetooth connection, the App doesn't need to connect to the other device as the Device ID is broadcasted in the broadcast payload.

  • For Android <-> iOS Bluetooth connection, the App needs to connect to the iOS device via GATT to get the Device ID.

More details about eRouška:

Building the App from the source code

Clone this repository and import the project into Android Studio. Make sure you have JDK 8.

Run: ./gradlew assembleDevDebug

Contributing

We are happy to accept pull requests! See Git Workflow.

If you want to become a more permanent part of the team, join our Slack, channel #erouska.

We use a private Trello for bug tracking, contact us on Slack.

Translations

Help us translate to your language or if you see a problem with translation, fix it. Our translation is open to volunteers at OneSky.

Because our app is for Czechia, our primary language is Czech. But we have most of the app translated to English.

Git workflow

  • Work in a fork then send a pull request to the develop branch.
  • Pull requests are merged with squash commits.
  • Admins rebase develop to master using the script below. This triggers a release build.

eRouška release process

eRouška uses GitHub Actions. A push to master branch triggers an App build. Then the App is published to Firebase App Distribution.

There are two variants of the App: DEV and PROD. PROD is also built as an App Bundle artefact, that needs to be manually uploaded to Google Play.

Versioning is automatic: major and minor version is in Git, patch is versionCode (a number of commits from the start).

Release is done by executing the release.sh script. Right click it on Android Studio and hit Run 'release.sh' or execute via command line. If it fails, it fails. Most likely your master has different history from origin. That should never be the case, so you should fix it.

Automation support

As was proposed in #149, the app now supports controlling from other apps by sending broadcasted intents.
In your favorite automation app (Automate, Tasker, MacroDroid, ...) it should be enough to use an intent broadcast with these params:

Name Value
Package cz.covid19cz.erouska
Receiver/class cz.covid19cz.erouska.receiver.ActionsReceiver
Action cz.covid19cz.erouska.EROUSKA_PAUSE/cz.covid19cz.erouska.EROUSKA_RESUME

About

Fighting against COVID-19 via privacy-first Bluetooth tracing

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Kotlin 99.0%
  • Other 1.0%