Commit graph halkyon/apps/todo/halkyon_todo_flutter/test
Author SHA1 Message Date
c36bd83c6a
feat(learn,todo,meditate): dictate through the phone's voice input app (ADR 0038, D18)
On Android the microphone now opens the app handling
RECOGNIZE_SPEECH (FUTO Voice Input, Google's), the default the person
chose in Android, and puts the text it returns where the cursor stood,
as Dictation does; cancelled, nothing. Only where none is installed, or
it can't be opened, does speech_to_text listen in line as before.

halkyon_app: VoiceInputApp (one listen, an answer once closed) on the
channel app.halkyon/voice_input, which DeviceSpeechInput asks first at
every listen, answering SpeechStart.finished so that Dictation doesn't
listen again; speech_to_text isn't touched on that route, so our app
asks for no microphone. SpeechInput.listen and Dictation.start take the
prompt the voice input app shows (the field's hint).

Each app: VoiceInput.kt (queryIntentActivities, startActivityForResult,
the first of EXTRA_RESULTS) attached in MainActivity, which hands it
activity results, and RECOGNIZE_SPEECH among the manifest's queries.
The privacy pages of Learn and Meditate say so.

Our own Whisper and Meditate's dream recordings are dropped (D18).

Whats-New: The microphone now dictates through your phone's voice input app, such as FUTO Voice Input.
Whats-New-De: Das Mikrofon diktiert jetzt über die Spracheingabe-App deines Telefons, etwa FUTO Voice Input.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:42 +01:00
c954e844f7
perf(todo): ticks, drags and the chosen tasks show at once, written in one go
What a person does to their tasks shows before the device has sealed
and kept it (Flutter's optimistic state): TodoCubit.showing shows a
change on the tasks at once and on every state read while its write
runs; where the write fails, the tasks show as they are again at once
and a snack bar says so (the keys missing, or "That wasn't saved"),
through writeTasks. A task's check, a task dragged to a day, an hour or
a place in its project, Reschedule, and the selection's date, labels,
priority, deadline, move, complete and delete go through it; Undo stays
where it was, offered once the write is kept.

The chosen tasks were written one at a time, each write opening every
task again (SealedRows.all decrypts all of them), so deleting a hundred
opened them a hundred times. TaskRepository now reads once and writes
together: updateAll, completeAll, deleteAll, move, place and restore,
the automatic reminder asked once, and SealedRows.updateAll seals all
of them before writing any (KeysMissing leaves none written) and fires
one change, so the screen reads once after. What a write changes is
worked out by pure functions shared by the repository and the screen
(movedTo, placedAt, completedContent, withSubTasks in task_views.dart).

Whats-New: Ticking, moving and changing tasks, many at once too, shows at once.
Whats-New-De: Abhaken, Verschieben und Ändern von Aufgaben, auch vieler auf einmal, zeigt sich sofort.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:39 +01:00
05db5e2f45
feat(learn,todo,train,meditate,ui): the navigation bar flush with the foot, a fade above it
Below medium windows the frame's bar is Material 3 Expressive's again,
flush with the window's foot (decided 7 Nov 2026 by the developer): the
theme's NavigationBar across the whole width, 64 dp in its own colour,
running on beneath the system's bar as Material's does. Right above it a
fade 32 dp high, from the background of the screen in view (the
ScreenTint's, the theme's surface before a screen claims one) made
see-through to that background, so what scrolls on beneath the bar fades
out rather than being cut off; taps pass through it. The rail of wider
windows stays as it was.

halkyon_ui's FloatingNavigationBar becomes FlushNavigationBar, its side
margin, lift and rounded card gone. Its coverOf is now the whole room
content leaves at its end, the system's bar included (the body's bottom
padding: bar, fade and system's bar inside the frame, the system's bar
alone outside it), and floating buttons rise by buttonLiftOf, the same
without the system's bar, which a Scaffold keeps them clear of itself.
Lists, Todo's hour grid and the Plan's sheet keep using coverOf; the
Profile's list no longer adds the system's bar a second time.

Whats-New: The navigation bar sits at the bottom edge again, with a soft fade above it.
Whats-New-De: Die Navigationsleiste sitzt wieder am unteren Rand, mit einem sanften Übergang darüber.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:37 +01:00
ccdf22b936
fix(todo): the Plan's button before search, and its sheet without the navigation bar
Today's and Upcoming's Plan button stood between search and Display; it
stands before the three every tab has now (TabScreen's `leadingActions`).
On a phone, where the Plan opens over the hours' foot, its icon is
Lucide's panel-bottom-open (panel-bottom-close while open); beside the
hours on wider windows it keeps the panel at the right.

While a phone's Plan is open, the navigation bar steps aside, as it does
while tasks are being chosen: it floated over the Plan's tasks, and the
Plan can't be a modal sheet, its rows being dragged out onto the hours.
`NavigationBarHold`, kept by TodoShell, holds it away while anyone asks;
closing the Plan, or back, which closes it first, brings it back.

The Plan's heading put its projects and close button after a spacer of
one share and a flexible of four, leaving a fifth of the room after
them; they end at its edge now, as the rest of it.

Whats-New: The Plan's button stands before search, and while the Plan is open the navigation bar makes way for it.
Whats-New-De: Der Plan-Knopf steht vor der Suche, und solange der Plan offen ist, macht ihm die Navigationsleiste Platz.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:36 +01:00
90f9415e72
fix(todo): the add button slides away while scrolling, and stays put behind quick add
Every tab's screen (TabScreen: Inbox, Today, Upcoming, a project's,
filters' and labels') hands its add button to halkyon_ui's
ScrollHidingFab, as Learn's screens do: it slides away while the tasks
scroll on down and comes back as they scroll up.

Its scaffold no longer resizes for the keyboard: opening quick add, the
add button and anything at the screen's foot jumped up by the keyboard's
height behind the bar, which floats above the keyboard by itself. No tab
has a field of its own in its body (search, the editors and the pickers
are screens, sheets or dialogs of their own). A task's sheet, where a
sub-task is added, keeps still already: its foot is its scaffold's bar.

Whats-New: The add button slides away while you scroll down, and the screen behind Add task no longer jumps with the keyboard.
Whats-New-De: Der Hinzufügen-Knopf weicht beim Herunterscrollen aus, und der Bildschirm hinter Aufgabe hinzufügen springt nicht mehr mit der Tastatur.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:36 +01:00
6c095fab47
fix(todo): the hours' time now no longer overlaps an hour, and run down to the bar
The hours' column labelled 22:00 and, in red, the time now 22:12 over
each other. As Todoist's (its screenshots at 21:50, 21:51, 21:55, 22:05,
22:09 and 22:10): an hour's label gives way while the time now is within
nine minutes of it, either side, wherever the line at the time now is
drawn (Today's Calendar, Upcoming's 3-day, the Inbox's 3-day), so at
21:51 to 22:09 the time now stands alone and at 21:50 and 22:10 both do
(`hourLabelShown`).

The hours left a strip as high as the add button empty below midnight,
above the floating navigation bar. They run on down to the bar now, the
day's end just above it and the hours scrolling on under it before, as
Todoist's; the add button slides away as they scroll down. Where a
phone's Plan covers their foot, they still end above it.

Whats-New: The calendar's hours no longer show an hour over the time now, and run on down to the navigation bar.
Whats-New-De: Die Stunden des Kalenders zeigen keine Stunde mehr über der aktuellen Uhrzeit und reichen bis zur Navigationsleiste.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:35 +01:00
71b5337d21
feat(todo): the Inbox's Calendar as an Agenda or 3-day
As Todoist's Display in the Inbox: once its layout is Calendar, a row
"Layout: Agenda" opens a small choice of Agenda or 3-day; 3-day shows the
Inbox's tasks in Upcoming's HourGrid, whatever the window's width, where a
tap on an hour adds to the Inbox. Kept as the project's other Display
choices, in its sealed view (`calendarLayout`, written only when it isn't
the Agenda; a value this version doesn't know reads as the Agenda).
Another project's Calendar stays the agenda (or the month), as Todoist
offers the choice in the Inbox alone.

Whats-New: The Inbox's Calendar can show three days of hours: Display, Layout, 3-day.
Whats-New-De: Der Kalender des Eingangs kann drei Tage mit ihren Stunden zeigen: Anzeige, Layout, 3 Tage.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:35 +01:00
28e07dbf9d
fix(todo,ui): Today's day centred in its calendar, and the way back to today shows it
Today's tab drew its day centred at 16 of the calendar's 24 units, where
Lucide's SVG has its body's middle; its font draws the calendar a unit
higher (the top bar's stroke from 8 to 10, the foot's from 20 to 22,
measured with the real fonts), so the digits sat a unit and a half low.
halkyon_ui's new DayCalendarIcon centres them at 15, in Noto Sans set
explicitly, and its tests draw it with the real fonts at 16 to 32 pixels:
the digits centred in the body within half a unit, and 10, 20, 28 and 31
clear of the sides. Todo's TodayIcon keeps the midnight redraw around it.

The agenda's, the 3-day grid's and the month's way back to today showed
Lucide's calendar-1; it shows today's day in the same calendar now, as
Todoist's.

Whats-New: Today's date sits centred in its calendar icon, and the button back to today shows it too.
Whats-New-De: Das heutige Datum steht mittig in seinem Kalendersymbol, und der Knopf zurück zu heute zeigt es auch.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-08 11:48:34 +01:00
30ee2a9ca3
feat(todo): a place reminds once a day, from the task's day on (ADR 0033, D32)
A task for tomorrow stays quiet today; an overdue task or one without a
day reminds on each day the phone arrives; a daily task once a day, not
again after it was ticked off in the morning. Todoist's location
reminders ignore the due date, which r/todoist's reports show reminding
of a weekly task on every arrival and of a daily one up to twenty times
a day; once until the task changed had both faults and lost the
shopping list left open to remind on every visit.

The device keeps which tasks reminded today, and an inexact alarm at
midnight lets the new day's places wait. A place waiting again on a new
day reminds only after the phone crosses its circle, so a task whose
place is home doesn't remind just after midnight.

Whats-New: A task's place reminds once a day, and not before the task's day.
Whats-New-De: Der Ort einer Aufgabe erinnert einmal am Tag und nicht vor ihrem Tag.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:50 +01:00
c55e94dd99
fix(todo): comments handled as Todoist's, and the emoji sheet (ADR 0033, D38)
After the developer's recording of Todoist: the bar opens the comments to
write at once, Show all to read; the heading folds them; Show all and the
latest comment are boxes of their own; a comment shows who wrote it; the
field grows with what wraps, which a long line didn't.

The emoji sheet is written here on emoji_picker_flutter's data: its own
picker has a tab bar on the SDK's Material, which found no localizations
in Todo, so reacting showed an error. Todo gets the compatibility bridge,
as Learn has, since the editor still imports that library.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:49 +01:00
a25cca12b4
feat(todo): comments and descriptions in the editor (ADR 0033, D38)
Comments and the descriptions of tasks, projects, sections and filters
become the editor's document on halkyon_editor; names and titles stay
text. Rows written as text read as notes and become documents when next
saved, the server seeing only sealed bytes, so there is no migration.

Sections' descriptions can now be written, and a project's shows above
its tasks. Android answers whether a link can open only for what is
declared, so Todo declares http and https.

Whats-New: Comments and descriptions take rich text: headings, lists, checklists, links and more.
Whats-New-De: Kommentare und Beschreibungen können jetzt formatiert werden: Überschriften, Listen, Checklisten, Links und mehr.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:48 +01:00
4875b26174
feat(todo): comments in boxes of their own, with reactions (ADR 0033, D36)
As Todoist's, after the developer's test: a task's sheet shows how many
comments it has, the latest on one line and Show all, with Add a comment
docked at its foot; comments open on a sheet of their own, each in its
box, the latest in view and the field staying at the foot. Reactions are
kept in the comment's sealed payload, each emoji once, picked from
emoji_picker_flutter, whose recents stay on the device.

Whats-New: Comments have a sheet of their own, each in its box, and take reactions; a task shows only the latest.
Whats-New-De: Kommentare haben ein eigenes Blatt, jeder in seinem Kasten, und nehmen Reaktionen an; eine Aufgabe zeigt nur den neuesten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:47 +01:00
977a513379
feat(todo): a table's columns, chosen and moved, each with its menu (ADR 0033, D36)
As Todoist's after trying it: Description and Created join the columns,
Display's Columns turns them and a task's details on and off, and a heading
filters, sorts, moves or hides its column. Sorting can run either way, and
tasks can be filtered by when they were added. Reporting's project filter
shows each project's icon.

Whats-New: Table: choose and arrange its columns, and filter, sort or hide one from its heading.
Whats-New-De: Tabelle: Wähle und ordne die Spalten und filtere, sortiere oder blende eine über ihre Überschrift aus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:46 +01:00
bd1b19ed32
feat(todo): Reporting, with goals, streaks and what was done (ADR 0033, D36)
A daily and a weekly goal, each with its progress, streak and chart, days
off and vacation mode, and the history of completed tasks by project, all
worked out on the device from what the tasks keep. Today shows a quiet card
once a day when the goal is reached. No karma, nothing to share.

Whats-New: Reporting: set a daily and a weekly goal, follow your streaks and see what you've done, with days off and vacation, under Browse.
Whats-New-De: Auswertung: Lege ein Tages- und ein Wochenziel fest, verfolge deine Serien und sieh, was du erledigt hast, mit freien Tagen und Urlaub, in der Übersicht.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:44 +01:00
016b74ff74
feat(todo): comments on a task (ADR 0033, D36)
Plain text with links, written, edited and deleted in the task's sheet,
counted on its row. They are sealed in `task_comment`, the task they belong
to with them, and go with their task.

Whats-New: Comments: write on a task, edit or delete what you wrote, and open its links.
Whats-New-De: Kommentare: Schreibe zu einer Aufgabe, bearbeite oder lösche es und öffne Links darin.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:44 +01:00
6385d84cff
feat(todo): a project as a table on wide windows (ADR 0033, D36)
Task, date, deadline, priority and labels in columns under a heading that
stays. A phone isn't offered it and shows a project kept as one as a list.

Whats-New: Table: on a wide window a project can show its tasks in columns, through Display.
Whats-New-De: Tabelle: In einem breiten Fenster zeigt ein Projekt seine Aufgaben in Spalten, über Anzeige.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:43 +01:00
b1f2078357
feat(todo): filters in Todoist's language, and a view of each label (ADR 0033, D35)
A filter is a query read on the device, as the server sees no task, kept
sealed in `saved_filter`. Filters & labels is a screen of its own under
Browse; a label opens its tasks, and favourite filters and labels join
Browse's Favourites. D36 records what of Todoist's Pro stays out.

Whats-New: Filters: keep views like "today & p1", and open a label to see its tasks, under Browse in Filters & labels.
Whats-New-De: Filter: Speichere Ansichten wie „heute & p1“ und öffne ein Label, um seine Aufgaben zu sehen, in der Übersicht unter Filter & Labels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:42 +01:00
a4c1fe298d
feat(todo): the map keeps its size, the search a screen of its own (ADR 0033, D32)
From the developer's trial of the picker. Below a medium width a sheet
of fixed height sits under the map, whatever is around the pin, and is
pulled up over it for the whole list, as Threema's; a landscape phone or
a wider window has it as a pane beside the map. The search opens its own
screen: name, what it is, where it lies and how far. A compass under the
bar turns the map to north, and my position no longer zooms out.

A pinch only zooms unless the fingers turn first, the pin's shadow lies
on the map's middle, and a look around that failed says so, with Try again. It asks
little: after the map rested, one at a time, nothing for a spot answered
or by zooming, and nothing for 30 seconds after a failure, as komoot's
Photon throttled a person moving the map about.

Fixes the wrong map for the theme: OpenFreeMap's styles name themselves
nothing and the tile cache goes by that name, so a theme got the other's
tiles (seen on an emulator, both ways); each now has its own name.

Whats-New: The location map keeps its size, the list of places pulls up over it, and search opens its own screen with kinds and distances.
Whats-New-De: Die Ortskarte behält ihre Größe, die Ortsliste lässt sich über sie ziehen, und die Suche öffnet sich als eigene Seite mit Art und Entfernung.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:42 +01:00
ce07fab193
feat(todo): a pin in the map's middle, and what is around it (ADR 0033, D32)
The location picker fills the screen with its map, the search floating
over it. A pin stays in the middle, lifting while the map moves, as
Molly's; where it lands the instance names the address and lists the
places around, as Threema's. That is `nearby` on the search endpoint,
for those signed in, the point neither kept nor logged, counted among
the searches: two lookups, as a plain one finds house numbers alone.

Fixes the map's credit, which overflowed a phone and was pale on white.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:41 +01:00
5d9c640e5a
feat(todo): a location's search goes through the instance (ADR 0033, D32)
The picker now searches with the server's `search`, and says search
isn't available where the instance has no Photon rather than that it
failed. A debug build may still ask for komoot's public one, for an
instance without. A point on the map stays unnamed through the instance,
which searches by name alone.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-07 21:49:41 +01:00
31ff8d7e91
feat(todo): the Plan beside Upcoming, with what has no date (ADR 0033, D34)
Upcoming's 3-day grid gets the Plan Today's calendar has, through what
the two tabs now share (PlanHost). Its new last group holds the open
tasks of no day, so a week can be planned from the Inbox by dropping them
on an hour; they aren't counted on the button, which says what is due.

Whats-New: Upcoming's 3-day view has the Plan too, and tasks without a date can be dragged from it onto any day.
Whats-New-De: Auch die 3-Tage-Ansicht unter Demnächst hat den Plan, und Aufgaben ohne Datum lassen sich von dort auf jeden Tag ziehen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:27 +01:00
4aec923476
feat(todo): side panes widen by their line, and a tap adds a task (ADR 0033, D33)
The line beside the task pane and Today's Plan is dragged, between 300 px
for the pane and 360 px beside it, each pane's width kept on the device.
A tap or click in the hour grid opens quick add at the quarter hour under
it, on a phone too, as where it lands says when; a long press takes
quarter hours as well. A tap that stops the day scrolling adds nothing.

Whats-New: Drag the line beside a task or the Plan to resize it; tap or click into the calendar to add a task at that time.
Whats-New-De: Ziehe die Linie neben einer Aufgabe oder dem Plan, um die Breite zu ändern; tippe oder klicke in den Kalender, um dort eine Aufgabe anzulegen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:27 +01:00
8628d80d89
fix(todo): the calendar's arrows stay put at the left
The month's Flexible and the Spacer shared what was left of the row, so
the arrows sat somewhere in the middle and moved as the way back to
today showed. They come first now, where nothing beside them moves them.

Whats-New: The calendar's arrows in Upcoming stay in one place at the left.
Whats-New-De: Die Pfeile im Kalender unter Demnächst bleiben links an ihrem Platz.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:26 +01:00
a7385e2169
feat(todo): places are watched by a quiet service, and asked to notify (ADR 0033, D32)
The first walk showed two faults. Android gives a proximity alert of an
app in the background a fix every 30 minutes (17:04:38, then 17:34:43 on
the Pixel), so a short stop goes unseen. And the place did remind, at
17:36:43, but nothing had asked to notify, so Android showed nothing.

A foreground service of the type location now takes its own fixes while
places wait, under the quietest notification there is: as long as
reaching the nearest circle takes at 30 m/s, doubled while the phone
lies still, between 30 s and 5 min. A place with a reminder asks to
notify as any reminder does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:26 +01:00
e669c8d5b0
feat(todo): reminders on arriving and leaving, on Android (ADR 0033, D32)
The system's proximity alerts, 150 m, no Google services, with a two-minute
dwell so that driving past doesn't remind (LocationDwell, with JUnit tests):
once a task until it changes, an alternative that reminded stopping the
task's others. Kept in the app's private preferences, registered anew after
a restart or an update. The position first, then "Allow all the time".
A debug build logs to `adb logcat -s HalkyonLocation`, and installs beside
the release as app.halkyon.todo.debug, "Todo Debug". With both installed
Android asks which answers SimpleLogin's way back, the scheme the instance
allows being one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:25 +01:00
77d6a5528c
feat(todo): pick a place on a map, for quick add and a task's Where (ADR 0033, D32)
The location picker searches by city or district and name through
PlaceSearchGateway, its results a list and pins on Train's OpenFreeMap map,
or takes a pin placed by hand; recent places, and None, Arrive or Leave.
TodoDependencies.places is the seam for the instance's search; until then
komoot's public Photon, in a debug build asked for it alone. Quick add has
`+` suggestions, an entry in its + menu and a pin button; the task sheet a
Where box; a task's row the place's name.

ReminderScheduler plans the places to watch into LocationReminderGateway,
a no-op off Android, which TodoPerson.dispose clears, and Settings' Reminders
says while the device may not watch them.

Whats-New: Tasks can have locations: type + or use the + menu, search by city and name or pick on the map, and be reminded on arriving or leaving (Android).
Whats-New-De: Aufgaben können Orte haben: Tippe + oder nutze das +-Menü, suche nach Stadt und Name oder wähle auf der Karte, und lass dich beim Ankommen oder Verlassen erinnern (Android).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:24 +01:00
1db888a679
feat(todo): a task's locations, in its payload and as quick add's + (ADR 0033, D32)
TaskLocation (name, address, position, optional OSM ID, reminder) goes in
the sealed payload as `locations`, schema still 1; recent places are read
from the tasks. parseQuickAdd takes `+name` of a place named before, the
longest name first, kept as text as any other token (D29); an unknown
`+word` stays text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:59:24 +01:00
6ee7aeabc0
fix(todo): Today's tab centres its day in the calendar
The day stood on the calendar's bottom edge: a line box's place in the
space below the calendar's line was the font's to choose. It is placed by
its baseline now.

Whats-New: Today's tab shows its day centred in the calendar.
Whats-New-De: Der Heute-Tab zeigt den Tag mittig im Kalender.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 22:55:23 +01:00
82f1bf2739
fix(todo): the permission to notify asked wherever a reminder is planned, and Settings saying while it is off (ADR 0033, D31)
On a fresh install Todo's reminders never showed: the permission to notify
(Android 13's POST_NOTIFICATIONS, iOS' and macOS' alert) was asked only
where a task's sheet chose its first reminder, so reminders typed in quick
add, added by the automatic reminder or brought by sync were scheduled and
dropped by the system without a word.

Now NotificationAccess, the device's, reads whether notifications are
allowed whenever the plan holds a reminder and asks where they aren't,
once an app start, so that a refusal isn't met with the dialog again and
again; the task sheet asks through it. While reminders are planned and
notifications are off, Settings' Reminders say so, with Turn on: asked
again, and where that doesn't allow it, the system's notification settings
of the app opened (flutter_local_notifications' own call, nothing added).
Read again whenever the app comes back.

Whats-New: Todo asks to notify as soon as there is a reminder, and Settings › Reminders shows when notifications are off, with Turn on.
Whats-New-De: Todo fragt nach Benachrichtigungen, sobald es eine Erinnerung gibt, und Einstellungen › Erinnerungen zeigt, wenn sie aus sind, mit Einschalten.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:43 +01:00
d49331b210
fix(todo): reminders at the minute on Android 13 on, through USE_EXACT_ALARM (ADR 0033, D31)
SCHEDULE_EXACT_ALARM is off from Android 14 on until the person allows it
in Alarms & reminders, so every reminder was scheduled inexact and could
come minutes late. USE_EXACT_ALARM is granted with the install to an app
reminding of what a person planned, and AlarmManager.canScheduleExactAlarms
(which flutter_local_notifications' canScheduleExactNotifications asks) is
true with it, so reminders are exactAllowWhileIdle. SCHEDULE_EXACT_ALARM
stays for Android 12 and 12L, which don't know the other, up to API 32.

Whats-New: Reminders arrive on the minute.
Whats-New-De: Erinnerungen kommen auf die Minute.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:43 +01:00
574b379f11
feat(todo): Today laid out as a calendar, planned from its Plan by dragging, as Todoist's desktop Today (ADR 0033, D30)
The developer asked for Todoist's desktop Today planning: a day of hours
and a Plan beside it, tasks dragged from it onto an hour. Today gets a
Display, its layout alone (List or Calendar), kept in the person's sealed
settings row as Upcoming's (`TodayView`, the payload's `today`, schema
still 1). Its Calendar is one day of `HourGrid`; *Plan: n* in its app bar
shows or hides the Plan (`PlanPanel`): Overdue with Reschedule, To plan
(today's without a time) and Time-blocked (today's with one), each
folding with its count, narrowed for the session by *All projects*'
Filter by project (a search and a box a project, a sub-project with its
parents' path). A row dropped on an hour is moved to today at that time,
its duration kept; a block dropped on the Plan loses its time; both undone
from the snack bar, through `moveTask`. From a medium width of Today's own
on the Plan stands beside the day, shown or hidden as remembered; on a
phone it is a sheet over the day's foot (the developer's choice, over the
Plan on wide windows alone and over a strip above the day), part of the
screen rather than a modal route, so that the day behind it takes the
drop, and it lowers to its heading while one of its rows is held.

Whats-New: Today's Display offers a Calendar layout: today's hours, with a Plan of what is overdue, to plan and time-blocked, whose tasks you drag onto an hour.
Whats-New-De: Die Anzeige von Heute bietet das Layout Kalender: die Stunden des Tages, mit einem Plan aus Überfälligem, Zu planen und Eingeplant, dessen Aufgaben du auf eine Stunde ziehst.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:43 +01:00
c53ce30ff5
feat(todo): Upcoming's 3-day grid becomes a grid of any number of days, with a line at the time now
Today's Calendar (ADR 0033, D30) is one day of the same hours, so the
grid takes its number of days (`HourGrid`, `days`; D17's `ThreeDayGrid`
renamed): with one day it has no day names, no arrows nor swipe and no
Overdue button, which Today's Plan holds instead. It also takes the hour
it opens at and the room below its last hour, and draws a line at the
time it is now across today, its time in cerise in the hours' column,
again each minute, as Todoist's does.

Whats-New: Upcoming's 3-day view shows a line at the time it is now.
Whats-New-De: Die Ansicht „3 Tage“ in Demnächst zeigt eine Linie bei der aktuellen Uhrzeit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:42 +01:00
aac7d106aa
feat(todo): quick add's last button dictates the title while it is empty (ADR 0033, D29)
As Todoist's bar and Learn's assistant field (ADR 0021, D69): while the
title is empty its last button is the microphone, filled as the send
button is, dictating where the cursor stands and listening again after
each pause through halkyon_app's Dictation; what is said is read as if
typed. It shows a stop button while listening and the send button once
there is text, or alone where nothing recognises speech (Linux). A
phone without a recogniser is told how to get one.

Todo gets the device's speech input in its dependencies, and declares
the microphone and the recognition service on Android, the usage texts
on iOS and macOS and the audio input entitlement on macOS, as Learn
does.

Whats-New: Add task's last button is a microphone while the task has no name yet: say the task, dates included.
Whats-New-De: Der letzte Knopf von „Aufgabe hinzufügen“ ist ein Mikrofon, solange die Aufgabe noch keinen Namen hat: Sprich die Aufgabe, Daten eingeschlossen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:42 +01:00
8b13cbcf2b
feat(todo): quick add keeps a word as text where it stands, and from Backspace (ADR 0033, D29)
A word tapped was kept as text by its text, so in "Watch The Daily Show
Daily" tapping the first "Daily" also stopped the second one making the
task repeat (the developer's example). Kept words are now ranges of the
title that follow its edits (`shiftKept`: ranges after the edit move by
its length, one it touches is dropped), and the parser leaves a token
overlapping one of them as text, wherever else the same word stands.

Backspace right after a highlighted word keeps it as text instead of
deleting its last character, as Todoist's; the next Backspace deletes.
It is an input formatter, so the keyboard is given the text back. The
hint under the title says so.

Whats-New: In Add task, only the word you tap stays text; the same word elsewhere still counts.
Whats-New: In Add task, Backspace right after a highlighted word keeps it as text.
Whats-New-De: In „Aufgabe hinzufügen“ bleibt nur das angetippte Wort Text; dasselbe Wort an anderer Stelle zählt weiter.
Whats-New-De: In „Aufgabe hinzufügen“ behält die Rücktaste direkt nach einem hervorgehobenen Wort es als Text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:41 +01:00
0f8a559d2e
fix(todo): quick add highlights a word while the keyboard still composes it
On Android, keyboards with suggestions (Gboard) and Japanese ones keep
the word being typed composing until a space. The title's controller
fell back to the plain composing span whenever a composing range was
set, so "today" lit up only after the space or once the keyboard
closed. It now always draws the tokens' highlight, cut where a token or
the composing range starts or ends, with the composing underline on top
where they overlap.

Whats-New: Add task highlights dates and other words as you type them, not only after a space.
Whats-New-De: „Aufgabe hinzufügen“ hebt Daten und andere Wörter schon beim Tippen hervor, nicht erst nach einem Leerzeichen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:41 +01:00
a2384dcbfe
feat(todo): Settings choose the app's appearance and language
The developer asked for Todo to offer what Learn's Settings offer first
(ADR 0014's amendment of 4 Nov 2026). Todo passed a fixed look, the
system's theme and language; it now opens halkyon_app's LookCubit on
<app support>/look.json in main, provides it above InstanceGate, and its
start screens and each person's MaterialApp follow it. Settings show
DeviceLookCard right after the Sync and operator's cards, as Learn's,
offering English (UK), English (US) and Deutsch (todoLanguages).

Whats-New: Settings: choose the app's appearance and language.
Whats-New-De: Einstellungen: Darstellung und Sprache der App wählen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:40 +01:00
5cc894aff7
feat(todo): a task's title field hints "Task name", as Todoist's
The title's placeholder in quick add and in a task's sheet read "What's
to be done?"; the developer asked for Todoist's plainer "Task name"
("Aufgabenname").

Whats-New: A task's title field now says "Task name".
Whats-New-De: Das Titelfeld einer Aufgabe zeigt jetzt „Aufgabenname“.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:36 +01:00
d0e72cf095
feat(todo): a project's editor as Todoist's Add project, with sub-projects and favourites
Adding or editing a project was a dialog of a name and a colour. It is
now a screen of its own on a phone (a dialog where sheets are dialogs),
as Todoist's Add project: the name counted to 120, a description, the
colour, the parent project, a Favourite switch and the layout, Display's
pictures. All of it lives in the project's sealed payload, the schema
still 1, no server model or migration; the payload now keeps fields it
doesn't know, as a task's does.

A new project starts with the layout picked, and Display's Reset all
returns to that default rather than to List. Browse lists sub-projects
indented and folding under their parents, and the favourites in a group
above; a project is never offered as its own ancestor, and a parent's
deletion takes its sub-projects, naming them first, as Todoist's. ADR
0033, D28.

Whats-New: Add project and Edit project are a screen of their own, with a description, a parent project, Favourite and the layout.
Whats-New: Browse lists sub-projects under their parents and your favourite projects at the top.
Whats-New: Reset all in Display returns to the layout the project was made with.
Whats-New-De: „Projekt hinzufügen“ und „Projekt bearbeiten“ sind eine eigene Seite, mit Beschreibung, übergeordnetem Projekt, Favorit und Layout.
Whats-New-De: „Übersicht“ zeigt Unterprojekte unter ihren Projekten und deine Favoriten oben.
Whats-New-De: „Alles zurücksetzen“ in der Anzeige kehrt zum Layout zurück, mit dem das Projekt angelegt wurde.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:36 +01:00
e11ed481ce
feat(todo): a sub-task opens in its task's sheet, back returning to it
A sub-task tapped in a task's sheet opened a sheet of its own over it,
so Grocery List > Dairy > Milk stacked three. It now takes the sheet's
place, as the steps of the sheet's path already did (TaskTile's onOpen),
and the sheet keeps the tasks it showed: the system's back returns to
the last. Back is caught with a BackButtonListener, not a PopScope,
which would also hold back a tap beside the sheet, a swipe and Escape:
those close the sheet whole. A picker open over the sheet is closed by
back first.

Whats-New: A sub-task opens in its task's sheet instead of over it; back returns to the task.
Whats-New-De: Eine Unteraufgabe öffnet sich im Blatt ihrer Aufgabe statt darüber; Zurück führt zur Aufgabe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:35 +01:00
a71d80fc2d
fix(todo): a task row's check stands by its title's first line
The round check sat in the middle of the row, so on a row with a
description, a date or a long title it stood below the title. As
Todoist's it now stands by the title's first line. ListTile centres its
leading or tops it at its padding, never at the title's line, so the
check and the texts share the tile's title, the texts lowered by half
of what the check's 48 dp tap target is taller than a line (computed
from the text scale, the tap target kept).

Whats-New: A task's circle stands beside the first line of its title.
Whats-New-De: Der Kreis einer Aufgabe steht neben der ersten Zeile ihres Titels.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:34 +01:00
8a677e0845
feat(todo): Today counts its tasks under its title
As Todoist's, Today's app bar says how many tasks it holds, those
overdue and those due today together ("3 tasks"). TabScreen takes an
optional subtitle for it, left out while tasks are being chosen, when
the title counts those instead.

Whats-New: Today says how many tasks are overdue or due today under its title.
Whats-New-De: „Heute“ zeigt unter dem Titel, wie viele Aufgaben überfällig oder heute fällig sind.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:34 +01:00
b043d5ef9e
fix(todo): editing a project keeps its Display
Edit project built the project anew from its name, colour and position,
so saving it reset its Display (layout, grouping, sorting, filters) to
the first one. It now changes the name and colour of the project as it
is.

Whats-New: Editing a project no longer resets its Display.
Whats-New-De: Ein Projekt zu bearbeiten setzt seine Anzeige nicht mehr zurück.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:34 +01:00
33917c6042
fix(todo): a time picked in the date sheet kept however the sheet closes
The date sheet returned a date only from its days and No date: a time or
a duration picked and the sheet then closed by its X, a swipe or a tap
beside it gave nothing back, so the task kept no time. The sheet now
keeps the date the time makes as it is picked, on the task's day or
today where it had none (as Todoist), and pickTaskDate returns it when
the sheet closes without a choice. Quick add uses the same sheet.

Whats-New: A time picked for a task's date is kept, however you close the Date sheet.
Whats-New-De: Eine Uhrzeit für das Datum einer Aufgabe bleibt, wie auch immer du das Blatt „Datum“ schließt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-05 08:58:33 +01:00
ef80453fa0
feat(todo,meditate): what a setting does behind its question mark
The developer's review of 3 Nov 2026 (ADR 0033, D25): an explanation stands
one tap away, behind halkyon_ui's HelpButton beside the setting's name,
rather than always below it. Todo: resetting sub-tasks, the automatic
reminder (its value stays below), counting a recurrence from completion.
Meditate: keeping the screen on, the streak, the morning's dream prompt.
What is the person's own (a value, a count) stays in view; an empty list's
message and quick add's hint about highlighted words, shown only while
there are some, stay too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:32:08 +01:00
140a283d0e
feat(todo): a task's sheet partway up and its parts in rounded boxes, as Todoist's
The developer's review of 3 Nov 2026 (ADR 0033, D24): on a phone the sheet
opens as high as its content, at most 65 % of the window, the list above it
in view, and is dragged up to the whole window or down to close; its title,
description, date and reminders each in a rounded box, its priority, labels,
deadline and project as a row of chips (named "Priority", "Labels",
"Deadline" while unset), and its sub-tasks in a box ending in Add sub-task.
Where sheets are dialogs, and in the pane beside the list, the same parts.
Todo keeps no comments, so the sheet has no comment field.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:32:07 +01:00
8438caa489
feat(todo): quick add a small bar docked above the keyboard, as Todoist's
The developer's review of 3 Nov 2026 (ADR 0033, D23): in place of the tall
sheet with its title and Add button, a rounded bar just above the keyboard,
the list still in view behind a lighter barrier: the title, then a row of
boxed buttons (+ for the description and the deadline, the date, the
priority, the labels, the project), each its icon alone until something is
set, and a send button. Its buttons show from the start rather than once
typing begins (D15 had them come with the first letter). Where sheets are
dialogs, the same bar in a dialog.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:32:07 +01:00
c7ad78f88d
feat(todo): Display's layouts as pictures with radio buttons, its rows grouped in rounded boxes
As Todoist's (the developer's review of 3 Nov 2026, ADR 0033, D22): each
layout a phone's outline with its picture, its name below on one line (no
"Calenda/r" split across two), a radio button marking the one in use; the
switches, the sorting and the filters each a group in a rounded box under a
plain heading.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:32:06 +01:00
753527aed3
feat(todo): rows in rounded boxes, Today as Todoist's, lists pulled to sync, a project's own colour
From the developer's review of 3 Nov 2026 (ADR 0033, D19 to D21):
- Today's tab shows today's day in its calendar, Browse the menu's lines,
  Display's button Lucide's square-menu.
- A task's row stands in a rounded box, the rows of a list a group rounded
  at its ends; the box is the row's own surface, so a chosen row's colour no
  longer shows under Upcoming's pinned week strip as the list scrolls. Its
  project and section end the line of its date at the row's right edge.
- Today has at most two groups: what is overdue, folding under its heading,
  and today's, headed "Tuesday, 3 Nov" ("Dienstag, 3. Nov."), without a
  "· Today" after it; Upcoming's days take the same form.
- Upcoming's way back to today shows whenever another day is picked.
- Today, Upcoming, the Inbox and every project pulled down sync now, an
  empty list too, as Learn's.
- A project's screen washes in its own colour, as a studyset's in Learn.
- "Add section" in place of "New section".

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:32:06 +01:00
f5b657dfad
feat(todo): reminders at a time of their own planned and set in a task's sheet, durations in its date sheet
planReminders plans each reminder at a time of its own of an open task,
whatever its date, under an ID of its own; the notification says
"Reminder" for a task without a time. The task's sheet always has its
reminders' row: those before its time where it has one, those at a time
of their own each with its remove button and "Remind at a time" (a day,
then a time), the permission asked as a first one is chosen. The date
sheet sets a duration once there is a time (none, 15 minutes to 4
hours, as Todoist's), a time cleared taking it with it. Recorded as
ADR 0033, D18 (the developer's, 3 Nov 2026).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:31:55 +01:00
d40eca6e50
feat(todo): quick add reads on before a day, durations, every !30m and !1pm
`on` (German `am`) before a day is taken with it, as `at` before a time;
`for 2h`, `for 1h30m`, `for 90 min`, `für 1,5 Std.` set the date's
duration where there is a time, and stay text without one; every `!30m`
counts, each once, sorted, a task without a date due at the latest; and
`!1pm`, `!13:00`, `!tomorrow 9am`, `!Monday 8:30` are reminders at a time
of their own, a time without a day on the task's day, else the next to
come. Todoist's newsletter's four examples parse whole (ADR 0033, D18).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Tizian 「ティツィアーン」 <raisondetredev@pm.me>
2026-11-04 09:31:55 +01:00