DevCorner: Dynamic Calendar Icon API di Nova Launcher

Giuseppe Tripodi
Giuseppe Tripodi Tech Master
DevCorner: Dynamic Calendar Icon API di Nova Launcher

In questo appuntamento del DevCorner vi parliamo di qualcosa di un argomento abbastanza specifico, di cui potreste anche non aver sentito nulla fino ad oggi: le Dynamic Calendar API di Nova Launcher. Si tratta di una piccola chicca che certamente non cambierà la vita a nessuno ma che ha fatto discutere un po' di sviluppatori nelle ultime settimane. Introdotte da Nova con la versione 3.0 del suo software, grazie a queste API possiamo avere facilmente icone per il calendario diverse a seconda del giorno del mese in cui ci troviamo. 

Per mostrarvi come avere 31 immagini diverse per la nostra app abbiamo approfittato della spiegazione fornita dallo stesso Kevin Barry di TeslaCoil su Google+,al quale abbiamo sottratto anche i codici d'esempio che vedrete di seguito.

LEGGI ANCHE: Nova Launcher: migliori capacità di personalizzazione nella beta

Ci sono due casi nei quali potreste essere interessati a queste nuove API, ossia se avete sviluppato un'applicazione per gestire il calendario o se avete creato un Icon Pack compatibile con Nova.

In entrambi i casi è necessario avere all'interno dei drawable una serie di icone rinominate con un prefisso comune seguito da un numero progressivo, come ad esempio ic_calendar_1, ic_calendar_2 e così via fino ad arrivare a ic_calendar_31. Inutile specificare che ci si aspetta che tutte le immagini abbiano lo stesso stile e varino solo per la cifra, ma se volete assegnare un Pokémon ad ogni giorno potrete farlo comunque e nessuno avrà nulla da ridire.

Una volta create le icone, rinominate correttamente e posizionate nella cartella drawable, nel caso stiate sviluppando un set di icone vi basterà specificare all'interno di appfilter.xml una componente simile

<calendar component="ComponentInfo{com.google.android.calendar/com.android.calendar.AllInOneActivity}" prefix="ic_calendar_" />

Tra le parentesi graffe di ComponentInfo dovete ovviamente specificare package e activity del software a cui volete modificare l'icona, mentre alla voce prefix dovete indicare il prefisso utilizzato per rinominare le icone.

Interpretando il tag calendar Nova Launcher sarà in grado di assegnare automaticamente l'immagine corretta a seconda del giorno del mese.

Per semplificarci ulteriormente il lavoro, Nova ci viene incontro e, per indicare semplicemente il calendario preinstallato (a patto che non sia Google Calendar perché, in questo caso, non funzionerà) possiamo utilizzare:

<calendar component=":CALENDAR" prefix="ic_calendar_" />

Infine, per gestire i launcher che non supportano (ancora?) il tag calendar ci basterà usare il solito, generico:

<item component="ComponentInfo{com.google.android.calendar/com.android.calendar.AllInOneActivity}" drawable="ic_calendar" />

Se, invece, state sviluppando un calendario, dovete indicare all'interno di un file arrays.xml (contenuto in res/values) tutti i nomi delle icone in questo modo:

<array name="calendarIcons">
<item>@drawable/calendar1</item>
<item>@drawable/calendar2</item>
<item>@drawable/calendar3</item>
<item>@drawable/calendar4</item>
<item>@drawable/calendar5</item>
...
</array>

Successivamente dovrete indicare nel manifest.xml un meta-data in questo modo:

<activity
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="com.teslacoilsw.launcher.calendarIconArray"
android:resource="@array/calendarIcons" />
</activity>

Potete trovare tutti i riferimenti nonché il codice d'esempio su questa repo GitHub di TeslaCoil: noi ci siamo limitati a modificare il package nel primo esempio per renderlo funzionante con Google Calendar.

Adesso scusate ma oggi è 3 e sul mio calendario non c'è ancora Venusaur, quindi vado ad attivarmi. Fate lo stesso anche voi e buon sviluppo a tutti!