Give Backup & restore its loading and failure states (#314)
Backup & restore built its rows straight from the calendar list. That list starts empty, catches to empty on a provider error, and can legitimately load with nothing exportable and nothing importable — all three rendered as a blank page with no buttons at all. - `BackupUiState` (Loading / Failure / Ready) on `CalendarsViewModel`, mirroring the `FilterUiState` pattern already used elsewhere. - The restore row stays on screen whenever the screen shows anything at all. When no calendar can receive events it says so and routes to the calendar manager — whose row labels already explain per calendar *why* (read-only, managed, not synced) — instead of disappearing. - New `FailureReason.NoImportTarget` for the case the list cannot explain on its own: calendars exist and are visible, but none can take an event. - Export stays available on an all-hidden device. It reads the provider directly, so `calendarListFailure` on its own would have hidden a working action; the failure is raised only when both halves are dead. - `LocalManageCalendars` is now provided around `BackupScreen` (it sits directly over the manager, so the way out is popping back). Also adds `IcsGoogleImportTest` over a Google Calendar export fixture: `VTIMEZONE` with `X-LIC-LOCATION`, `TZID`-qualified `DTSTART`/`EXDATE`, folded `DESCRIPTION` and `ATTENDEE` lines, `RECURRENCE-ID` overrides as separate `VEVENT`s, escaped commas, all-day alarms. All 13 pass against the parser unchanged — the read side needed no fix. **Does not close #304.** The blank screen this fixes is real and reachable, but it needs the device to have no usable calendar at all; a working Google calendar satisfies `isEventTarget`, so that reporter would have seen the restore row. The actual cause there is still open — questions posted on the issue. This stands on its own as the missing loading and failure states. Refs #304 Co-authored-by: Jean-Luc Makiola <business@jeanlucmakiola.de> Reviewed-on: https://codeberg.org/jlmakiola/calendula/pulls/314
This commit is contained in:
@@ -11,12 +11,20 @@
|
||||
<string name="state_retry">Retry</string>
|
||||
<string name="state_failure_unknown">Something went wrong.</string>
|
||||
<string name="state_failure_permission">Calendar access is required.</string>
|
||||
<string name="state_failure_permission_body">Calendula reads your events straight from the system calendar, so it needs calendar access to show anything.</string>
|
||||
<string name="state_failure_permission_action">Grant access</string>
|
||||
<string name="state_failure_no_calendars">No calendars configured.</string>
|
||||
<string name="state_failure_no_calendars_body">Add a calendar account to this device and its calendars show up here.</string>
|
||||
<string name="state_failure_no_calendars_action">Open system calendar settings</string>
|
||||
<string name="state_failure_all_hidden">All your calendars are switched off.</string>
|
||||
<string name="state_failure_all_hidden_body">Switch at least one calendar back on to see its events.</string>
|
||||
<string name="state_failure_all_hidden_action">Manage calendars</string>
|
||||
<string name="state_failure_no_import_target">No calendar can take new events.</string>
|
||||
<string name="state_failure_no_import_target_body">The calendars that are switched on are read-only, managed by another app, or not synced to this device. Switch on a calendar that can take events, or add a local one.</string>
|
||||
<string name="state_failure_event_not_found">This event is no longer there.</string>
|
||||
<string name="state_failure_event_not_found_body">It may have been deleted, or moved to a calendar that is switched off.</string>
|
||||
<string name="state_failure_provider">Could not read the calendar.</string>
|
||||
<string name="state_failure_provider_body">The system calendar did not answer. Try again in a moment.</string>
|
||||
|
||||
<!-- Long-press a field to copy it (#195) -->
|
||||
<string name="field_copy_action">Copy</string>
|
||||
@@ -679,6 +687,7 @@
|
||||
<string name="calendars_restore_header">Restore</string>
|
||||
<string name="calendars_restore_action">Restore from .ics file</string>
|
||||
<string name="calendars_restore_hint">Import events from a backup or another calendar app.</string>
|
||||
<string name="calendars_restore_unavailable">No calendar can take the imported events yet.</string>
|
||||
<string name="calendars_auto_backup">Automatic backup</string>
|
||||
<string name="calendars_auto_backup_hint">Periodically export your local calendars to a folder as an .ics file.</string>
|
||||
<string name="calendars_auto_backup_folder">Backup folder</string>
|
||||
|
||||
Reference in New Issue
Block a user