Git Product home page Git Product logo

swisscovid-app-android's Introduction

SwissCovid Android App


License: MPL 2.0 Android Build

SwissCovid is the official contact tracing app of Switzerland. The app can be installed from the Google Play Store. The app design, UX and implementation was done by Ubique.

Contact tracing

The SwissCovid 2.0 app uses two types of contact tracing to prevent the spread of COVID-19.

With proximity tracing close contacts are detected using the bluetooth technology. For this the DP3T Android SDK is used that builds on top of the Google & Apple Exposure Notifications. This feature is called SwissCovid encounters.

With presence tracing people that are at the same venue at the same time are detected. For this the CrowdNotifier Android SDK is used that provides a secure, decentralized, privacy-preserving presence tracing system. This feature is called SwissCovid Check-in.

Please see the SwissCovid documentation repository for more details.

Contribution Guide

This project is truly open-source and we welcome any feedback on the code regarding both the implementation and security aspects.

Bugs or potential problems should be reported using Github issues. We welcome all pull requests that improve the quality of the source code. Please note that the app will be available with approved translations in English, German, French, Italian, Romansh, Albanian, Bosnian, Croatian, Portuguese, Serbian and Spanish. Pull requests for additional translations currently won't be merged.

Platform independent UX and design discussions should be reported in dp3t-ux-screenflows-ch

Repositories

Installation and Building

The project can be opened with Android Studio 3.6.1 or later or you can build the project with Gradle using

$ ./gradlew assembleProdRelease

The APK is generated under app/build/outputs/apk/prod/release/package-prod-release.apk

The app will not be functional unless your Google account is whitelisted for ExposureNotification testing. Please install the app from the Google PlayStore.

Reproducible builds

To verify that the app distributed on the PlayStore was built by the source code published here, please see the instructions in REPRODUCIBLE_BUILDS.md.

License

This project is licensed under the terms of the MPL 2 license. See the LICENSE file.

swisscovid-app-android's People

Contributors

benz-ubique avatar cgrigis avatar evolvedlight avatar fbzli avatar gallmann-ubique avatar goebelub avatar m-wong avatar maurhofer-ubique avatar michaelpfrey avatar simonroesch avatar ubaggeler avatar ubamrein avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

swisscovid-app-android's Issues

app crashes when clicking the google play services update notification

Bug description

  • The app crashes when clicking the google play services update notification

Info

  • Android 9.0
  • SwissCovid App Version 1.0.3-pilot (Installed by Google Play Store)

Crash stack

 FATAL EXCEPTION: main
 Process: ch.admin.bag.dp3t, PID: 8692
 java.lang.RuntimeException: Unable to start activity ComponentInfo{ch.admin.bag.dp3t/com.google.android.gms.common.api.GoogleApiActivity}: android.content.ActivityNotFoundException: No Activity found to handle null
 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3270)
 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3409)
 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2016)
 	at android.os.Handler.dispatchMessage(Handler.java:107)
 	at android.os.Looper.loop(Looper.java:214)
 	at android.app.ActivityThread.main(ActivityThread.java:7356)
 	at java.lang.reflect.Method.invoke(Native Method)
 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:930)
 Caused by: android.content.ActivityNotFoundException: No Activity found to handle null
 	at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:2051)
 	at android.app.Activity.startIntentSenderForResultInner(Activity.java:5455)
 	at android.app.Activity.startIntentSenderForResult(Activity.java:5421)
 	at android.app.Activity.startIntentSenderForResult(Activity.java:5388)
 	at com.google.android.gms.common.api.GoogleApiActivity.onCreate(com.google.android.gms:play-services-base@@17.2.1:12)
 	at android.app.Activity.performCreate(Activity.java:7802)
 	at android.app.Activity.performCreate(Activity.java:7791)
 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1299)
 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3245)
 	... 11 more

Reproducing video

20200614_214334

Show the number of contacts or any other indication that the app is doing something

The first version of the next-step has shown the number of contacts on the main screen. I used this to show that the app is doing something and to check how many contacts I "created". I would recommend to include this also in the final version of the app. I know that this does not represent the "real" number of contacts, but I think any indication, that something "real" is happening would be very useful.

See also
DP-3T/dp3t-app-android-demo#3
DP-3T/dp3t-sdk-android#89

certificate pinning

currently pinning (class CertificatePinning) is only used within class ConfigRepository ( all https requests should be protected )

Allow for language change in App

Please allow for language change in App
I have my Android OS set to English but I'd prefer to see the content of the App in German.

App goes in and out of the "restart needed" state

I'm using a dev build built from f6b4efb on a Huawei PRA-LX1, Android 8.0.

When it says "restart necessary (NSBAE)", I can almost always make it go back to working by bringing up the notifications panel and clicking the notification.

I do not have adb access to this phone, so I can't do better debugging than that.

Cryptic Error Message when Exposure Notification API is not available

I tried the commit 3dd348c and because by Honor 8X didn't receive the update from Google, I don't have the exposure notification api. When I try to activate the tracing an alert pop up with I think the original error message "17: API: Nearby.Exposure_NOTIFICATION_API is not available on this device. Connection failed with: ...". Maybe it can be good to modify this error message for the user.

No message, if the device does not support ble transmission.

I installed the app on a Samsung SM-T700 tablet, running Android 7.1. (api 25).

The app seems to run without any problems. But the device mentioned is not capable to transmit ble tokens due to missing hard- or firmware. This can easily be verified using an app like 'nRF connect' (on a second device).

Please add a message to clear that situation to the user. There are many moslty older devices out in the field that may have the same problem.

Frequent notifications when Bluetooth intentionally turned off

Issue:

App version 1.0.5 running on android 10. Whenever Bluetooth is intentionally turned off, when being at home for example, the app sends regular notifications (about 7 per day according to the android app info settings) that Bluetooth needs to be turned on in order for tracing to work. At the moment one can mute notifications from the android settings but I assume this would also mute exposure notifications. It seems to me that these notifications are a little bit too frequent and can be distracting at times.

photo_2020-07-02_13-07-33

Proposed Solution:

Adding an option to disable such notifications from the app or reducing the frequency to 1 notification per day for example.

Location / Bluetooth Permissions

Right now there is a lot of confusion whether enabling bluetooth and most importantly location is technically required for contact tracing to work.

See this thread for example, with lots of replies and a lot of confusing and contradicting information: https://twitter.com/adfichter/status/1265552302091403266

From what I understand, the DP-3T Android app uses Google's Exposure Notifications API to detect exposure and does not in any ways interact with the BLE stack.

In the Exposure Notifications API FAQ, it is written:

image

This is reflected in the AndroidManifest:

https://github.com/DP-3T/dp3t-app-android-ch/blob/d87796564efd2cb8fc73e3cb6efb8b75233562a7/app/src/main/AndroidManifest.xml#L14-L15

So the permissions in DP-3T are clear, and no location access will be required. However, the question remains whether the location needs to be enabled at all for SwissCovid to work. The Android developer documentation mentions:

image

So from what I understand, location access is only required to initiate a BLE scan, because that is precisely the way how the location of a user is being estimated. Just having the BLUETOOTH permission does not allow you to determine the location of a user.

So in essence, this boils down to two questions:

  1. Do current Google Exposure Notification APIs require that location services are enabled on the device? (I cannot test this since self-compiled versions of the app do not get access to this API, correct?)
  2. If this is currently required, is there a technical reason why access to the Exposure Notification API (which happens by whitelisting, if I understand this correctly) does not imply a permission to scan for BLE advertisement frames? (After all, even if the Google Exposure Notification stack does perform scans, the app has no access to them and thus cannot determine the user's location.)

Not needing to enable location services would be a big improvement with regards to user trust.

Cross Border usage

I am living near the border to Germany.
Would it be possible to implement a part of the backend of another country to get the validated tested ID's? If this is possible, it would be great for people near the border if you could check the box for neighboring countries to see the corresponding dangers.
You would then only need an app, because I would then have myself tested by my doctor/hospital in Switzerland. If the other countries would offer the same option (to check the databases of the other countries), these people would also be warned in case of a case from me.

Extension proposal

It should be possible to use a main switch on the main screen, e.g. on top right of the title bar.

This main switch causes three events:

  1. on/off of Bluetooth
  2. on/off notifications for this app
  3. activation/deactivation of the tracing.

The existing "Tracing ON/OFF" switch can thus be omitted.

Reasons:
The app is only used in public area and is only useful there.
Due to the app's continuous notifications, you will feel annoyed very quickly at home.
In addition, the power consumption of Bluetooth, despite BLE, is enormous. (SAMSUNG Galaxy Note S10+)

My experience is that the normal average user does not take the trouble or is overwhelmed,
to tap through the settings each time to turn Bluetooth and the notifications off and on again.

Another security aspect that alone justifies a main switch as described above,
In a public space with Bluetooth activated, it is easy for programmers (hackers) to get around with the appropriate software, manipulate other devices, steal personal data or damage the device.

With my expertise, I never move in public areas with Bluetooth activated.
I only switch it on briefly when I need it and then I make sure that nobody is closer than 10 meters from me.

This means that a main switch in SwissCovid would allow the user to deactivate his tracing app in a bus or train after 15 minutes, after he has assessed his position through the app, and if necessary, switch on again at any time...with one click.

Display number of stored encounters (stats about what is stored in the local database)

First off great work ๐Ÿ‘

I was able to download the App from the Play Store yesterday, not sure if this was intended or not.

I like the UI and UX, it is very simple. But what I think would help with transparency is to see the number of datasets stored on my local device. This can also be a little hidden on the info page. For example display the number of current encounters.

This is just an idea and should be simple to be implemented, but it would for sure help me to trust the app more because I can see what it is doing.

Unexpected error "NSBSE" (SCANNER_ERROR) after serveral days running fine

Could be, that this error is caused by LineageOS. If yes, this is more a confirmation, that the app error handling is working.
I got an unexpected error "NSBSE" (BLE_SCANNER_ERROR) with a DEV Debug build of 1.0, 0.2.6 on a OnePlus 5T with LineageOS 16.0 from 21. April 2020.

With logcat I just find:
05-13 17:05:37.610 12916 12932 I WM-WorkerWrapper: Worker result SUCCESS for Work [ id=0a138d07-2cf1-4d07-a121-bb2f0704a9f2, tags={ ch.ubique.android.starsdk.SyncWorker } ]

Permission for "Standort"

Since the app uses BLE, the authorization for the location must be given. According to reviews in the PlayStore, many people uninstall the app because they think that the app needs a lot of energy - because the location and therefore (in the mistaken belief) GPS is enabled.

The first time the app is launched, it should probably display some information about why the location is needed and that it is not the same as GPS. It should also be mentioned that BLE is not equal to Bluetooth (Classic), because many people think: "Other Bluetooth functions don't need location sharing, why do they need it?

Irregular exposure checks

On my Huawei Mate 10 Pro (BLA-L29; Android 10) the apps seems to execute exposure checks very irregularly. It happens only 3 times (July 2nd, 4th and 16th). The check at the 16th July was forced by opening the Covid notification settings in the Android system settings .

Exported exposure checks:
[{"timestamp":"Juli 16, 2020 19:17","keyCount":21,"matchesCount":0,"appName":"SwissCovid","hash":"ychfsT1+dMgTnum4cx6W\/NQucYn81woa6W98Nh4ia0U="},{"timestamp":"Juli 16, 2020 19:17","keyCount":32,"matchesCount":0,"appName":"SwissCovid","hash":"jftAi5ehWSKp6oXzL2yAZHnl7eh3vqB5w3ACElX9Mhw="},{"timestamp":"Juli 16, 2020 19:17","keyCount":44,"matchesCount":0,"appName":"SwissCovid","hash":"Y\/6oOQew2+qCER31kDZpj6nS2Z\/lyDB7YQQUZMZZl7I="},{"timestamp":"Juli 16, 2020 19:17","keyCount":54,"matchesCount":0,"appName":"SwissCovid","hash":"fEAOjHggxN0JlRIHQnV874pRJ6eM0Uw0jux81IVaVTo="},{"timestamp":"Juli 16, 2020 19:17","keyCount":57,"matchesCount":0,"appName":"SwissCovid","hash":"2KCkIYFlOZQJciXuUaFdyL2IDxhu2hlF0Ljv8xolNEc="},{"timestamp":"Juli 16, 2020 19:17","keyCount":52,"matchesCount":0,"appName":"SwissCovid","hash":"RJFKRgOEXEiVyU+Y0YyWVwhjmkoIXhizYbu9D2Afdl0="},{"timestamp":"Juli 16, 2020 19:17","keyCount":52,"matchesCount":0,"appName":"SwissCovid","hash":"FqbUp9KBH4afOR0UUvitD5HtcHKpTI9McABEFVcWV44="},{"timestamp":"Juli 16, 2020 19:17","keyCount":55,"matchesCount":0,"appName":"SwissCovid","hash":"7HO4IWCAoXeRHeCac18uysz+xmVfcE+iWcDMH2LSNWI="},{"timestamp":"Juli 16, 2020 19:17","keyCount":57,"matchesCount":0,"appName":"SwissCovid","hash":"2SP6WyuTEB3qCK1vcOtxki8vAH40Ltaia\/VESNNxHWM="},{"timestamp":"Juli 16, 2020 19:17","keyCount":54,"matchesCount":0,"appName":"SwissCovid","hash":"CoBai+kU1NjdeOiG1aEGoqag+iIbId7+TAGckLfWcDE="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"CW6eJliTeNU7pATrNofKs1iYo5EEjWmwxJKluuRqEAY="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"l6R9u1+24nt2cC4iiGI1Q4l0QBSYLIQ7VN7IzibaUKE="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"3VAfZNAAxVkkJW62tG0np1J+bMaPyXcYF5IDEnGaSYg="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"SYKLYA8cgloD5Nz71aTuA+KwEyaWNJ2MfXBoYo9+ChI="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"ePn6sAGwjY5pSpx7hDkkqhthW\/rfs8BZS2HL0bf9\/M0="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"3Eu+wwho5W9RhQnHxigEmOYq5Tzb91y3laWyR5L6AGU="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"dkmhbwUFeVD1l0Epmp5ZrwuCu3I9xARF5\/Mweyn77\/c="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"zCI+nM5xnJcupAWSqP8anYj3u+zyfVjAauRm+bFVbGQ="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"SJ33qPvm4jmapNE\/AxTJ4HlABYfuV6S5PEZ8qXyNNL8="},{"timestamp":"Juli 2, 2020 19:30","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"D0KDu3WjtUlVBbRNOSykAby2Xx18OYHt5rE6x4CwdyU="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"6MnEiHbBrrE18e7TjLGjJcDBjuQiQHhmXRvMSmkHJg4="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"vRSuzl4lhnw0B\/klElT+dX9OzHOrblJg6W+0bbCuK1k="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"89RxSKm57ts16a0GKz60j12+yOr0wGLYDZoq3eQvAn8="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"hvx30BXFCRKfpuT1yUT4kQHY7VnlrOc470nArSjM6Ho="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"exIksdkplR1sBfA7aFI+V19762HPOfK3HfEXL6fa+Nw="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"el5nsJW5hPqgDVaA63EznyUiM0xqAPCEHRxd5Pnt73c="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"prxBq1odcg0kA62p2prujgoXQdD8kfTlrDhxqeXh5gA="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"m0bjgpO4Xe+Si+BR+i4BdCFQil95nc4cs7IFnNzGy3c="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"Be3pfTtK7\/OV\/Bibt7ixKi8Rm6Cb6mEEpKzW7NFypJA="},{"timestamp":"Juli 4, 2020 19:07","keyCount":0,"matchesCount":0,"appName":"SwissCovid","hash":"Lvuc45ZhuauHPKIrG8DJnZzEAcHTSixWzyFRDiUmD\/g="}]

Background Mode seems to be disabled frequently

On my Xiaomi it looks like the backround mode is disabled frequently. Sometimes it shows me a red error when I open the app, that I need to allow background activity. Not sure it works always as expected, because I need to check that manually. No idea why it comes back, seems to be random, but really frequently (once a day)

"Weekly Update" Notification

Google PlayServices generate a weekly notification with a summary about the exposure tracking during the last week. In most cases this will show "Your smartphone did not find any contact with infected people.". Because this message is not coming from SwissCovid it can be confusing for the users.

We reported this unexpected behaviour to Google. The notification has no impact on the functionality of the app.

Keys stored 14 or 21 days?

The app help mentions that the keys are stored on the device for 21 days (begegnung_detail_faq2_text). The help in the Google COVID-19 exposure notifications however says "14 days".

When, in the app, setting up "allow the app to run in background", it doesn't do it

Phone: oppo Reno (color os)
Issue: app says to let app run in background, and tell it back 15 min after
Root cause: app has been configured to smart background running
Is it an os limitation? May be pushing a message such as "if that message occurs more than once, you'll have to change it manually in setup > search battery > power saver options" (oppo path...) Would be enough

Dosen't work on deGoogled Android

I run LineageOS without Google Services. The application reports, that it needs updated Google Play Sevices to run, which I will not install, since they are closed source and proprietary software.

App unable to function properly after switching to Android 11 beta

Hi DP-3T,

after switching to Android 11 beta 1, the app now constantly sends this Android notification:
"App currently unable to function properly.
It has not been possible to synchronise reports for some time. Please check that your device is connected to the internet. (ASST502)"

Internet works fine, issue occurs no matter if 4G or Wi-Fi is used.
Uninstalling & reinstalling the app or restarting the device does not help.

App version: version 1.0.3-pilot, 0.5.6
Android version: Android 11 beta 1, build RPB1.200504.018
HW: Pixel 3

App cannot be used on open source android variants

Hello,

I compiled and installed the app on my phone running a pure Android Open Source Project (AOSP) OS. Unfortunately after launching the app it turns out that it has a Google Play Services dependency which is a closed source software and not available in AOSP or Lineage OS.
Is there any solution/workaround for open source android users?

Thanks!

fatal crash WindowManager$BadTokenException

Some steps:

  1. go to the google play store by clicking the notification of updating google play services
  2. do not update google play services and go back to SwissCovid
  3. a message shows and indicate some error happens

Info

  • Android 9.0
  • SwissCovid App Version 1.0.3-pilot (Installed by Google Play Store)

Stack trace:

 FATAL EXCEPTION: main
 Process: ch.admin.bag.dp3t, PID: 5480
 android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@e477c90 is not valid; is your activity running?
 	at android.view.ViewRootImpl.setView(ViewRootImpl.java:798)
 	at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
 	at android.app.Dialog.show(Dialog.java:329)
 	at androidx.appcompat.app.AlertDialog$Builder.show(AlertDialog.java:2)
 	at ch.admin.bag.dp3t.onboarding.OnboardingGaenPermissionFragment.lambda$activateGaen$6$OnboardingGaenPermissionFragment(OnboardingGaenPermissionFragment.java:8)
 	at ch.admin.bag.dp3t.onboarding.-$$Lambda$OnboardingGaenPermissionFragment$f6FWUcdwgeIQm3y4Wpr0_QpGNdA.accept(Unknown Source:6)
 	at org.dpppt.android.sdk.DP3T.lambda$start$1(DP3T.java:2)
 	at org.dpppt.android.sdk.-$$Lambda$DP3T$UVi9w5byNHCGNiVf9VXIkFjhUds.accept(Unknown Source:4)
 	at org.dpppt.android.sdk.internal.nearby.GoogleExposureClient.lambda$start$1(GoogleExposureClient.java:10)
 	at org.dpppt.android.sdk.internal.nearby.-$$Lambda$GoogleExposureClient$S_GvBtY43IrGwB3bGO6kWKBQPXg.onFailure(Unknown Source:6)
 	at com.google.android.gms.tasks.zzl.run(com.google.android.gms:play-services-tasks@@17.0.2:8)
 	at android.os.Handler.handleCallback(Handler.java:873)
 	at android.os.Handler.dispatchMessage(Handler.java:99)
 	at com.google.android.gms.internal.tasks.zzb.dispatchMessage(com.google.android.gms:play-services-tasks@@17.0.2:1)
 	at android.os.Looper.loop(Looper.java:193)
 	at android.app.ActivityThread.main(ActivityThread.java:6718)
 	at java.lang.reflect.Method.invoke(Native Method)
 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Another similar stack trace (probably pointing to the same issue):

 FATAL EXCEPTION: main
 Process: ch.admin.bag.dp3t, PID: 2725
 android.view.WindowManager$BadTokenException: Unable to add window -- token android.os.BinderProxy@de870c1 is not valid; is your activity running?
 	at android.view.ViewRootImpl.setView(ViewRootImpl.java:798)
 	at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:356)
 	at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:93)
 	at android.app.Dialog.show(Dialog.java:329)
 	at androidx.appcompat.app.AlertDialog$Builder.show(AlertDialog.java:2)
 	at ch.admin.bag.dp3t.contacts.ContactsFragment.lambda$null$5$ContactsFragment(ContactsFragment.java:8)
 	at ch.admin.bag.dp3t.contacts.-$$Lambda$ContactsFragment$WLiQ3J9D74Mg5Gi8M1uwTrjbJnc.accept(Unknown Source:6)
 	at org.dpppt.android.sdk.DP3T.lambda$start$1(DP3T.java:2)
 	at org.dpppt.android.sdk.-$$Lambda$DP3T$UVi9w5byNHCGNiVf9VXIkFjhUds.accept(Unknown Source:4)
 	at org.dpppt.android.sdk.internal.nearby.GoogleExposureClient.lambda$start$1(GoogleExposureClient.java:10)
 	at org.dpppt.android.sdk.internal.nearby.-$$Lambda$GoogleExposureClient$S_GvBtY43IrGwB3bGO6kWKBQPXg.onFailure(Unknown Source:6)
 	at com.google.android.gms.tasks.zzl.run(com.google.android.gms:play-services-tasks@@17.0.2:8)
 	at android.os.Handler.handleCallback(Handler.java:873)
 	at android.os.Handler.dispatchMessage(Handler.java:99)
 	at com.google.android.gms.internal.tasks.zzb.dispatchMessage(com.google.android.gms:play-services-tasks@@17.0.2:1)
 	at android.os.Looper.loop(Looper.java:193)
 	at android.app.ActivityThread.main(ActivityThread.java:6718)
 	at java.lang.reflect.Method.invoke(Native Method)
 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

Description could lead to missunderstandings

DP-3T is a free-standing effort started at EPFL and ETHZ that produced this protocol and that is implementing it in an open-sourced app and server.

What Server? The App works decentralized.
Uhm, right?

Reproducible build failure to reproduce!

I downloaded the apk from here:

https://www.apkmirror.com/apk/federal-office-of-public-health-foph/swisscovid/swisscovid-1-0-5-release/swisscovid-1-0-5-android-apk-download/

I followed instructions https://github.com/DP-3T/dp3t-app-android-ch/blob/master/REPRODUCIBLE_BUILDS.md

$ git status
HEAD detached at 1.0.5
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	swisscovid-built.apk

nothing added to commit but untracked files present (use "git add" to track)

I used this:

user@debian:~/dp3t-app-android-ch$ docker run --rm -v ~/dp3t-app-android-ch:/home/swisscovid -w /home/swisscovid swisscovid-builder gradle assembleProdRelease -PkeystorePassword=securePassword -PkeyAliasPassword=securePassword -PkeystoreFile=build.keystore -PbuildTimestamp=1592520999206
...
BUILD SUCCESSFUL in 1m 16s
26 actionable tasks: 26 executed
user@debian:~/dp3t-app-android-ch$ cp -iv app/build/outputs/apk/prod/release/app-prod-release.apk swisscovid-built.apk
'app/build/outputs/apk/prod/release/app-prod-release.apk' -> 'swisscovid-built.apk'
user@debian:~/dp3t-app-android-ch$

to build the apk.

user@debian:~/dp3t-app-android-ch$ sha256sum swisscovid-built.apk ~/Downloads/ch.admin.bag.dp3t_1.0.5-10050_minAPI23\(nodpi\)_apkmirror.com.apk 
0f45d83fbd6d077040f35e6b6eefe85d1c77fa290b72c506b5d8eea3e2febc66  swisscovid-built.apk
e0336a6e38e0a6c0b42bcd50c3995a2305dfe44e0e7042bfb8d9e06cb4561fce  /home/user/Downloads/ch.admin.bag.dp3t_1.0.5-10050_minAPI23(nodpi)_apkmirror.com.apk
user@debian:~/dp3t-app-android-ch$ python3 apkdiff.py ./swisscovid-built.apk ~/Downloads/ch.admin.bag.dp3t_1.0.5-10050_minAPI23\(nodpi\)_apkmirror.com.apk 
APK file res/drawable-ldpi-v4/ill_prinzip.png does not match
APKs are different!

Offending file.

From this repo (build via docker):

ill_prinzip

From apkmirror:

ill_prinzip

user@debian:~$ ls -l from-*/ill_prinzip.png 
-rw-r--r-- 1 user user 10511 Dec 31  1979 from-apkmirror/ill_prinzip.png
-rw-r--r-- 1 user user 10513 Dec 31  1979 from-docker/ill_prinzip.png
user@debian:~$ sha256sum from-*/ill_prinzip.png 
8e08919a3f56ed9af98c9747daa256e34ecc2b1af8654afee20d78ed189bd708  from-apkmirror/ill_prinzip.png
d6603367eadb7c58be9bacdb8ff5f05d728733ef07dd9c175114ba8ff6749abf  from-docker/ill_prinzip.png
user@debian:~$ file from-*/ill_prinzip.png 
from-apkmirror/ill_prinzip.png: PNG image data, 244 x 135, 8-bit/color RGBA, non-interlaced
from-docker/ill_prinzip.png:    PNG image data, 244 x 135, 8-bit/color RGBA, non-interlaced
user@debian:~$ cmp from-*/ill_prinzip.png
from-apkmirror/ill_prinzip.png from-docker/ill_prinzip.png differ: byte 37, line 3
user@debian:~$ diff -y <(hd from-docker/ill_prinzip.png) <(hd from-apkmirror/ill_prinzip.png) | head -20
00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |	00000000  89 50 4e 47 0d 0a 1a 0a  00 00 00 0d 49 48 44 52  |
00000010  00 00 00 f4 00 00 00 87  08 06 00 00 00 21 99 74  |	00000010  00 00 00 f4 00 00 00 87  08 06 00 00 00 21 99 74  |
00000020  91 00 00 28 d8 49 44 41  54 78 da ed 9d 09 5c 14  | |	00000020  91 00 00 28 d6 49 44 41  54 78 da ed 9d 09 5c 14  |
00000030  57 b6 f0 67 c9 37 93 99  2f 99 e4 65 9c 37 79 13  | |	00000030  67 96 c0 27 33 d9 99 cc  6c 32 71 33 ce 4e 76 62  |
00000040  f3 9e df 9b cc 97 8c 0b  e0 be 01 16 bb b2 0b 36  | |	00000040  76 dd 9d cc 26 e3 01 a8  f1 06 2c 6e e5 16 6c 40  |
00000050  20 8a 34 dd 80 ac 22 a2  71 4d 24 ae d1 8c 1a f5  | |	00000050  14 69 ba 01 39 45 44 e3  99 48 3c 62 d4 51 a3 ae  |
00000060  b9 a2 74 83 5b c4 2d 8a  8a 6b 88 0b 34 0a 0a 8a  | |	00000060  27 4a 37 78 45 bc a2 a8  78 86 78 40 a3 a0 a0 48  |
00000070  44 10 14 b7 b8 27 4a cc  62 e2 64 ee bb a7 ba ab  | |	00000070  04 41 f1 8a c6 23 51 62  0e 13 27 f3 ed f7 aa bb  |
00000080  a9 ae ae ae ae ea 8d 06  ee f9 fd ce 0f e8 2e 9a  | |	00000080  9a ea ea ea ea aa be 68  e0 7b bf df fb 01 dd 45  |
00000090  a6 fa fe eb 2c f7 9c 53  bf f8 05 91 36 97 c7 8f  | |	00000090  d3 54 7f ff 7a c7 f7 de  ab 5f fc 82 48 9b cb a3  |
000000a0  1f bf da d2 d2 92 f5 cd  37 df 94 60 bd 8c b5 19  | |	000000a0  47 8f ba b4 b4 b4 64 7d  f3 cd 37 25 58 2f 63 6d  |
000000b0  6b 25 d6 bc 27 4f 9e f4  23 67 88 08 91 76 22 4f  | |	000000b0  c6 5a 89 35 ef f1 e3 c7  6f 93 33 44 84 48 3b 91  |
000000c0  9f 3e 8d c4 e0 3e c4 8a  04 b4 e4 db 6f bf 7d 9d  | |	000000c0  27 4f 9e 44 62 70 1f 60  45 02 5a f2 ed b7 df be  |
000000d0  9c 2d 22 44 9c 58 30 a8  0b cd 80 cc d6 bb 18 fe  | |	000000d0  4a ce 16 11 22 4e 2c 18  d4 05 66 40 66 eb 5d 0c  |
000000e0  9e e4 ac 11 21 e2 9c 30  2b 25 c0 cc e8 2d 70 cf  | |	000000e0  7f 2f 72 d6 88 10 71 4e  98 95 12 60 66 f4 16 b8  |
000000f0  c9 d9 23 42 c4 c9 62 66  0c e7 63 b1 10 eb 62 ea  | |	000000f0  e7 e4 ec 11 21 e2 64 31  33 86 f3 91 58 88 75 31  |
00000100  46 ac a5 70 21 20 67 90  08 11 e7 02 ba 1b 06 33  | |	00000100  75 23 d6 52 b8 10 90 33  48 84 88 73 01 dd 1d 83  |
00000110  1e 14 c7 c6 3e d8 95 a6  5a 5a 5a 06 c1 e3 3a 25  | |	00000110  19 0f 8a 63 63 1f ec 4a  53 2d 2d 2d 83 e0 71 9d  |
00000120  56 98 08 11 22 44 88 10  21 42 84 08 11 22 44 88  | |	00000120  12 2b 4c 84 08 11 22 44  88 10 21 42 84 08 11 22  |
00000130  10 21 42 84 08 11 22 44  88 10 21 42 a4 f3 09 54  | |	00000130  44 88 10 21 42 84 08 11  22 44 88 10 21 d2 f9 04  |
user@debian:~$

The screenshot below is from Google Play installed version:

Screenshot_20200628-074340

Country restriction on Google Play store

Pilot phase testing is hindered by restriction of Google Play country. Many researchers at EPFL/ETHZ use non-swiss accounts. Countries can be only changed once a year. Also, access to existing Google Play balance is removed by chaging the country. Therefore, a significant number of potential testers will not change their country settings. To include these persons into the pilot phase testing, the country restriction should be removed.

Give information that the system really works by providing some statistics

Currently, all you see is tat the app tells you that it is "aktiv". It would be nice to have some information about:

  • Last sync from central server
  • How many foreign tokens the device has seen or local has been saved for yesterday/the last 7 days/14 days

That would help get a sense of how many contacts you have.

A never do is:

  • Display this data immediately updated. Reason: You might find out if a person next to you is using the app or not.

Mistake in communicating how information is passed around

The model DPIA commissioned by the DP-3T consortium says quite explicitly that the beacon data transferred by one user to another should be treated as sensitive personal data (p 17).

Screenshot 2020-06-04 at 21 20 24

One the other hand, the interface communicates in a few places that different processing operations are "anonymous". See for instance here.

Anonymous data has a specific meaning in EU data protection law, i.e. data that is not re-identifiable, and therefore not considered personal data.

Again, the model DPIA states that it is generally understood that what constitutes personal data is the same in Swiss and European law.

Screenshot 2020-06-04 at 21 25 33

We see that there is thus a clash, between how the app presents what it does, and what it actually does from a legal standpoint, as interpreted by the lawyers hired by the DP-3T collaboration.

Additionally, this might be problematic in the future, if indeed the goal is to guarantee interoperability. A user operating the Swiss app in Italy would be misled by the current interface. One might argue that it would be ok, as the app could be updated, but I don't see how this would be done given EphIDs are stored for a while. Additionally this might lead to problems in case of multiple apps being installed on the same device.

The remedial is actually fairly simple: substitute "pseudonymously" for any current occurrence of "anonymously", since this would be more reflective of what is done, and the actual risk of re-identification (which underpinned the legal advice in the first place).

0 keys displayed in "Exposure checks" menu

On some Android devices all entries on Settings > Google > COVID-19 Notifications > Exposure checks show "Number of keys: 0" and "Number of matches: 0".
image
This is not a bug of the SwissCovid app but of the ExposureNotification framework provided by Google. The bug was reported to Google and will be fixed with a future version of the framework. The behaviour of the app is not affected, the bug only affects the number show in the "Exposure checks" menu, the checks are performed normally with all provided keys.

English language and consistency errors in GUI

English language and consistency errors in GUI.
Observed in v1.0.7 and also in earlier versons.

In English, SwissCovid shows the following at the bottom of the first page on the GUI

"What to do if...
Symptoms of the disease"

(Note that this is not a correct sentence. It is incomplete.)

"What to do if...
you test positive"

(Note that this is a correct and complete sentence)

Following each link reveals
CORRECT:
"What to do if...you test positive" takes you to a page with the same title "What to do if ... you test positive?"
The text "What to do if you test positive?" is a proper question and takes you to a page of the same name. Consistent and correct

INCORRECT:
"What to do if...Symptoms of the disease" takes you to a page with the title "What to do if ... I feel ill?"
The text "What to do if...Symptoms of the disease" is not a proper sentence.
It takes you to a page with a different title ("What to do if ... I feel ill?").
The link name and the following page title are not consistent.
Additionally, it is written in first person (I), whereas the other link/page "What to do if...you test positive" is written in second person (you).

POTENTIAL FIXES
Examples to create consistency and fix the English are:

Example 1:
The first page text could be changed to:
"What to do if...
I feel ill?"

Then the link name and following page are consistent, and in first person

Example 2:
Both the link and following page could be changed to
"What to do if...
I have symptoms of the disease?"

Then the link name and following page are consistent, and in first person.

Example 3:
Both the link and following page could be changed from first person to second person perspective:
"What to do if...
You have symptoms of the disease?"

Then the link name and following page are consistent, and in second person, thus consistent with the "person.

An unexpected error occurred when synchronising the notifications (AGAEN10.-2)

The error header is "no current data". I had mobile data disabled yesterday, so I assume the error is due to not having data connectivity. That should be an expected error with a user-friendly warning that the app requires a data connection (or even better: cache announcements for some time and only display a warning about missing data connection if no connection could be established in say the last 12h or something). In addition the error doesn't disappear once connection is regained, I need to manually stop the app and restart it for the error to disappear.

Edit: Turns out it was something completely different: I had the same error again while having data. At the same time I got a system notification about running out of space on the internal partition. Still would be nice if there was a less cryptid/more user friendly error about this.

Cannot activate tracing on Google Piexl 3 XL

I cannot activate tracing on a Google Pixel 3 XL phone. I saw simliar issues #51, but mine is reported with a totally different StatusCode.

Detailed info:

  • Google Pixel 3 XL
  • Android Version 9
  • SwissCovid App Version 1.0.3-pilot (Installed by Google Play Store)
  • Output of the command adb shell dumpsys activity provider - com.google.android.gms.chimera.container.GmsModuleProvider | grep 'nearby_en': com.google.android.gms.nearby_en [v201817000]
  • Play Services 20.18.17
  • StatusCode: 39503

Screenshot:

Screenshot_20200614-211231

17: API: Nearby.EXPOSURE_NOTIFICATION_API is not avaliabe on this device.

Hello there.
I wanted to install the SwissCovid app on my Honor 6x (Android 8.0.0, EMUI 8.0.0) but I got this Error:
17: API: Nearby.EXPOSURE_NOTIFICATION_API is not available on this device. and below:
Connection failed with: ConnectionResult{statusCode=UNKOWN_ERROR_CODE(39501), resolution=null, message=null}
The Google PlayStore is Version 20.5.19-all [0] [PR] 316024227
Bluetooth is activated and I tried to reinstall the application.
Anybody knows what's happening?

Covidcode field slightly too large in inform screen

Hi DP-3T team!

Nice work for a first draft version!
I found the following issue on my phone: the left and right sides of the input field in the fragment_inform screen are slightly cut (the left border is missing on the first digit and the right border is missing on the last digit). See attached screenshots.

Device: Motorola Moto G9
Android Version 9
Display size: 1080x2160

Screenshot_20200504-122824
Screenshot_20200504-122849

proximitx tracing remains deactivated

Why?
ios 13.5.1 iphone 6s. bluetooth on. SwissCovid app installed.

ios menu > privacy > bluetooth (/ health) COVID-19 Exposure logging > Off. Not available in your region. ......

note: apple id & handset region is set to switzerland. handy nummer ch.

Synchronising report error (AGAEN39508)

I have installed the SwissCovid app 1,5 week ago on my Android phone (Samsung A40, Android version 10). However, I am constantly getting an error message "An unexpected error has occurred while synchronising reports (AGAEN39508)" (see screenshot). I already tried uninstalling-reinstalling the app, but the error persisted.

Screenshot_20200614-101946_SwissCovid

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.