feat(ics): import UI — open/receive .ics, 1-vs-many routing
Completes v2.7 Branch 2. Wires the import core into the app: - Manifest ACTION_VIEW/SEND for text/calendar; MainActivity parses the incoming Uri (content/file only, so calendula:// deep-links don't match) and routes it through RootScreen → CalendarHost like the other one-shot intents. - ImportViewModel reads + parses the file and routes by count: one event → the prefilled create form for review (EventEditViewModel.openImported, which freezes the reminder default so the file's reminders win); many → ImportScreen with a writable-calendar picker, then a bulk import (UID dedup) and a result summary. - ImportScreen also surfaces parser warnings (skipped recurrence overrides, ignored attendees, unknown-timezone fallback). Strings EN+DE. Package is ui.imports (not ui.import — Java keyword). lint + test + assembleDebug green. No v2.7 tag until on-device review. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -309,4 +309,32 @@
|
||||
<item quantity="one">%d Termin exportiert.</item>
|
||||
<item quantity="other">%d Termine exportiert.</item>
|
||||
</plurals>
|
||||
<!-- Import (.ics) -->
|
||||
<string name="import_title">Termine importieren</string>
|
||||
<string name="import_target_header">Zu Kalender hinzufügen</string>
|
||||
<string name="import_empty">In dieser Datei wurden keine Termine gefunden.</string>
|
||||
<string name="import_failed">Datei konnte nicht gelesen werden.</string>
|
||||
<string name="import_no_calendar">Kein beschreibbarer Kalender zum Importieren. Lege zuerst einen lokalen Kalender an.</string>
|
||||
<string name="import_done_title">Import abgeschlossen</string>
|
||||
<string name="import_close">Schließen</string>
|
||||
<string name="import_warning_recurrence">Einige geänderte Einzeltermine wiederkehrender Termine wurden übersprungen.</string>
|
||||
<string name="import_warning_no_start">Ein Termin ohne Startzeit wurde übersprungen.</string>
|
||||
<string name="import_warning_attendees">Gästelisten wurden nicht importiert.</string>
|
||||
<string name="import_warning_timezone">Eine unbekannte Zeitzone wurde durch die deines Geräts ersetzt.</string>
|
||||
<plurals name="import_event_count">
|
||||
<item quantity="one">%d Termin in dieser Datei.</item>
|
||||
<item quantity="other">%d Termine in dieser Datei.</item>
|
||||
</plurals>
|
||||
<plurals name="import_action">
|
||||
<item quantity="one">%d Termin importieren</item>
|
||||
<item quantity="other">%d Termine importieren</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_imported">
|
||||
<item quantity="one">%d Termin importiert.</item>
|
||||
<item quantity="other">%d Termine importiert.</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_skipped">
|
||||
<item quantity="one">%d bereits in diesem Kalender übersprungen.</item>
|
||||
<item quantity="other">%d bereits in diesem Kalender übersprungen.</item>
|
||||
</plurals>
|
||||
</resources>
|
||||
|
||||
@@ -306,6 +306,34 @@
|
||||
<item quantity="one">Exported %d event.</item>
|
||||
<item quantity="other">Exported %d events.</item>
|
||||
</plurals>
|
||||
<!-- Import (.ics) -->
|
||||
<string name="import_title">Import events</string>
|
||||
<string name="import_target_header">Add to calendar</string>
|
||||
<string name="import_empty">No events found in this file.</string>
|
||||
<string name="import_failed">Couldn\'t read this file.</string>
|
||||
<string name="import_no_calendar">No writable calendar to import into. Create a local calendar first.</string>
|
||||
<string name="import_done_title">Import complete</string>
|
||||
<string name="import_close">Close</string>
|
||||
<string name="import_warning_recurrence">Some changed occurrences of recurring events were skipped.</string>
|
||||
<string name="import_warning_no_start">An event without a start time was skipped.</string>
|
||||
<string name="import_warning_attendees">Guest lists weren\'t imported.</string>
|
||||
<string name="import_warning_timezone">An unknown time zone fell back to your device\'s.</string>
|
||||
<plurals name="import_event_count">
|
||||
<item quantity="one">%d event in this file.</item>
|
||||
<item quantity="other">%d events in this file.</item>
|
||||
</plurals>
|
||||
<plurals name="import_action">
|
||||
<item quantity="one">Import %d event</item>
|
||||
<item quantity="other">Import %d events</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_imported">
|
||||
<item quantity="one">Imported %d event.</item>
|
||||
<item quantity="other">Imported %d events.</item>
|
||||
</plurals>
|
||||
<plurals name="import_done_skipped">
|
||||
<item quantity="one">Skipped %d already in this calendar.</item>
|
||||
<item quantity="other">Skipped %d already in this calendar.</item>
|
||||
</plurals>
|
||||
<!-- Launcher long-press shortcuts -->
|
||||
<string name="shortcut_new_event_short">New event</string>
|
||||
<string name="shortcut_new_event_long">Create a new event</string>
|
||||
|
||||
Reference in New Issue
Block a user