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>
This commit is contained in:
Tizian 「ティツィアーン」 2026-11-05 15:23:53 +01:00
commit 77d6a5528c
Signed by: raisondetredev
GPG key ID: 07F6FCF405488B64

View file

@ -1743,6 +1743,156 @@ abstract class AppLocalizations {
/// In en, this message translates to:
/// **'Filter by project'**
String get planFilterTitle;
/// Quick add's + menu and its button (ADR 0033, D32).
///
/// In en, this message translates to:
/// **'Location'**
String get locationTitle;
/// A task's Where, and the picker's button.
///
/// In en, this message translates to:
/// **'Add location'**
String get locationAdd;
/// The heading of a task's places.
///
/// In en, this message translates to:
/// **'Where'**
String get locationWhere;
/// Under a task's Where, with several places: they are alternatives.
///
/// In en, this message translates to:
/// **'Any of these'**
String get locationAnyOf;
/// The location picker's search field.
///
/// In en, this message translates to:
/// **'City or district, then the name'**
String get locationSearchHint;
/// Quick add, as + is typed.
///
/// In en, this message translates to:
/// **'Search for a place'**
String get locationSearchAny;
/// Quick add, as +something is typed.
///
/// In en, this message translates to:
/// **'Search for “{query}”'**
String locationSearchFor(String query);
/// The location picker without a place search.
///
/// In en, this message translates to:
/// **'Search isn\'t available here. Move the map and tap to place a pin.'**
String get locationSearchUnavailable;
/// The location picker after a failed search.
///
/// In en, this message translates to:
/// **'The search didn\'t work. Try again.'**
String get locationSearchFailed;
/// The location picker, a search without results.
///
/// In en, this message translates to:
/// **'Nothing found'**
String get locationNoResults;
/// The location picker's places of the person's tasks.
///
/// In en, this message translates to:
/// **'Recent'**
String get locationRecent;
/// The name of a pin placed by hand where nothing names the spot.
///
/// In en, this message translates to:
/// **'Pinned place'**
String get locationPin;
/// The name field of a pin placed by hand.
///
/// In en, this message translates to:
/// **'Name'**
String get locationName;
/// The map's button.
///
/// In en, this message translates to:
/// **'My position'**
String get locationMine;
/// A location's reminder.
///
/// In en, this message translates to:
/// **'No reminder'**
String get locationRemindNone;
/// A location's reminder.
///
/// In en, this message translates to:
/// **'On arriving'**
String get locationRemindArrive;
/// A location's reminder.
///
/// In en, this message translates to:
/// **'On leaving'**
String get locationRemindLeave;
/// A task's location's menu.
///
/// In en, this message translates to:
/// **'Remove'**
String get locationRemove;
/// Before asking for the position in the background.
///
/// In en, this message translates to:
/// **'Allow location all the time'**
String get locationAccessTitle;
/// Before asking for the position in the background.
///
/// In en, this message translates to:
/// **'To remind you when you arrive or leave, Halkyon Todo needs your position while it is closed too. It stays on this device. Next, choose “Allow all the time”.'**
String get locationAccessHint;
/// Before asking for the position in the background.
///
/// In en, this message translates to:
/// **'Continue'**
String get locationAccessGo;
/// Settings' Reminders while places are planned and may not be watched.
///
/// In en, this message translates to:
/// **'Location is off for reminders'**
String get locationOffTitle;
/// Settings' Reminders while places are planned and may not be watched.
///
/// In en, this message translates to:
/// **'Reminders at a place need “Allow all the time”.'**
String get locationOffHint;
/// A reminder on arriving, below the task's title.
///
/// In en, this message translates to:
/// **'You\'re at {name}'**
String locationArrived(String name);
/// A reminder on leaving, below the task's title.
///
/// In en, this message translates to:
/// **'You\'ve left {name}'**
String locationLeft(String name);
}
class _AppLocalizationsDelegate