Repository navigation
v0.1.9 — one habit, one line
One habit, one line. And an answer you can take back.
Install
Open this page on the phone, tap constanza-0.1.9.apk, install over the previous version.
This one changes the database. Room migration 5 → 6 remaps any habit still holding the retired blue-grey to cyan. Nothing else moves: your habits, schedules, entries and reminders are untouched, and the migration is data-only — 6.json's identityHash is byte-identical to 5.json's, meaning no column, table or index changes. A pre-migration snapshot is written before anything is touched.
The row costs one line instead of three
A habit used to take its name, then a second, nearly empty line holding a small status glyph hard left and a "Cambiar" button hard right, with a void between them. A glyph sitting below and left of the name it describes says nothing about that name.
Now the name takes the width and everything else sits hard right on the name's own line. Nine habits fit where six did. The better gain was unplanned: with every glyph right-aligned, the right edge becomes a column of outcomes, so the whole day reads in one vertical sweep without reading a single name.
The status word is gone — a tick for done, a cross for not done, a dash for skipped. "Pendiente" is gone too: a row offering Sí/No is pending by definition. So is "Omitir", because not answering already amounts to skipping and it did not earn permanent space on every row. Skipped still exists, still renders, and is still reachable when changing an answer.
Sí and No are outlined pills in the same green and red as the glyphs, so the button previews its own result: the green one produces the green tick. Outlined rather than filled, because a filled pill out-weighs the habit names — and the whole point of the previous release was to stop the interface competing with them.
The scheduled time now shows only on habits with several reminders a day, where it is the one thing telling two rows apart. On a habit with one reminder it was the reminder time, not the time anything happened.
"Gestionar hábitos" becomes "Hábitos", and Settings becomes a gear.
Changing an answer, including taking it back
"Cambiar" is gone. Tap an answered habit and pick: Sí, No, Omitido, or Sin responder — back to never having answered at all.
That last one had to respect the rule that a slot left unanswered still counts as a No when its day ends, and it walks straight into that rule's blind spot. Answering does three things at once: it writes the entry, closes the reminder occurrence and cancels the alarm. The midnight sweep only ever looks at open occurrences. So simply deleting the entry would have left the occurrence closed, the sweep would never have seen that habit again, and it would have sat pending for ever — the rule broken inside the feature meant to honour it.
Clearing therefore deletes the entry and reopens the occurrence together, and reopens it to the state a delivered notification leaves behind rather than to "armed". Reopened as armed, the hourly reconcile would have read it as a lost alarm and reposted the notification within the hour, for a moment already gone. No alarm is touched: correcting a mistake must not ring a reminder.
"Sin responder" is offered only on today. On a past day the rule has already decided, so unanswered and "No hecho" are one outcome under two names — offering both would mean asking for one thing and watching a red cross appear instead.
One colour retired
Blue-grey is gone, 22 presets to 21, for the reason silver went last release: painted on a habit's name, a near-neutral stops reading as an identity and starts reading as a disabled row.
What this release does NOT verify
It has been seen, but on an emulator, not on your screen. Whether the row's spacing and the pills read well on a real OLED at arm's length is the thing no test answers.
A green matrix also says nothing about One UI throttling, background-kill or real doze.
Verification
App unit tests 304/304, domain 57/57, detekt clean on main sources.
Instrumented: the full matrix run from scratch — API 31 (190 tests) and API 37 (190 tests), zero failures on either, and zero dead test classes. The end-of-day rule is proved by a test that answers, clears, then runs the real midnight sweep the next day and asserts the habit ends as not done; a second one runs the hourly reconcile an hour after clearing and asserts no alarm was ever touched.
APK signed with the release key and verified with apksigner (CN=Constanza, OU=jjrapps), aapt2 confirming versionCode 10, versionName 0.1.9.