diff --git a/CHANGELOG.de.md b/CHANGELOG.de.md index 2f74995..38d7540 100644 --- a/CHANGELOG.de.md +++ b/CHANGELOG.de.md @@ -93,6 +93,23 @@ Komplettes Widget-System mit interaktiven Checklisten, Notiz-Sortierung und umfa - Sync-Einstellungen umstrukturiert in klare Sektionen: Auslöser & Performance ([eaac5a0](https://github.com/inventory69/simple-notes-sync/commit/eaac5a0)) - Changelog-Link zum About-Screen hinzugefügt ([49810ff](https://github.com/inventory69/simple-notes-sync/commit/49810ff)) +**Post-Update Changelog-Dialog** ([661d9e0](https://github.com/inventory69/simple-notes-sync/commit/661d9e0)) +- Zeigt lokalisierten Changelog beim ersten Start nach Update +- Material 3 ModalBottomSheet mit Slide-up-Animation +- Lädt F-Droid Changelogs via Assets (Single Source of Truth) +- Einmalige Anzeige pro versionCode (gespeichert in SharedPreferences) +- Klickbarer GitHub-Link für vollständigen Changelog +- Durch Button oder Swipe-Geste schließbar +- Test-Modus in Debug-Einstellungen mit Reset-Option + +**Backup-Einstellungs-Verbesserungen** ([3e946ed](https://github.com/inventory69/simple-notes-sync/commit/3e946ed)) +- Neue BackupProgressCard mit LinearProgressIndicator +- 3-Phasen-Status-System: In Progress → Abschluss → Löschen +- Erfolgs-Status für 2s angezeigt, Fehler für 3s +- Redundante Toast-Nachrichten entfernt +- Buttons bleiben sichtbar und deaktiviert während Operationen +- Exception-Logging für besseres Error-Tracking + ### 🐛 Fehlerbehebungen **Widget-Text-Anzeige** ([d045d4d](https://github.com/inventory69/simple-notes-sync/commit/d045d4d)) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4214d36..22b99bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -93,6 +93,23 @@ Complete widget system with interactive checklists, note sorting, and major sync - Sync settings restructured into clear sections: Triggers & Performance ([eaac5a0](https://github.com/inventory69/simple-notes-sync/commit/eaac5a0)) - Changelog link added to About screen ([49810ff](https://github.com/inventory69/simple-notes-sync/commit/49810ff)) +**Post-Update Changelog Dialog** ([661d9e0](https://github.com/inventory69/simple-notes-sync/commit/661d9e0)) +- Shows localized changelog on first launch after update +- Material 3 ModalBottomSheet with slide-up animation +- Loads F-Droid changelogs via assets (single source of truth) +- One-time display per versionCode (stored in SharedPreferences) +- Clickable GitHub link for full changelog +- Dismissable via button or swipe gesture +- Test mode in Debug Settings with reset option + +**Backup Settings Improvements** ([3e946ed](https://github.com/inventory69/simple-notes-sync/commit/3e946ed)) +- New BackupProgressCard with LinearProgressIndicator +- 3-phase status system: In Progress → Completion → Clear +- Success status shown for 2s, errors for 3s +- Removed redundant toast messages +- Buttons stay visible and disabled during operations +- Exception logging for better error tracking + ### 🐛 Bug Fixes **Widget Text Display** ([d045d4d](https://github.com/inventory69/simple-notes-sync/commit/d045d4d)) diff --git a/android/app/src/main/java/dev/dettmer/simplenotes/ui/main/UpdateChangelogSheet.kt b/android/app/src/main/java/dev/dettmer/simplenotes/ui/main/UpdateChangelogSheet.kt index 0912b96..429c468 100644 --- a/android/app/src/main/java/dev/dettmer/simplenotes/ui/main/UpdateChangelogSheet.kt +++ b/android/app/src/main/java/dev/dettmer/simplenotes/ui/main/UpdateChangelogSheet.kt @@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.text.ClickableText import androidx.compose.material3.Button import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.MaterialTheme @@ -27,10 +26,12 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import dev.dettmer.simplenotes.BuildConfig @@ -107,19 +108,19 @@ fun UpdateChangelogSheet() { lines.forEachIndexed { index, line -> if (line.startsWith("http://") || line.startsWith("https://")) { // Make URLs clickable - pushStringAnnotation( - tag = "URL", - annotation = line.trim() - ) - withStyle( - style = SpanStyle( - color = MaterialTheme.colorScheme.primary, - textDecoration = TextDecoration.Underline + withLink( + LinkAnnotation.Url( + url = line.trim(), + styles = androidx.compose.ui.text.TextLinkStyles( + style = SpanStyle( + color = MaterialTheme.colorScheme.primary, + textDecoration = TextDecoration.Underline + ) + ) ) ) { append(line) } - pop() } else { append(line) } @@ -127,19 +128,12 @@ fun UpdateChangelogSheet() { } } - ClickableText( + Text( text = annotatedText, style = MaterialTheme.typography.bodyMedium.copy( color = MaterialTheme.colorScheme.onSurfaceVariant ), - modifier = Modifier.fillMaxWidth(), - onClick = { offset -> - annotatedText.getStringAnnotations(tag = "URL", start = offset, end = offset) - .firstOrNull()?.let { annotation -> - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(annotation.item)) - context.startActivity(intent) - } - } + modifier = Modifier.fillMaxWidth() ) Spacer(modifier = Modifier.height(24.dp))