Skip to content

Commit f6db107

Browse files
committed
v2.0.0 — Compose Rewrite & Multi-Theme
Complete rewrite: legacy Activities removed, full Jetpack Compose UI, WebDavSyncService split into 9 facade modules, LocalBroadcastManager → SharedFlow. New Features: - Multi-theme system with 7 color schemes (AMOLED, Dynamic Color) - Grid column scaling (1–5 columns) - Full app settings backup/restore - Material 3 shared axis transitions - Debug logging auto-disable dialog Bug Fixes: - Checklist drag-and-drop rewritten for long lists - Offline deletions queued for next sync - WebDAV 403 compatibility (Thanks @james0336 for reporting!) - Layout scaling for small screens (Danke an Mama <3) - Thread-safety, resource leaks, save-on-back race condition Architecture: - Legacy code removed (SettingsActivity, MainActivity, NoteEditorActivity, XML layouts) - WebDavSyncService → facade pattern (9 extracted modules) - R8/ProGuard optimized, APK size reduced License: MIT → Apache 2.0 Thanks to @happy-turtle and @isawaway for feature requests!
2 parents 7c1c7bf + 4fb4ef5 commit f6db107

197 files changed

Lines changed: 10442 additions & 14067 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 3 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
name: Build Android Production APK
22

33
on:
4-
push:
5-
branches: [ main ] # Only trigger on push/merge to main
6-
paths-ignore:
7-
- 'android/app/src/main/res/values-*/strings.xml' # Translation-only merges don't produce a release
8-
workflow_dispatch: # Enables manual trigger
4+
workflow_dispatch: # Manual trigger only
95

106
permissions:
11-
contents: write # Required for release creation
7+
contents: read
128

139
jobs:
1410
build:
@@ -36,8 +32,7 @@ jobs:
3632
3733
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
3834
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
39-
echo "VERSION_TAG=v$VERSION_NAME" >> $GITHUB_ENV
40-
35+
4136
echo "🚀 Building version: $VERSION_NAME (Code: $BUILD_NUMBER)"
4237
4338
- name: Verify version from build.gradle.kts
@@ -81,78 +76,4 @@ jobs:
8176
path: apk-output/*.apk
8277
retention-days: 90 # Keep production builds longer
8378

84-
- name: Extract commit information
85-
run: |
86-
echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
87-
echo "COMMIT_DATE=$(git log -1 --format=%cd --date=iso-strict)" >> $GITHUB_ENV
88-
89-
- name: Read F-Droid changelogs
90-
run: |
91-
# Read German changelog (main language) - Use printf to ensure proper formatting
92-
if [ -f "fastlane/metadata/android/de-DE/changelogs/${{ env.BUILD_NUMBER }}.txt" ]; then
93-
CHANGELOG_CONTENT=$(cat "fastlane/metadata/android/de-DE/changelogs/${{ env.BUILD_NUMBER }}.txt")
94-
echo "CHANGELOG_DE<<GHADELIMITER" >> $GITHUB_ENV
95-
echo "$CHANGELOG_CONTENT" >> $GITHUB_ENV
96-
echo "GHADELIMITER" >> $GITHUB_ENV
97-
else
98-
echo "CHANGELOG_DE=No German release notes available." >> $GITHUB_ENV
99-
fi
100-
101-
# Read English changelog (optional)
102-
if [ -f "fastlane/metadata/android/en-US/changelogs/${{ env.BUILD_NUMBER }}.txt" ]; then
103-
CHANGELOG_CONTENT_EN=$(cat "fastlane/metadata/android/en-US/changelogs/${{ env.BUILD_NUMBER }}.txt")
104-
echo "CHANGELOG_EN<<GHADELIMITER" >> $GITHUB_ENV
105-
echo "$CHANGELOG_CONTENT_EN" >> $GITHUB_ENV
106-
echo "GHADELIMITER" >> $GITHUB_ENV
107-
else
108-
echo "CHANGELOG_EN=" >> $GITHUB_ENV
109-
fi
110-
111-
- name: Create Production Release
112-
uses: softprops/action-gh-release@v1
113-
with:
114-
tag_name: ${{ env.VERSION_TAG }}
115-
name: "📝 Simple Notes Sync v${{ env.VERSION_NAME }}"
116-
files: apk-output/*.apk
117-
draft: false
118-
prerelease: false
119-
generate_release_notes: false
120-
body: |
121-
## 📋 Changelog / Release Notes
122-
123-
${{ env.CHANGELOG_EN }}
124-
125-
<details>
126-
<summary>🇩🇪 German Version</summary>
127-
128-
${{ env.CHANGELOG_DE }}
129-
130-
</details>
13179

132-
## 📦 Downloads
133-
134-
| Variant | File | Info |
135-
|---------|------|------|
136-
| **🏆 Recommended** | `simple-notes-sync-v${{ env.VERSION_NAME }}-standard.apk` | Standard version (works on all devices) |
137-
| F-Droid | `simple-notes-sync-v${{ env.VERSION_NAME }}-fdroid.apk` | For F-Droid Store |
138-
139-
## 📊 Build Info
140-
141-
- **Version:** ${{ env.VERSION_NAME }} (Code: ${{ env.BUILD_NUMBER }})
142-
- **Date:** ${{ env.COMMIT_DATE }}
143-
- **Commit:** ${{ env.SHORT_SHA }}
144-
145-
## 🔐 APK Signature Verification
146-
147-
All APKs are signed with the official release certificate.
148-
149-
**Recommended:** Verify with [AppVerifier](https://github.com/nicholson-lab/AppVerifier) (Android app)
150-
151-
**Expected SHA-256:**
152-
```
153-
42:A1:C6:13:BB:C6:73:04:5A:F3:DC:81:91:BF:9C:B6:45:6E:E4:4C:7D:CE:40:C7:CF:B5:66:FA:CB:69:F1:6A
154-
```
155-
156-
**[📖 Documentation](https://github.com/inventory69/simple-notes-sync/blob/main/QUICKSTART.md)** · **[🐛 Report Bug](https://github.com/inventory69/simple-notes-sync/issues)**
157-
env:
158-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

.github/workflows/release.yml

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
name: Release
2+
on:
3+
push:
4+
tags:
5+
- 'v*'
6+
jobs:
7+
build-and-release:
8+
runs-on: ubuntu-latest
9+
permissions:
10+
contents: write
11+
steps:
12+
- uses: actions/checkout@v4
13+
14+
- name: Set up JDK 17
15+
uses: actions/setup-java@v4
16+
with:
17+
java-version: '17'
18+
distribution: 'temurin'
19+
20+
- name: Setup Gradle
21+
uses: gradle/actions/setup-gradle@v4
22+
23+
- name: Extract version info
24+
id: version
25+
run: |
26+
VERSION=${GITHUB_REF_NAME#v}
27+
BUILD_NUMBER=$(grep "versionCode = " android/app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/')
28+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
29+
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_OUTPUT
30+
echo "🚀 Building version: $VERSION (Code: $BUILD_NUMBER)"
31+
32+
- name: Configure Android signing
33+
run: |
34+
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/simple-notes-release.jks
35+
echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties
36+
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
37+
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
38+
echo "storeFile=simple-notes-release.jks" >> android/key.properties
39+
echo "✅ Signing configuration created"
40+
41+
- name: Build release APKs
42+
run: cd android && ./gradlew assembleStandardRelease assembleFdroidRelease --no-daemon --stacktrace
43+
44+
- name: Run tests
45+
run: cd android && ./gradlew testFdroidReleaseUnitTest testStandardReleaseUnitTest
46+
47+
- name: Copy APKs with version names
48+
run: |
49+
mkdir -p apk-output
50+
cp android/app/build/outputs/apk/standard/release/app-standard-release.apk \
51+
apk-output/simple-notes-sync-v${{ steps.version.outputs.VERSION }}-standard.apk
52+
cp android/app/build/outputs/apk/fdroid/release/app-fdroid-release.apk \
53+
apk-output/simple-notes-sync-v${{ steps.version.outputs.VERSION }}-fdroid.apk
54+
echo "✅ APK files prepared:"
55+
ls -lh apk-output/
56+
57+
- name: Read F-Droid changelogs
58+
run: |
59+
BUILD_NUMBER=${{ steps.version.outputs.BUILD_NUMBER }}
60+
if [ -f "fastlane/metadata/android/de-DE/changelogs/$BUILD_NUMBER.txt" ]; then
61+
CHANGELOG_CONTENT=$(cat "fastlane/metadata/android/de-DE/changelogs/$BUILD_NUMBER.txt")
62+
echo "CHANGELOG_DE<<GHADELIMITER" >> $GITHUB_ENV
63+
echo "$CHANGELOG_CONTENT" >> $GITHUB_ENV
64+
echo "GHADELIMITER" >> $GITHUB_ENV
65+
else
66+
echo "CHANGELOG_DE=No German release notes available." >> $GITHUB_ENV
67+
fi
68+
if [ -f "fastlane/metadata/android/en-US/changelogs/$BUILD_NUMBER.txt" ]; then
69+
CHANGELOG_CONTENT_EN=$(cat "fastlane/metadata/android/en-US/changelogs/$BUILD_NUMBER.txt")
70+
echo "CHANGELOG_EN<<GHADELIMITER" >> $GITHUB_ENV
71+
echo "$CHANGELOG_CONTENT_EN" >> $GITHUB_ENV
72+
echo "GHADELIMITER" >> $GITHUB_ENV
73+
else
74+
echo "CHANGELOG_EN=" >> $GITHUB_ENV
75+
fi
76+
77+
- name: Create Draft Release
78+
uses: softprops/action-gh-release@v2
79+
with:
80+
name: "📝 Simple Notes Sync v${{ steps.version.outputs.VERSION }}"
81+
draft: true
82+
prerelease: false
83+
generate_release_notes: false
84+
files: apk-output/*.apk
85+
body: |
86+
## 📋 Changelog / Release Notes
87+
88+
${{ env.CHANGELOG_EN }}
89+
90+
<details>
91+
<summary>🇩🇪 German Version</summary>
92+
93+
${{ env.CHANGELOG_DE }}
94+
95+
</details>
96+
97+
## 📦 Downloads
98+
99+
| Variant | File | Info |
100+
|---------|------|------|
101+
| **🏆 Recommended** | `simple-notes-sync-v${{ steps.version.outputs.VERSION }}-standard.apk` | Standard version (works on all devices) |
102+
| F-Droid | `simple-notes-sync-v${{ steps.version.outputs.VERSION }}-fdroid.apk` | For F-Droid Store |
103+
104+
## 📊 Build Info
105+
106+
- **Version:** ${{ steps.version.outputs.VERSION }} (Code: ${{ steps.version.outputs.BUILD_NUMBER }})
107+
- **Commit:** ${{ github.sha }}
108+
109+
## 🔐 APK Signature Verification
110+
111+
All APKs are signed with the official release certificate.
112+
113+
**Recommended:** Verify with [AppVerifier](https://github.com/nicholson-lab/AppVerifier) (Android app)
114+
115+
**Expected SHA-256:**
116+
```
117+
42:A1:C6:13:BB:C6:73:04:5A:F3:DC:81:91:BF:9C:B6:45:6E:E4:4C:7D:CE:40:C7:CF:B5:66:FA:CB:69:F1:6A
118+
```
119+
120+
**[📖 Documentation](https://github.com/inventory69/simple-notes-sync/blob/main/QUICKSTART.md)** · **[🐛 Report Bug](https://github.com/inventory69/simple-notes-sync/issues)**
121+
env:
122+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

CHANGELOG.de.md

Lines changed: 121 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,127 @@ Das Format basiert auf [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
88

99
---
1010

11+
## [2.0.0] - 2026-03-20
12+
13+
### 🎨 Kompletter Compose-Rewrite, Multi-Theme-System & Architektur-Überarbeitung
14+
15+
Major-Release: vollständige Migration zu Jetpack Compose, Entfernung aller Legacy-View-Codes (~2.300 Zeilen gelöscht), komplettes WebDavSyncService-Refactoring in fokussierte Module, Multi-Theme-System mit 7 Farbschemata und animierten Übergängen, Material 3 Shared-Axis-Navigation, Checklisten-Drag-and-Drop-Rewrite, umfassende Sync-Zuverlässigkeitsfixes und modernisierte Abhängigkeiten.
16+
17+
### ✨ Neue Features
18+
19+
**Multi-Theme-System mit animierten Übergängen und getönten Oberflächen** ([315c0a5](https://github.com/inventory69/simple-notes-sync/commit/315c0a5))
20+
- Neuer ThemeMode-Selector: System, Hell, Dunkel, AMOLED
21+
- 7 Farbschemata: Standard, Blau, Grün, Rot, Lila, Orange, Dynamisch (Material You ab API 31)
22+
- Live-Vorschau mit Farbfeldern in den Anzeige-Einstellungen
23+
- Crossfade-Theme-Übergänge (500 ms) — flüssig auch in Debug-Builds
24+
- Getönte Oberflächenpaletten für alle Farbschemata (Notizkarten passen zum gewählten Theme)
25+
- Status- und Navigationsleistenfarben synchronisieren sich bei Theme-Wechsel
26+
27+
**Grid-Spalten-Skalierungssteuerung** ([3d4c2e0](https://github.com/inventory69/simple-notes-sync/commit/3d4c2e0))
28+
- Umschalten zwischen automatischer Grid-Skalierung (adaptive 150dp) und fester Spaltenanzahl
29+
- Manuelle Spaltenanzahl 1–5 über Chip-Selector mit Mini-Grid-Vorschau
30+
- Abschnitt nur sichtbar wenn Grid-Modus aktiv
31+
- In Backup/Restore enthalten
32+
33+
**Undo/Redo direkt in der TopAppBar** ([75edf00](https://github.com/inventory69/simple-notes-sync/commit/75edf00))
34+
- Undo und Redo vom Overflow-Menü zu direkten TopAppBar-Aktionen verschoben
35+
- Buttons respektieren canUndo/canRedo-State und erscheinen ausgegraut wenn nicht verfügbar
36+
37+
**Anzeigemodus-Chip-Selector** ([046f325](https://github.com/inventory69/simple-notes-sync/commit/046f325))
38+
- Radiogruppe durch Icon-über-Label-Chips ersetzt (konsistent mit Theme-/Farb-Selektoren)
39+
- Einstellungs-Untertitel zeigt Anzeigemodus, Theme und Farbschema (z.B. „Listenansicht · Dunkel · Standard")
40+
41+
**Vollständiges App-Einstellungen-Backup/-Restore** ([4d07c11](https://github.com/inventory69/simple-notes-sync/commit/4d07c11))
42+
- Backup/Restore umfasst jetzt alle Einstellungen: Server, Sync, Markdown, Anzeige, Notiz-Verhalten, Benachrichtigungen
43+
44+
**Autosave-Status in Anzeige-Einstellungen** ([92da701](https://github.com/inventory69/simple-notes-sync/commit/92da701))
45+
- Anzeige-Einstellungen-Untertitel zeigt Autosave-Status statt Theme-Info
46+
47+
**Logging-Deaktivierungs-Dialog nach Export** ([2525a85](https://github.com/inventory69/simple-notes-sync/commit/2525a85))
48+
- Nach dem Teilen der Debug-Logs fragt ein Dialog, ob das Datei-Logging deaktiviert werden soll
49+
50+
**Material 3 Shared-Axis-Übergänge** ([3f5d19d](https://github.com/inventory69/simple-notes-sync/commit/3f5d19d), [365b0dd](https://github.com/inventory69/simple-notes-sync/commit/365b0dd))
51+
- Horizontale Shared-Axis-Übergänge (Slide + Fade) für alle Navigationen
52+
- Konsistente Animationen für Zurück-Pfeil und Wisch-Geste ab API 34
53+
54+
### 🐛 Fehlerbehebungen
55+
56+
**Checklisten-Drag-and-Drop-Rewrite** ([89cc9a6](https://github.com/inventory69/simple-notes-sync/commit/89cc9a6))
57+
- Kompletter Rewrite von DragDropListState (~200 → 797 Zeilen): unkontrolliertes Auto-Scroll, Index-Desync bei Separator-Kreuzungen, gleichzeitige Swap-Race-Conditions und Swap-Oszillation an Viewport-Kanten behoben
58+
- Key-basiertes Item-Tracking, kontinuierliche Auto-Scroll-Schleife mit Mutex-gesperrten Swaps, Anti-Flapping-Guard, Viewport-Sicherheitschecks
59+
60+
**Offline-Server-Löschungen in Warteschlange** ([1a5c889](https://github.com/inventory69/simple-notes-sync/commit/1a5c889))
61+
- Bei „Überall löschen" werden Notizen jetzt in eine Warteschlange gestellt und beim nächsten Sync verarbeitet, statt lautlos verloren zu gehen
62+
63+
**WebDAV-403-Kompatibilität** ([9523733](https://github.com/inventory69/simple-notes-sync/commit/9523733))
64+
- Jianguoyun-WebDAV gibt 403 für HEAD auf Collections zurück — wird jetzt korrekt als „existiert" behandelt statt „nicht gefunden". Danke [@james0336](https://github.com/james0336) für die Meldung!
65+
66+
**Thread-Sicherheit und Ressourcen-Lecks** ([2ab04d1](https://github.com/inventory69/simple-notes-sync/commit/2ab04d1), [3c31f61](https://github.com/inventory69/simple-notes-sync/commit/3c31f61))
67+
- Activity-Leaks in NetworkMonitor behoben, syncStatus zu StateFlow migriert, fileLock für Logger, Race-Conditions in MainViewModel mit StateFlow.update{} eliminiert
68+
- Alle InputStream-/Connection-Leaks in Sardine-Aufrufen geschlossen, File-I/O vom Main-Thread verlagert, HttpURLConnection-Leak im Server-Statuscheck behoben
69+
70+
**Sync-Zuverlässigkeit** ([ec4bb1c](https://github.com/inventory69/simple-notes-sync/commit/ec4bb1c), [3d02118](https://github.com/inventory69/simple-notes-sync/commit/3d02118), [150543c](https://github.com/inventory69/simple-notes-sync/commit/150543c))
71+
- onResume-Sync-Throttle überlebt keinen Prozess-Neustart mehr (jetzt In-Memory)
72+
- Falscher Sync nach Paket-Update verhindert (Race-Condition in NetworkMonitor)
73+
- Auto-Sync bei Rückkehr vom Editor und Einstellungen übersprungen
74+
75+
**Layout-Skalierung für kleine Bildschirme und große Schriften** ([ef38a0e](https://github.com/inventory69/simple-notes-sync/commit/ef38a0e))
76+
- Responsive Fixes: scrollbare Dialoge, FilterChipRow Spaltenlayout, adaptiver Grid-Schwellwert 180→150dp reduziert. Danke an Mama <3
77+
78+
**Leere Pluralformen in de/tr/uk** ([2db80a4](https://github.com/inventory69/simple-notes-sync/commit/2db80a4))
79+
- Fehlende Pluralformen für Zeitangaben ergänzt — Zeitstempel waren auf Notizkarten in Deutsch, Türkisch und Ukrainisch unsichtbar
80+
81+
**Sprachauswahl auf API 33+** ([f54ef49](https://github.com/inventory69/simple-notes-sync/commit/f54ef49))
82+
- Weiterleitung zu nativen App-Spracheinstellungen auf API 33+ statt In-App-Auswahl (eliminiert Activity-Neustart-Flash)
83+
84+
**Speichern-bei-Zurück-Race-Condition** ([afbef19](https://github.com/inventory69/simple-notes-sync/commit/afbef19))
85+
- TextFieldState flushen und in onPause speichern um Datenverlust bei Zurück-Navigation zu verhindern
86+
87+
**Banner-Farb-Blitz** ([9b7a285](https://github.com/inventory69/simple-notes-sync/commit/9b7a285))
88+
- Letzte sichtbare Banner-Farben während Dismiss-Animation einfrieren
89+
90+
**Splash-Screen-Blitz** ([a5e0899](https://github.com/inventory69/simple-notes-sync/commit/a5e0899))
91+
- Splash-Screen bleibt sichtbar bis Notizen geladen sind — kein leerer Bildschirm mehr beim Kaltstart
92+
93+
**FAB-Scrim-Übergangs-Artefakt** ([833c30e](https://github.com/inventory69/simple-notes-sync/commit/833c30e), [2f75467](https://github.com/inventory69/simple-notes-sync/commit/2f75467))
94+
- FAB-Scrim wird vor Activity-Transition-Erfassung auf unsichtbar gesetzt, Fade-Out-Animation wiederhergestellt
95+
96+
**Snackbar in Einstellungen** ([24c62b8](https://github.com/inventory69/simple-notes-sync/commit/24c62b8), [0c76087](https://github.com/inventory69/simple-notes-sync/commit/0c76087))
97+
- Unzuverlässigen Toast durch Snackbar in allen Einstellungsscreens ersetzt, wird über Tastatur angezeigt
98+
99+
### 🏗️ Architektur & Refactoring
100+
101+
**WebDavSyncService-Aufteilung** ([e0abff4](https://github.com/inventory69/simple-notes-sync/commit/e0abff4)[7f467d7](https://github.com/inventory69/simple-notes-sync/commit/7f467d7))
102+
- Monolithischer 2.735-Zeilen-WebDavSyncService in 8 fokussierte Module aufgeteilt: SyncGateChecker, ETagCache, SyncTimestampManager, SyncExceptionMapper, SyncUrlBuilder, ConnectionManager, NoteUploader, NoteDownloader, MarkdownSyncManager
103+
104+
**Legacy-Code-Entfernung** ([901ca77](https://github.com/inventory69/simple-notes-sync/commit/901ca77), [39b6e9f](https://github.com/inventory69/simple-notes-sync/commit/39b6e9f), [fb64a31](https://github.com/inventory69/simple-notes-sync/commit/fb64a31))
105+
- SettingsActivity (1.072 Zeilen), MainActivity (857 Zeilen), NoteEditorActivity (344 Zeilen), alle XML-Layouts/Menüs/Drawables gelöscht
106+
- Compose-Activities sind jetzt die einzigen Implementierungen
107+
108+
**Modernisierung** ([dfd3b33](https://github.com/inventory69/simple-notes-sync/commit/dfd3b33), [ad137c3](https://github.com/inventory69/simple-notes-sync/commit/ad137c3), [65b6a26](https://github.com/inventory69/simple-notes-sync/commit/65b6a26), [9e547d2](https://github.com/inventory69/simple-notes-sync/commit/9e547d2), [07a7502](https://github.com/inventory69/simple-notes-sync/commit/07a7502))
109+
- LocalBroadcastManager durch SharedFlow ersetzt, viewModelFactory-DSL, overridePendingTransition durch ActivityOptions (API 34+), alle @Suppress("DEPRECATION") entfernt, AlertDialog.Builder durch Compose-AlertDialog
110+
111+
### 📦 Abhängigkeiten & Build
112+
113+
**Dependency-Updates** ([b57512f](https://github.com/inventory69/simple-notes-sync/commit/b57512f))
114+
- Kotlin 2.0.21 → 2.1.0, Compose BOM 2026.01 → 2026.03, Lifecycle 2.7 → 2.8.7, Coroutines 1.7 → 1.9, Navigation 2.7 → 2.8.5, Activity 1.8 → 1.9.3 und 15+ weitere
115+
116+
**Code-Qualität** ([cf95fcd](https://github.com/inventory69/simple-notes-sync/commit/cf95fcd), [3933df0](https://github.com/inventory69/simple-notes-sync/commit/3933df0))
117+
- Alle Lint- und Detekt-Warnungen behoben, 500 unbenutzte Strings gelöscht, ktlint-Formatierung in 91 Dateien, Kotlin 2.3.20
118+
119+
**APK-Größenoptimierung** ([ce86b68](https://github.com/inventory69/simple-notes-sync/commit/ce86b68))
120+
- R8/ProGuard-Keep-Regeln verschärft — APK-Größe 5,4 MB → 5,2 MB (-200 KB, classes.dex -507 KB)
121+
122+
**CI/CD** ([c6a3f25](https://github.com/inventory69/simple-notes-sync/commit/c6a3f25))
123+
- Tag-basierter GitHub-Actions-Release-Workflow für Draft-Releases
124+
125+
### 📄 Lizenz
126+
127+
**Lizenzwechsel** ([6baaeda](https://github.com/inventory69/simple-notes-sync/commit/6baaeda))
128+
- Von MIT zu Apache 2.0 gewechselt
129+
130+
---
131+
11132
## [1.12.0] - 2026-03-12
12133

13134
### 🌍 Internationalisierung, Einstellungen & Community

0 commit comments

Comments
 (0)