Skip to content

Commit a96d373

Browse files
committed
Merge branch: Release v1.7.0 – Major Improvements & Features
- New: Grid view for notes – thanks to freemen - New: WiFi-only sync toggle in settings - New: Encryption for local backups – thanks to @SilentCoderHere (ref #9) - Fixed: Sync now works correctly when VPN is active – thanks to @roughnecks (closes #11) - Improved: Server change now resets sync status for all notes - Improved: 'Sync already running' feedback for additional executions - Various bug fixes and UI improvements - Added support for self-signed SSL certificates; documentation updated – thanks to Stefan L. - SHA-256 hash of the signing certificate is now shown in the README and on release pages – thanks to @isawaway (ref #10) This release brings enhanced security, better sync reliability, and improved usability for self-hosted and private server setups.
2 parents a59e89f + 91beee0 commit a96d373

47 files changed

Lines changed: 2811 additions & 312 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
name: Build Debug APK
2+
3+
on:
4+
push:
5+
branches:
6+
- 'debug/**'
7+
- 'fix/**'
8+
- 'feature/**'
9+
workflow_dispatch: # Manueller Trigger mΓΆglich
10+
11+
jobs:
12+
build-debug:
13+
name: Build Debug APK
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- name: Checkout code
18+
uses: actions/checkout@v4
19+
20+
- name: Setup Java
21+
uses: actions/setup-java@v4
22+
with:
23+
distribution: 'temurin'
24+
java-version: '17'
25+
26+
- name: Extract version info
27+
run: |
28+
VERSION_NAME=$(grep "versionName = " android/app/build.gradle.kts | sed 's/.*versionName = "\(.*\)".*/\1/')
29+
VERSION_CODE=$(grep "versionCode = " android/app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/')
30+
BRANCH_NAME=${GITHUB_REF#refs/heads/}
31+
COMMIT_SHA=$(git rev-parse --short HEAD)
32+
33+
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
34+
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
35+
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
36+
echo "COMMIT_SHA=$COMMIT_SHA" >> $GITHUB_ENV
37+
echo "BUILD_TIME=$(date +'%Y-%m-%d_%H-%M-%S')" >> $GITHUB_ENV
38+
39+
- name: Build Debug APK (Standard + F-Droid)
40+
run: |
41+
cd android
42+
./gradlew assembleStandardDebug assembleFdroidDebug --no-daemon --stacktrace
43+
44+
- name: Prepare Debug APK artifacts
45+
run: |
46+
mkdir -p debug-apks
47+
48+
cp android/app/build/outputs/apk/standard/debug/app-standard-debug.apk \
49+
debug-apks/simple-notes-sync-v${{ env.VERSION_NAME }}-${{ env.COMMIT_SHA }}-standard-debug.apk
50+
51+
cp android/app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk \
52+
debug-apks/simple-notes-sync-v${{ env.VERSION_NAME }}-${{ env.COMMIT_SHA }}-fdroid-debug.apk
53+
54+
echo "βœ… Debug APK Files ready:"
55+
ls -lh debug-apks/
56+
57+
- name: Upload Debug APK Artifacts
58+
uses: actions/upload-artifact@v4
59+
with:
60+
name: simple-notes-sync-debug-v${{ env.VERSION_NAME }}-${{ env.BUILD_TIME }}
61+
path: debug-apks/*.apk
62+
retention-days: 30 # Debug Builds lΓ€nger aufbewahren
63+
compression-level: 0 # APK ist bereits komprimiert
64+
65+
- name: Create summary
66+
run: |
67+
echo "## πŸ› Debug APK Build" >> $GITHUB_STEP_SUMMARY
68+
echo "" >> $GITHUB_STEP_SUMMARY
69+
echo "### Build Info" >> $GITHUB_STEP_SUMMARY
70+
echo "- **Version:** v${{ env.VERSION_NAME }} (Code: ${{ env.VERSION_CODE }})" >> $GITHUB_STEP_SUMMARY
71+
echo "- **Branch:** ${{ env.BRANCH_NAME }}" >> $GITHUB_STEP_SUMMARY
72+
echo "- **Commit:** ${{ env.COMMIT_SHA }}" >> $GITHUB_STEP_SUMMARY
73+
echo "- **Built:** ${{ env.BUILD_TIME }}" >> $GITHUB_STEP_SUMMARY
74+
echo "" >> $GITHUB_STEP_SUMMARY
75+
echo "### Download" >> $GITHUB_STEP_SUMMARY
76+
echo "Debug APK available in the Artifacts section above (expires in 30 days)" >> $GITHUB_STEP_SUMMARY
77+
echo "" >> $GITHUB_STEP_SUMMARY
78+
echo "### Installation" >> $GITHUB_STEP_SUMMARY
79+
echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY
80+
echo "# Enable unknown sources" >> $GITHUB_STEP_SUMMARY
81+
echo "adb install simple-notes-sync-*-debug.apk" >> $GITHUB_STEP_SUMMARY
82+
echo "\`\`\`" >> $GITHUB_STEP_SUMMARY
83+
echo "" >> $GITHUB_STEP_SUMMARY
84+
echo "### What's included?" >> $GITHUB_STEP_SUMMARY
85+
echo "- Full Logging enabled" >> $GITHUB_STEP_SUMMARY
86+
echo "- Not production signed" >> $GITHUB_STEP_SUMMARY
87+
echo "- May have performance impact" >> $GITHUB_STEP_SUMMARY

β€Ž.github/workflows/build-production-apk.ymlβ€Ž

Lines changed: 40 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,62 @@ name: Build Android Production APK
22

33
on:
44
push:
5-
branches: [ main ] # Nur bei Push/Merge auf main triggern
6-
workflow_dispatch: # ErmΓΆglicht manuellen Trigger
5+
branches: [ main ] # Only trigger on push/merge to main
6+
workflow_dispatch: # Enables manual trigger
77

88
permissions:
9-
contents: write # Fuer Release-Erstellung erforderlich
9+
contents: write # Required for release creation
1010

1111
jobs:
1212
build:
1313
name: Build Production APK
1414
runs-on: ubuntu-latest
1515

1616
steps:
17-
- name: Code auschecken
17+
- name: Checkout code
1818
uses: actions/checkout@v4
1919

20-
- name: Java einrichten
20+
- name: Setup Java
2121
uses: actions/setup-java@v4
2222
with:
2323
distribution: 'temurin'
2424
java-version: '17'
2525

26-
- name: Semantic Versionsnummer aus build.gradle.kts extrahieren
26+
- name: Extract semantic version from build.gradle.kts
2727
run: |
28-
# Version aus build.gradle.kts fuer F-Droid KompatibilitΓ€t
28+
# Version from build.gradle.kts for F-Droid compatibility
2929
VERSION_NAME=$(grep "versionName = " android/app/build.gradle.kts | sed 's/.*versionName = "\(.*\)".*/\1/')
3030
VERSION_CODE=$(grep "versionCode = " android/app/build.gradle.kts | sed 's/.*versionCode = \([0-9]*\).*/\1/')
3131
32-
# Semantische Versionierung (nicht datums-basiert)
32+
# Semantic versioning (not date-based)
3333
BUILD_NUMBER="$VERSION_CODE"
3434
3535
echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV
3636
echo "BUILD_NUMBER=$BUILD_NUMBER" >> $GITHUB_ENV
3737
echo "VERSION_TAG=v$VERSION_NAME" >> $GITHUB_ENV
3838
39-
echo "πŸš€ Baue Version: $VERSION_NAME (Code: $BUILD_NUMBER)"
39+
echo "πŸš€ Building version: $VERSION_NAME (Code: $BUILD_NUMBER)"
4040
41-
- name: Version aus build.gradle.kts verifizieren
41+
- name: Verify version from build.gradle.kts
4242
run: |
43-
echo "βœ… Verwende Version aus build.gradle.kts:"
43+
echo "βœ… Using version from build.gradle.kts:"
4444
grep -E "versionCode|versionName" android/app/build.gradle.kts
4545
46-
- name: Android Signing konfigurieren
46+
- name: Configure Android signing
4747
run: |
4848
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/simple-notes-release.jks
4949
echo "storePassword=${{ secrets.KEYSTORE_PASSWORD }}" > android/key.properties
5050
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
5151
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
5252
echo "storeFile=simple-notes-release.jks" >> android/key.properties
53-
echo "βœ… Signing-Konfiguration erstellt"
53+
echo "βœ… Signing configuration created"
5454
55-
- name: Produktions-APK bauen (Standard + F-Droid Flavors)
55+
- name: Build production APK (Standard + F-Droid Flavors)
5656
run: |
5757
cd android
5858
./gradlew assembleStandardRelease assembleFdroidRelease --no-daemon --stacktrace
5959
60-
- name: APK-Varianten mit Versionsnamen kopieren
60+
- name: Copy APK variants with version names
6161
run: |
6262
mkdir -p apk-output
6363
@@ -69,34 +69,34 @@ jobs:
6969
cp android/app/build/outputs/apk/fdroid/release/app-fdroid-release.apk \
7070
apk-output/simple-notes-sync-v${{ env.VERSION_NAME }}-fdroid.apk
7171
72-
echo "βœ… APK-Dateien vorbereitet:"
72+
echo "βœ… APK files prepared:"
7373
ls -lh apk-output/
7474
75-
- name: APK-Artefakte hochladen
75+
- name: Upload APK artifacts
7676
uses: actions/upload-artifact@v4
7777
with:
7878
name: simple-notes-sync-apks-v${{ env.VERSION_NAME }}
7979
path: apk-output/*.apk
80-
retention-days: 90 # Produktions-Builds lΓ€nger aufbewahren
80+
retention-days: 90 # Keep production builds longer
8181

82-
- name: Commit-Informationen auslesen
82+
- name: Extract commit information
8383
run: |
8484
echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
8585
echo "COMMIT_DATE=$(git log -1 --format=%cd --date=iso-strict)" >> $GITHUB_ENV
8686
87-
- name: F-Droid Changelogs lesen
87+
- name: Read F-Droid changelogs
8888
run: |
89-
# Lese deutsche Changelog (Hauptsprache) - Use printf to ensure proper formatting
89+
# Read German changelog (main language) - Use printf to ensure proper formatting
9090
if [ -f "fastlane/metadata/android/de-DE/changelogs/${{ env.BUILD_NUMBER }}.txt" ]; then
9191
CHANGELOG_CONTENT=$(cat "fastlane/metadata/android/de-DE/changelogs/${{ env.BUILD_NUMBER }}.txt")
9292
echo "CHANGELOG_DE<<GHADELIMITER" >> $GITHUB_ENV
9393
echo "$CHANGELOG_CONTENT" >> $GITHUB_ENV
9494
echo "GHADELIMITER" >> $GITHUB_ENV
9595
else
96-
echo "CHANGELOG_DE=Keine deutschen Release Notes verfΓΌgbar." >> $GITHUB_ENV
96+
echo "CHANGELOG_DE=No German release notes available." >> $GITHUB_ENV
9797
fi
9898
99-
# Lese englische Changelog (optional)
99+
# Read English changelog (optional)
100100
if [ -f "fastlane/metadata/android/en-US/changelogs/${{ env.BUILD_NUMBER }}.txt" ]; then
101101
CHANGELOG_CONTENT_EN=$(cat "fastlane/metadata/android/en-US/changelogs/${{ env.BUILD_NUMBER }}.txt")
102102
echo "CHANGELOG_EN<<GHADELIMITER" >> $GITHUB_ENV
@@ -127,25 +127,30 @@ jobs:
127127
128128
</details>
129129
130-
---
131-
132130
## πŸ“¦ Downloads
133131
134-
| Variante | Datei | Info |
135-
|----------|-------|------|
136-
| **πŸ† Empfohlen** | `simple-notes-sync-v${{ env.VERSION_NAME }}-standard.apk` | Standard-Version (funktioniert auf allen Geraeten) |
137-
| F-Droid | `simple-notes-sync-v${{ env.VERSION_NAME }}-fdroid.apk` | Fuer F-Droid Store |
138-
139-
---
132+
| Variant | File | Info |
133+
|---------|------|------|
134+
| **πŸ† Recommended** | `simple-notes-sync-v${{ env.VERSION_NAME }}-standard.apk` | Standard version (works on all devices) |
135+
| F-Droid | `simple-notes-sync-v${{ env.VERSION_NAME }}-fdroid.apk` | For F-Droid Store |
140136
141-
## πŸ“Š Build-Info
137+
## πŸ“Š Build Info
142138
143139
- **Version:** ${{ env.VERSION_NAME }} (Code: ${{ env.BUILD_NUMBER }})
144-
- **Datum:** ${{ env.COMMIT_DATE }}
140+
- **Date:** ${{ env.COMMIT_DATE }}
145141
- **Commit:** ${{ env.SHORT_SHA }}
146142
147-
---
143+
## πŸ” APK Signature Verification
144+
145+
All APKs are signed with the official release certificate.
146+
147+
**Recommended:** Verify with [AppVerifier](https://github.com/nicholson-lab/AppVerifier) (Android app)
148+
149+
**Expected SHA-256:**
150+
```
151+
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
152+
```
148153
149-
**[πŸ“– Dokumentation](https://github.com/inventory69/simple-notes-sync/blob/main/QUICKSTART.md)** Β· **[πŸ› Issue melden](https://github.com/inventory69/simple-notes-sync/issues)**
154+
**[πŸ“– Documentation](https://github.com/inventory69/simple-notes-sync/blob/main/QUICKSTART.md)** Β· **[πŸ› Report Bug](https://github.com/inventory69/simple-notes-sync/issues)**
150155
env:
151156
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

β€ŽCHANGELOG.de.mdβ€Ž

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

99
---
1010

11+
## [1.7.0] - 2026-01-26
12+
13+
### πŸŽ‰ Major: Grid-Ansicht, Nur-WLAN Sync & VPN-UnterstΓΌtzung
14+
15+
Pinterest-Style Grid, Nur-WLAN Sync-Modus und korrekte VPN-UnterstΓΌtzung!
16+
17+
### 🎨 Grid-Layout
18+
19+
- Pinterest-Style Staggered Grid ohne LΓΌcken
20+
- Konsistente 12dp AbstΓ€nde zwischen Cards
21+
- Scroll-Position bleibt erhalten nach Einstellungen
22+
- Neue einheitliche `NoteCardGrid` mit dynamischen Vorschauzeilen (3 klein, 6 groß)
23+
24+
### πŸ“‘ Sync-Verbesserungen
25+
26+
- **Nur-WLAN Sync Toggle** - Sync nur wenn WLAN verbunden
27+
- **VPN-UnterstΓΌtzung** - Sync funktioniert korrekt bei aktivem VPN (Traffic ΓΌber VPN)
28+
- **Server-Wechsel Erkennung** - Alle Notizen auf PENDING zurΓΌckgesetzt bei Server-URL Γ„nderung
29+
- **Schnellere Server-PrΓΌfung** - Socket-Timeout von 2s auf 1s reduziert
30+
- **"Sync lΓ€uft bereits" Feedback** - Zeigt Snackbar wenn Sync bereits lΓ€uft
31+
32+
### πŸ”’ Self-Signed SSL UnterstΓΌtzung
33+
34+
- **Dokumentation hinzugefΓΌgt** - Anleitung fΓΌr selbst-signierte Zertifikate
35+
- Nutzt Android's eingebauten CA Trust Store
36+
- Funktioniert mit ownCloud, Nextcloud, Synology, Home-Servern
37+
38+
### πŸ”§ Technisch
39+
40+
- `NoteCardGrid` Komponente mit dynamischen maxLines
41+
- FullLine Spans entfernt fΓΌr lΓΌckenloses Layout
42+
- `resetAllSyncStatusToPending()` in NotesStorage
43+
- VPN-Erkennung in `getOrCacheWiFiAddress()`
44+
45+
---
46+
1147
## [1.6.1] - 2026-01-20
1248

1349
### 🧹 Code-QualitÀt & Build-Verbesserungen

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,42 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
88

99
---
1010

11+
## [1.7.0] - 2026-01-26
12+
13+
### πŸŽ‰ Major: Grid View, WiFi-Only Sync & VPN Support
14+
15+
Pinterest-style grid, WiFi-only sync mode, and proper VPN support!
16+
17+
### 🎨 Grid Layout
18+
19+
- Pinterest-style staggered grid without gaps
20+
- Consistent 12dp spacing between cards
21+
- Scroll position preserved when returning from settings
22+
- New unified `NoteCardGrid` with dynamic preview lines (3 small, 6 large)
23+
24+
### πŸ“‘ Sync Improvements
25+
26+
- **WiFi-only sync toggle** - Sync only when connected to WiFi
27+
- **VPN support** - Sync works correctly when VPN is active (traffic routes through VPN)
28+
- **Server change detection** - All notes reset to PENDING when server URL changes
29+
- **Faster server check** - Socket timeout reduced from 2s to 1s
30+
- **"Sync already running" feedback** - Shows snackbar when sync is in progress
31+
32+
### πŸ”’ Self-Signed SSL Support
33+
34+
- **Documentation added** - Guide for using self-signed certificates
35+
- Uses Android's built-in CA trust store
36+
- Works with ownCloud, Nextcloud, Synology, home servers
37+
38+
### πŸ”§ Technical
39+
40+
- `NoteCardGrid` component with dynamic maxLines
41+
- Removed FullLine spans for gapless layout
42+
- `resetAllSyncStatusToPending()` in NotesStorage
43+
- VPN detection in `getOrCacheWiFiAddress()`
44+
45+
---
46+
1147
## [1.6.1] - 2026-01-20
1248

1349
### 🧹 Code Quality & Build Improvements

0 commit comments

Comments
Β (0)