fix: address code-review findings on the 2.16.0 branch
Correctness: - Recurring writes: move the series DTSTART by the *wall-clock* shift applied to the edited occurrence and re-resolve it in the event's zone, instead of by a millisecond delta. The old delta baked in whichever UTC offset applied on the edited occurrence's date, so pinning a recurring event to another zone — or editing an occurrence on the far side of a DST boundary from the series anchor — shifted the whole series by an hour. Also snaps the anchor to a UTC midnight when the event becomes all-day. - Detail card and edit form now resolve a pinned zone's abbreviation/offset at the *event's* instant, not at "now", so a July event no longer reads "CET · 10:00 AM" when opened in January. - Agenda: the zone used to label multi-day rows now travels on AgendaUiState.Success rather than a process-lifetime file-level constant, so labelling can't disagree with the grouping after a device time-zone change. - Week title: spell out the year when the week straddles New Year, via a new forceYear flag on formatCalendarTitle. Performance: - Build the ~600-entry zone catalogue off the main thread (produceState + Dispatchers.Default); resolve the device row's summary on its own so it still renders complete on the first frame. - Pre-normalize each TimeZoneOption's search keys at construction, turning ~2400 NFD normalizations per keystroke into plain prefix/substring checks. Hoist the combining-mark Regex out of the hot path. - Key the edit form's local-time line on the fields it reads instead of recomputing it on every keystroke. - Move LauncherNameManager's PackageManager binder calls off the main thread. Cleanup: - Drop a duplicate Public icon import and the unused event_edit_timezone_clear string. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -110,7 +110,6 @@
|
||||
<string name="event_edit_timezone_recent">Recent</string>
|
||||
<string name="event_edit_timezone_all">All time zones</string>
|
||||
<string name="event_edit_timezone_none">No time zone matches “%1$s”</string>
|
||||
<string name="event_edit_timezone_clear">Use device zone</string>
|
||||
<!-- Shown under the time fields when the event is pinned to another zone:
|
||||
the same event expressed where the user actually is. %1$s is a time
|
||||
range, e.g. "2:00 PM – 3:00 PM". -->
|
||||
|
||||
Reference in New Issue
Block a user