corona-warn-app / cwa-app-android

Native Android app using the Apple/Google exposure notification API. The CWA development ends on May 31, 2023. You still can warn other users until April 30, 2023. More information:
https://coronawarn.app/en/faq/#ramp_down
Apache License 2.0
2.44k stars 495 forks source link

Risiko-Ermittlung zeigt falsches Datum/aktualisiert nicht mehr nachdem Systemdatum verstellt wurde. #3629

Closed hd42 closed 2 years ago

hd42 commented 3 years ago

Avoid duplicates

Technical details

Describe the bug

Meine Frau und ich hatten am gleichen Tag die Impfung, aber unterschiedliche Anzeigen wie lange es noch bis zur vollständigen Impfung dauerte (ich hatte noch Version 2.4.2, das war wohl der Grund). Bei der Suche nach dem Grund stolperte ich über einen Bericht zu #3532 und probierte aus, mein Systemdatum auf den 1.8. zu stellen. Seit dem zeigt die Risikoermittlung "Aktualisiert: 1. Aug., 9:21". Ich bin nicht sicher, ob dennoch Aktualisierungen stattfinden oder ob ich jetzt 4 Wochen lang keine Aktualisierungen mehr erhalte.

Steps to reproduce the issue

  1. Change the system date to the future
  2. Open the CWA
  3. Wait for Risk assessment
  4. Reset system data to update automatically
  5. Open the CWA
  6. Witness the future date still displayed as "Aktualisiert" -->

Expected behaviour

"Aktualisiert" should be updated even if current date is before a fictive last date from the future.

Possible Fix

Additional context


Internal Tracking ID: EXPOSUREAPP-10253 Internal Tracking ID: EXPOSUREAPP-9077

dsarkar commented 3 years ago

@hd42 Danke fuer den Report.

  1. Eigentlich sollte eine Fehlermeldung (Geräteabhängig: nach etwa einer halben Stunde) erscheinen, dass das Datum und/oder Uhrzeit inkorrekt ist. Ist dies geschehen?
  2. Ist das Gerät jetzt wieder auf die korrekt Zeit/Datum eingestellt?
  3. Wenn ja, bitte beobachten ob in etwa nach 4-6 Stunden (WIFI) oder nach einem Tag (Mobile DATA) die Risikoüberprüfung wieder anspringt, und hier bitte Feedback geben.
  4. If possible, continue conversation in English here on GitHub.

Vielen Dank, DS


Corona-Warn-App Open Source Team

hd42 commented 3 years ago

Ich habe das Datum bereits gestern wieder auf "Datum und Uhrzeit automatisch stellen" zurückgestellt und befinde mich seitdem im WLAN. Eine Warnmeldung erscheint nicht. Gestern kam eine Meldung, dass die Aktualisierung ausgesetzt würde, weil das vom Betriebssystem vorgegebene Limit für den Tag erreicht sei.

hd42 commented 3 years ago

Ich habe gestern Abend noch mal die Fehlermeldung gekriegt, das Limit sei erreicht:

dsarkar commented 3 years ago

@hd42 OK, danke fuer das Feedack. Vorschlag: Die App einen Tag lang nicht aufmachen, dann bitte bei uns melden, ob alles wieder normal ist.

Danke. VG, DS


Corona-Warn-App Open Source Team

hd42 commented 3 years ago

Die Limit-Warnung kommt nicht mehr, das falsche Aktualisierungsdatum ist geblieben. Hatte also vermutlich nicht direkt miteinander zu tun.

MikeMcC399 commented 3 years ago

@hd42 Was zeigt Einstellungen > Google > COVID-19 Benachrichtigungen > Drei-Punkte Symbol > Überprüfung auf mögliche Begegnungen ?

Sind Einträge mit aktuellen Zeitstempel dort aufgelistet?

Die CWA-App zeigt noch: "Aktualisiert: 1. Aug., 09:21" an? Steht "Risiko-Überprüfung fehlgeschlagen" oder z. B. "Niedriges Risiko"?

Wird "RISIKO-ERMITTLUNG AKTIV" noch angezeigt und hat das Gerät noch eine WLAN-Verbindung?

MikeMcC399 commented 3 years ago

@hd42 Ich konnte das Verhalten reproduzieren und warte jetzt ab, ob das Gerät sich wieder normalisiert. Evtl. müsste man die App zurücksetzen. Heute Nachmittag weiß ich mehr.

MikeMcC399 commented 3 years ago

@hd42 Ich benutze ein Samsung Galaxy A52 5G, mit Android 11, das das Problem zeigt.

Einstellungen > Google > COVID-19 Benachrichtigungen > Drei-Punkte Symbol > Überprüfung auf mögliche Begegnungen ? zeigt bei mir, dass stündliche Überprüfungen heute gemacht wurden: 10:00, 10:13, 11:58, 13:03, 14:04, 15:08 Normalerweise im WLAN werden die Überprüfungen höchstens alle 4 Stunden durchgeführt.

Trotzdem, dass in der Google-Anzeige weiterschreitende Überprüfungen gemacht wurden, bleibt die CWA-Anzeige beharrlich auf den 1. Aug., 10:02

@dsarkar / @heinezen Can we get this logged with an Internal ID now?

Edit: Jetzt gegen 16:00 kommt die Meldung wg. "Limit bereits erreicht". Das ist logisch, weil nach https://developers.google.com/android/exposure-notifications/exposure-notifications-api#modes in ExposureWindow mode maximal 6 mal provideDiagnosisKeys ausgeführt werden darf, und es sind bereits 6 an diesem Tag, 9.7.2021 durchgeführt worden (10:00, 10:13, 11:58, 13:03, 14:04, 15:08).

hd42 commented 3 years ago

In der Google-Übersicht sehe ich, dass bei mir stündliche Aktualisierungen bis einschließlich 3. Juli 20:03 Uhr stattfanden, dann am 01.08. um 9:22 Uhr, dazwischen nichts mehr.

vaubaehn commented 3 years ago

@hd42 Vielleicht ist es einen Versuch wert, folgendes auszuprobieren: Schalte Wifi am Telefon aus, bevor es 0:00 ist, und lass es bis morgen früh (mindestens bis 03:00) aus. Hintergrund: die Checks, wann neue Daten zur Überprüfung heruntergeladen werden und die Überprüfung angestoßen wird, sind ein klein wenig unterschiedlich in Abhängigkeit davon, ob das WLAN an ist. Eventuell kann die mobile Verbindung dabei helfen, die Überprüfung wieder anzuwerfen. Ob's aber tatsächlich funktioniert, würden wir erst morgen sehen...

MikeMcC399 commented 3 years ago

@hd42 Danke für die Google-Info! Dann ist die Risiko-Berechnung leider zurzeit effektiv inaktiv, wenn für den heutigen Tag keine Einträge vorhanden sind.

Ich hatte schon ausprobiert, ob folgendes hilft:

Das hat bei mir nichts geändert. Ich probiere es morgen erneut aus.

vaubaehn commented 3 years ago

@MikeMcC399 Ich habe zwar nicht in den Code geschaut, aber meine Hoffnung bei der Mobil-Verbindung ist, dass val = lastsuccess als Kriterium für den nächsten Download anders (weniger restriktiv) berechnet wird,

MikeMcC399 commented 3 years ago

@vaubaehn Wir haben ja parallel zueinander geschrieben. Ich habe auch nicht in den Code geschaut, aber ähnliche Gedanken gehabt. Die Worker-Prozesse werden mit einem Neustart neu aufgesetzt. Ich befürchte, dass ein App-Reset notwendig sein wird, aber ein paar Versuche sind es Wert, bevor man das macht.

vaubaehn commented 3 years ago

@MikeMcC399 Ich habe jetzt doch noch mal geschaut, und der Code (release 2.4.3) hat sich seit meinem letzten Einblick vor einiger Zeit doch noch ganz schön verändert 😲 Was aber immer noch gelten sollte, ist der forced download unter mobil... Allerdings scheinen im Code doch Abhängigkeiten zum letzten erfolgreichen Download-Datum bzw. package date zu bestehen - und wenn das tatsächlich mit 01.08.2021 abgespeichert ist, wird es schwierig. Allerdings schaffe ich es heute nicht mehr, dort tiefer einzusteigen, so verschachtelt und abstrakt wie der Code mittlerweile ist 😱

Die Worker-Prozesse werden mit einem Neustart neu aufgesetzt. Ich befürchte, dass ein App-Reset notwendig sein wird, aber ein paar Versuche sind es Wert, bevor man das macht.

Genau, und falls @hd42 es ausprobieren möchte, sehen wir ja morgen, ob Erfolg oder nicht... Hab ein gutes Wochenende!

hd42 commented 3 years ago

WLAN ist aus, werde morgen über (Miss-)Erfolg berichten.

hd42 commented 3 years ago

Hat leider nichts gebracht.

MikeMcC399 commented 3 years ago

@hd42

Hat leider nichts gebracht.

Bei meinem Versuch auch nicht.

Die Optionen sind dann:

Ich würde wahrscheinlich in den sauren Apfel beißen und die App zurücksetzen.

hd42 commented 3 years ago

Für mich sieht DownloadDiagnosisKeysTask#hasRecentDetectionAndNoNewFiles so aus, dass dort geprüft wird, ob die letzte erfolgreiche Prüfung mehr als 24h her ist - bei mir ist das natürlich ein negativer Zeitraum. Die Logs sehen auch entsprechend aus: [...] 2021-07-10T02:48:47.505Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T03:56:51.846Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T05:20:57.294Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T06:00:10.602Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T06:10:04.046Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T07:18:15.214Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles. 2021-07-10T08:26:44.222Z W/DownloadDiagnosisKeysTask: Aborting. Last detection is recent (<24h) and no new keyfiles.

Ich würde hier einen zusätzlichen Check vorschlagen, ob nextForcedDetectionAt?.isBefore(now).

MikeMcC399 commented 3 years ago

@hd42 I can't judge if your PR #3683 will technically fix the issue, but I hope so!

Organizationally, your PR won't get accepted in that form though.

You need to make the changes in a new branch of your fork https://github.com/hd42/cwa-app-android, where the branch is named according to guidelines in https://github.com/corona-warn-app/cwa-app-android/blob/main/.github/pull_request_template.md

The pull request should be based on a future unreleased branch and it should request a merge into that future unreleased branch. That would be either release/2.5.x or release/2.6.x. Since release/2.5.x is very close to release probably release/2.6.x would be more appropriate. The developers will advise you on this.

It's also good to get an internal ID first (which I requested in https://github.com/corona-warn-app/cwa-app-android/issues/3629#issuecomment-877212905).

hd42 commented 3 years ago

Thanks for the hints, @MikeMcC399. I'm leaving on a two week vacation tomorrow morning. If none of the internal devs has picked this up till then, I'll try and create a formal pull request.

vaubaehn commented 3 years ago

Interesting side note: I just stumbled upon @hd42's screenshot above, showing 7 successful (?) provisions of diagnosis keys to the ENF API on July 3rd, what should not have been possible: https://developers.google.com/android/exposure-notifications/exposure-notifications-api#modes

ENF hick-up?

MikeMcC399 commented 3 years ago

@vaubaehn It's strange that it didn't stop at 6.

@hd42 I had to uninstall and reinstall the app to get it to work again. Resetting the app for some reason didn't solve the issue. My app may have been in a different state to yours, so that may not apply to you. Good luck anyway and I hope you enjoy your vacation!

d4rken commented 3 years ago

The mentioned routine targeted in PR #3683 should be seen as an extra case to proceed, not as an extra check to prevent proceeding.

https://github.com/corona-warn-app/cwa-app-android/blob/2943eff83e919812f9dffd0df2d6644898fa59e1/Corona-Warn-App/src/main/java/de/rki/coronawarnapp/diagnosiskeys/download/DownloadDiagnosisKeysTask.kt#L166-L180

"Abort if there are no new keyfiles, but it's weird if there are no new keyfiles after 24h, so in that case still go ahead."

Do the logs show why it is not downloading new key files?

MikeMcC399 commented 3 years ago

@d4rken Could you possibly look at https://github.com/corona-warn-app/cwa-app-android/issues/3677 since this is a similar reproducible case? That might be easier to diagnose and fix, which could provide a better foundation to look at this one (#3629).

vaubaehn commented 3 years ago

@d4rken

Do the logs show why it is not downloading new key files?

To be honest, I feel there could be even more problems for workers/tasks depending on timestamps/other conditions that themselves depend on other conditions/timestamps... for example when being on metered connection

Duration(now, nextDetectionAt) in DownloadDiagnosisKeysTask.kt is negative most of the time, as nextDetectionAt does not seem to be calculated correctly. NextDetectionAt is lastDetection plus 4 hours, but if only one detection per day takes place (because of metered connection), then this value would become negative, and I don't know what fun wasLastDetectionPerformedRecently is returning in that case...

(https://github.com/corona-warn-app/cwa-app-android/issues/2880#issuecomment-843065085)

Is there an easy way to build a model of all workers and their dependent values, and to validate them in a simulation that cycles through all possible use cases (metered/non-metered, current time, future, past, changing forth and back...)? Something we could maybe do as a community effort?

vaubaehn commented 3 years ago

@d4rken For example: val nextForcedDetectionAt = lastSuccessfulDetection?.startedAt?.plus(Duration.standardDays(1)) There is no need to make nextForcedDetectionAt dependent on lastSuccessfulDetection - it could always be the next day after 0:00 UTC. Every first detection of a day could be a forced detection.

Edit: Ah, ok... but what to do if that fails...

Ein-Tim commented 3 years ago

@hd42 Did the app start working again on 01.08.2021?

MikeMcC399 commented 3 years ago

@Ein-Tim The equivalent reproducible case https://github.com/corona-warn-app/cwa-app-android/issues/3677 does not show any record of a fix yet. I have not checked on more recent versions if this is still reproducible however.

hd42 commented 3 years ago

@hd42 Did the app start working again on 01.08.2021?

Yes, it works fine again.

MikeMcC399 commented 3 years ago

@hd42

Yes, it works fine again.

That is good news!

Do you want to keep this case open if the app is now working again?

hd42 commented 3 years ago

Yes, because It's easy to break it again just by fiddling with my system time...

MikeMcC399 commented 3 years ago

@dsarkar This issue has the label "further input needed". What input is still needed?

@hd42 is correct when he writes

... It's easy to break it again just by fiddling with my system time...

I can reproduce these problems, even with the current version 2.8.0.

dsarkar commented 3 years ago

Internal Tracking ID: EXPOSUREAPP-10253

MikeMcC399 commented 2 years ago

There seems to have been no progress on this issue. 🙁

I also logged a new issue #5183, with screenshots and steps-to-reproduce using the current version 2.22.1. The new issue is more or less a duplicate of this issue (#3629).

svengabr commented 2 years ago

I have just checked the linked Jira issue.

Jira Ticket is flagged as: Resolution: Wont Fix Status: Obsolete

Unfortunately, no additional information was added to this Jira ticket.

This ticket will be closed in favor of https://github.com/corona-warn-app/cwa-app-android/issues/5183