From e2bce099f35862621c1249319172866bda0994dc Mon Sep 17 00:00:00 2001 From: inventory69 Date: Tue, 10 Feb 2026 16:47:02 +0100 Subject: [PATCH] fix(v1.8.0): IMPL_06 Resolve ClickableText deprecation warning - Replace deprecated ClickableText with modern Text + LinkAnnotation API - Update imports: remove ClickableText, add LinkAnnotation & withLink - Use TextLinkStyles for styled clickable links in changelog - Maintain URL click functionality without deprecated API - Update CHANGELOG.md with missing IMPL_04 & IMPL_06 feature details - Update CHANGELOG.de.md with matching German translations - Add Backup Settings Progress improvements to changelog - Add Post-Update Changelog Dialog documentation - Verify all 23 v1.8.0 features documented in changelog Resolves deprecation warning in Kotlin/Compose build. ClickableText is deprecated in favor of Text with LinkAnnotation for link handling. Migration maintains full functionality while using modern Compose APIs. Changelogs updated to include all major features from feature branch: IMPL_04 Backup Progress UI improvements and IMPL_06 Post-Update Changelog, marking v1.8.0 feature-complete with comprehensive documentation. Build: BUILD SUCCESSFUL - 0 Lint errors + 0 Deprecation warnings --- CHANGELOG.de.md | 17 ++++++++++ CHANGELOG.md | 17 ++++++++++ .../ui/main/UpdateChangelogSheet.kt | 32 ++++++++----------- 3 files changed, 47 insertions(+), 19 deletions(-) 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))