fix: Auswahl beim Aufwecken über Touch entfiel manchmal (S3 5.6.3 / P4 1.4.2)
Über den Schalter kam die Abfrage "Espresso oder Cold Extraction" zuverlässig, über Antippen am Display nur manchmal. Ursache waren zwei unterschiedliche Bedingungen für dieselbe Sache: - askMode (zeigt die Auswahl im Dialog) verlangte zusätzlich cxArmable - choiceRelevant (sendet "wakeEspresso" und schließt damit das Auswahlfenster der S3) verlangte es nicht In der Lücke dazwischen zeigte der Dialog nur "Aufwecken", unterdrückte aber trotzdem die Rückfrage der S3 - die Frage war auf beiden Seiten weg. Der Schalterweg hatte diese Lücke nie, weil er allein an der S3 hängt. P4: beide Stellen benutzen jetzt wake_choice_offered(). Bot der Dialog die Auswahl nicht an, sendet er "deactivateStandby"; dann öffnet die S3 ihr eigenes Auswahlfenster und die Frage kommt trotzdem. S3: Die Fensterentscheidung ist als Bedingungskette geschrieben und hält Quelle und Ergebnis des letzten Aufweckens fest. /Cold-Extraction zeigt das an - die bisherige Live-Liste zeigt nur den jetzigen Stand, der beim Nachsehen längst wieder ein anderer sein kann. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
535f640bbd
commit
743c38e994
@@ -598,6 +598,16 @@ static void wake_confirm_show() {
|
||||
lv_obj_move_foreground(g_wakeConfirm);
|
||||
}
|
||||
static void wake_confirm_hide() { if (g_wakeConfirm) lv_obj_add_flag(g_wakeConfirm, LV_OBJ_FLAG_HIDDEN); }
|
||||
// Einzige Quelle der Wahrheit dafuer, ob der Aufweck-Dialog die Auswahl "Espresso oder Cold
|
||||
// Extraction" wirklich anbietet. Wird an ZWEI Stellen gebraucht: beim Aufbau des Dialogs und
|
||||
// beim Absenden. Standen dort verschiedene Bedingungen, konnte der Dialog nur "Aufwecken"
|
||||
// zeigen, aber trotzdem "wakeEspresso" senden - und damit das Auswahlfenster der S3
|
||||
// schliessen. Dann war die Frage auf beiden Seiten weg (der Schalterweg hat diese Luecke
|
||||
// nicht, weil er allein am S3 haengt).
|
||||
static bool wake_choice_offered() {
|
||||
return g_state.cxWakeChoice ||
|
||||
(g_state.cxEnabled && g_state.cxArmable && g_state.cxAskOnWake);
|
||||
}
|
||||
static void standby_screen_cb(lv_event_t*) { wake_confirm_show(); } // Tipp auf Standby-Uhr -> nachfragen
|
||||
static void wake_no_cb(lv_event_t*) { // Abbrechen -> zurueck in die Standby-Helligkeit
|
||||
wake_confirm_hide();
|
||||
@@ -609,10 +619,11 @@ static void wake_yes_cb(lv_event_t*) { // Aufwecken -> hell lassen, S3 bee
|
||||
// g_wakeDialogOpen bleibt true, bis der Standby wirklich endet (ui_update) - sonst wuerde
|
||||
// das Display in der Uebergangsphase kurz auf Standby-Helligkeit abdunkeln.
|
||||
if (!g_client) return;
|
||||
// "wakeEspresso" beendet den Standby UND schliesst das Auswahlfenster der S3. Ohne das
|
||||
// wuerde nach dem Aufwecken noch einmal gefragt bzw. der Wasserkreis bliebe kurz aus.
|
||||
const bool choiceRelevant = g_state.cxWakeChoice || (g_state.cxEnabled && g_state.cxAskOnWake);
|
||||
g_client->sendAction(choiceRelevant ? "wakeEspresso" : "deactivateStandby");
|
||||
// "wakeEspresso" beendet den Standby UND schliesst das Auswahlfenster der S3 - das ist
|
||||
// nur dann richtig, wenn dieser Dialog die Auswahl gerade wirklich angeboten hat. Sonst
|
||||
// "deactivateStandby": dann oeffnet die S3 ihr eigenes Auswahlfenster, und die Frage
|
||||
// kommt trotzdem (gleicher Weg wie beim Aufwecken ueber den Schalter).
|
||||
g_client->sendAction(wake_choice_offered() ? "wakeEspresso" : "deactivateStandby");
|
||||
showToast(g_state.standbyActive ? "Maschine wird aufgeweckt..." : "Espresso: Kessel heizt auf.", false);
|
||||
}
|
||||
// Aufwecken direkt in die kalte Extraktion. Reihenfolge ist wichtig: erst den Modus scharf
|
||||
@@ -3606,8 +3617,7 @@ void ui_update(const MachineState& st) {
|
||||
// Kein "!st.cxActive": Der Modus ist persistent, die Auswahl muss in beide
|
||||
// Richtungen gehen - sonst haengt man nach dem ersten kalten Bezug dauerhaft fest.
|
||||
const bool choiceOpen = st.cxWakeChoice;
|
||||
const bool askMode = choiceOpen ||
|
||||
(st.cxEnabled && st.cxArmable && st.cxAskOnWake);
|
||||
const bool askMode = wake_choice_offered(); // g_state == st (oben zugewiesen)
|
||||
if (g_wakeColdBtn) {
|
||||
if (askMode) lv_obj_remove_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN);
|
||||
else lv_obj_add_flag(g_wakeColdBtn, LV_OBJ_FLAG_HIDDEN);
|
||||
|
||||
Reference in New Issue
Block a user