User Tools

Site Tools


doc:appunti:calendar_contacts_private

This is an old revision of the document!


Calendari e contatti su Android, senza Google

Su uno smartphone Android è possibile avere la rubrica dei contatti e dei calendari con gli eventi senza passare per i servizi Google? Sembra di sì, anche se è tutt'altro che semplice!

Installazione del server DAViCal

Creazione di un address book e di un calendar

Installazione di DAVdroid

Esistono diverse app per Android per la sincronizzazione di contatti ed eventi calendario verso server DAV. Purtroppo si tratta spesso di app che offrono solo una delle due funzionalità e spesso le versioni free hanno limitazioni o problemi (ad esempio continui alert se la connessione con il server fallisce). Pare invece che l'app DAVdroid abbia tutte le carte in regola per essere scelta: si tratta di software open source disponibile anche su F-Droid e sembra sufficientemente stabile e maturo.

DAVdroid Account Una volta scaricata e installata l'app, si deve creare un nuovo account sullo smartphone. Nel nostro caso si procede con l'opzione Login with URL and user name. Con l'installazione di DAViCal vista in precedenza si inserisce qualcosa del genere:

Base URL https://dav.server.org/dav/
User name email@server.org
Password ******

Lasciare attiva l'opzione predefinita Groups are separate VCards. Il server DAViCal support il formato vCard v.3.0 e quindi DAVdroid gestirà i gruppi come vCard separate (i gruppi sono usati ad esempio per creare le etichette da assegnare ai contatti). Vedere il paragrafo Contact group method nella documentazione sugli Account.

DAVdroid si collega al server e tramite l'autodiscovery sul percorso /.well-known/ si accorge che esistono già due collection collegate all'account: un addressbook e un calendar. Per impostazione predefinita infatti DAViCal crea queste due collection per ogni principal di tipo person (cioè per ogni account) che viene creato.

Attivare la sincronizzazione per questi due oggetti.

Questo è ciò che accade nello smartphone:

  • Strumenti ⇒ Utenti e account
    • Compare un nuovo account di tipo DAVdroid, identificato con l'indirizzo email.
    • Compare un nuovo account di tipo Rubrica DAVdroid, identificato con il Displayname definito da DAViCal e l'indirizzo email più due lettere casuali. FIXME Motivo?

Problema di sincronizzazione

Il sistema Android usa tecniche aggressive per il risparmi di batteria, questo affligge soprattutto le app non di sistema tipo DAVdroid. In pratica accade che viene inibita la sincronizzazione con il server: quando l'app è in background non viene mai svegliata.

Avviando l'app DAVdroid si viene avvisati di questo potenziale problema da tre pop-up:

  • Battery … ?
  • Automatic synchronization
  • OpenTasks non installata

Ci si può accorgere che qualcosa non va dal menu StrumentiUtenti e accountDAVdroidSincronizzazione account. Sebbene l'opzione sincronizzazione sia attiva e si scelga l'azione Sincronizza ora dal menu in alto a destra, l'orario di sincronizzazione non si aggiorna!

Nel nostro caso Android 8.1.0 Oreo su Xiaomi Mi A1, è stato necessario … FIXME

Creazione di un calendario aggiuntivo

In genere la via più comoda per aggiungere un calendario è utilizzare il client CalDAV preferito. Anche DAVdroid ha questa funzione agendo dalla app DAVdroid, AccountCalDAVHamburger menuCrea nuovo calendario.

Il calendario può essere di tipo Calendario oppure Elenco attività o meglio ancora la combinazione dei due. Tale impostazione viene registrata nel database nella colonna property_value della tabella property. Le attività (task in inglese), a differenza degli eventi di calendario, di solito sono associati ad una data senza l'orario e sono pensati per potersi sovrapporre gli uni con gli altri (molte attività vengono portate avanti in parallelo. L'app calendario stock di Android non consente di visualizzare i task.

In alternativa l'utente (anche non amministratore) può effettuare login alla pagina di amministrazione web di DAViCal, quindi sceglie l'opzione User FunctionsView My DetailsPrincipal CollectionsCreate Collection. Nella pagina di creazione si deve attivare l'opzione Is a Calendar. Il calendario creato in questo modo sarà di tipo combinato Calendario ed Elenco attività.

Per attivare il nuovo calendario nello smartphone si accede alla app DAVdroid, dopo aver selezionato l'account opportuno, si effettua tap sull'Hamburger menu di CalDAV, quindi si sceglie l'azione Aggiorna lista calendari.

Per poter disporre del nuovo calendario sullo smartphone è necessario:

  • Dalla app DAVdroid si sceglie l'account relativo, quidni dall'hamburger menu si sceglie l'azione Aggiorna lista calendari.
  • Dalla app SistemaUtenti e accountAccount DAVdroidSincronizzazione accountMenuSincronizza ora.
  • Dalla app Calendario si inserisce un nuovo evento, che generalmente provoca la sincronizzazione con il server.

Esportazione dei contatti da Google

Per fortuna è possibile esportare in formato aperto tutti i contatti che abbiamo associato al nostro account Google. È sufficiente autenticarsi su Gmail all'url https://mail.google.com/, quindi aprire l'url https://contacts.google.com/. Aprendo il menù Di più è possibile scegliere l'opzione Esporta. Nel dialog-box è possibile indicare Esporta come vCard. Al termine sul PC avremo il file contacts.vcf che deve essere trasferito sullo smartphone, ad esempio con il tool adb push e il cavetto USB.

L'importazione va fatta dall'app Contatti, noi abbiamo usato quella stock di Android Oreo 8.1.0. Anzitutto dal menu Impostazioni abbiamo indicato come Account predefinito per i nuovi contatti quello aggiunto con DAVdroid, quindi, sempre da Impostazioni, si è scelto la voce ImportaFile .vcf.

Non ha funzionato l'import delle foto associate ai contatti, infatti Google le include nel formato vCard come link ad un indirizzo web esterno (eventualmente da scaricare a parte), non come allegato JPEG.

L'app Contatti può mostrare i contatti provenienti dall'account Google, dall'account DAVdroid, oppure da tutti e due; dall'hamburger menu vi è un menu a tendina per la scelta. Fare attenzione a quando si rimuove un account, perché non è chiaro se lo stiamo rimuovendo anche dall'account Google e/o DAVdroid. Per sicurezza conviene rimuovere gli account Google facendo accesso con il browser all'url https://contacts.google.com/.

Esportazione degli eventi calendario da Google

Per l'esportazione è necessario fare accesso con un PC e un browser alla pagina https://calendar.google.com/, ovviamente dopo aver effettuato il login ad esempio alla casella Gmail. Dall'icona ingranaggio si sceglie ImpostazioniImportazione ed esportazioneEsporta. Viene fatto scaricare un file zip che contiene un file .ics per ogni calendario esistente nell'account Google.

Impostazione del colore predefinito di un calendario

Dall'interfaccia di amministrazione web di DAViCal non è possibile impostare il colore predefinito di un calendario. Né la app calendario di AOSP stock (Android Open Source Project) né DAVdroid consentono di impostare il colore di un calendario esistente. È possibile tuttavia agire direttamente sul database di DAViCal per impostare il colore predefinito.

Dopo essersi collegati al database come amministratore, si cerca l'utente proprietario del calendario:

davical=# SELECT principal_id, user_no, displayname FROM principal;
 principal_id | user_no |      displayname      
--------------+---------+-----------------------
            1 |       1 | DAViCal Administrator
         1001 |    1001 | Niccolo Rigacci

quindi si cerca il dav_name del calendario desiderato:

davical=# SELECT user_no, dav_name, is_calendar FROM collection WHERE user_no = 1001;
 user_no |            dav_name             | is_calendar 
---------+---------------------------------+-------------
    1001 | /niccolo@rigacci.org/addresses/ | f
    1001 | /niccolo@rigacci.org/calendar/  | t
    1001 | /niccolo@rigacci.org/famiglia/  | t

Infine si aggiunge una riga alla tabella property:

INSERT INTO property
    (dav_name, property_name, property_value, changed_by) VALUES
    ('/niccolo@rigacci.org/famiglia/', 'http://apple.com/ns/ical/:calendar-color', '#F8BE14', 1);

Sullo smartphone è necessaria una sincronizzazione per vedere l'effetto:

  • Dalla app DAVdroid ⇒ Tap su account ⇒ CalDAV ⇒ Hamburger buttonRefresh calendar list.
  • Chiudere l'app Calendario.
  • Da ImpostazioniUtenti e accountDAVdroidSincronizzazione accountSincronizza ora.
doc/appunti/calendar_contacts_private.1542037388.txt.gz · Last modified: 2018/11/12 16:43 by niccolo