From 9132f4f3486fe1b27ff6446b8666a6929fd26799 Mon Sep 17 00:00:00 2001 From: redenfire Date: Fri, 2 Oct 2026 21:28:42 +0200 Subject: [PATCH] docs: add Italian translations Add README.it.md and Italian versions of all documentation files (docs/*.it.md), following the existing German translation convention. Update language switcher links in the English docs. --- README.it.md | 190 +++++++++++ README.md | 2 +- docs/BACKUP.it.md | 326 +++++++++++++++++++ docs/BACKUP.md | 2 +- docs/DEBUG_APK.it.md | 114 +++++++ docs/DESKTOP.it.md | 512 ++++++++++++++++++++++++++++++ docs/DESKTOP.md | 2 +- docs/DOCS.it.md | 635 +++++++++++++++++++++++++++++++++++++ docs/DOCS.md | 2 +- docs/FEATURES.it.md | 455 ++++++++++++++++++++++++++ docs/FEATURES.md | 2 +- docs/SELF_SIGNED_SSL.it.md | 166 ++++++++++ docs/TRANSLATING.it.md | 185 +++++++++++ docs/TRANSLATING.md | 2 +- docs/UPCOMING.it.md | 307 ++++++++++++++++++ docs/UPCOMING.md | 2 +- 16 files changed, 2897 insertions(+), 7 deletions(-) create mode 100644 README.it.md create mode 100644 docs/BACKUP.it.md create mode 100644 docs/DEBUG_APK.it.md create mode 100644 docs/DESKTOP.it.md create mode 100644 docs/DOCS.it.md create mode 100644 docs/FEATURES.it.md create mode 100644 docs/SELF_SIGNED_SSL.it.md create mode 100644 docs/TRANSLATING.it.md create mode 100644 docs/UPCOMING.it.md diff --git a/README.it.md b/README.it.md new file mode 100644 index 00000000..98324197 --- /dev/null +++ b/README.it.md @@ -0,0 +1,190 @@ +
+Logo +
+ +

Simple Notes Sync

+ +

Note pulite, offline-first con sincronizzazione intelligente - semplicità e sincronizzazione smart si incontrano.

+ +
+ +[![Android](https://img.shields.io/badge/Android-7.0%2B-3DDC84?style=for-the-badge&logo=android&logoColor=white)](https://www.android.com/) +[![Kotlin](https://img.shields.io/badge/Kotlin-7F52FF?style=for-the-badge&logo=kotlin&logoColor=white)](https://kotlinlang.org/) +[![Jetpack Compose](https://img.shields.io/badge/Jetpack%20Compose-4285F4?style=for-the-badge&logo=jetpackcompose&logoColor=white)](https://developer.android.com/compose/) +[![Material 3](https://img.shields.io/badge/Material_3-6750A4?style=for-the-badge&logo=material-design&logoColor=white)](https://m3.material.io/) +[![License](https://img.shields.io/badge/License-AGPL_v3-blue?style=for-the-badge&logo=gnu)](LICENSE) +[![Donate](https://img.shields.io/liberapay/receives/inventory?style=for-the-badge&logo=liberapay&logoColor=white&label=Donazioni)](https://liberapay.com/inventory/) + +
+ +
+ + + + + + + + + + + + + + +
+ +
+SHA-256 hash del certificato di firma:
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 +
+ +
+ +
[📱 Download APK](https://github.com/inventory69/simple-notes-sync/releases/latest) · [📖 Documentazione](docs/DOCS.md) · [🚀 Avvio rapido](QUICKSTART.md)
+**🌍** Italiano · [Deutsch](README.de.md) · [English](README.md) + +
+ +## 📱 Screenshot + +

+ Panoramica delle note + Editor note + Checklist + Impostazioni server self-hosted + Importazione da Google Keep + Temi e AMOLED +

+ +
+ + 📝 Offline-first  •  🔄 Sync intelligente  •  🔒 Self-hosted  •  🔋 Risparmio energetico + +
+ +## ✨ Punti salienti + +- 📝 **Offline-first** – Funziona senza connessione internet +- 📁 **Cartelle** – Organizza le note in cartelle, con opzione "solo locali" (mai sincronizzate) +- 📌 **Note fissate** – Tieni le note importanti in cima +- 🗑️ **Cestino** – Le note eliminate finiscono nel cestino con conservazione configurabile (0–90 giorni) +- 🗄️ **Archivio** – Togli le note di mezzo senza eliminarle; ripristinabili in qualsiasi momento +- ✅ **Checklist** – Spunta al tocco, drag & drop, conversione testo ↔ checklist +- ✍️ **Markdown dal vivo** – Evidenziazione istantanea nell'editor e anteprime renderizzate in lista/griglia +- 📋 **Incolla formattato** – Il contenuto HTML incollato da Telegram, Word, Google Docs e browser viene convertito in Markdown +- 🎨 **Colori delle note** – Codifica a colori, quindi filtra e ordina per colore +- 📥 **Import da Google Keep** – Porta le tue note da un export di Keep +- 📊 **Viste flessibili** – Layout a lista o griglia, da 1 a 5 colonne, dimensione del testo regolabile, sezioni comprimibili e riordinabili +- 🧩 **Widget** – Widget per singola nota, elenco note scorrevole e creazione rapida di nuove note +- 🔄 **Trigger di sync configurabili** – Al salvataggio, in rientro nell'app, connessione WiFi, periodico (15/30/60 min), all'avvio +- ⚡ **Sync parallelo** – Carica/scarica fino a 5 note contemporaneamente +- 🔒 **Self-hosted** – I tuoi dati restano tuoi (WebDAV, credenziali crittografate) +- 🔐 **Blocco app** – Sblocco opzionale biometrico/PIN con protezione dagli screenshot +- 💾 **Backup locale** – Esportazione/importazione come file JSON +- 🖥️ **Integrazione desktop** – Export Markdown per Obsidian, VS Code, Typora +- 💻 **Editor desktop** _(beta)_ – Modifica le tue note su Windows & Linux con [Simple Notes Desktop](https://github.com/inventory69/simple-notes-desktop), l'app companion sincronizzata via WebDAV +- 📤 **Condivisione ed esportazione** – Ricevi testo condiviso, condividi come testo o PDF, esporta nel calendario +- ↩️ **Annulla/Ripeti** – Cronologia completa di undo/redo nell'editor delle note +- 🌍 **Multilingue** – 12 lingue con selettore lingua integrato nell'app +- 🎨 **Material Design 3** – 7 schemi colore inclusi AMOLED e Dynamic Color, transizioni di tema animate + +➡️ **Elenco completo delle funzionalità:** [docs/FEATURES.md](docs/FEATURES.md) + +## 🚀 Avvio rapido + +### 1. Configurazione del server (5 minuti) + +```bash +git clone https://github.com/inventory69/simple-notes-sync.git +cd simple-notes-sync/server +cp .env.example .env +# Imposta la password in .env +docker compose up -d +``` + +➡️ **Dettagli:** [Guida alla configurazione del server](server/README.md) + +### 2. Installazione dell'app (2 minuti) + +1. [Scarica l'APK](https://github.com/inventory69/simple-notes-sync/releases/latest) +2. Installa e apri +3. ⚙️ Impostazioni → Configura il server: + - **URL:** `http://TUO-IP-SERVER:8080/` _(solo URL di base!)_ + - **Utente:** `noteuser` + - **Password:** _(da .env)_ + - **WiFi:** _(il nome della tua rete)_ +4. **Testa la connessione** → Attiva la sincronizzazione automatica +5. Fatto! 🎉 + +➡️ **Guida dettagliata:** [QUICKSTART.md](QUICKSTART.md) + +## 📚 Documentazione + +| Documento | Contenuto | +|----------|--------| +| **[QUICKSTART.md](QUICKSTART.md)** | Installazione passo passo | +| **[FEATURES.md](docs/FEATURES.md)** | Elenco completo delle funzionalità | +| **[BACKUP.md](docs/BACKUP.md)** | Guida al backup e ripristino | +| **[DESKTOP.md](docs/DESKTOP.md)** | Integrazione desktop (Markdown) | +| **[Simple Notes Desktop](https://github.com/inventory69/simple-notes-desktop)** | Editor desktop per Windows & Linux _(beta)_ 💻 | +| **[SELF_SIGNED_SSL.md](docs/SELF_SIGNED_SSL.md)** | Configurazione certificato SSL self-signed | +| **[DOCS.md](docs/DOCS.md)** | Dettagli tecnici e risoluzione dei problemi | +| **[CHANGELOG.md](CHANGELOG.md)** | Cronologia versioni | +| **[UPCOMING.md](docs/UPCOMING.md)** | Funzionalità in arrivo 🚀 | +| **[TRANSLATING.md](docs/TRANSLATING.md)** | Guida alla traduzione 🌍 | + +## 🛠️ Sviluppo + +```bash +cd android +./gradlew assembleStandardRelease +``` + +➡️ **Guida alla build:** [docs/DOCS.md#-build--deployment](docs/DOCS.md#-build--deployment) + +## 💡 Richieste di funzionalità e idee + +Hai un'idea per una nuova funzionalità o un miglioramento? Ci piacerebbe sentirla! + +➡️ **Come suggerire funzionalità:** + +1. Controlla le [discussioni esistenti](https://github.com/inventory69/simple-notes-sync/discussions) per vedere se qualcuno l'ha già proposta +2. In caso contrario, apri una nuova discussione nella categoria "Feature Requests / Ideas" +3. Metti un voto (👍) alle funzionalità che vorresti vedere + +Le funzionalità con abbastanza supporto della community verranno prese in considerazione. Tieni presente che quest'app è progettata per rimanere semplice e intuitiva. + +## 🌍 Traduzioni + +L'hosting delle traduzioni è fornito gentilmente da [Weblate](https://hosted.weblate.org/projects/simple-notes-sync/) - grazie per sponsorizzare i progetti open source! 🙏 + +[![Stato delle traduzioni](https://hosted.weblate.org/widget/simple-notes-sync/android-app/svg-badge.svg)](https://hosted.weblate.org/engage/simple-notes-sync/) + + +Stato delle traduzioni + + +## 🤝 Contribuire + +I contributi sono benvenuti! Vedi [CONTRIBUTING.md](CONTRIBUTING.md) + +Se trovi utile questa app, puoi supportarne lo sviluppo: + + +Dona tramite Liberapay + + +## 📄 Licenza + +GNU Affero General Public License v3.0 – vedi [LICENSE](LICENSE) + +
+

+ +**v2.19.0** · Creato con ❤️ usando Kotlin + Jetpack Compose + Material Design 3 + +
\ No newline at end of file diff --git a/README.md b/README.md index 55d21778..a70ed7dc 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,7 @@ alt="Get it on Google Play" align="center" height="80" />

[📱 APK Download](https://github.com/inventory69/simple-notes-sync/releases/latest) · [📖 Documentation](docs/DOCS.md) · [🚀 Quick Start](QUICKSTART.md)
-**🌍** [Deutsch](README.de.md) · **English** +**🌍** [Deutsch](README.de.md) · [Italiano](README.it.md) · **English**
diff --git a/docs/BACKUP.it.md b/docs/BACKUP.it.md new file mode 100644 index 00000000..b39d98db --- /dev/null +++ b/docs/BACKUP.it.md @@ -0,0 +1,326 @@ +# Backup e Ripristino 💾 + +**🌍 Lingue:** [Deutsch](BACKUP.de.md) · **Italiano** · [English](BACKUP.md) + +> Proteggi le tue note localmente - indipendentemente dal server + +--- + +## 📋 Panoramica + +Il sistema di backup funziona **completamente offline** e indipendente dal server WebDAV. Perfetto per: +- 📥 Backup regolari +- 📤 Migrazione verso un nuovo server +- 🔄 Recupero dopo una perdita di dati +- 💾 Archiviazione di vecchie note + +--- + +## 📥 Creare un backup + +### Passo dopo passo + +1. **Apri le impostazioni** (icona ⚙️ in alto a destra) +2. **Trova la sezione "Backup e Ripristino"** +3. **Tocca "📥 Crea backup"** +4. **Scegli la posizione:** + - 📁 Download + - 💳 Scheda SD + - ☁️ Cartella cloud (Nextcloud, Google Drive, ecc.) + - 📧 Email come allegato +5. **Fatto!** Il file di backup è stato salvato + +### Formato del file + +**Nome file:** `simplenotes_backup_YYYY-MM-DD_HHmmss.json` + +**Esempio:** `simplenotes_backup_2026-01-05_143022.json` + +**Contenuto:** +```json +{ + "version": "1.2.1", + "exported_at": "2026-01-05T14:30:22Z", + "notes_count": 42, + "notes": [ + { + "id": "abc-123-def", + "title": "Lista della spesa", + "content": "Latte\nPane\nFormaggio", + "createdAt": 1704467422000, + "updatedAt": 1704467422000 + } + ] +} +``` + +**Dettagli del formato:** +- ✅ Leggibile dall'uomo (JSON formattato) +- ✅ Dati completi delle note (titolo, contenuto, ID, timestamp, colore, stato di fissaggio, cartella, elementi checklist) +- ✅ Impostazioni dell'app e metadati delle cartelle inclusi _(v2.0.0+ / v2.8.0)_ +- ✅ Informazioni sulla versione per la compatibilità +- ✅ Conteggio delle note per la validazione + +--- + +## 📤 Ripristinare un backup + +### 3 Modalità di ripristino + +#### 1. Unisci ⭐ _Consigliata_ + +**Cosa succede:** +- ✅ Le nuove note del backup vengono aggiunte +- ✅ Le note esistenti rimangono invariate +- ✅ Nessuna perdita di dati + +**Quando usarla:** +- Importare un backup da un altro dispositivo +- Recuperare vecchie note +- Ripristinare note eliminate per errore + +**Esempio:** +``` +App: [Nota A, Nota B, Nota C] +Backup: [Nota A, Nota D, Nota E] +Risultato: [Nota A, Nota B, Nota C, Nota D, Nota E] +``` + +#### 2. Sostituisci + +**Cosa succede:** +- ❌ TUTTE le note esistenti vengono eliminate +- ✅ Le note del backup vengono importate +- ⚠️ Irreversibile (tranne attraverso il backup automatico) + +**Quando usarla:** +- Migrazione del server (ripartenza completa) +- Ritorno a un vecchio stato di backup +- Reinstallazione dell'app + +**Esempio:** +``` +App: [Nota A, Nota B, Nota C] +Backup: [Nota X, Nota Y] +Risultato: [Nota X, Nota Y] +``` + +**⚠️ Attenzione:** viene creato automaticamente un backup di sicurezza! + +#### 3. Sovrascrivi i duplicati + +**Cosa succede:** +- ✅ Le nuove note del backup vengono aggiunte +- 🔄 In caso di conflitto di ID, vince il backup +- ✅ Le altre note rimangono invariate + +**Quando usarla:** +- Il backup è più recente dei dati dell'app +- Importare modifiche dal desktop +- Risoluzione dei conflitti + +**Esempio:** +``` +App: [Nota A (v1), Nota B, Nota C] +Backup: [Nota A (v2), Nota D] +Risultato: [Nota A (v2), Nota B, Nota C, Nota D] +``` + +### Procedura di ripristino + +1. **Impostazioni** → **"📤 Ripristina da file"** +2. **Seleziona il file di backup** (`.json`) +3. **Scegli la modalità:** + - 🔵 Unisci _(Predefinita)_ + - 🟡 Sovrascrivi i duplicati + - 🔴 Sostituisci _(Attenzione!)_ +4. **Conferma** - Viene creato automaticamente un backup di sicurezza +5. **Attendi** - L'importazione è in corso +6. **Fatto!** - Messaggio di successo con il numero di note importate + +--- + +## 🛡️ Backup di sicurezza automatico + +**Prima di ogni ripristino:** +- ✅ Viene creato automaticamente un backup +- 📁 Salvato in: `Android/data/dev.dettmer.simplenotes/files/` +- 🏷️ Nome file: `auto_backup_before_restore_YYYY-MM-DD_HHmmss.json` +- ⏱️ Timestamp: immediatamente prima del ripristino + +**Perché?** +- Protezione contro una "Sostituzione" accidentale +- Possibilità di annullare +- Doppia sicurezza + +**Accesso tramite il gestore file:** +``` +/Android/data/dev.dettmer.simplenotes/files/auto_backup_before_restore_*.json +``` + +--- + +## 💡 Migliori pratiche + +### Strategia di backup + +#### Backup regolari +``` +Giornaliero: ❌ Troppo frequente (la sincronizzazione del server è sufficiente) +Settimanale: ✅ Consigliato per note importanti +Mensile: ✅ Archiviazione +Prima degli aggiornamenti: ✅ Sicurezza +``` + +#### Regola 3-2-1 +1. **3 copie** - Originale + 2 backup +2. **2 supporti** - ad es. scheda SD + cloud +3. **1 copia fuori sede** - ad es. archiviazione cloud + +### Posizioni dei backup + +**Locale (rapido):** +- 📱 Memoria interna / Download +- 💳 Scheda SD +- 🖥️ PC (tramite USB) + +**Cloud (sicuro):** +- ☁️ Nextcloud (self-hosted) +- 📧 Email a te stesso +- 🗄️ Syncthing (sincronizzazione tra dispositivi) + +**⚠️ Da evitare:** +- ❌ Google Drive / Dropbox (privacy) +- ❌ Una sola copia +- ❌ Solo sul server (se il server fallisce) + +--- + +## 🔧 Utilizzo avanzato + +### Modificare il file di backup + +Il file `.json` può essere modificato con qualsiasi editor di testo: + +1. **Apri con:** VS Code, Notepad++, nano +2. **Aggiungi/rimuovi note** +3. **Cambia titolo/contenuto** +4. **Regola gli ID** (per la migrazione) +5. **Salva** e importa nell'app + +**⚠️ Importante:** +- Mantieni un formato JSON valido +- Gli ID devono essere univoci (UUID) +- Timestamp in millisecondi (epoch Unix) + +### Importazione in blocco + +Unisci più backup: + +1. Importa backup 1 (Modalità: Unisci) +2. Importa backup 2 (Modalità: Unisci) +3. Importa backup 3 (Modalità: Unisci) +4. Risultato: tutte le note combinate + +### Migrazione del server + +Passo dopo passo: + +1. **Crea un backup** sul vecchio server +2. **Configura il nuovo server** (vedi [QUICKSTART.md](../QUICKSTART.md)) +3. **Cambia l'URL del server** nelle impostazioni dell'app +4. **Ripristina il backup** (Modalità: Sostituisci) +5. **Testa la sincronizzazione** - Tutte le note sul nuovo server + +--- + +## ❌ Risoluzione dei problemi + +### "File di backup non valido" + +**Cause:** +- File JSON danneggiato +- Estensione del file errata (deve essere `.json`) +- Versione dell'app non compatibile + +**Soluzione:** +1. Verifica il file JSON con un validatore (ad es. jsonlint.com) +2. Verifica l'estensione del file +3. Crea un backup con la versione corrente dell'app + +### "Nessun permesso per salvare" + +**Cause:** +- Permesso di archiviazione mancante +- Cartella protetta da scrittura + +**Soluzione:** +1. Android: Impostazioni → App → Simple Notes → Permessi +2. Attiva "Archiviazione" +3. Scegli una posizione diversa + +### "Importazione fallita" + +**Cause:** +- Spazio di archiviazione insufficiente +- File di backup danneggiato +- L'app si è bloccata durante l'importazione + +**Soluzione:** +1. Libera spazio di archiviazione +2. Crea un nuovo file di backup +3. Riavvia l'app e riprova + +--- + +## 🔒 Sicurezza e privacy + +### Protezione dei dati +- ✅ **Archiviazione locale** - Nessun caricamento sul cloud senza la tua azione +- ✅ **Crittografia opzionale** _(v1.7.0+)_ - Proteggi i file di backup con password +- ✅ **Leggibile** - Formato JSON semplice quando non crittografato +- ⚠️ **Dati sensibili?** - Attiva la crittografia o usa strumenti esterni (ad es. 7-Zip) + +### Raccomandazioni +- 🔐 Conserva i file di backup in un contenitore crittografato +- 🗑️ Elimina regolarmente i vecchi backup +- 📧 Non inviarli tramite email non crittografata +- ☁️ Usa un cloud self-hosted (Nextcloud) + +--- + +## 📊 Dettagli tecnici + +### Specifica del formato + +**Struttura JSON:** +```json +{ + "version": "string", // Versione dell'app al momento dell'esportazione + "exported_at": "ISO8601", // Timestamp dell'esportazione + "notes_count": number, // Numero di note + "notes": [ + { + "id": "UUID", // ID univoco + "title": "string", // Titolo della nota + "content": "string", // Contenuto della nota + "createdAt": number, // Timestamp Unix (ms) + "updatedAt": number // Timestamp Unix (ms) + } + ] +} +``` + +### Compatibilità +- ✅ v1.2.0+ - Pienamente compatibile +- ⚠️ v1.1.x - Funzioni di base (senza backup automatico) +- ❌ v1.0.x - Non supportato + +--- + +**📚 Vedi anche:** +- [QUICKSTART.md](../QUICKSTART.md) - Installazione e configurazione dell'app +- [FEATURES.it.md](FEATURES.it.md) - Elenco completo delle funzionalità +- [DESKTOP.it.md](DESKTOP.it.md) - Integrazione desktop con Markdown + +**Ultimo aggiornamento:** v2.8.0 (2026-06-16) \ No newline at end of file diff --git a/docs/BACKUP.md b/docs/BACKUP.md index e998c463..f41a5b6a 100644 --- a/docs/BACKUP.md +++ b/docs/BACKUP.md @@ -1,6 +1,6 @@ # Backup & Restore 💾 -**🌍 Languages:** [Deutsch](BACKUP.de.md) · **English** +**🌍 Languages:** [Deutsch](BACKUP.de.md) · [Italiano](BACKUP.it.md) · **English** > Secure your notes locally - independent from the server diff --git a/docs/DEBUG_APK.it.md b/docs/DEBUG_APK.it.md new file mode 100644 index 00000000..4a97d12d --- /dev/null +++ b/docs/DEBUG_APK.it.md @@ -0,0 +1,114 @@ +# APK Debug per il Testing delle Issue + +Per i bug-report e il test delle correzioni ti serve un'**APK Debug**. Viene compilata automaticamente quando fai push su branch speciali. + +## 🔧 Struttura dei branch per le APK Debug + +Le APK Debug vengono compilate **automaticamente** per questi branch: + +| Tipo di branch | Scopo | Esempio | +|-----------|-------|---------| +| `debug/*` | Testing generale | `debug/wifi-only-sync` | +| `fix/*` | Test di bug-fix | `fix/vpn-connection` | +| `feature/*` | Nuove funzionalità | `feature/grid-layout` | + +**Gli altri branch (main, develop, ecc.) NON compilano APK Debug!** + +## 📥 Scaricare l'APK Debug + +### 1️⃣ Push su un branch debug + +```bash +# Creare un nuovo fix-branch +git checkout -b fix/my-bug + +# Apportare le modifiche +# ... + +# Commit e push +git add . +git commit -m "fix: descrizione" +git push origin fix/my-bug +``` + +### 2️⃣ Avviare il workflow GitHub Actions + +- GitHub → scheda **Actions** +- Vedere il workflow **Build Debug APK** +- Attendere che il workflow diventi verde ✅ + +### 3️⃣ Scaricare l'APK + +1. Attendere il successo verde del workflow +2. Sezione **Artifacts** in alto (o in basso nel workflow) +3. Scaricare `simple-notes-sync-debug-*` +4. Estrarre il file ZIP + +**Importante:** gli artifact sono disponibili solo per **30 giorni**! + +## 📱 Installazione sul dispositivo + +### Con ADB (consigliato - testing pulito) +```bash +# Collegare il dispositivo +adb devices + +# Installare l'APK Debug (la versione precedente non viene eliminata) +adb install simple-notes-sync-debug.apk + +# Rimuovere dal dispositivo in seguito: +adb uninstall dev.dettmer.simplenotes +``` + +### Manualmente sul dispositivo +1. Copiare il file sul dispositivo Android +2. **Impostazioni → Sicurezza → attivare "Origini sconosciute"** +3. Aprire il gestore file e toccare l'APK +4. Selezionare "Installa" + +## ⚠️ APK Debug vs. APK Release + +| Funzionalità | Debug | Release | +|---------|-------|---------| +| **Registrazione** | Completa | Minima | +| **Firma** | Debug-key | Release-key | +| **Prestazioni** | Più lenta | Più veloce | +| **Debugging** | ✅ Possibile | ❌ No | +| **Installazione** | Più volte | Può dare problemi | + +## 📊 Cosa testare + +1. **Nuove funzionalità** - Funzionano come descritto? +2. **Bug fix** - Il bug è davvero risolto? +3. **Compatibilità** - Funziona sul tuo dispositivo? +4. **Prestazioni** - L'app gira fluida? + +## 📝 Dare feedback + +Scrivi un commento nella **Pull Request** o nella **GitHub Issue**: +- ✅ Cosa funziona +- ❌ Cosa non funziona +- 📋 Log degli errori (adb logcat se rilevante) +- 📱 Dispositivo/versione Android + +## 🐛 Raccogliere i log + +Se lo sviluppatore dell'app ha bisogno di log di debug: + +```bash +# Aprire un terminale con adb +adb shell pm grant dev.dettmer.simplenotes android.permission.READ_LOGS + +# Guardare i log (live) +adb logcat | grep simplenotes + +# Salvare i log (file) +adb logcat > debug-log.txt + +# Filtrare dopo un errore +adb logcat | grep -E "ERROR|Exception|CRASH" +``` + +--- + +**Grazie per il test! Il tuo feedback ci aiuta a migliorare l'app.** 🙏 \ No newline at end of file diff --git a/docs/DESKTOP.it.md b/docs/DESKTOP.it.md new file mode 100644 index 00000000..2b85271b --- /dev/null +++ b/docs/DESKTOP.it.md @@ -0,0 +1,512 @@ +# Integrazione Desktop 🖥️ + +**🌍 Lingue:** [Deutsch](DESKTOP.de.md) · **Italiano** · [English](DESKTOP.md) + +> Modifica le tue note con qualsiasi editor Markdown sul desktop + +--- + +## 📋 Panoramica + +L'integrazione desktop ti permette di modificare le note su PC/Mac: +- 📝 Funziona con qualsiasi editor Markdown +- 🔄 Sincronizzazione automatica tramite WebDAV +- 💾 Doppio formato: JSON (master) + Markdown (specchio) +- ⚡ Risoluzione dei conflitti Last-Write-Wins + +--- + +## 🎯 Perché Markdown? + +### Architettura a doppio formato + +``` +┌─────────────────────────────────────┐ +│ Android App │ +│ │ +│ ┌──────────┐ ┌─────────────┐ │ +│ │ JSON │ ──→ │ Markdown │ │ +│ │ (Master) │ │ (Mirror) │ │ +│ └──────────┘ └─────────────┘ │ +└────────┬────────────────┬───────────┘ + │ │ + ↓ ↓ + WebDAV Server + │ │ + ┌────┴────┐ ┌────┴──────┐ + │ /notes/ │ │ /notes-md/│ + │ *.json │ │ *.md │ + └─────────┘ └───────────┘ + ↑ ↑ + │ │ + ┌────┴────────────────┴───────────┐ + │ Desktop Editor │ + │ (VS Code, Typora, ecc.) │ + └──────────────────────────────────┘ +``` + +### Vantaggi + +**JSON (Master):** +- ✅ Affidabile e veloce +- ✅ Dati strutturati (ID, timestamp) +- ✅ Meccanismo di sincronizzazione primario +- ✅ Sempre attivo + +**Markdown (Specchio):** +- ✅ Leggibile dall'uomo +- ✅ Compatibile con gli editor desktop +- ✅ Evidenziazione della sintassi +- ✅ Attivabile opzionalmente + +--- + +## 🚀 Avvio rapido + +### 1. Prima sincronizzazione + +**Importante:** esegui una sincronizzazione PRIMA di attivare l'integrazione desktop! + +1. **Configura l'app** (vedi [QUICKSTART.md](../QUICKSTART.md)) +2. **Testa la connessione al server** +3. **Crea la prima nota** +4. **Sincronizza** (pull-to-refresh o sincronizzazione automatica) +5. ✅ Il server crea automaticamente le cartelle `/notes/` e `/notes-md/` + +### 2. Attiva l'integrazione desktop + +1. **Impostazioni** → **Integrazione Desktop** +2. **Attiva l'interruttore** +3. **Inizia l'esportazione iniziale** - Mostra lo stato di avanzamento (X/Y) +4. ✅ Tutte le note esistenti vengono esportate come `.md` + +### 3. Monta WebDAV come unità di rete + +#### Windows + +``` +1. Apri Esplora file +2. Tasto destro su "Questo PC" +3. "Connetti a unità di rete" +4. Inserisci l'URL: http://TUO-SERVER:8080/notes-md/ +5. Nome utente: noteuser +6. Password: (la tua password WebDAV) +7. Lettera di unità: Z:\ (o qualsiasi) +8. Fatto! +``` + +**Accesso:** `Z:\` in Esplora file + +#### macOS + +``` +1. Apri Finder +2. Menu "Vai" → "Connetti al server" (⌘K) +3. Indirizzo del server: http://TUO-SERVER:8080/notes-md/ +4. Connetti +5. Nome utente: noteuser +6. Password: (la tua password WebDAV) +7. Fatto! +``` + +**Accesso:** Finder → Rete → notes-md + +#### Linux (GNOME) + +``` +1. Apri File / Nautilus +2. "Altre posizioni" +3. "Connetti al server" +4. Indirizzo del server: dav://TUO-SERVER:8080/notes-md/ +5. Nome utente: noteuser +6. Password: (la tua password WebDAV) +7. Fatto! +``` + +**Accesso:** `/run/user/1000/gvfs/dav:host=...` + +#### Linux (davfs2 - permanente) + +```bash +# Installazione +sudo apt install davfs2 + +# Crea il punto di montaggio +sudo mkdir -p /mnt/notes-md + +# Monta una volta +sudo mount -t davfs http://TUO-SERVER:8080/notes-md/ /mnt/notes-md + +# Permanente in /etc/fstab +echo "http://TUO-SERVER:8080/notes-md/ /mnt/notes-md davfs rw,user,noauto 0 0" | sudo tee -a /etc/fstab +``` + +**Accesso:** `/mnt/notes-md/` + +--- + +## 📝 Editor Markdown + +### Editor consigliati + +#### 1. VS Code ⭐ _Consigliato_ + +**Vantaggi:** +- ✅ Gratuito e open source +- ✅ Anteprima Markdown (Ctrl+Shift+V) +- ✅ Evidenziazione della sintassi +- ✅ Integrazione Git +- ✅ Estensioni (controllo ortografico, ecc.) + +**Configurazione:** +``` +1. Installa VS Code +2. Monta l'unità WebDAV +3. Apri la cartella: Z:\notes-md\ (Windows) o /mnt/notes-md (Linux) +4. Fatto! Modifica i file Markdown +``` + +**Estensioni (opzionali):** +- `Markdown All in One` - Scorciatoie e anteprima +- `Markdown Preview Enhanced` - Anteprima migliore +- `Code Spell Checker` - Controllo ortografico + +#### 2. Typora + +**Vantaggi:** +- ✅ Editor Markdown WYSIWYG +- ✅ Design minimalista +- ✅ Anteprima dal vivo +- ⚠️ A pagamento (~15€) + +**Configurazione:** +``` +1. Installa Typora +2. Monta il WebDAV +3. Apri la cartella in Typora +4. Modifica le note +``` + +#### 3. Notepad++ + +**Vantaggi:** +- ✅ Leggero +- ✅ Veloce +- ✅ Evidenziazione della sintassi +- ⚠️ Nessuna anteprima Markdown + +**Configurazione:** +``` +1. Installa Notepad++ +2. Monta il WebDAV +3. Apri i file direttamente +``` + +#### 4. Obsidian + +**Vantaggi:** +- ✅ Filosofia del secondo cervello +- ✅ Vista grafica per i collegamenti +- ✅ Molti plugin +- ⚠️ Possibili conflitti di sincronizzazione (2 master) + +**Configurazione:** +``` +1. Installa Obsidian +2. Apri WebDAV come vault +3. Attenzione: Obsidian crea i propri metadati! +``` + +**⚠️ Non consigliato:** può modificare il frontmatter + +--- + +## 📄 Formato dei file Markdown + +### Struttura + +Ogni nota viene esportata come file `.md` con frontmatter YAML: + +```markdown +--- +id: abc-123-def-456 +created: 2026-01-05T14:30:22Z +updated: 2026-01-05T14:30:22Z +tags: [] +--- + +# Titolo della nota + +Contenuto della nota... +``` + +### Campi del frontmatter + +| Campo | Tipo | Descrizione | Obbligatorio | +|-------|------|-------------|----------| +| `id` | UUID | ID univoco della nota | ✅ Sì | +| `created` | ISO8601 | Data di creazione | ✅ Sì | +| `updated` | ISO8601 | Data di modifica | ✅ Sì | +| `tags` | Array | Tag (futuro) | ❌ No | + +### Nomi dei file + +**Regole di sanificazione:** +``` +Titolo: "La mia lista della spesa 🛒" +→ Nome file: "La_mia_lista_della_spesa.md" + +Rimossi: +- Emoji: 🛒 → rimossa +- Caratteri speciali: / \ : * ? " < > | → rimossi +- Spazi multipli → spazio singolo +- Spazi → trattino basso _ +``` + +**Esempi:** +``` +"Appunti riunione 2026" → "Appunti_riunione_2026.md" +"To-Do: Progetto" → "To-Do_Progetto.md" +"Vacanze ☀️" → "Vacanze.md" +``` + +--- + +## 🔄 Sincronizzazione + +### Flusso di lavoro: Android → Desktop + +1. **Crea/modifica una nota nell'app** +2. **Esegui la sincronizzazione** (automatica o manuale) +3. **Il JSON viene caricato** (`/notes/abc-123.json`) +4. **Il Markdown viene esportato** (`/notes-md/Titolo_Nota.md`) _(solo se l'Integrazione Desktop è ATTIVA)_ +5. **L'editor desktop mostra le modifiche** (dopo l'aggiornamento) + +> 📁 **Cartelle** _(v2.7.0)_ - Le note all'interno di una cartella vengono sincronizzate in una sottocartella corrispondente, ad es. `/notes/Lavoro/abc-123.json` e `/notes-md/Lavoro/Titolo_Nota.md`. Le cartelle marcate **solo locali** restano sul dispositivo e non vengono mai caricate. + +### Flusso di lavoro: Desktop → Android + +1. **Modifica il file Markdown** (nella cartella montata) +2. **Salva** - Il file è immediatamente sul server +3. **Nell'app: esegui l'importazione Markdown** + - Impostazioni → "Importa modifiche Markdown" + - Oppure: importazione automatica a ogni sincronizzazione (futuro) +4. **L'app adotta le modifiche** (sela versione desktop è più recente) + +### Risoluzione dei conflitti: Last-Write-Wins + +**Regola:** vince la versione più recente (per timestamp `updated`) + +**Esempio:** +``` +Versione app: updated: 2026-01-05 14:00 +Versione desktop: updated: 2026-01-05 14:30 +→ Vince il desktop (timestamp più recente) +``` + +**Automatico:** +- ✅ All'importazione Markdown +- ⚠️ Nessuna unione dei conflitti - solo sovrascrittura completa + +**Eccezione — sincronizzazione JSON dalla v2.16.0.** Last-Write-Wins non si applica più al master JSON +quando ti farebbe perdere una modifica. Se la nota è cambiata anche sul server dall'ultima volta che questo +dispositivo l'ha vista, la sincronizzazione segnala un conflitto invece di sovrascrivere e ti chiede di scegliere +una versione. Vedi [Risoluzione dei conflitti](DOCS.md#conflict-resolution). Lo specchio Markdown è ancora +Last-Write-Wins semplice - è uno specchio, non un master. + +--- + +## ⚙️ Impostazioni + +### Interruttore Integrazione Desktop + +**Impostazioni → Integrazione Desktop** + +**ATTIVA:** +- ✅ Nuove note → esportate automaticamente come `.md` +- ✅ Note modificate → aggiornamento `.md` +- ✅ Note eliminate → il `.md` rimane (futuro: anche eliminazione) + +**DISATTIVATA:** +- ❌ Nessuna esportazione Markdown +- ✅ La sincronizzazione JSON continua normalmente +- ✅ I file `.md` esistenti rimangono + +### Esportazione iniziale + +**Cosa succede all'attivazione:** +1. Tutte le note esistenti vengono analizzate +2. Il dialogo di avanzamento mostra lo stato (ad es. "23/42") +3. Ogni nota viene esportata come `.md` +4. In caso di errore: la singola nota viene saltata +5. Messaggio di successo con il numero di note esportate + +**Tempo:** ~1-2 secondi ogni 50 note + +--- + +## 🛠️ Utilizzo avanzato + +### Creazione manuale di Markdown + +Puoi creare file `.md` manualmente: + +```markdown +--- +id: 00000000-0000-0000-0000-000000000001 +created: 2026-01-05T12:00:00Z +updated: 2026-01-05T12:00:00Z +--- + +# Nuova nota desktop + +Contenuto... +``` + +**⚠️ Importante:** +- `id` deve essere un UUID valido (ad es. con uuidgen.io) +- Timestamp in formato ISO8601 +- Frontmatter racchiuso con `---` + +### Operazioni in blocco + +**Modifica di più note contemporaneamente:** + +1. Monta il WebDAV +2. Apri tutti i file `.md` in VS Code +3. Trova e Sostituisci in tutti i file (Ctrl+Shift+H) +4. Salva +5. Nell'app: "Importa modifiche Markdown" + +### Script + +**Esempio: ordina tutte le note per data** + +```bash +#!/bin/bash +cd /mnt/notes-md/ + +# Ordina tutti i file .md per data di modifica +for file in *.md; do + updated=$(grep "^updated:" "$file" | cut -d' ' -f2) + echo "$updated $file" +done | sort +``` + +--- + +## ❌ Risoluzione dei problemi + +### "404 Not Found" durante il montaggio di WebDAV + +**Causa:** la cartella `/notes-md/` non esiste + +**Soluzione:** +1. **Esegui la prima sincronizzazione** - La cartella viene creata automaticamente +2. OPPURE: creala manualmente tramite il terminale: + ```bash + curl -X MKCOL -u noteuser:password http://server:8080/notes-md/ + ``` + +### I file Markdown non compaiono + +**Causa:** integrazione desktop non attivata + +**Soluzione:** +1. Impostazioni → "Integrazione Desktop" ATTIVA +2. Attendi l'esportazione iniziale +3. Aggiorna la cartella WebDAV + +### Le modifiche dal desktop non compaiono nell'app + +**Causa:** importazione Markdown non eseguita + +**Soluzione:** +1. Impostazioni → "Importa modifiche Markdown" +2. OPPURE: attendi la sincronizzazione automatica (funzione futura) + +### Errore "Frontmatter mancante" + +**Causa:** file `.md` senza frontmatter YAML valido + +**Soluzione:** +1. Apri il file nell'editor +2. Aggiungi il frontmatter all'inizio: + ```yaml + --- + id: NUOVO-UUID-QUI + created: 2026-01-05T12:00:00Z + updated: 2026-01-05T12:00:00Z + --- + ``` +3. Salva e importa di nuovo + +--- + +## 🔒 Sicurezza e migliori pratiche + +### Cosa fare ✅ + +- ✅ **Backup prima delle modifiche in blocco** - Crea un backup locale +- ✅ **Un editor alla volta** - Non modificare nell'app E sul desktop in parallelo +- ✅ **Attendi la sincronizzazione** - Esegui la sincronizzazione prima della modifica desktop +- ✅ **Rispetta il frontmatter** - Non modificarlo manualmente (a meno che tu non sappia cosa fai) + +### Cosa evitare ❌ + +- ❌ **Modifica parallela** - App e desktop contemporaneamente → conflitti +- ❌ **Eliminare il frontmatter** - La nota non potrà più essere importata +- ❌ **Cambiare gli ID** - La nota viene riconosciuta come nuova +- ❌ **Manipolare i timestamp** - La risoluzione dei conflitti non funziona + +### Flusso di lavoro consigliato + +``` +1. Sincronizza nell'app (pull-to-refresh) +2. Apri il desktop +3. Apporta le modifiche +4. Salva +5. Nell'app: "Importa modifiche Markdown" +6. Verifica +7. Esegui un'altra sincronizzazione +``` + +--- + +## 📊 Confronto: JSON vs Markdown + +| Aspetto | JSON | Markdown | +|--------|------|----------| +| **Formato** | Strutturato | Testo continuo | +| **Leggibilità (umana)** | ⚠️ Media | ✅ Buona | +| **Leggibilità (macchina)** | ✅ Perfetta | ⚠️ Richiede parsing | +| **Metadati** | Nativi | Frontmatter | +| **Editor** | Editor di codice | Tutti gli editor di testo | +| **Velocità di sincronizzazione** | ✅ Veloce | ⚠️ Più lenta | +| **Affidabilità** | ✅ 100% | ⚠️ Possibili errori di frontmatter | +| **Mobile-first** | ✅ Sì | ❌ No | +| **Desktop-first** | ❌ No | ✅ Sì | + +**Conclusione:** usare entrambi i formati = migliore esperienza su entrambe le piattaforme! + +--- + +## 🔮 Funzionalità future + +Previste dalla v1.3.0+: + +- ⏳ **Importazione Markdown automatica** - Automaticamente a ogni sincronizzazione +- ⏳ **Sincronizzazione bidirezionale** - Senza importazione manuale +- ⏳ **Anteprima Markdown** - Nell'app +- ⏳ **Interfaccia conflitti** - Su modifiche simultanee +- ⏳ **Tag nel frontmatter** - Sincronizzati con l'app +- ⏳ **Allegati** - Immagini/file in Markdown + +--- + +**📚 Vedi anche:** +- [QUICKSTART.md](../QUICKSTART.md) - Configurazione dell'app +- [FEATURES.it.md](FEATURES.it.md) - Elenco completo delle funzionalità +- [BACKUP.it.md](BACKUP.it.md) - Backup e ripristino + +**Ultimo aggiornamento:** v2.7.0 (2026-05-30) \ No newline at end of file diff --git a/docs/DESKTOP.md b/docs/DESKTOP.md index 200bb9a8..c8898ec0 100644 --- a/docs/DESKTOP.md +++ b/docs/DESKTOP.md @@ -1,6 +1,6 @@ # Desktop Integration 🖥️ -**🌍 Languages:** [Deutsch](DESKTOP.de.md) · **English** +**🌍 Languages:** [Deutsch](DESKTOP.de.md) · [Italiano](DESKTOP.it.md) · **English** > Edit your notes with any Markdown editor on desktop diff --git a/docs/DOCS.it.md b/docs/DOCS.it.md new file mode 100644 index 00000000..6535078e --- /dev/null +++ b/docs/DOCS.it.md @@ -0,0 +1,635 @@ +# Simple Notes Sync - Documentazione Tecnica + +Questo file contiene informazioni tecniche dettagliate su implementazione, architettura e funzionalità avanzate. + +**🌍 Lingue:** [Deutsch](DOCS.de.md) · **Italiano** · [English](DOCS.md) + +--- + +## 📐 Architettura + +### Panoramica generale + +``` +┌─────────────────┐ +│ Android App │ +│ (Kotlin) │ +└────────┬────────┘ + │ WebDAV/HTTP + │ +┌────────▼────────┐ +│ WebDAV Server │ +│ (Docker) │ +└─────────────────┘ +``` + +### Architettura dell'app Android + +``` +app/ +├── models/ +│ ├── Note.kt # Data class per le note +│ └── SyncStatus.kt # Enum dello stato di sincronizzazione +├── storage/ +│ ├── NotesStorage.kt # Archiviazione locale in file JSON +│ ├── FolderStore.kt # Definizioni e metadati delle cartelle +│ └── TrashManager.kt # Gestione cestino / conservazione +├── noteimport/ # Procedura di importazione note (incl. Google Keep) +├── sync/ +│ ├── WebDavSyncService.kt # Facciata di sincronizzazione (delega ai moduli) +│ ├── SyncGateChecker.kt # Validazione pre-sincronizzazione +│ ├── ETagCache.kt # Cache degli E-Tag +│ ├── SyncTimestampManager.kt # Tracciamento dei timestamp +│ ├── ConnectionManager.kt # Ciclo di vita della connessione HTTP +│ ├── NoteUploader.kt # Logica di caricamento +│ ├── NoteDownloader.kt # Logica di scaricamento +│ ├── MarkdownSyncManager.kt # Sincronizzazione bidirezionale Markdown +│ ├── FolderSyncManager.kt # Sincronizzazione cartelle ↔ sottodirectory +│ ├── NetworkMonitor.kt # Rilevamento WiFi +│ ├── SyncWorker.kt # Worker WorkManager in background +│ └── BootReceiver.kt # Gestore riavvio del dispositivo +├── ui/ +│ ├── main/ # Schermata principale (Compose) +│ ├── editor/ # Editor note (Compose) +│ ├── settings/ # Schermate impostazioni (Compose) +│ └── widget/ # Widget schermata Home (Glance) +└── utils/ + ├── Constants.kt # Costanti dell'app + ├── NotificationHelper.kt# Gestione notifiche + └── Logger.kt # Registrazione debug/release +``` + +--- + +## 🔄 Implementazione della Sincronizzazione Automatica + +### Attività periodica WorkManager + +La sincronizzazione automatica si basa su **WorkManager** con la seguente configurazione: + +```kotlin +val constraints = Constraints.Builder() + .setRequiredNetworkType(NetworkType.UNMETERED) // Solo WiFi + .build() + +val syncRequest = PeriodicWorkRequestBuilder( + 30, TimeUnit.MINUTES, // Ogni 30 minuti + 10, TimeUnit.MINUTES // Intervallo flessibile +) + .setConstraints(constraints) + .build() +``` + +**Perché WorkManager?** +- ✅ Funziona anche quando l'app è chiusa +- ✅ Riavvio automatico dopo il riavvio del dispositivo +- ✅ Efficiente per la batteria (gestito da Android) +- ✅ Esecuzione garantita quando i vincoli sono soddisfatti + +### Rilevamento della rete + +Usiamo il **Confronto dell'IP del gateway** per verificare se il server è raggiungibile: + +```kotlin +fun isInHomeNetwork(): Boolean { + val gatewayIP = getGatewayIP() // ad es. 192.168.0.1 + val serverIP = extractIPFromUrl(serverUrl) // ad es. 192.168.0.188 + + return isSameNetwork(gatewayIP, serverIP) // Controlla la rete /24 +} +``` + +**Vantaggi:** +- ✅ Nessun permesso di localizzazione necessario +- ✅ Funziona con tutte le versioni di Android +- ✅ Affidabile e veloce + +### Flusso di sincronizzazione + +``` +1. WorkManager si attiva (ogni 30 min) + ↓ +2. Controlla: WiFi connesso? + ↓ +3. Controlla: stessa rete del server? + ↓ +4. Carica le note locali + ↓ +5. Carica nuove/modificate note → Server + ↓ +6. Scarica le note remote ← Server + ↓ +7. Unisci e risolvi i conflitti + ↓ +8. Aggiorna l'archiviazione locale + ↓ +9. Mostra notifica (se ci sono modifiche) +``` + +--- + +## 🔄 Panoramica dei Trigger di Sincronizzazione + +L'app usa **4 diversi trigger di sincronizzazione** con casi d'uso differenti: + +| Trigger | File | Funzione | Quando? | Pre-controllo? | +|---------|------|----------|---------|------------| +| **1. Sincronizzazione manuale** | `ComposeMainActivity` | `triggerManualSync()` | L'utente tocca il pulsante di sync nel menu | ✅ Sì | +| **2. Auto-sync (onResume)** | `ComposeMainActivity` | `triggerAutoSync()` | App aperta/ripresa | ✅ Sì | +| **3. Sync in background (periodica)** | `SyncWorker.kt` | `doWork()` | Ogni 15/30/60 minuti (configurabile) | ✅ Sì | +| **4. Sync alla connessione WiFi** | `NetworkMonitor.kt` → `SyncWorker.kt` | `triggerWifiConnectSync()` | WiFi connesso | ✅ Sì | + +### Controllo di raggiungibilità del server (pre-controllo) + +**Tutti e 4 i trigger di sincronizzazione** eseguono un **pre-controllo** prima della sincronizzazione vera e propria: + +```kotlin +// WebDavSyncService.kt - isServerReachable() +suspend fun isServerReachable(): Boolean = withContext(Dispatchers.IO) { + return@withContext try { + Socket().use { socket -> + socket.connect(InetSocketAddress(host, port), 2000) // Timeout 2 s + } + true + } catch (e: Exception) { + Logger.d(TAG, "Server not reachable: ${e.message}") + false + } +} +``` + +**Perché il controllo via Socket invece della richiesta HTTP?** +- ⚡ **Più veloce:** la connessione socket è istantanea, la richiesta HTTP è più lenta +- 🔋 **Efficiente per la batteria:** nessun overhead HTTP (header, handshake TLS, ecc.) +- 🎯 **Più preciso:** controlla solo la raggiungibilità di rete, non la logica del server +- 🛡️ **Previene errori:** rileva reti WiFi estranee prima che si verifichi un errore di sincronizzazione + +**Quando fallisce il controllo?** +- ❌ Server offline/non raggiungibile +- ❌ Rete WiFi errata (ad es. WiFi del bar) +- ❌ Rete non ancora pronta (ritardo DHCP/routing dopo la connessione WiFi) +- ❌ La VPN blocca l'accesso al server +- ❌ Nessun URL del server WebDAV configurato + +### Comportamento della sincronizzazione per tipo di trigger + +| Trigger | Quando il server non è raggiungibile | Sincronizzazione riuscita | Limitazione | +|---------|--------------------------|---------------------------|------------| +| Sincronizzazione manuale | Toast: "Server non raggiungibile" | Toast: "✅ Sincronizzati: X note" | Nessuna | +| Auto-sync (onResume) | Interruzione silenziosa (niente toast) | Toast: "✅ Sincronizzati: X note" | Max. 1x/min | +| Sync in background | Interruzione silenziosa (niente toast) | Silenziosa (solo SharedFlow) | 15/30/60 min | +| Sync alla connessione WiFi | Interruzione silenziosa (niente toast) | Silenziosa (solo SharedFlow) | Basata su WiFi | + +--- + +## 🔋 Ottimizzazione della Batteria + +### v1.6.0: Trigger di Sincronizzazione Configurabili + +Dalla v1.6.0 ogni trigger di sincronizzazione può essere attivato/disattivato individualmente. Questo dà agli utenti un controllo preciso sul consumo della batteria. + +#### Panoramica dei trigger di sincronizzazione + +| Trigger | Predefinito | Impatto sulla batteria | Descrizione | +|---------|---------|----------------|-------------| +| **Sincronizzazione manuale** | Sempre attivo | 0 (avviato dall'utente) | Pulsante barra strumenti / Pull-to-refresh | +| **Sync su salvataggio** | ✅ ATTIVO | ~0,5 mAh/salvataggio | Sincronizza subito dopo il salvataggio di una nota | +| **Sync su ripresa** | ✅ ATTIVO | ~0,3 mAh/ripresa | Sincronizza quando l'app viene aperta (limitazione 60 s) | +| **Connessione WiFi** | ✅ ATTIVO | ~0,5 mAh/connessione | Sincronizza quando il WiFi è connesso | +| **Sync periodica** | ❌ DISATTIVO | 0,2-0,8%/giorno | Sincronizzazione in background ogni 15/30/60 min | +| **Sync all'avvio** | ❌ DISATTIVO | ~0,1 mAh/avvio | Avvia la sincronizzazione in background dopo il riavvio | + +#### Calcolo del consumo della batteria + +**Scenario di utilizzo tipico (predefiniti):** +- Su salvataggio: ~5 salvataggi/giorno × 0,5 mAh = **~2,5 mAh** +- Su ripresa: ~10 aperture/giorno × 0,3 mAh = **~3 mAh** +- Connessione WiFi: ~2 connessioni/giorno × 0,5 mAh = **~1 mAh** +- **Totale: ~6,5 mAh/giorno (~0,2% con batteria da 3000 mAh)** + +**Con sync periodica attivata (15/30/60 min):** + +| Intervallo | Sync/giorno | Batteria/giorno | Totale (con predefiniti) | +|----------|-----------|-----------------|--------------------------| +| **15 min** | ~96 | ~23 mAh | ~30 mAh (~1,0%) | +| **30 min** | ~48 | ~12 mAh | ~19 mAh (~0,6%) | +| **60 min** | ~24 | ~6 mAh | ~13 mAh (~0,4%) | + +#### Scomposizione dei componenti + +| Componente | Frequenza | Consumo | Dettagli | +|-----------|-----------|---------|----------| +| Attivazione WorkManager | Per sync | ~0,15 mAh | Il sistema si attiva | +| Controllo di rete | Per sync | ~0,03 mAh | Controllo IP gateway | +| Sincronizzazione WebDAV | Solo se ci sono modifiche | ~0,25 mAh | HTTP PUT/GET | +| **Totale per sync** | - | **~0,25 mAh** | Ottimizzato | + +### Ottimizzazioni + +1. **Pre-controlli prima della sincronizzazione** + ```kotlin + // L'ordine conta! Prima i controlli più economici + if (!hasUnsyncedChanges()) return // Controllo locale (economico) + if (!isServerReachable()) return // Controllo di rete (costoso) + performSync() // Solo se entrambi passano + ``` + +2. **Limitazione** + - Su ripresa: intervallo minimo di 60 secondi + - Su salvataggio: intervallo minimo di 5 secondi + - Periodica: intervalli di 15/30/60 minuti + +3. **Cache IP** + ```kotlin + private var cachedServerIP: String? = null + // Risoluzione DNS solo una volta all'avvio, non a ogni controllo + ``` + +4. **Registrazione condizionale** + ```kotlin + object Logger { + fun d(tag: String, msg: String) { + if (BuildConfig.DEBUG) Log.d(tag, msg) + } + } + ``` + +5. **Vincoli di rete** + - Solo WiFi (non dati mobili) + - Solo quando il server è raggiungibile + - Nessun listener permanente + +--- + +## 📦 Dettagli della Sincronizzazione WebDAV + +### Flusso di caricamento + +```kotlin +suspend fun uploadNotes(): Int { + val localNotes = storage.loadAllNotes() + var uploadedCount = 0 + + for (note in localNotes) { + if (note.syncStatus == SyncStatus.PENDING) { + val jsonContent = note.toJson() + val remotePath = "$serverUrl/${note.id}.json" + + // v2.16.0: prima un PROPFIND per ogni cartella — se l'E-Tag del + // server non corrisponde più a quello in cache, questo è un conflitto + // e nulla viene scritto. If-Match funziona come secondo livello + // (vedi Risoluzione dei conflitti). + webdav.put(remotePath, jsonContent.toByteArray(), "application/json", ifMatch) + + storage.saveNote(note.copy(syncStatus = SyncStatus.SYNCED)) + uploadedCount++ + } + } + + return uploadedCount +} +``` + +### Flusso di scaricamento + +```kotlin +suspend fun downloadNotes(): DownloadResult { + val remoteFiles = webdav.list(serverUrl) + var downloadedCount = 0 + var conflictCount = 0 + + for (file in remoteFiles) { + if (!file.name.endsWith(".json")) continue + + val content = webdav.get(file.href) + val remoteNote = Note.fromJson(content) + val localNote = storage.loadNote(remoteNote.id) + + if (localNote == null) { + // Nuova nota dal server + storage.saveNote(remoteNote) + downloadedCount++ + } else if (localNote.updatedAt < remoteNote.updatedAt) { + // Il server ha la versione più recente. Vince solo se la copia locale + // non contiene una modifica non caricata — altrimenti è un conflitto + // (vedi sotto). + if (localNote.syncStatus.holdsLocalEdit) { + storage.saveNote(localNote.copy(syncStatus = SyncStatus.CONFLICT)) + conflictCount++ + } else { + storage.saveNote(remoteNoteFoldered.copy(syncStatus = SyncStatus.SYNCED)) + downloadedCount++ + } + } + } + + return DownloadResult(downloadedCount, conflictCount) +} +``` + +### Risoluzione dei Conflitti + +Strategia: **Last-Write-Wins**, tranne quando si perderebbe una modifica locale. Non esiste +unione automatica né copia di conflitto — entrambe sono scelte deliberate, vedi *Non implementato* sotto. + +Un conflitto viene rilevato in due punti: + +**1. In caricamento (`NoteUploader`).** Dalla v2.16.0, su due livelli. + +Il livello che applica davvero la protezione è un **PROPFIND prima che il primo byte venga scritto**. +Per ogni cartella che contiene una nota da caricare *con* un E-Tag in cache, l'uploader recupera +gli E-Tag correnti dal server e li confronta lui stesso. Una discrepanza significa che la copia sul +server è cambiata dall'ultima volta che questo dispositivo l'ha vista — la nota viene marcata come +conflitto e nessun `PUT` avviene: + +```kotlin +// NoteUploader.checkPreconditions() +if (isStaleAgainstServer(note, cachedETag, serverSnapshot)) { + return markConflict(note, storageMutex, why = "server_etag_changed") +} +``` + +Questo deve avvenire lato client perché non deve dipendere da una funzionalità del server: il server +consigliato in [`server/README.md`](../server/README.md) (hacdias/webdav su +`golang.org/x/net/webdav`) **non** valuta le precondizioni di scrittura — un `PUT` con un +`If-Match` sbagliato risponde `201` e sovrascrive. Misurato per la v2.16.0. Non far mai più +dipendere la protezione dai conflitti dal solo `If-Match`. + +Il secondo livello è quella precondizione `If-Match`, inviata con il `PUT` e attiva sui server che la +onorano (sabre/dav: Nextcloud, ownCloud, Baïkal). Chiude la finestra di gara tra il PROPFIND +e il `PUT`: + +```kotlin +// NoteUploader.uploadSingle() +val putEtag = try { + putWithPrecondition(webdav, noteUrl, jsonBytes, cachedETag) +} catch (e: WebDavException) { + if (e.statusCode == 412) return markConflict(note, storageMutex, why = "if_match_412") + throw e +} +``` + +Un server che non sa valutare `If-Match` (`400`/`501`) riceve un solo tentativo senza la precondizione, +e questo viene ricordato nella configurazione del server — il livello PROPFIND continua a proteggerlo, +e un dispositivo che non riuscisse più a caricare affatto sarebbe peggio. + +Costo: un PROPFIND per ogni cartella che ha qualcosa da caricare con un E-Tag in cache. Una +sincronizzazione senza modifiche non arriva mai a questo punto, e un primo caricamento di nuove note +non elenca nulla — senza E-Tag in cache non c'è nulla da confrontare. + +**2. In scaricamento (`NoteDownloader`).** La copia sul server è più recente *e* la nota locale +contiene ancora una modifica mai arrivata al server (`PENDING` o `CONFLICT`). La versione locale +viene mantenuta e marcata, la copia scaricata viene scartata. + +**Cosa fa una nota marcata.** Nulla, di proposito. L'uploader prende solo `LOCAL_ONLY` e +`PENDING`, quindi non viene mai inviata; dalla v2.16.0 il downloader non la sovrascrive più +(prima, la marcatura sopravviveva esattamente un ciclo di sincronizzazione e poi la versione locale +veniva silenziosamente sostituita). La nota resta fuori sincronizzazione finché non decide una persona. +Per ogni sincronizzazione che rileva conflitti viene inviata una notifica, e la nota porta un'icona +di avviso nell'elenco. + +**Risolverlo.** Aprire la nota mostra un banner nell'editor con le due opzioni — la stessa coppia +che il client desktop offre come `resolve_conflict(id, "keep_mine" | "use_server")`: + +| Azione | Cosa succede (`SyncConflictResolver`) | +|---|---| +| **Tieni la mia** | E-Tag in cache e hash del contenuto vengono eliminati, la nota torna a `PENDING`. Il prossimo caricamento parte senza precondizione e vince. | +| **Usa la versione del server** | La copia sul server viene recuperata con un singolo `GET`, sostituisce la nota locale come `SYNCED` e viene caricata nell'editor aperto. | + +#### Non implementato (deliberatamente) + +- **Nessuna copia di conflitto.** Le prime revisioni di questo documento descrivevano una + `resolveConflict()` che salvava la versione remota accanto a quella locale come "… (Conflitto)". + Una funzione del genere non è mai esistita nel pacchetto `sync/`. +- **Nessun merge a tre vie a livello di riga.** Richiederebbe una revisione base comune, cioè una + cronologia delle versioni sul server, e produrrebbe comunque risultati che nessuno vuole per il + testo in prosa. Mantenere una versione e lasciar scegliere una persona risolve lo stesso problema + a una frazione del costo. + +--- + +## 🔔 Notifiche + +### Canali di notifica + +```kotlin +val channel = NotificationChannel( + "notes_sync_channel", + "Sincronizzazione Note", + NotificationManager.IMPORTANCE_DEFAULT +) +``` + +### Notifica di successo + +```kotlin +fun showSyncSuccess(context: Context, count: Int) { + val intent = Intent(context, MainActivity::class.java) + val pendingIntent = PendingIntent.getActivity(context, 0, intent, FLAGS) + + val notification = NotificationCompat.Builder(context, CHANNEL_ID) + .setContentTitle("Sincronizzazione riuscita") + .setContentText("$count note sincronizzate") + .setContentIntent(pendingIntent) // Il tocco apre l'app + .setAutoCancel(true) // Si chiude al tocco + .build() + + notificationManager.notify(NOTIFICATION_ID, notification) +} +``` + +--- + +## 🛡️ Permessi + +L'app richiede **permessi minimi**: + +```xml + + + + + + + + + + + + + + +``` + +**Nessun permesso di localizzazione!** +Usiamo il confronto dell'IP del gateway invece del rilevamento SSID. Nessun permesso di localizzazione richiesto. + +--- + +## 🧪 Test + +### Server di test + +```bash +# Il server WebDAV è raggiungibile? +curl -u noteuser:password http://192.168.0.188:8080/ + +# Carica un file +echo '{"test":"data"}' > test.json +curl -u noteuser:password -T test.json http://192.168.0.188:8080/test.json + +# Scarica un file +curl -u noteuser:password http://192.168.0.188:8080/test.json +``` + +### Test dell'app Android + +**Test unitari:** +```bash +cd android +./gradlew test +``` + +**Test strumentati:** +```bash +./gradlew connectedAndroidTest +``` + +**Checklist di test manuale:** + +- [ ] Crea nota → visibile nell'elenco +- [ ] Modifica nota → le modifiche vengono salvate +- [ ] Elimina nota → rimossa dall'elenco +- [ ] Sync manuale → stato del server "Raggiungibile" +- [ ] Auto-sync → notifica dopo ~30 min +- [ ] Chiudi l'app → l'auto-sync continua +- [ ] Riavvio del dispositivo → l'auto-sync parte automaticamente +- [ ] Server offline → notifica di errore +- [ ] Tocco sulla notifica → l'app si apre + +--- + +## 🚀 Build e Distribuzione + +### Build Debug + +```bash +cd android +./gradlew assembleFdroidDebug +# APK: app/build/outputs/apk/fdroid/debug/app-fdroid-debug.apk +``` + +### Build Release + +```bash +./gradlew assembleFdroidRelease +# APK: app/build/outputs/apk/fdroid/release/app-fdroid-release.apk +``` + +### Firma (per la Distribuzione) + +```bash +# Crea il keystore +keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias + +# Firma l'APK +jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 \ + -keystore my-release-key.jks \ + app-release-unsigned.apk my-alias + +# Ottimizza +zipalign -v 4 app-release-unsigned.apk app-release.apk +``` + +--- + +## 🐛 Debugging + +### Filtro LogCat + +```bash +# Solo i log dell'app +adb logcat -s SimpleNotesApp NetworkMonitor SyncWorker WebDavSyncService + +# Con timestamp +adb logcat -v time -s SyncWorker + +# Salva su file +adb logcat -s SyncWorker > sync_debug.log +``` + +### Problemi comuni + +**Problema: l'auto-sync non funziona** +``` +Soluzione: disattiva l'ottimizzazione della batteria +Impostazioni → App → Simple Notes → Batteria → Non ottimizzare +``` + +**Problema: server non raggiungibile** +``` +Controlla: +1. Il server è in esecuzione? → docker compose ps +2. L'IP è corretto? → ip addr show +3. La porta è aperta? → telnet 192.168.0.188 8080 +4. Firewall? → sudo ufw allow 8080 +``` + +**Problema: le notifiche non compaiono** +``` +Controlla: +1. Il permesso di notifica è concesso? +2. Non disturbare attivo? +3. L'app in background? → Forza stop e riavvia +``` + +--- + +## 📚 Dipendenze + +```gradle +// Kotlin 2.3.20 + +// Core +androidx.core:core-ktx:1.18.0 +androidx.appcompat:appcompat:1.7.1 +com.google.android.material:material:1.14.0 + +// Jetpack Compose (BOM) — incl. Glance per i widget +androidx.compose:compose-bom:2026.05.01 + +// Lifecycle +androidx.lifecycle:lifecycle-runtime-ktx:2.10.0 + +// Coroutines +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.11.0 + +// WorkManager +androidx.work:work-runtime-ktx:2.11.2 + +// JSON +com.google.code.gson:gson:2.14.0 + +// Client WebDAV: implementazione propria dalla v2.14.0 (sync/webdav/, ~620 righe). +// La dipendenza sardine-android è stata rimossa con quella release. +// Trasporto HTTP: com.squareup.okhttp3:okhttp + com.burgstaller:okhttp-digest +``` + +--- + +## 🔮 Roadmap + +Vedi [UPCOMING.it.md](UPCOMING.it.md) per la roadmap completa e le funzionalità previste. + +--- + +## 📖 Ulteriore Documentazione + +- [Project Docs](https://github.com/inventory69/project-docs/tree/main/simple-notes-sync) +- [Sync Architecture](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/SYNC_ARCHITECTURE.md) - **Documentazione dettagliata dei trigger di sincronizzazione** +- [Android Guide](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/ANDROID_GUIDE.md) +- [Bugfix Documentation](https://github.com/inventory69/project-docs/blob/main/simple-notes-sync/BUGFIX_SYNC_SPAM_AND_NOTIFICATIONS.md) + +--- + +**Ultimo aggiornamento:** giugno 2026 \ No newline at end of file diff --git a/docs/DOCS.md b/docs/DOCS.md index 34216bd0..48786f09 100644 --- a/docs/DOCS.md +++ b/docs/DOCS.md @@ -2,7 +2,7 @@ This file contains detailed technical information about implementation, architecture, and advanced features. -**🌍 Languages:** [Deutsch](DOCS.de.md) · **English** +**🌍 Languages:** [Deutsch](DOCS.de.md) · [Italiano](DOCS.it.md) · **English** --- diff --git a/docs/FEATURES.it.md b/docs/FEATURES.it.md new file mode 100644 index 00000000..6dfe1086 --- /dev/null +++ b/docs/FEATURES.it.md @@ -0,0 +1,455 @@ +# Elenco Completo delle Funzionalità 📋 + +**🌍 Lingue:** [Deutsch](FEATURES.de.md) · **Italiano** · [English](FEATURES.md) + +> Tutte le funzionalità di Simple Notes Sync in dettaglio + +--- + +## 📝 Gestione delle Note + +### Tipi di note +- ✅ **Note di testo** - Classiche note a scrittura libera +- ✅ **Checklist** _(NUOVO in v1.4.0)_ - Elenchi di attività con spunta al tocco + - ➕ Aggiungi elementi tramite il campo di input + - ☑️ Tocca per spuntare/sbuntare + - 📌 Pressione lunga per ordinare tramite drag & drop + - ~~Barrato~~ per le voci completate + - ↩️ Sbuntare riporta l'elemento alla posizione originale _(v1.9.0)_ +- ✅ **Conversione di tipo** _(NUOVO in v2.6.0)_ - Converti una nota di testo in checklist e viceversa +- ✅ **Crea da testo condiviso** _(NUOVO in v2.2.0)_ - Ricevi testo/URL condivisi da altre app come nuova nota o checklist + +### Funzionalità di base +- ✅ **Salvataggio automatico** - Nessun salvataggio manuale necessario +- ✅ **Titolo + contenuto** - Struttura chiara per ogni nota +- ✅ **Timestamp** - Data di creazione e modifica automatiche +- ✅ **Modalità selezione** _(NUOVO in v1.5.0)_ - Pressione lunga per multi-selezione ed eliminazione in blocco +- ✅ **Dialogo di conferma** - Protezione contro l'eliminazione accidentale +- ✅ **Interfaccia Jetpack Compose** _(NUOVO in v1.5.0)_ - Interfaccia utente moderna e performante +- ✅ **Material Design 3** - Interfaccia moderna e pulita +- ✅ **Modalità scura** - Automaticamente in base alle impostazioni di sistema +- ✅ **Colori dinamici** - Si adatta al tema Android +- ✅ **Multi-tema** _(NUOVO in v2.0.0)_ - 7 schemi di colori con transizioni animate e superfici tinte +- ✅ **Titolo app personalizzato** _(NUOVO in v1.9.0)_ - Nome dell'app configurabile +- ✅ **Dimensione del testo regolabile** _(NUOVO in v2.8.0)_ - Ridimensionamento del testo delle note per tutta l'app + +### Editor +- ✅ **Editor minimalista** - Niente fronzoli +- ✅ **Auto-focus** - Inizia a scrivere immediatamente +- ✅ **Modalità schermo intero** - Massimo spazio di scrittura +- ✅ **Pulsante salva** - Conferma manuale possibile +- ✅ **Navigazione indietro** - Salva automaticamente quando il salvataggio automatico è attivato _(v1.10.0)_ +- ✅ **Animazioni di scorrimento** _(NUOVO in v1.5.0)_ - Transizioni fluide +- ✅ **Anteprima Markdown** _(NUOVO in v1.9.0)_ - Anteprima dal vivo con barra degli strumenti di formattazione +- ✅ **Salvataggio automatico opzionale** _(NUOVO in v1.9.0)_ - Timer di salvataggio automatico debounce configurabile +- ✅ **Annulla/Ripeti** _(NUOVO in v1.10.0)_ - Cronologia completa annulla/ripeti (fino a 50 passi) con pulsanti nella barra degli strumenti +- ✅ **Condivisione ed esportazione** _(NUOVO in v1.10.0)_ - Condividi come testo o PDF, esporta nel calendario +- ✅ **Eliminazione con annulla** _(NUOVO in v1.10.0)_ - Elimina dall'editor con snackbar di annullamento temporizzato +- ✅ **Evidenziazione Markdown dal vivo** _(NUOVO in v2.8.0)_ - Il Markdown viene evidenziato dal vivo mentre scrivi +- ✅ **Attivazione checkbox al tocco** _(NUOVO in v2.8.0)_ - Tocca una checkbox Markdown nell'editor per attivare/disattivare l'attività +- ✅ **Modalità di apertura predefinita** _(NUOVO in v2.8.0)_ - Scegli se le note di testo si aprono in modalità modifica o anteprima +- ✅ **Anteprima selezionabile** _(NUOVO in v2.9.0)_ - Seleziona e copia testo dall'anteprima Markdown +- ✅ **URL con collegamento automatico** _(NUOVO in v2.6.0)_ - Gli URL nudi diventano link cliccabili nell'anteprima +- ✅ **Copia e duplica** _(NUOVO in v2.6.0)_ - Copia il testo della nota o duplica gli elementi della checklist tramite il menu contestuale +- ✅ **Aggiungi testo condiviso** _(NUOVO in v2.6.0)_ - Aggiungi testo condiviso da altre app a una nota esistente +- ✅ **Elemento checklist nel calendario** _(NUOVO in v2.8.0)_ - Voce "Aggiungi al calendario" per singolo elemento nel menu contestuale +- ✅ **Incolla dagli appunti ricco** _(NUOVO in v2.10.0)_ - L'incollaggio HTML (Telegram, Word, Google Docs, browser) viene convertito in Markdown - grassetto/corsivo/link/elenchi/intestazioni/codice/citazioni, con fallback in testo semplice + +--- + +## 📊 Visualizzazioni e Layout _(NUOVO dalla v1.7.0+)_ + +### Modalità di visualizzazione +- ✅ **Vista elenco** - Layout classico a elenco +- ✅ **Vista griglia** _(NUOVO in v1.7.0)_ - Griglia a scaglioni stile Pinterest con righe di anteprima dinamiche +- ✅ **Interruttore layout** - Passa tra elenco e griglia nelle impostazioni +- ✅ **Colonne adattive** - 2-3 colonne in base alle dimensioni dello schermo +- ✅ **Ridimensionamento colonne griglia** _(NUOVO in v2.0.0)_ - Da 1 a 5 colonne configurabili nelle impostazioni di visualizzazione +- ✅ **Griglia come impostazione predefinita** _(v1.8.0)_ - Le nuove installazioni usano la vista griglia come predefinita +- ✅ **Note fissate** _(NUOVO in v2.6.0)_ - Le note fissate compaiono in una sezione dedicata in alto +- ✅ **Anteprime Markdown** _(NUOVO in v2.8.0)_ - Le card di elenco/griglia visualizzano il Markdown, inclusi prefissi checklist ☑/☐ e blocchi di codice +- ✅ **Sezioni comprimibili** _(NUOVO in v2.10.0)_ - Comprimi le intestazioni Fissate/Cartelle/Note e premi a lungo la freccia dell'intestazione per riordinarle; entrambe persistono tra i riavvii + +### Ordinamento delle note _(NUOVO in v1.8.0)_ +- ✅ **Ordina per aggiornamento** - Dal più nuovo o dal più vecchio +- ✅ **Ordina per creazione** - Per data di creazione +- ✅ **Ordina per titolo** - A-Z o Z-A +- ✅ **Ordina per tipo** - Note di testo vs checklist +- ✅ **Preferenze persistenti** - L'opzione di ordinamento viene salvata tra i riavvii dell'app +- ✅ **Dialogo di ordinamento** - Interruttore di direzione nella schermata principale + +### Filtro delle note _(NUOVO in v1.9.0)_ +- ✅ **Riga di chip filtro** - Filtra per Tutte, Testo o Checklist +- ✅ **Ricerca inline** - Ricerca rapida nella riga dei filtri +- ✅ **Pulsante ordina** - Icona di ordinamento compatta nella riga dei filtri +- ✅ **Visibilità attivabile** - Il pulsante di regolazione mostra/nasconde la riga dei filtri +- ✅ **Filtro per colore** _(NUOVO in v2.5.0)_ - Filtra l'elenco per colore della nota +- ✅ **Ordinamento per colore** _(NUOVO in v2.5.1)_ - Ordina le note per colore +- ✅ **Cartella di sincronizzazione configurabile** - Nome cartella WebDAV personalizzato + +### Ordinamento delle checklist _(NUOVO in v1.8.0)_ +- ✅ **Manuale** - Ordine personalizzato con drag & drop +- ✅ **Alfabetico** - Ordinamento A-Z +- ✅ **Non spuntate in cima** - Gli elementi non spuntati in alto +- ✅ **Spuntate in fondo** - Gli elementi spuntati in basso +- ✅ **Data di creazione** _(NUOVO in v1.11.0)_ - Ordina per data di creazione (crescente o decrescente) +- ✅ **Separatore visivo** - Tra i gruppi non spuntati/spuntati con conteggio +- ✅ **Riordino automatico all'attivazione** - Riordina quando spunti/sbunti elementi +- ✅ **Trascinamento oltre i confini** - Gli elementi cambiano stato automaticamente quando attraversano il separatore + +--- + +## 📁 Cartelle _(NUOVO in v2.7.0)_ + +- ✅ **Organizza in cartelle** - Raggruppa le note in cartelle per una separazione più chiara +- ✅ **Filtro cartelle** - Mostra le note di una singola cartella +- ✅ **Sincronizzazione cartelle** - Le cartelle corrispondono alle sottodirectory WebDAV +- ✅ **Cartelle solo locali** _(NUOVO in v2.8.0)_ - Contrassegna una cartella come solo locale così le sue note non vengono mai sincronizzate sul server +- ✅ **Rinomina ed eliminazione sicure** - Rinominare o eliminare una cartella sposta le sue note senza lasciare orfani sul server +- ✅ **Nome cartella di sincronizzazione personalizzato** - Cartella WebDAV root configurabile + +--- + +## 🗑️ Cestino / Cestino di riciclo _(NUOVO in v2.8.0)_ + +- ✅ **Sposta nel cestino** - Eliminare una nota la sposta nel Cestino invece di cancellarla +- ✅ **Schermata Cestino** - Ripristina o elimina definitivamente le note dalle Impostazioni +- ✅ **Conservazione configurabile** _(NUOVO in v2.10.0)_ - Eliminazione automatica dopo Immediato / 7 / 14 / 30 / 90 giorni (predefinito 30) +- ✅ **Snackbar di annullamento** - Annulla temporizzato subito dopo l'eliminazione +- ✅ **Eliminazioni server recuperabili** - Le note eliminate su un altro dispositivo finiscono nel Cestino locale invece di sparire + +--- + +## 🗄️ Archivio _(NUOVO in v2.11.0)_ + +- ✅ **Archivia le note** - Sposta una nota fuori dall'elenco principale senza eliminarla, dall'editor o tramite multi-selezione +- ✅ **Vista archivio** - Attiva l'elenco note per mostrare le note archiviate invece di quelle attive +- ✅ **Archiviazione/scaricamento in blocco** - Archivia o ripristina più note selezionate contemporaneamente +- ✅ **Snackbar di annullamento** - Annulla temporizzato subito dopo l'archiviazione o lo scaricamento + +--- + +## 🎨 Colori delle Note _(NUOVO in v2.5.0)_ + +- ✅ **Note codificate a colori** - Assegna un colore a qualsiasi nota +- ✅ **Colorazione multi-selezione** - Applica un colore a più note contemporaneamente +- ✅ **Filtra per colore** - Mostra solo le note di un determinato colore +- ✅ **Ordina per colore** _(v2.5.1)_ - Raggruppa l'elenco per colore + +--- + +## 📥 Importazione + +### Importazione da Google Keep _(NUOVO in v2.5.0)_ +- ✅ **Supporto export Keep** - Importa note da un export di Google Keep (Takeout) +- ✅ **Checklist e colori** - Le checklist di Keep e i colori delle etichette vengono preservati +- ✅ **Strategia di conflitto** - Scegli come gestire i duplicati durante l'importazione + +### Procedura guidata di importazione note _(NUOVO in v1.9.0)_ +- ✅ **Da WebDAV o locale** - Importa file `.md`, `.json`, o `.txt` +- ✅ **Seleziona tutto / deseleziona tutto** - Selezione in blocco per importazioni WebDAV +- ✅ **Strategia di conflitto** - Salta, sovrascrivi o mantieni entrambi + +--- + +## 📌 Widget della schermata Home _(NUOVO in v1.8.0)_ + +### Funzionalità dei widget +- ✅ **Widget nota di testo** - Visualizza qualsiasi nota sulla schermata Home +- ✅ **Widget checklist** - Checkbox interattive che si sincronizzano con il server +- ✅ **Widget scorciatoia nuova nota** _(NUOVO in v2.2.0)_ - Widget 1×1 che apre l'editor per una nuova nota +- ✅ **Widget elenco note scorrevole** _(NUOVO in v2.8.0)_ - Un elenco scorrevole di note con Markdown inline +- ✅ **5 classi di dimensione** - SMALL, NARROW_MED, NARROW_TALL, WIDE_MED, WIDE_TALL +- ✅ **Colori Material You** - Colori dinamici che corrispondono al tema di sistema +- ✅ **Opacità configurabile** - Trasparenza dello sfondo (0-100%) +- ✅ **Interruttore di blocco** - Previene modifiche accidentali +- ✅ **Aggiornamento automatico** - Si aggiorna al completamento della sincronizzazione +- ✅ **Attività di configurazione** - Selezione della nota e impostazioni +- ✅ **Ordinamento checklist** _(v1.8.1)_ - I widget rispettano l'opzione di ordinamento salvata +- ✅ **Separatori visivi** _(v1.8.1)_ - Tra elementi non spuntati e spuntati +- ✅ **Conservazione della tinta Monet** _(v1.9.0)_ - Lo sfondo traslucido mantiene i colori dinamici +- ✅ **Barra delle opzioni senza cuciture** _(v1.9.0)_ - Sfondo rimosso per un aspetto più pulito +- ✅ **Barratura nelle checklist** _(v1.9.0)_ - Gli elementi completati mostrano la barratura nel widget +- ✅ **Aggiornamento automatico in uscita** _(v1.9.0)_ - I widget si aggiornano quando esci dall'app +- ✅ **Dimensione carattere per widget** _(v2.8.0)_ - Dimensione del carattere indipendente per ogni widget +- ✅ **Opzioni widget elenco** _(v2.8.0)_ - Nascondi intestazione/fissate/cartelle, filtra per cartella +- ✅ **Icone sensibili al tema** _(v2.7.x)_ - Le icone della barra opzioni si adattano alla modalità chiara/scura + +--- + +## 🌍 Supporto Multilingue _(NUOVO in v1.5.0)_ + +### Lingue supportate +12 lingue, mantenute dalla community su [Weblate](https://hosted.weblate.org/projects/simple-notes-sync/): +- ✅ **Inglese** (predefinita) · **Tedesco** · **Spagnolo** · **Francese** · **Indonesiano** · **Italiano** · **Norvegese Bokmål** · **Polacco** · **Russo** · **Turco** · **Ucraino** · **Cinese (Semplificato)** + +### Selezione della lingua +- ✅ **Rilevamento automatico** - Segue la lingua di sistema +- ✅ **Selezione manuale** - Modificabile nelle impostazioni +- ✅ **Lingua per app** - Selezione nativa della lingua su Android 13+ +- ✅ **locales_config.xml** - Integrazione Android completa + +### Ambito +- ✅ **400+ stringhe** - Pienamente tradotte +- ✅ **Testi UI** - Tutti i pulsanti, i dialoghi, i menu +- ✅ **Messaggi di errore** - Suggerimenti localizzati utili +- ✅ **Impostazioni** - 7 schermate categorizzate + +--- + +## 💾 Backup e Ripristino + +### Sistema di backup locale +- ✅ **Esportazione JSON** - Tutte le note in un unico file +- ✅ **Libera scelta della posizione** - Download, scheda SD, cartella cloud +- ✅ **Nomi file con timestamp** - `simplenotes_backup_YYYY-MM-DD_HHmmss.json` +- ✅ **Esportazione completa** - Titolo, contenuto, timestamp, ID +- ✅ **Formato leggibile** - JSON formattato +- ✅ **Indipendente dal server** - Funziona completamente offline + +### Modalità di ripristino +- ✅ **Unisci** - Aggiungi nuove note, mantieni quelle esistenti _(Predefinita)_ +- ✅ **Sostituisci** - Elimina tutto e importa il backup +- ✅ **Sovrascrivi i duplicati** - Il backup vince sui conflitti di ID +- ✅ **Backup di sicurezza automatico** - Prima di ogni ripristino +- ✅ **Validazione del backup** - Controlla il formato e la versione +- ✅ **Gestione degli errori** - Messaggi di errore chiari su eventuali problemi + +--- + +## 🖥️ Integrazione Desktop + +### Esportazione Markdown +- ✅ **Esportazione automatica** - Ogni nota → file `.md` +- ✅ **Checklist come elenchi attività** _(NUOVO)_ - Formato `- [ ]` / `- [x]` (compatibile con GitHub) +- ✅ **Doppio formato** - JSON (master) + Markdown (specchio) +- ✅ **Sanificazione dei nomi file** - Nomi file sicuri dai titoli +- ✅ **Gestione dei duplicati** _(NUOVO)_ - Suffisso ID per titoli identici +- ✅ **Metadati frontmatter** - YAML con ID, timestamp, tipo +- ✅ **Sincronizzazione WebDAV** - In parallelo alla sincronizzazione JSON +- ✅ **Opzionale** - Attivabile nelle impostazioni +- ✅ **Esportazione iniziale** - Tutte le note esistenti al momento dell'attivazione +- ✅ **Indicatore di avanzamento** - Mostra X/Y durante l'esportazione + +### Importazione Markdown +- ✅ **Desktop → App** - Importa le modifiche dal desktop +- ✅ **Last-Write-Wins** - Risoluzione dei conflitti tramite timestamp +- ✅ **Parsing del frontmatter** - Legge i metadati dai file `.md` +- ✅ **Rileva nuove note** - Adottate automaticamente nell'app +- ✅ **Rileva aggiornamenti** - Solo se la versione desktop è più recente +- ✅ **Tolleranza agli errori** - I singoli errori non interrompono l'importazione + +### Accesso WebDAV +- ✅ **Montaggio come unità di rete** - Windows, macOS, Linux +- ✅ **Qualsiasi editor Markdown** - VS Code, Typora, Notepad++, iA Writer +- ✅ **Modifica dal vivo** - Accesso diretto ai file `.md` +- ✅ **Struttura delle cartelle** - `/notes/` per il JSON, `/notes-md/` per il Markdown +- ✅ **Creazione automatica delle cartelle** - Alla prima sincronizzazione + +--- + +## 🔄 Sincronizzazione + +### Sincronizzazione automatica +- ✅ **Selezione dell'intervallo** - 15, 30 o 60 minuti +- ✅ **Trigger WiFi** - Sincronizza alla connessione WiFi _(nessuna restrizione SSID)_ +- ✅ **Rispettoso della batteria** - ~0,2-0,8% al giorno +- ✅ **Controllo intelligente del server** - Sincronizza solo quando il server è raggiungibile +- ✅ **WorkManager** - Esecuzione in background affidabile +- ✅ **Compatibile con l'ottimizzazione della batteria** - Funziona anche con la modalità Doze + +### Trigger di sincronizzazione (6 in totale) +1. ✅ **Sincronizzazione periodica** - Automaticamente dopo l'intervallo +2. ✅ **Sincronizzazione all'avvio dell'app** - Quando si apre l'app +3. ✅ **Sincronizzazione alla connessione WiFi** - A qualsiasi connessione WiFi +4. ✅ **Sincronizzazione manuale** - Pulsante nelle impostazioni +5. ✅ **Pull-to-refresh** - Gesto di scorrimento nell'elenco note +6. ✅ **Sincronizzazione al salvataggio impostazioni** - Dopo la configurazione del server + +### Meccanismo di sincronizzazione +- ✅ **Caricamento** - Modifiche locali sul server +- ✅ **Scaricamento** - Modifiche del server sull'app +- ✅ **Download paralleli** _(NUOVO in v1.8.0)_ - Fino a 5 download simultanei +- ✅ **Rilevamento dei conflitti** - Su modifiche simultanee +- ✅ **Unione senza conflitti** - Last-Write-Wins tramite timestamp +- ✅ **Rilevamento eliminazioni sul server** _(NUOVO in v1.8.0)_ - Rileva note eliminate su altri dispositivi +- ✅ **Tracciamento dello stato di sincronizzazione** - LOCAL_ONLY, PENDING, SYNCED, CONFLICT, DELETED_ON_SERVER +- ✅ **UI di avanzamento dal vivo** _(NUOVO in v1.8.0)_ - Indicatori di fase con contatori di caricamento/scaricamento +- ✅ **Gestione degli errori** - Riprova in caso di problemi di rete +- ✅ **Offline-first** - L'app funziona senza server + +### Connessione al server +- ✅ **Protocollo WebDAV** - Protocollo standard +- ✅ **HTTP/HTTPS** - HTTP solo in locale, HTTPS per l'esterno +- ✅ **Nome utente/password** - Autenticazione di base +- ✅ **Test di connessione** - Test nelle impostazioni +- ✅ **Sincronizzazione solo WiFi** _(NUOVO in v1.7.0)_ - Opzione per sincronizzare solo su WiFi +- ✅ **Supporto VPN** _(NUOVO in v1.7.0)_ - La sincronizzazione funziona correttamente attraverso tunnel VPN +- ✅ **SSL self-signed** _(NUOVO in v1.7.0)_ - Supporto per certificati self-signed +- ✅ **Normalizzazione dell'URL del server** - `/notes/` e `/notes-md/` automatici _(NUOVO in v1.2.1)_ +- ✅ **Input URL flessibile** - Entrambe le varianti funzionano: `http://server/` e `http://server/notes/` + +--- + +## 🔒 Privacy e Sicurezza + +### Self-Hosted +- ✅ **Server proprio** - Controllo totale dei dati +- ✅ **Nessun cloud** - Nessuna terza parte +- ✅ **Nessun tracciamento** - Nessuna analisi, nessuna telemetria +- ✅ **Nessun account** - Solo le credenziali del server +- ✅ **100% open source** - Licenza AGPL v3 + +### Sicurezza dei dati +- ✅ **Archiviazione locale** - Archivio privato dell'app (Android) +- ✅ **Crittografia WebDAV** - HTTPS per i server esterni +- ✅ **Credenziali crittografate** _(NUOVO in v2.3.0)_ - Credenziali WebDAV crittografate tramite il Keystore Android +- ✅ **Nessuna libreria di terze parti** - Solo Android SDK + implementazione WebDAV propria (dalla v2.14.0) + +### Blocco app _(NUOVO in v2.10.0)_ +- ✅ **Sblocco biometrico / credenziale del dispositivo** - Blocco opzionale basato su impronta digitale, viso o PIN del dispositivo +- ✅ **Periodo di grazia configurabile** - Scegli per quanto tempo l'app resta sbloccata in background prima di ri-bloccarsi +- ✅ **Protezione dagli screenshot** - `FLAG_SECURE` blocca screenshot/registrazioni dello schermo e nasconde il contenuto nella miniatura delle app recenti quando è bloccata + +### Funzionalità per sviluppatori +- ✅ **Registrazione file** - Opzionale, solo se abilitata _(NUOVO in v1.3.2)_ +- ✅ **Avviso sulla privacy** - Avviso esplicito all'attivazione +- ✅ **Log locali** - I log restano sul dispositivo + +--- + +## 🔋 Prestazioni e Ottimizzazione + +### Efficienza della batteria (v1.6.0) +- ✅ **Trigger di sincronizzazione configurabili** - Attiva/disattiva ogni trigger singolarmente +- ✅ **Predefiniti intelligenti** - Solo i trigger guidati da eventi sono attivi per impostazione predefinita +- ✅ **Intervalli periodici ottimizzati** - 15/30/60 min (predefinito: OFF) +- ✅ **Solo WiFi** - Nessuna sincronizzazione dati mobili +- ✅ **Controllo intelligente del server** - Sincronizza solo quando il server è raggiungibile +- ✅ **WorkManager** - Esecuzione ottimizzata dal sistema +- ✅ **Compatibile con la modalità Doze** - La sincronizzazione funziona anche in standby +- ✅ **Consumi misurati:** + - Predefinito (solo eventi): ~0,2%/giorno (~6,5 mAh) ⭐ _Ottimale_ + - Con periodico 15 min: ~1,0%/giorno (~30 mAh) + - Con periodico 30 min: ~0,6%/giorno (~19 mAh) + - Con periodico 60 min: ~0,4%/giorno (~13 mAh) + +### Prestazioni dell'app +- ✅ **Offline-first** - Funziona senza internet +- ✅ **Caricamento immediato** - Le note si caricano in <100ms +- ✅ **Scorrimento fluido** - LazyColumn con Compose +- ✅ **Material Design 3** - Interfaccia Android nativa +- ✅ **Kotlin Coroutines** - Operazioni asincrone +- ✅ **APK di piccole dimensioni** - ~5 MB (ottimizzato con R8/ProGuard) + +--- + +## 🛠️ Dettagli tecnici + +### Piattaforma +- ✅ **Android 7.0+** (API 24+) +- ✅ **Target SDK 36** (Android 16) +- ✅ **Kotlin** - Linguaggio di programmazione moderno +- ✅ **Jetpack Compose** - Framework UI dichiarativo +- ✅ **Material Design 3** - Linee guida di design più recenti +- ✅ **Sistema multi-tema** _(v2.0.0)_ - 7 schemi di colori inclusi AMOLED & Dynamic Color +- ✅ **Jetpack Glance** _(v1.8.0)_ - Framework per widget + +### Architettura +- ✅ **MVVM-Light** - Architettura semplice +- ✅ **Single Activity** - Navigazione moderna +- ✅ **Kotlin Coroutines** - Modello Async/Await +- ✅ **Dispatchers.IO** - Operazioni in background +- ✅ **SharedPreferences** - Archiviazione delle impostazioni +- ✅ **Archiviazione basata su file** - File JSON in locale +- ✅ **Eccezioni personalizzate** - SyncException dedicata per una migliore gestione degli errori _(NUOVO in v1.3.2)_ + +### Dipendenze +- ✅ **AndroidX** - Librerie Jetpack +- ✅ **Material Components** - Material Design 3 +- ✅ **Client WebDAV** - Implementazione propria in `sync/webdav/` (dalla v2.14.0) +- ✅ **Gson** - Serializzazione JSON +- ✅ **WorkManager** - Attività in background +- ✅ **OkHttp** - Client HTTP +- ✅ **Glance** _(v1.8.0)_ - Framework per widget + +### Varianti di build +- ✅ **Standard** - APK universale (100% FOSS, nessuna dipendenza Google) +- ✅ **F-Droid** - Identica alla Standard (100% FOSS) +- ✅ **Debug/Release** - Sviluppo e produzione +- ✅ **Nessun servizio Google** - Completamente FOSS, nessuna libreria proprietaria + +--- + +## 📦 Compatibilità Server + +### Server WebDAV testati +- ✅ **Docker WebDAV** (consigliato per il self-hosting) +- ✅ **Nextcloud** - Pienamente compatibile +- ✅ **ownCloud** - Funziona perfettamente +- ✅ **Apache mod_dav** - WebDAV standard +- ✅ **nginx + WebDAV** - Con configurazione corretta + +### Funzionalità del server +- ✅ **Basic Auth** - Nome utente/password +- ✅ **Elenco directory** - Per i download +- ✅ **PUT/GET** - Caricamento/scaricamento +- ✅ **MKCOL** - Creare cartelle +- ✅ **DELETE** - Eliminare note e cartelle vuote + +--- + +## ℹ️ Informazioni sull'app + +- ✅ **Changelog nell'app** _(NUOVO in v2.9.0)_ - Schermata changelog nativa, raggiungibile dalle Impostazioni +- ✅ **Pannello "Novità"** - Evidenziazioni localizzate dopo ogni aggiornamento, con pulsante "Vedi changelog" +- ✅ **Schermata contributori** _(NUOVO in v2.9.0)_ - Ringrazia tutti coloro che hanno contribuito al progetto + +--- + +## 🔮 Funzionalità future + +Previste per le prossime versioni – vedi [UPCOMING.it.md](UPCOMING.it.md) per la roadmap completa. + +--- + +## 📊 Confronto con altre app + +| Funzionalità | Simple Notes Sync | Google Keep | Nextcloud Notes | +|---------|------------------|-------------|-----------------| +| Offline-first | ✅ | ⚠️ Limitato | ⚠️ Limitato | +| Self-hosted | ✅ | ❌ | ✅ | +| Sincronizzazione automatica | ✅ | ✅ | ✅ | +| Esportazione Markdown | ✅ | ❌ | ✅ | +| Accesso desktop | ✅ (WebDAV) | ✅ (Web) | ✅ (Web + WebDAV) | +| Backup locale | ✅ | ❌ | ⚠️ Backup server | +| Nessun account Google | ✅ | ❌ | ✅ | +| Open Source | ✅ AGPL v3 | ❌ | ✅ AGPL | +| Dimensione APK | ~5 MB | ~50 MB | ~8 MB | +| Consumo batteria | ~0,4%/giorno | ~1-2%/giorno | ~0,5%/giorno | + +--- + +## ❓ FAQ + +**D: Mi serve un server?** +R: No! L'app funziona completamente offline. Il server è opzionale per la sincronizzazione. + +**D: Quale server è il migliore?** +R: Per i principianti: Docker WebDAV (semplice, facile). Per i professionisti: Nextcloud (molte funzionalità). + +**D: L'esportazione Markdown funziona senza l'Integrazione Desktop?** +R: No, devi attivare la funzionalità nelle impostazioni. + +**D: I miei dati andranno persi se cambio server?** +R: No! Crea un backup locale, cambia server, ripristina. + +**D: Perché JSON + Markdown?** +R: Il JSON è affidabile e veloce (master). Il Markdown è leggibile dall'uomo (specchio per il desktop). + +**D: Posso usare l'app senza Google Play?** +R: Sì! Scarica l'APK direttamente da GitHub o usa F-Droid. + +--- + +**Ultimo aggiornamento:** v2.9.0 (2026-06-22) \ No newline at end of file diff --git a/docs/FEATURES.md b/docs/FEATURES.md index dea80749..e1b3d77d 100644 --- a/docs/FEATURES.md +++ b/docs/FEATURES.md @@ -1,6 +1,6 @@ # Complete Feature List 📋 -**🌍 Languages:** [Deutsch](FEATURES.de.md) · **English** +**🌍 Languages:** [Deutsch](FEATURES.de.md) · [Italiano](FEATURES.it.md) · **English** > All features of Simple Notes Sync in detail diff --git a/docs/SELF_SIGNED_SSL.it.md b/docs/SELF_SIGNED_SSL.it.md new file mode 100644 index 00000000..19e52589 --- /dev/null +++ b/docs/SELF_SIGNED_SSL.it.md @@ -0,0 +1,166 @@ +# Supporto Certificati SSL Self-Signed + +**Dal:** v1.7.0 +**Stato:** ✅ Supportato + +--- + +## Panoramica + +Simple Notes Sync ora supporta la connessione a server WebDAV con certificati SSL self-signed, come ad esempio: +- ownCloud/Nextcloud con certificati self-signed +- Synology NAS con certificati predefiniti +- Raspberry Pi o server domestici +- Server aziendali interni con CA private + +## Come Usare + +### Passo 1: Esporta il Certificato CA del Tuo Server + +**Sul tuo server:** + +1. Individua il file del certificato (di solito in formato `.crt`, `.pem`, o `.der`) +2. Se hai creato tu il certificato, lo possiedi già +3. Per Synology NAS: Pannello di controllo → Sicurezza → Certificato → Esporta +4. Per ownCloud/Nextcloud: di solito in `/etc/ssl/certs/` sul server + +### Passo 2: Installa il Certificato su Android + +**Sul tuo dispositivo Android:** + +1. **Trasferisci** il file `.crt` o `.pem` sul telefono (tramite email, USB, ecc.) + +2. **Apri Impostazioni** → Sicurezza → Altre impostazioni di sicurezza (o Crittografia e credenziali) + +3. **Installa da archiviazione** / "Installa un certificato" + - Scegli "Certificato CA" + - **Avvertenza:** Android mostrerà un avviso di sicurezza. È normale. + - Tocca "Installa comunque" + +4. **Sfoglia** fino al file del certificato e selezionalo + +5. **Dagli un nome** riconoscibile (ad es. "La mia CA ownCloud") + +6. ✅ **Fatto!** Il certificato ora è riconosciuto a livello di sistema + +### Passo 3: Connetti Simple Notes Sync + +1. Apri Simple Notes Sync +2. Vai su **Impostazioni** → **Impostazioni Server** +3. Inserisci il tuo URL del server **`https://`** come di consueto +4. L'app ora riconoscerà il tuo certificato self-signed ✅ + +--- + +## Note di Sicurezza + +### ⚠️ Importante + +- Installare un certificato CA concede la fiducia a **tutti** i certificati firmati da quella CA +- Installa solo certificati da fonti di cui ti fidi +- Android ti avviserà prima dell'installazione – leggi attentamente l'avviso + +### 🔒 Perché è Sicuro + +- Installi il certificato **manualmente** (decisione consapevole) +- L'app usa il trust store nativo di Android (nessuna validazione personalizzata) +- Puoi rimuovere il certificato in qualsiasi momento dalle Impostazioni Android +- Conforme a F-Droid e Google Play (nessun trucco "trust all") + +--- + +## Risoluzione dei Problemi + +### Certificato Non Riconosciuto + +**Problema:** l'app mostra ancora un errore SSL dopo aver installato il certificato + +**Soluzioni:** +1. **Verifica l'installazione:** Impostazioni → Sicurezza → Credenziali di fiducia → scheda Utente +2. **Controlla il tipo di certificato:** deve essere un certificato CA, non un certificato server +3. **Riavvia l'app:** chiudi e riapri Simple Notes Sync +4. **Controlla l'URL:** deve usare `https://` (non `http://`) + +### Errore "Network Security Policy" + +**Problema:** Android 7+ limita i certificati utente per le app + +**Soluzione:** questa app è configurata per riconoscere i certificati utente ✅ +Se il problema persiste, controlla: +- Il certificato è installato nella scheda "Utente" (non "Sistema") +- Il certificato non è scaduto +- L'URL del server corrisponde al Common Name (CN) o allo Subject Alternative Name (SAN) del certificato + +### Self-Signed vs. Firmato da CA + +| Tipo | Installazione Richiesta | Sicurezza | +|------|-------------------------|-----------| +| **Self-Signed** | ✅ Sì | Fiducia manuale | +| **Let's Encrypt** | ❌ No | Automatica | +| **CA privata** | ✅ Sì (root CA) | Automatica per tutti i cert firmati dalla CA | + +--- + +## Alternativa: Usa Let's Encrypt (Consigliato) + +Se il tuo server è accessibile pubblicamente, considera l'uso di **Let's Encrypt** per certificati SSL gratuiti e rinnovati automaticamente: + +- Nessuna installazione manuale del certificato necessaria +- Riconosciuto automaticamente da tutti i dispositivi +- Più semplice per gli utenti finali + +**Guide di configurazione:** +- [ownCloud Let's Encrypt](https://doc.owncloud.com/server/admin_manual/installation/letsencrypt/) +- [Nextcloud Let's Encrypt](https://docs.nextcloud.com/server/latest/admin_manual/installation/letsencrypt.html) +- [Synology Let's Encrypt](https://kb.synology.com/en-us/DSM/tutorial/How_to_enable_HTTPS_and_create_a_certificate_signing_request_on_your_Synology_NAS) + +--- + +## Dettagli Tecnici + +### Implementazione + +- Usa la **Network Security Config** di Android +- Si fida sia dei certificati CA di sistema che di quelli utente +- Nessun TrustManager o hostname verifier personalizzato +- Conforme a F-Droid e alla conformità Play Store + +### Configurazione + +File: `android/app/src/main/res/xml/network_security_config.xml` + +```xml + + + + + + +``` + +--- + +## FAQ + +**D: Devo reinstallare il certificato dopo gli aggiornamenti dell'app?** +R: No, i certificati sono archiviati a livello di sistema, non per app. + +**D: Posso usare lo stesso certificato per più app?** +R: Sì, una volta installato funziona per tutte le app che riconoscono i certificati utente. + +**D: Come posso rimuovere un certificato?** +R: Impostazioni → Sicurezza → Credenziali di fiducia → scheda Utente → Tocca il certificato → Rimuovi + +**D: Funziona su Android 14+?** +R: Sì, testato da Android 7 a 15 (API 24-35). + +--- + +## Problemi Correlati + +- [GitHub Issue #X](link) - Richiesta utente per il supporto ownCloud +- [Feature Analysis](../project-docs/simple-notes-sync/features/SELF_SIGNED_SSL_CERTIFICATES_ANALYSIS.md) - Analisi tecnica + +--- + +**Hai bisogno di aiuto?** Apri un issue su [GitHub](https://github.com/inventory69/simple-notes-sync/issues) \ No newline at end of file diff --git a/docs/TRANSLATING.it.md b/docs/TRANSLATING.it.md new file mode 100644 index 00000000..4061500b --- /dev/null +++ b/docs/TRANSLATING.it.md @@ -0,0 +1,185 @@ +# Contribuire con le Traduzioni 🌍 + +**🌍 Lingue:** [Deutsch](TRANSLATING.de.md) · **Italiano** · [English](TRANSLATING.md) + +> Come tradurre Simple Notes Sync nella tua lingua! + +--- + +## 📋 Panoramica + +Simple Notes Sync supporta attualmente **12 lingue**: + +🇺🇸 Inglese (en, primaria) · 🇩🇪 Tedesco (de) · 🇪🇸 Spagnolo (es) · 🇫🇷 Francese (fr) · 🇮🇩 Indonesiano (in) · 🇮🇹 Italiano (it) · 🇳🇴 Norvegese Bokmål (nb-rNO) · 🇵🇱 Polacco (pl) · 🇷🇺 Russo (ru) · 🇹🇷 Turco (tr) · 🇺🇦 Ucraino (uk) · 🇨🇳 Cinese, Semplificato (zh-rCN) + +Altre lingue sono in fase di traduzione su Weblate ma non sono ancora distribuite — una locale viene +aggiunta all'app solo quando supera la soglia del 40% di copertura, altrimenti l'interfaccia +sarebbe ancora quasi interamente in inglese. + +Accogliamo con piacere nuove traduzioni e miglioramenti a quelle esistenti! + +--- + +## 🌐 Traduci tramite Weblate (Consigliato) + +Il modo più semplice per contribuire con le traduzioni è tramite **Weblate** — nessuna conoscenza di programmazione richiesta: + +👉 **[Traduci su Weblate](https://hosted.weblate.org/projects/simple-notes-sync/)** + +1. Crea un account Weblate gratuito +2. Vai al progetto Simple Notes Sync +3. Seleziona la tua lingua (o richiedine una nuova) +4. Inizia a tradurre direttamente nel browser + +Weblate crea automaticamente le pull request con le tue traduzioni. Queste PR passano attraverso lo stesso controllo di build CI di tutti gli altri contributi. Una volta che la build passa, vengono approvate e unite. + +--- + +## 🚀 Traduzione Manuale (Alternativa) + +Se preferisci lavorare direttamente con i file sorgente: + +### 1. Fork del Repository + +1. Vai su [github.com/inventory69/simple-notes-sync](https://github.com/inventory69/simple-notes-sync) +2. Clicca **Fork** (in alto a destra) +3. Clona il tuo fork: `git clone https://github.com/TUO-NOME-UTENTE/simple-notes-sync.git` + +### 2. Crea i File della Lingua + +```bash +cd simple-notes-sync/android/app/src/main/res + +# Crea la cartella per la tua lingua (ad es. francese) +mkdir values-fr + +# Copia le stringhe +cp values/strings.xml values-fr/strings.xml +``` + +### 3. Traduci le Stringhe + +Apri `values-fr/strings.xml` e traduci tutte le voci ``: + +```xml + +Settings +Notes + + +Paramètres +Notes +``` + +**Importante:** +- Traduci solo il testo tra `>` e `` +- NON modificare gli attributi `name="..."` +- NON tradurre `app_name` — mantienilo come "Simple Notes" +- Mantieni `%s`, `%d`, `%1$s` ecc. come segnaposto +- Mantieni invariati i caratteri emoji (📝, ✅, ecc.) + +### 4. Aggiorna locales_config.xml + +Aggiungi la tua lingua a `android/app/src/main/res/xml/locales_config.xml`: + +```xml + + + + + +``` + +**Registra anche la locale per la build:** aggiungila a `localeFilters` in `android/app/build.gradle.kts`, altrimenti la nuova lingua verrà rimossa dall'APK per mantenerne piccole le dimensioni: + +```kotlin +localeFilters += listOf( + "en", "de", "es", "hi", "in", "it", "nb-rNO", "ru", "tr", "uk", "zh-rCN", + "fr", // NUOVO +) +``` + +### 5. Crea una Pull Request + +1. Esegui il commit delle tue modifiche +2. Esegui il push sul tuo fork +3. Crea una Pull Request con il titolo: `Add [Language] translation` + +--- + +## 📁 Struttura dei File + +``` +android/app/src/main/res/ +├── values/ # Inglese (Fallback) +│ └── strings.xml +├── values-de/ # Tedesco +│ └── strings.xml +├── values-fr/ # Francese (nuovo) +│ └── strings.xml +└── xml/ + └── locales_config.xml # Registrazione delle lingue +``` + +--- + +## 📝 Categorie di Stringhe + +Il file `strings.xml` contiene circa 440+ stringhe (incluse 5 forme plurali), suddivise in: + +| Categoria | Descrizione | Conteggio | +|----------|-------------|-------| +| Testi UI | Pulsanti, etichette, titoli | ~120 | +| Impostazioni | Tutte le schermate delle impostazioni | ~150 | +| Dialoghi | Conferme, errori | ~80 | +| Sincronizzazione | Messaggi di sincronizzazione | ~50 | +| Altro | Suggerimenti, accessibilità, widget | ~40 | + +--- + +## ✅ Checklist di Qualità + +Prima di creare la tua Pull Request (non necessaria per i contributi Weblate): + +- [ ] Tutte le stringhe tradotte (nessun residuo in inglese) +- [ ] `app_name` lasciato come "Simple Notes" +- [ ] Segnaposto (`%s`, `%d`) preservati +- [ ] Caratteri emoji invariati +- [ ] Nessun errore di sintassi XML +- [ ] L'app si avvia senza crash +- [ ] Il testo si adatta agli elementi UI (non troppo lungo) +- [ ] `locales_config.xml` aggiornato + +--- + +## 🔧 Test + +```bash +cd android +./gradlew app:assembleDebug + +# Installa l'APK e cambia la lingua nelle impostazioni Android +``` + +--- + +## ❓ FAQ + +**Devo tradurre tutte le stringhe?** +> Idealmente sì. Le stringhe mancanti ripiegano sull'inglese. + +**E i segnaposto?** +> `%s` = testo, `%d` = numero. Mantieni la posizione o usa `%1$s` per la numerazione. + +**Come testo la mia traduzione?** +> Compila l'app, installala, vai su Impostazioni Android → App → Simple Notes → Lingua. + +--- + +## 🙏 Grazie! + +Ogni traduzione aiuta Simple Notes Sync a raggiungere più persone. + +Domande? [Crea una GitHub Issue](https://github.com/inventory69/simple-notes-sync/issues) + +[← Torna alla Documentazione](DOCS.it.md) \ No newline at end of file diff --git a/docs/TRANSLATING.md b/docs/TRANSLATING.md index 4c862d59..9f4e3153 100644 --- a/docs/TRANSLATING.md +++ b/docs/TRANSLATING.md @@ -1,6 +1,6 @@ # Contributing Translations 🌍 -**🌍 Languages:** [Deutsch](TRANSLATING.de.md) · **English** +**🌍 Languages:** [Deutsch](TRANSLATING.de.md) · [Italiano](TRANSLATING.it.md) · **English** > How to translate Simple Notes Sync into your language! diff --git a/docs/UPCOMING.it.md b/docs/UPCOMING.it.md new file mode 100644 index 00000000..daa7cdd4 --- /dev/null +++ b/docs/UPCOMING.it.md @@ -0,0 +1,307 @@ +# Funzionalità in Arrivo 🚀 + +**🌍 Lingue:** [Deutsch](UPCOMING.de.md) · **Italiano** · [English](UPCOMING.md) + +> Cosa succederà? Qui trovi i nostri piani per le versioni future. + +--- + +## v1.5.0 - Jetpack Compose e Internazionalizzazione ✅ + +> **Stato:** Rilasciata 🎉 (gennaio 2026) + +### 🎨 Interfaccia Jetpack Compose + +- ✅ **Ridisegno completo dell'interfaccia** - Dalle viste XML a Jetpack Compose +- ✅ **Impostazioni modernizzate** - 7 schermate categorizzate +- ✅ **Modalità selezione** - Pressione lunga per la multi-selezione +- ✅ **Modalità di sync silenziosa** - Nessun banner durante l'auto-sync + +### 🌍 Supporto Multi-Lingua + +- ✅ **Inglese + Tedesco** - 400+ stringhe tradotte +- ✅ **Rilevamento automatico della lingua** - Segue la lingua di sistema +- ✅ **Lingua per app (Android 13+)** - Selezione nativa della lingua + +### 🎨 Miglioramenti dell'interfaccia + +- ✅ **Schermata di avvio** - Icona dell'app in primo piano +- ✅ **Icona dell'app** - Nella schermata Info e nello stato vuoto +- ✅ **Animazioni di scorrimento** - Transizioni fluide nel NoteEditor + +--- + +## v1.6.0 - Modernizzazione Tecnica ✅ + +> **Stato:** Rilasciata 🎉 (gennaio 2026) + +### ⚙️ Trigger di Sincronizzazione Configurabili + +- ✅ **Controllo individuale dei trigger** - Attiva/disattiva ogni trigger di sincronizzazione separatamente +- ✅ **Predefiniti guidati da eventi** - onSave, onResume, WiFi-Connect attivi per impostazione predefinita +- ✅ **Sync periodica opzionale** - Intervalli 15/30/60 min (predefinito: OFF) +- ✅ **Sync all'avvio opzionale** - Avvia la sync periodica dopo il riavvio del dispositivo (predefinito: OFF) +- ✅ **Interfaccia modalità offline** - Interruttori attenuati quando nessun server è configurato +- ✅ **Batteria ottimizzata** - ~0,2%/giorno con i predefiniti, fino a ~1,0% con la periodica + +--- + +## v1.6.1 - Codice Pulito ✅ + +> **Stato:** Rilasciata 🎉 (gennaio 2026) + +### 🧹 Qualità del Codice + +- ✅ **detekt: 0 problemi** - Tutti i 29 problemi di qualità del codice risolti +- ✅ **Zero avvisi di build** - Tutti i 21 avvisi di deprecazione eliminati +- ✅ **ktlint riattivato** - Con regole specifiche per Compose +- ✅ **Controlli lint CI/CD** - Integrati nel workflow di build delle PR +- ✅ **Refactoring delle costanti** - Dimensions.kt, SyncConstants.kt + +--- + +## v1.7.0 - Vista Griglia, Solo WiFi e VPN ✅ + +> **Stato:** Rilasciata 🎉 (gennaio 2026) + +### 🎨 Layout a Griglia + +- ✅ **Griglia a scaglioni stile Pinterest** - Layout senza spazi con righe di anteprima dinamiche +- ✅ **Interruttore layout** - Passa tra elenco e griglia nelle impostazioni +- ✅ **Colonne adattive** - 2-3 colonne in base alle dimensioni dello schermo + +### 📡 Miglioramenti della Sincronizzazione + +- ✅ **Interruttore sync solo WiFi** - Sincronizza solo quando connesso al WiFi +- ✅ **Supporto VPN** - La sincronizzazione funziona correttamente attraverso tunnel VPN +- ✅ **SSL self-signed** - Documentazione e supporto per certificati self-signed +- ✅ **Rilevamento cambiamento server** - Tutte le note vengono riportate a PENDING quando l'URL del server cambia + +--- + +## v1.7.1 - Fix Android 9 e VPN ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +- ✅ **Fix crash Android 9** - Implementato `getForegroundInfo()` per WorkManager su API 28 +- ✅ **Compatibilità VPN** - Il binding del socket WiFi rileva le interfacce VPN Wireguard +- ✅ **SafeSardineWrapper** - Pulizia corretta della connessione HTTP + +--- + +## v1.7.2 - Fix Timestamp ed Eliminazione ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +- ✅ **mtime del server come fonte di verità** - Risolve i problemi di timestamp dell'editor esterno +- ✅ **Mutex del tracciamento eliminazioni** - Eliminazioni in blocco thread-safe +- ✅ **Parsing timezone ISO8601** - Supporto multi-formato +- ✅ **Cache E-Tag in blocco** - Miglioramento delle prestazioni +- ✅ **Prevenzione perdita di memoria** - SafeSardineWrapper con Closeable + +--- + +## v1.8.0 - Widget, Ordinamento e Sync Avanzata ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +### 📌 Widget della schermata Home + +- ✅ **Framework Jetpack Glance completo** - 5 classi di dimensione reattive +- ✅ **Checklist interattive** - Checkbox che si sincronizzano con il server +- ✅ **Colori Material You** - Colori dinamici con opacità configurabile +- ✅ **Interruttore di blocco** - Previene modifiche accidentali +- ✅ **Attività di configurazione** - Selezione della nota e impostazioni + +### 📊 Ordinamento + +- ✅ **Ordinamento note** - Per titolo, data modifica, data creazione, tipo +- ✅ **Ordinamento checklist** - Manuale, alfabetico, non spuntate prima, spuntate per ultime +- ✅ **Separatori visivi** - Tra i gruppi non spuntati/spuntati +- ✅ **Trascinamento oltre i confini** - Attivazione automatica dello stato al trascinamento oltre i confini + +### 🔄 Miglioramenti della Sincronizzazione + +- ✅ **Download paralleli** - Fino a 5 simultanei (configurabili) +- ✅ **Rilevamento eliminazioni sul server** - Rileva note eliminate su altri client +- ✅ **Avanzamento sync dal vivo** - Indicatori di fase con contatori +- ✅ **Legenda stato sync** - Dialogo di aiuto che spiega tutte le icone di sync + +### ✨ UX + +- ✅ **Changelog post-aggiornamento** - Mostra il changelog localizzato al primo avvio dopo un aggiornamento +- ✅ **Griglia come predefinita** - Le nuove installazioni usano la vista griglia come predefinita +- ✅ **Migrazione Toast → Banner** - Sistema di notifica unificato + +--- + +## v1.8.1 - Fix e Rifinitura ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +- ✅ **Persistenza ordinamento checklist** - L'opzione di ordinamento viene ripristinata correttamente alla riapertura +- ✅ **Fix scorrimento widget** - Lo scorrimento funziona sulla dimensione standard 3×2 del widget +- ✅ **Ordinamento checklist nel widget** - I widget applicano l'opzione di ordinamento salvata +- ✅ **Trascinamento oltre i confini** - Drag & drop oltre il separatore spuntato/non spuntato +- ✅ **Limitazione della velocità di sync** - Cooldown globale di 30 s tra auto-sync +- ✅ **detekt: 0 problemi** - Tutti i 12 risultati risolti + +--- + +## v1.8.2 - Fix di Stabilità e Editor ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +- ✅ **26 bugfix** - Deadlock di sync, prevenzione perdita dati, UX editor +- ✅ **Supporto SSL self-signed** - Certificati CA utente nelle build release +- ✅ **Fix scorrimento widget** - Testo scorrevole nei widget medi +- ✅ **Auto-maiuscola della tastiera** - Campo titolo, elementi checklist +- ✅ **Ottimizzazione dimensione APK** - Regole ProGuard granulari (< 5 MB) +- ✅ **Stabilità drag checklist** - Fix drag & drop oltre i confini + +--- + +## v1.9.0 - Filtro, Ricerca, Markdown e Rifinitura Widget ✅ + +> **Stato:** Rilasciata 🎉 (febbraio 2026) + +### Parte 1: Qualità Sync e Importazione +- ✅ **Procedura di importazione note** - Importa da WebDAV o locale (.md, .json, .txt) +- ✅ **Caricamenti paralleli** - Sync multi-nota ~2× più veloce +- ✅ **Connessioni parallele unificate** - Unica impostazione per caricamenti e scaricamenti +- ✅ **Fix cambio server** - Le cache E-Tag/hash contenuto vengono azzerate al cambiamento +- ✅ **Fix rilevamento eliminazioni** - Soglia alzata per piccoli portafogli di note +- ✅ **Serializzazione esportazione Markdown** - Il mutex previene la race condition +- ✅ **Cache E-Tag** - Salta i riscaricamenti ridondanti + +### Parte 2: Funzionalità UI + +#### 📊 Filtro e Ricerca +- ✅ **Riga di chip filtro** - Filtra per Tutte / Testo / Checklist +- ✅ **Ricerca inline** - Campo di ricerca rapida nella riga dei filtri +- ✅ **Ordina nella riga dei filtri** - Pulsante ordina spostato dal dialogo alla riga dei filtri +- ✅ **Attivazione riga filtri** - Pulsante di regolazione nella TopAppBar per mostrare/nascondere + +#### ✏️ Editor +- ✅ **Anteprima Markdown** - Anteprima dal vivo per note di testo con barra degli strumenti di formattazione +- ✅ **Ripristino sbunta checklist** - L'elemento torna alla posizione originale +- ✅ **Consolidamento ordine checklist** - L'ordine originale viene preservato dopo inserimento/eliminazione +- ✅ **Comportamento scorrimento checklist** - Scorrimento coerente allo spuntare/sbuntare +- ✅ **Salvataggio automatico opzionale** - Timer di salvataggio automatico debounce configurabile +- ✅ **Cartella di sincronizzazione configurabile** - Nome cartella WebDAV personalizzato + +#### 📌 Miglioramenti dei Widget +- ✅ **Conservazione della tinta Monet** - Lo sfondo traslucido mantiene i colori dinamici +- ✅ **Barra opzioni senza cuciture** - Sfondo rimosso per un aspetto più pulito +- ✅ **Barratura nelle checklist** - Gli elementi completati mostrano la barratura +- ✅ **Aggiornamento widget su onStop** - I widget si aggiornano quando esci dall'app + +#### ✨ Altro +- ✅ **Titolo app personalizzato** - Nome dell'app configurabile nelle impostazioni +- ✅ **Scorri in alto su sync** - L'elenco scorre in alto dopo la sync manuale + +--- + +## v2.0.0 - Riscrittura Compose e Multi-Tema ✅ + +> **Stato:** Rilasciata 🎉 (marzo 2026) + +### 🎨 Sistema Multi-Tema +- ✅ **7 schemi di colori** - Inclusi AMOLED e Dynamic Color con transizioni animate e superfici tinte +- ✅ **Ridimensionamento colonne griglia** - Da 1 a 5 colonne configurabili nelle impostazioni di visualizzazione +- ✅ **Chip della griglia** - Sostituiscono i pulsanti radio nelle impostazioni di visualizzazione + +### ✨ Editor e Impostazioni +- ✅ **Backup/ripristino completo** - Include tutte le impostazioni dell'app, non solo le note +- ✅ **Transizioni Material 3 shared axis** - Per tutta la navigazione e i gesti indietro +- ✅ **Stato salvataggio automatico** - Mostrato nel sottotitolo delle impostazioni di visualizzazione +- ✅ **Dialogo di logging di debug** - Disattiva il logging dopo l'esportazione + +### 🐛 Bugfix +- ✅ **Drag-and-drop delle checklist** - Riscritto per stabilità negli elenchi lunghi +- ✅ **Eliminazioni offline** - Accodate per la sync successiva +- ✅ **Compatibilità WebDAV 403** - L'HTTP 403 viene trattato come esistente +- ✅ **Thread-safety** - Risolti incoerenze di stato e problemi di dispatcher +- ✅ **Perdite di risorse** - InputStream chiusi, I/O file fuori dal thread principale +- ✅ **Race condition salva-su-indietro** - Flush TextFieldState + salvataggio onPause + +### 🗑️ Rimozione Codice Legacy +- ✅ **SettingsActivity rimossa** - Sostituita dalle impostazioni Compose +- ✅ **MainActivity rimossa** - Sostituita da ComposeMainActivity +- ✅ **NoteEditorActivity rimossa** - Sostituita dall'editor Compose +- ✅ **Layout XML, menu, drawable rimossi** - Interfaccia Compose completa +- ✅ **LocalBroadcastManager → SharedFlow** - Architettura degli eventi moderna +- ✅ **DSL viewModelFactory** - Creazione ViewModel moderna + +### 🏗️ Architettura +- ✅ **WebDavSyncService → pattern Facade** - Suddiviso in 9 moduli estratti +- ✅ **Ottimizzato con R8/ProGuard** - Dimensione APK ridotta + +### 📄 Licenza +- ✅ **MIT → AGPL v3** - Licenza cambiata + +--- + +## v2.2.0 - Share Intent, Widget e Rifinitura Editor + +> **Stato:** Rilasciata 🎉 (marzo 2026) + +### 📤 Share Intent + +- **Ricevi contenuto condiviso** - Accetta testo e URL da altre app tramite Android Share Intent ([Discussione #46](https://github.com/inventory69/simple-notes-sync/discussions/46) di [@madelgijs](https://github.com/madelgijs)) +- **Crea nota da testo condiviso** - Il contenuto condiviso crea una nuova nota o si aggiunge a una esistente +- **Gestione URL** - Gli URL condivisi dai browser vengono formattati come link Markdown cliccabili + +### 📌 Widget Scorciatoia Nuova Nota + +- **Nuova nota con un tocco** - Widget della schermata Home che apre subito l'editor per una nuova nota ([Discussione #49](https://github.com/inventory69/simple-notes-sync/discussions/49) di [@Stowaway2979](https://github.com/Stowaway2979)) +- **Impronta minima** - Widget 1×1 piccolo con l'icona dell'app e un badge `+` +- **Digitazione istantanea** - L'editor si apre con la tastiera focalizzata sul campo titolo + +### ✏️ Miglioramenti dell'Editor + +- **Pulsante checklist Markdown** - Nuovo pulsante nella barra degli strumenti per inserire la sintassi checkbox Markdown `- [ ]` / `- [x]`, con supporto di attivazione per le righe esistenti +- **Copia e duplica elementi checklist** - Menu contestuale a pressione lunga sugli elementi della checklist: copia testo negli appunti o duplica l'elemento sotto + +--- + +## v2.3.0 – v2.9.0 ✅ + +> **Stato:** Rilasciate 🎉 + +Distribuito da quando questa roadmap è stata rivista l'ultima volta: credenziali crittografate, il logger di debug sync persistente, **importazione da Google Keep**, **colori delle note**, **note fissate**, conversione testo ↔ checklist, **cartelle** (incluse solo-locali), un **cestino / bin per il riciclo** con conservazione configurabile, Markdown dal vivo nell'editor e nelle anteprime delle card, il widget elenco note scorrevole, un changelog nell'app e la schermata contributori, e la crescita a 12 lingue. Vedi il [CHANGELOG](../CHANGELOG.md) per la cronologia completa per versione. + +--- + +## 📋 Backlog + +> Funzionalità da considerare in futuro + +### 🔐 Miglioramenti della Sicurezza + +- **Backup locali protetti da password** - Crittografa il file di backup con una password + +### 🎨 Funzionalità UI + +- **Nascondi checklist completate** - Opzione per nascondere le checklist in cui tutti gli elementi sono spuntati, con una vista separata per recuperarle in seguito. ([#45](https://github.com/inventory69/simple-notes-sync/discussions/45) di @isawaway) + +### ✅ Consegnate di recente + +- **Cartelle / Quaderni** ✅ _(v2.7.0)_ - incluse cartelle solo-locali che non vengono mai sincronizzate ([#38](https://github.com/inventory69/simple-notes-sync/discussions/38) di @happy-turtle) +- **Ricerca** ✅ _(v1.9.0)_ - ricerca inline nella riga dei filtri +- **Lingue aggiuntive** ✅ - ora 12 lingue tramite Weblate + +--- + +## 💡 Feedback e Suggerimenti + +Hai un'idea per una nuova funzionalità? + +- **[Crea una richiesta di funzionalità](https://github.com/inventory69/simple-notes-sync/issues/new?template=feature_request.yml)** +- **[Visualizza le richieste esistenti](https://github.com/inventory69/simple-notes-sync/issues?q=is%3Aissue+label%3Aenhancement)** + +--- + +**Nota:** questa roadmap mostra i nostri piani attuali. Le priorità possono cambiare in base al feedback della community. + +[← Torna alla documentazione](DOCS.it.md) \ No newline at end of file diff --git a/docs/UPCOMING.md b/docs/UPCOMING.md index 486b2ed5..55553930 100644 --- a/docs/UPCOMING.md +++ b/docs/UPCOMING.md @@ -1,6 +1,6 @@ # Upcoming Features 🚀 -**🌍 Languages:** [Deutsch](UPCOMING.de.md) · **English** +**🌍 Languages:** [Deutsch](UPCOMING.de.md) · [Italiano](UPCOMING.it.md) · **English** > What's next? Here you'll find our plans for future versions.