Commit graph

247 commits

Author SHA1 Message Date
Jens Reinemann
5edaa06ecf chore: release v1.7.27 2026-05-19 22:09:55 +02:00
Jens Reinemann
f3c440b5a9 fix(messaging): unread badge not shown – observeValue now reads sensitive keys from SecureTokenStorage 2026-05-19 22:06:27 +02:00
Jens Reinemann
16576045a0 fix(ui): change resources nav icon from LibraryBooks to MenuBook 2026-05-19 21:08:36 +02:00
Jens Reinemann
9a7a666bfa chore: release v1.7.26 2026-05-19 07:21:14 +02:00
Jens Reinemann
de94e3371a feat(admin): Ressourcen-UI mit Paging, Suche, Sortierung, Filter und Gruppierung
Komplett clientseitige Implementierung (alle Ressourcen werden einmal geladen,
dann in-memory gefiltert/sortiert/paginiert).

- Suche: Freitext über Titel und Autor (sofort-Filter via oninput)
- Sortierung: Titel, Autor, Hochgeladen, Größe (A-Z/Z-A, asc/desc)
  Klickbare Tabellen-Header mit Sortierungspfeilen (↑↓)
- Filter-Dropdowns: Format (ePub/PDF), Autor, Kategorie (Tag)
  Dropdowns werden dynamisch aus geladenen Daten befüllt
- Gruppierung: Optional nach Typ/Autor/Kategorie mit visuellen Gruppen-Trennzeilen
- Paging: 20/50/100 Einträge pro Seite, Vor/Zurück + Seitenzahlen (5 sichtbar)
  Anzeige: 'Zeigt 1–20 von 138 · Seite 1 von 7'
- CSS: #resources-table th sortierbar (wie #inv-table)

Closes #130
2026-05-19 00:29:00 +02:00
Jens Reinemann
a84d130495 fix(resources): grant explicit URI permissions to all resolved activities before startActivity
Resolves 'Keine App gefunden' for ePub and PDF opening failures (e.g. Firefox).
FLAG_GRANT_READ_URI_PERMISSION alone is not sufficient when Android shows
the Chooser – each potential app must receive grantUriPermission() before
startActivity() is called.

- Extract openResourceFile() into FileOpenHelper.kt (eliminates DRY violation)
- Use PackageManager.ResolveInfoFlags (API 33+) with DEPRECATION suppress fallback
- Remove duplicate inline intent code from ResourceDetailScreen

Closes #129
2026-05-19 00:24:58 +02:00
Jens Reinemann
96375cb9ea infra(forgejo): add Forgejo service config and documentation for git.bollwerk.online 2026-05-19 00:13:39 +02:00
Jens Reinemann
557a4bcaf8 feat(auth): show delete-local-data dialog on logout for logged-in users 2026-05-19 00:10:17 +02:00
Jens Reinemann
320f0e8880 chore: release v1.7.25 2026-05-18 23:56:45 +02:00
Jens Reinemann
fd2eae227b feat(resources): compact cards, BottomSheet filter/sort (tags+format+language)
- Cards: title + author + overflow row (format, size, tags)
- Description removed from card (detail-only)
- SearchBar + FilterList icon (like Inventar)
- BottomSheet: Tags, Format, Sprache filter + Sortierung
- Crash-fix: catch exceptions in refresh()
2026-05-18 23:53:47 +02:00
Jens Reinemann
c24a32b033 release: v1.7.24 – ResourceDetailScreen with markdown rendering 2026-05-18 23:42:09 +02:00
Jens Reinemann
26117ac23f feat(app): add ResourceDetailScreen with markdown rendering and clickable cards
- ResourceDetailScreen: full metadata display, download button, markdown description
- ResourceListScreen: cards now clickable, navigates to detail view
- Navigation: added ResourceDetail route with guid parameter
- Dependencies: compose-markdown 0.5.4 (JitPack), added toRoute import
- settings.gradle.kts: added JitPack repository
2026-05-18 23:37:00 +02:00
Jens Reinemann
506374f35b fix(admin-ui): improve D&D confirm UX – spinner, success/error feedback, auto-reset 2026-05-18 23:22:05 +02:00
Jens Reinemann
e88e2d04c0 feat(server): add D&D resource upload with metadata extraction and tag suggestions
- Add ResourceAnalyzer: PDF (PDFBox), EPUB, image (EXIF/IPTC) metadata extraction
- Add POST /api/admin/resources/analyze + /confirm endpoints
- Add GET /api/admin/resources/tags with default tag seeding
- Admin UI: D&D zone, review panel with textarea description (4096 chars, MD), tag chips
- Dependencies: PDFBox 3.0.4, Commons Compress 1.27.1, metadata-extractor 2.19.0
2026-05-18 23:13:17 +02:00
Jens Reinemann
25c5f4675f chore: version bump 1.7.22 → 1.7.23 2026-05-18 22:28:33 +02:00
Jens Reinemann
2b33f930d0 feat(app): implement resource download + 'open with' dialog
Closes #123
2026-05-18 22:19:23 +02:00
Jens Reinemann
44476b21e6 feat(app): add ResourceListScreen + BottomBar navigation
Closes #122
2026-05-18 22:15:40 +02:00
Jens Reinemann
542fbb0941 feat(app): add ResourceEntity, Dao, Repository + DB migration 8→9
Closes #121
2026-05-18 22:10:51 +02:00
Jens Reinemann
6fc37ee203 fix(notification): wire up updateBadgeCount to launcher badge via setNumber() 2026-05-18 22:10:04 +02:00
Jens Reinemann
ab5aad8f3e feat(server): add REST-API for resources (CRUD + download)
Closes #120
2026-05-18 22:06:24 +02:00
Jens Reinemann
ab2cbff8ba fix(notification): set badge count via setNumber() for multi-sender notifications 2026-05-18 22:05:28 +02:00
Jens Reinemann
22112e7978 feat(server): add Resources table + docker volume + Caddy upload limit
Closes #119
2026-05-18 22:02:59 +02:00
Jens Reinemann
0b94a10acf chore: release v1.7.22 2026-05-18 22:01:44 +02:00
Jens Reinemann
332b814e14 feat(shared): add ResourceDto for resource catalog
Closes #118
2026-05-18 22:00:45 +02:00
Jens Reinemann
ae3cf3e660 fix(notification): minimize FGS notification visibility (bump channel to v2) 2026-05-18 21:59:58 +02:00
Jens Reinemann
5c187db1f9 chore: release v1.7.21 2026-05-18 21:46:15 +02:00
Jens Reinemann
afbec03ebb fix(item-form): make kcal label dynamic based on selected unit
Analogous to the price label, kcal now shows 'kcal pro [Einheit]'
based on the dropdown selection from #114.

Closes #115
2026-05-18 21:41:04 +02:00
Jens Reinemann
645578b66e feat(item-form): add unit dropdown with predefined list and custom option
Provides 8 predefined units (Stück, g, kg, ml, l, Packung, Dose, Flasche)
plus a custom input option. Normalizes legacy unit strings on app start.
Dynamic price label shows selected unit.

Closes #114
2026-05-18 21:39:24 +02:00
Jens Reinemann
975976fd06 feat(chat): add message pagination with cursor-based loading
Load initial 200 messages, auto-load older messages on scroll to top.
Uses cursor-based DAO queries for stable scroll position.
Also fixes pre-existing ackMessage compile errors in test fakes.

Closes #113
2026-05-18 21:32:47 +02:00
Jens Reinemann
7b21394cc6 fix(chat): increase message text size from bodyMedium to bodyLarge
Closes #112
2026-05-18 21:25:27 +02:00
Jens Reinemann
9eefa79c64 fix(notifications): merge FG-service and message notifications into one
Use a single notification ID (9999) for both idle foreground-service state
and incoming-message alerts. Shows sender name for 1 message, summary for
multiple senders. Cancelling resets to idle instead of removing.

Closes #111
2026-05-18 21:23:58 +02:00
Jens Reinemann
b7ef6af0a4 chore: release v1.7.20 2026-05-18 20:12:09 +02:00
Jens Reinemann
37fd66a417 fix(messaging): keyboard layout, message delivery ACK, background foreground service 2026-05-18 19:26:27 +02:00
Jens Reinemann
a6cc4ca4bf fix(ui): remove duplicate versionCode from update button label 2026-05-18 19:07:42 +02:00
Jens Reinemann
309f6961a5 chore: release v1.7.19 2026-05-18 19:00:14 +02:00
Jens Reinemann
93a52c5814 fix(sync): patchItemPartial upserts new items instead of returning 404 2026-05-18 18:58:34 +02:00
Jens Reinemann
6d5066e26a fix(sync): notify all co-users on inventory mutations (PATCH/DELETE/PUT) 2026-05-18 18:53:21 +02:00
Jens Reinemann
5a5e2548ac chore(db): Room-Schema v8 exportieren (is_read-Spalte) 2026-05-18 18:33:25 +02:00
Jens Reinemann
084b315b95 chore: release v1.7.18 2026-05-18 18:30:57 +02:00
Jens Reinemann
512829dd49 feat(messaging): ungelesene Nachrichten als Badges anzeigen (#110)
- DB-Migration 7→8: is_read-Spalte in messages (default 1 für bestehende Rows)
- DAO: getUnreadCountsBySender, getTotalUnreadCount, markConversationAsRead
- Repository: totalUnreadCount Flow + getUnreadCountsBySender() + markConversationAsRead()
- ChatViewModel: markConversationAsRead beim Öffnen/Empfangen
- UserListViewModel: unreadCounts StateFlow
- UserListScreen: rote Badge-Anzeige pro Chat
- MainViewModel: totalUnreadCount StateFlow
- MainScreen: BadgedBox am Nachrichten-Icon in Bottom Nav
- NotificationHelper: updateBadgeCount() für Launcher-Badge
- Tests: 3 neue Fälle, FakeDao+FakeRepo aktualisiert (328 Tests grün)
2026-05-18 18:28:49 +02:00
Jens Reinemann
06fa017c04 chore: update generaltest_admin_message.cpython-313.pyc, receive_admin_messages.cpython-313.pyc, send_admin_messages.cpython-313.pyc 2026-05-18 18:04:50 +02:00
Jens Reinemann
33c7ddb9ab fix(notification): suppress only when active chat is visible 2026-05-18 17:59:54 +02:00
Jens Reinemann
4ce585971d chore: release v1.7.17 2026-05-18 17:59:15 +02:00
Jens Reinemann
fb46c83f7b chore: release v1.7.16 2026-05-18 17:58:05 +02:00
Jens Reinemann
bce4abc1dd chore: release v1.7.15 2026-05-18 17:54:17 +02:00
Jens Reinemann
6fd8528577 feat(admin-message): simplify scripts, add inbox route, fix notification chat switch 2026-05-18 17:45:19 +02:00
Jens Reinemann
0a4d9fc20e fix(server): use CleartextKeysetHandle for admin E2EE encryption 2026-05-18 16:23:12 +02:00
Jens Reinemann
e0026b6eff fix(server): use direct Tink primitive for admin message encryption 2026-05-18 16:17:50 +02:00
Jens Reinemann
cd8290098c chore: remove accidental pycache artifact 2026-05-18 16:14:20 +02:00
Jens Reinemann
65913fa3b5 feat(server): token-only admin message API with sender/receiver usernames 2026-05-18 16:13:38 +02:00