# Placeholder Completion

Stand: 2026-03-06

## Vollständig umgesetzte Views (ehemals `Placeholder`)

1. `Datenschutz.vue` -> `DatenschutzScreen` (`/datenschutz`)
- Dateien: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/DatenschutzScreen.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/viewmodel/LegalViewModels.kt`
- Umsetzung: Compose-Legal-Screen mit strukturierten Abschnitten, ViewModel-State, Retry-Entry, Error/Loading-Struktur.
- API/Socket: keine.

2. `Impressum.vue` -> `ImpressumScreen` (`/impressum`)
- Dateien: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/ImpressumScreen.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/viewmodel/LegalViewModels.kt`
- Umsetzung: Compose-Legal-Screen mit Abschnitten, ViewModel-State, Retry-Entry, Error/Loading-Struktur.
- API/Socket: keine.

3. `LogsView.vue` -> `LogsScreen` (`/logs`)
- Dateien: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/LogsScreen.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/viewmodel/LogsViewModel.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/services/LogsService.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/repository/TrainingstagebuchRepository.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/repository/RepositoryMappers.kt`
- Umsetzung: Filter + Pagination + Liste + Detail-Dialog, Loading/Error/Retry, Snackbar/ErrorBanner.
- API/Socket: `GET /logs`, `GET /logs/{id}`; keine Socket-Events.

4. `MyTischtennisAccount.vue` -> `MyTischtennisAccountScreen` (`/mytischtennis-account`)
- Dateien: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/MyTischtennisAccountScreen.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/viewmodel/MyTischtennisAccountViewModel.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/services/MyTischtennisAccountService.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/repository/TrainingstagebuchRepository.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/repository/RepositoryMappers.kt`
- Umsetzung: Account laden/status laden, Account speichern, Verify-Login, Unlink, Loading/Error/Retry + Feedback.
- API/Socket: `GET /mytischtennis/account`, `GET /mytischtennis/status`, `POST /mytischtennis/verify`, `POST /mytischtennis/account`, `DELETE /mytischtennis/account`; keine Socket-Events.

5. `PersonalSettings.vue` -> `PersonalSettingsScreen` (`/personal-settings`)
- Dateien: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/PersonalSettingsScreen.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/viewmodel/PersonalSettingsViewModel.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/services/PersonalSettingsService.kt`, `android-app/app/src/main/java/de/trainingstagebuch/app/MainActivity.kt`
- Umsetzung: Sprachliste, Persistenz, Anwendung der Sprache per `AppCompatDelegate`, Loading/Error/Retry + Feedback.
- API/Socket: keine (lokale Persistenz).

## Zusätzliche Infrastruktur

- Alte Platzhalterdatei entfernt: `android-app/app/src/main/java/de/trainingstagebuch/app/ui/screens/PlaceholderScreens.kt`
- `AppServices` um neue Services erweitert (`Logs`, `MyTischtennisAccount`, `PersonalSettings`)
- Strings (de/en) für alle neuen Screens ergänzt.
- Mapper-Tests ergänzt in `android-app/app/src/test/java/de/trainingstagebuch/app/repository/RepositoryMappersTest.kt`.

## Offene Abweichungen zur Vue-Version

- `LogsView`: Web-spezifische visuelle Badge-/Tabellen-Details wurden in Android als native Listenansicht umgesetzt.
- `MyTischtennisAccount`: Web-Dialog-Komponenten wurden als inline-native Form/Actions umgesetzt; Fachfunktionen (load/save/verify/unlink) sind vorhanden.
- `Datenschutz/Impressum`: als native statische Legal-Screens mit gleichen Kerninhalten umgesetzt.
