Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 7 additions & 12 deletions android/app/src/main/java/com/noop/ui/AppViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -1944,18 +1944,13 @@ class AppViewModel(app: Application) : AndroidViewModel(app) {
rescoreAfterEdit()
}

/** Re-open one deliberately deleted sleep window (#515): remove its durable tombstone first, then
* immediately run the normal detector/scorer over the stored raw data. Unlike optimistic edits, this
* returns false when the marker could not be removed — rescoring while it is still present would keep
* suppressing the night and make a successful-looking button a no-op. */
suspend fun recomputeDeletedSleep(marker: com.noop.data.DismissedSleep): Boolean {
val cleared = runCatching {
repository.allowSleepReDetection(marker.deviceId, marker.startTs)
}.isSuccess
if (!cleared) return false
rescoreAfterEdit()
return true
}
/** Clear a deleted window's marker, then request the normal recent scan. Success confirms only
* marker removal, not that this particular night was scanned or restored (Refs #515). */
suspend fun recomputeDeletedSleep(marker: com.noop.data.DismissedSleep): Boolean =
reopenDeletedSleepWindow(
clearMarker = { repository.allowSleepReDetection(marker.deviceId, marker.startTs) },
scanRecent = { rescoreAfterEdit() },
)

/** Hide an unwanted deleted-sleep row from the persistent recompute card while preserving its
* detector tombstone. This is deliberately separate from [recomputeDeletedSleep], which removes the
Expand Down
22 changes: 22 additions & 0 deletions android/app/src/main/java/com/noop/ui/DeletedSleepRecompute.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.noop.ui

import kotlinx.coroutines.CancellationException

/**
* Reopen a deleted sleep window before requesting the normal recent scan (Refs #515).
*
* Success means only that marker removal completed: the scan may not cover an old night,
* may lack raw samples, or may fail. Cancellation must stop the action at either stage.
*/
internal suspend fun reopenDeletedSleepWindow(
clearMarker: suspend () -> Unit,
scanRecent: suspend () -> Unit,
): Boolean {
val cleared = runCatching { clearMarker() }
.onFailure { if (it is CancellationException) throw it }
.isSuccess
if (!cleared) return false
runCatching { scanRecent() }
.onFailure { if (it is CancellationException) throw it }
return true
}
4 changes: 2 additions & 2 deletions android/app/src/main/java/com/noop/ui/SleepScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -674,7 +674,7 @@ fun SleepScreen(
Toast.makeText(
context,
if (cleared) {
uiString(R.string.l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad)
uiString(R.string.l10n_sleep_screen_deletion_marker_cleared_fc781c48)
} else {
uiString(R.string.l10n_sleep_screen_couldn_t_reopen_this_night_try_88265690)
},
Expand Down Expand Up @@ -1153,7 +1153,7 @@ private fun DeletedSleepWindowsCard(
color = Palette.textPrimary,
)
Text(
uiString(R.string.l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3),
uiString(R.string.l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb),
style = NoopType.footnote,
color = Palette.textSecondary,
)
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-de/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1670,12 +1670,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Keine Phasendaten für diese Nacht aufgezeichnet.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Offenes Journal</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Vorherige Nacht</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Berechne eine Nacht neu, um ihre Löschmarkierung zu entfernen und die verfügbaren Rohdaten erneut zu prüfen.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Neu berechnen entfernt die Löschmarkierung und prüft die letzten 21 Tage.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Diese gelöschte Schlafaufzeichnung neu berechnen</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Diese Nacht neu berechnen</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Wird neu berechnet…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Schlaf</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">Die Schlaferkennung wurde mit den für diese Nacht verfügbaren Daten erneut ausgeführt.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Löschmarkierung entfernt.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Phasen-Aufschlüsselung</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Dies bewegt die Nacht zu einer Zeit ohne aufgezeichnete Daten. Stufen können dort nicht abgeleitet werden, so dass sie als leer angezeigt werden können, bis die Daten sie abdecken.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Deine nachtdaten sind in. Protokolliere, wie du dich gefühlt hast, hilft NOOP zu lernen, was deine beste Genesung antreibt.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-es/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1470,12 +1470,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">No se registraron datos de fases para esta noche.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Open Journal</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Noche anterior</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Vuelve a calcular una noche para borrar su marcador de eliminación y analizar de nuevo los datos sin procesar disponibles.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Recalcular elimina la marca de borrado y analiza los últimos 21 días.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Volver a calcular esta noche de sueño eliminada</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Volver a calcular esta noche</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Recalculando…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Sueño</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">La detección del sueño se volvió a ejecutar con los datos disponibles para esta noche.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Marca de borrado eliminada.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Desglose de fases</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Esto mueve la noche a un tiempo sin datos registrados. Las etapas no se pueden derivar allí, por lo que puede mostrar como vacía hasta que los datos lo cubren.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Tus datos nocturnos están dentro. Logging how you felt helps NOOP learn what drives your best recovery.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1488,12 +1488,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Aucune donnée de stade enregistrée pour cette nuit.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Journal ouvert</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Nuit précédente</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Recalculez une nuit pour effacer son marqueur de suppression et analyser à nouveau les données brutes disponibles.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Recalculer efface le marqueur de suppression et analyse les 21 derniers jours.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Recalculer cette nuit de sommeil supprimée</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Recalculer cette nuit</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Recalcul en cours…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Sommeil</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">La détection du sommeil a été relancée avec les données disponibles pour cette nuit.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Marqueur de suppression effacé.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Répartition des stades</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Cela déplace la nuit à une heure sans données enregistrées. Les étapes ne peuvent pas être dérivées là, donc il peut apparaître comme vide jusqu\'à ce que les données le couvrent.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Vos données de nuit sont dedans. L\'exploitation de vos sentiments aide NOOP à apprendre ce qui motive votre meilleure récupération.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-it/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1744,12 +1744,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Nessun dato sulle fasi registrato per questa notte.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Apri Diario</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Notte precedente</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Ricalcola una notte per rimuoverne il contrassegno di eliminazione e analizzare di nuovo i dati grezzi disponibili.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Ricalcola rimuove il contrassegno di eliminazione e analizza gli ultimi 21 giorni.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Ricalcola questa notte di sonno eliminata</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Ricalcola questa notte</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Ricalcolo…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Sonno</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">Il rilevamento del sonno è stato rieseguito con i dati disponibili per questa notte.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Contrassegno di eliminazione rimosso.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Dettaglio fasi</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Questo sposta la notte in un orario senza dati registrati. Lì non è possibile ricavare le fasi, quindi potrebbe risultare vuota finché non ci saranno dati.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">I dati della tua notte sono arrivati. Registrare come ti sei sentito aiuta NOOP a capire cosa favorisce il tuo recupero migliore.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-pl/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1627,12 +1627,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Brak danych scenicznych zarejestrowanych dla tej nocy.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Otwórz dziennik</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Poprzednia noc</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Oblicz ponownie noc, aby usunąć znacznik usunięcia i ponownie przeskanuj dostępne surowe dane.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Ponowne obliczenie usuwa znacznik usunięcia i analizuje ostatnie 21 dni.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Oblicz ponownie tę usuniętą noc snu</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Przelicz jeszcze raz tę noc</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Przeliczam ponownie…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Sen</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">Wykrywanie snu zostało ponownie przeprowadzone przy użyciu danych dostępnych dla tej nocy.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Znacznik usunięcia został usunięty.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Podział sceny</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Spowoduje to przeniesienie nocy do czasu, w którym nie ma zarejestrowanych danych. Nie można tam wyprowadzić etapów, więc może być wyświetlany jako pusty, dopóki nie pokryją go dane.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Dane z Twojej nocy są już dostępne. Rejestrowanie Twojego samopoczucia pomaga NOOP dowiedzieć się, co zapewnia najlepszą regenerację.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-pt-rPT/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1633,12 +1633,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Sem dados de palco registados para esta noite.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Diário aberto</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Noite anterior</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Recalcule uma noite para limpar o teu marcador de eliminação e verifique novamente os dados brutos disponíveis.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Recalcular remove a marca de eliminação e analisa os últimos 21 dias.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Recalcule esta noite de sono excluída</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Recalcular esta noite</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Recalculando…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Sono</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">A deteção do sono foi novamente executada utilizando os dados disponíveis para esta noite.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Marca de eliminação removida.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Análise do estágio</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Isto move a noite para um horário sem dados registados. Os estágios não podem ser derivados aí, pelo que pode aparecer como vazio até que os dados o cubram.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Os teus dados noturnos estão disponíveis. Registar como se sentiu ajuda o NOOP a aprender o que impulsiona a tua melhor recuperação.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-ru/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1688,12 +1688,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">Данные о стадиях сна за эту ночь не записаны.</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">Открыть Журнал</string>
<string name="l10n_sleep_screen_previous_night_9f339047">Предыдущая ночь</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">Пересчитайте ночь, чтобы снять метку удаления и заново просмотреть доступные сырые данные.</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">Пересчёт снимает отметку об удалении и анализирует последние 21 день.</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">Пересчитать эту удалённую ночь сна</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">Пересчитать эту ночь</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">Пересчёт…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">Сон</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">Определение сна выполнено заново по данным, доступным за эту ночь.</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">Отметка об удалении снята.</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">Структура стадий</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">Это перенесёт ночь на время, где нет записанных данных. Стадии там вывести нельзя, поэтому она может отображаться пустой, пока данные её не покроют.</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">Данные за ночь получены. Отметка о самочувствии помогает NOOP понять, что даёт вам лучшее восстановление.</string>
Expand Down
4 changes: 2 additions & 2 deletions android/app/src/main/res/values-zh/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -1609,12 +1609,12 @@
<string name="l10n_sleep_screen_no_stage_data_recorded_for_this_93a86806">该晚未记录到任何睡眠分期数据。</string>
<string name="l10n_sleep_screen_open_journal_4bf0daee">打开日记</string>
<string name="l10n_sleep_screen_previous_night_9f339047">上一晚</string>
<string name="l10n_sleep_screen_recompute_a_night_to_clear_its_fd9e15c3">重新计算某一晚,即可清除它的删除标记,并利用现存的原始数据重新进行睡眠分析。</string>
<string name="l10n_sleep_screen_recompute_clears_the_deletion_marker_and_a8922cbb">重新计算会清除删除标记,并分析最近 21 天的数据。</string>
<string name="l10n_sleep_screen_recompute_this_deleted_sleep_night_2d2f46f6">重新计算并恢复这个被删除的夜晚</string>
<string name="l10n_sleep_screen_recompute_this_night_5ba0d05c">重新计算本晚数据</string>
<string name="l10n_sleep_screen_recomputing_6f8e54e3">正在重新计算…</string>
<string name="l10n_sleep_screen_sleep_3cac34e6">睡眠</string>
<string name="l10n_sleep_screen_sleep_detection_reran_using_the_data_01757aad">已使用本晚所有可用的原始数据重新运行了睡眠检测算法。</string>
<string name="l10n_sleep_screen_deletion_marker_cleared_fc781c48">已清除删除标记。</string>
<string name="l10n_sleep_screen_stage_breakdown_e9b714f9">各睡眠阶段拆解</string>
<string name="l10n_sleep_screen_this_moves_the_night_to_a_fac2fb46">这会将该晚睡眠强行移动到一个没有任何原始记录数据的时间段。由于缺失基础数据,NOOP 无法推导出睡眠分期,因此它会一直显示为空,直到您同步了补全该时段的手环数据。</string>
<string name="l10n_sleep_screen_your_night_data_is_in_logging_ec461720">您的夜间数据已就绪。每天记录下您的主观感受,能帮助 NOOP 分析出什么样的习惯最能促进您的身体恢复。</string>
Expand Down
Loading
Loading