In questo post dedicato alla Preview dell’SDK DI Microsoft Band ci occuperemo delle funzionalità relative alla gestione delle tile sullo smartwatch.
L’interfaccia IBandClient, tra le proprietà che espone e che ci consentono di accedere alle funzionalità del Band, espone anche la TileManager il cui nome è, evidentemente, tutto un programma.
La proprietà TileManager è un’ istanza dell’interfaccia IBandTileManager che, a sua volta espone, 4 operazioni:
Come possiamo vedere dalla precedente figura una tile è composta da:
Inoltre le due immagini debbono essere istanze della classe BandIcon. Questa classe non ha costruttore ma fortunatamente l’SDK del Band ci mette a disposizione un paio di metodi di estensione per poter convertire una WriteableBitmap in una BandIcon e viceversa:
Nel pezzo di codice seguente viene mostrato come creare una Tile con delle immagini memorizzate nell’asset dell’applicazione:
In questo caso si e’ utilizzato il package WriteableBitmapEx, disponibile su NuGet, per poter avere a disposizione la classe BitmapFactory.
Nell’esempio precedente App.CurrentBandClient è un’istanza valida di IBandClient che possiamo ottenere, come visto nei precedenti post della serie, connettendoci ad un Band.
Se non ci sono slot disponibili per le tile, il risultato della chiamata al metodo è il valore 0.
La nostra app dovrebbe sempre controllare, prima di aggiungere una tile, che ci sia posto in modo da evitare di generare eccezione nel momento in cui si tenta di aggiungere una nuova tile.
La collezione non conterrà alcun elemento se non abbiamo mai aggiunto tile.
Se non ci sono posti liberi e tentiamo di aggiungere una tile, otteniamo un’eccezione di tipo InvalidOperationException.
Se, invece, abbiamo spazio per inserire la tile, il sistema mostrerà all’utente la finestra di conferma (attualmente non bypassabile) mostrata nella seguente figura:
Se la tile (o il guid della tile) non esiste, il metodo restituisce false. Se la rimozione avviene con successo, il metodo restituisce true.
Nell’esempio precedente viene impostato il tema della tile valorizzando opportunamente i colori. Il significato dei colori è riportato nella seguente figura.
La classe BandTheme (che vedremo dettagliatamente in un successivo post) una proprieta’ per ogni colore del tema. Queste proprietà sono di tipo BandColor, una struttura proprietaria dell’SDK del Band. Anche in questo caso abbiamo un metodo di estensione (il metodo ToBandColor) che ci consente di convertire un colore espresso con la classe Windows.UI.Color nella struttura BandColor corrispondente.
Nell’attuale versione dell’SDK sembrerebbe che il colore Base (cioè quello dello sfondo dell’icona non venga preso in considerazione).
Vedremo in un post apposito i dettagli sulla personalizzazione del Band e su come usare l’SDK per impostare il tema del device.
Il codice sorgente dell’esempio usato in questo post è disponibile al seguente link.
Rimanete connessi!!!
L’interfaccia IBandClient, tra le proprietà che espone e che ci consentono di accedere alle funzionalità del Band, espone anche la TileManager il cui nome è, evidentemente, tutto un programma.
La proprietà TileManager è un’ istanza dell’interfaccia IBandTileManager che, a sua volta espone, 4 operazioni:
- AddTileAsync : permette di aggiungere (ove ce ne fosse spazio) una tile all’interno della stripe delle tile del Band;
- GetRemainingTileCapacityAsync: restituisce il numero di posizioni disponibili all’interno della stripe delle tile del Band. Se non c’è più posto otterremo il valore 0;
- GetTilesAsync: restituisce l’elenco delle tile aggiunte alla stripe del Band da parte della nostra applicazione;
- RemoveTileAsync: rimuove una tile dalla stripe delle tile del Band.
Come possiamo vedere dalla precedente figura una tile è composta da:
- TileId: un guid che identifica univocamente la tile e che ci consentirà di gestire le notifiche alla tile stessa;
- Name: una stringa che definisce il nome della tile;
- IsBadgingEnabled: indica se la tile può visualizzare il numero di notifiche ricevute o meno;
- SmallIcon e TileIcon: rappresentano rispettivamente l’immagine della tile quando appare il numero delle notifiche e l’immagine della tile in visualizzazione normale. La TileIcon è obbligatoria, la SmallIcon no;
- Theme: permette di impostare un tema particolare per la tile.
Inoltre le due immagini debbono essere istanze della classe BandIcon. Questa classe non ha costruttore ma fortunatamente l’SDK del Band ci mette a disposizione un paio di metodi di estensione per poter convertire una WriteableBitmap in una BandIcon e viceversa:
Dim bitmap As WriteableBitmap=New WriteableBitmap(46,46)
' WriteableBitmap --> BandIcon
Dim bandIcon as BandIcon = bitmap.ToBandIcon()
' BandIcon --> WriteableBitmap
Dim newBitmap=bandIcon.ToWriteableBitmap()
' WriteableBitmap --> BandIcon
Dim bandIcon as BandIcon = bitmap.ToBandIcon()
' BandIcon --> WriteableBitmap
Dim newBitmap=bandIcon.ToWriteableBitmap()
Nel pezzo di codice seguente viene mostrato come creare una Tile con delle immagini memorizzate nell’asset dell’applicazione:
Public Shared Async Function CreateStandardTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
Dim tile = New BandTile(Guid.NewGuid())
tile.Name = tileName
tile.IsBadgingEnabled = isBadgingEnabled
Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
tile.TileIcon = icon.ToBandIcon()
tile.SmallIcon = smallIcon.ToBandIcon()
Return tile
End Function
Dim tile = New BandTile(Guid.NewGuid())
tile.Name = tileName
tile.IsBadgingEnabled = isBadgingEnabled
Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
tile.TileIcon = icon.ToBandIcon()
tile.SmallIcon = smallIcon.ToBandIcon()
Return tile
End Function
In questo caso si e’ utilizzato il package WriteableBitmapEx, disponibile su NuGet, per poter avere a disposizione la classe BitmapFactory.
GetRemainingTileCapacityAsync
L’operazione GetRemainingTileCapacityAsync, dell’interfaccia IBandTileManager, ci permette di sapere quanti “posti” sono disponibili per le nostre tile.
Try
Dim tileCapacity = Await App.CurrentBandClient.TileManager.GetRemainingTileCapacityAsync()
RemainingTileCapacityText.Text = tileCapacity.ToString()
Catch ex As BandException
End Try
Dim tileCapacity = Await App.CurrentBandClient.TileManager.GetRemainingTileCapacityAsync()
RemainingTileCapacityText.Text = tileCapacity.ToString()
Catch ex As BandException
End Try
Nell’esempio precedente App.CurrentBandClient è un’istanza valida di IBandClient che possiamo ottenere, come visto nei precedenti post della serie, connettendoci ad un Band.
Se non ci sono slot disponibili per le tile, il risultato della chiamata al metodo è il valore 0.
La nostra app dovrebbe sempre controllare, prima di aggiungere una tile, che ci sia posto in modo da evitare di generare eccezione nel momento in cui si tenta di aggiungere una nuova tile.
GetTilesAsync
Il metodo GetTilesAsync permette di recuperare l’elenco delle BandTile che la nostra app ha aggiunto al Band.
Try
Dim tiles = Await App.CurrentBandClient.TileManager.GetTilesAsync()
TileList.ItemsSource = tiles
Catch ex As BandException
End Try
Dim tiles = Await App.CurrentBandClient.TileManager.GetTilesAsync()
TileList.ItemsSource = tiles
Catch ex As BandException
End Try
La collezione non conterrà alcun elemento se non abbiamo mai aggiunto tile.
AddTileAsync
Il metodo AddTileAsync permette di aggiungere una tile alla stripe delle tile del Band (se ci sono posti liberi).
Try
If Await App.CurrentBandClient.TileManager.AddTileAsync(tile) Then
Dim msgDlg = New MessageDialog("Tile added!!")
Await msgDlg.ShowAsync()
NavigationHelper.GoBack()
End If
Catch ex As Exception
End Try
If Await App.CurrentBandClient.TileManager.AddTileAsync(tile) Then
Dim msgDlg = New MessageDialog("Tile added!!")
Await msgDlg.ShowAsync()
NavigationHelper.GoBack()
End If
Catch ex As Exception
End Try
Se non ci sono posti liberi e tentiamo di aggiungere una tile, otteniamo un’eccezione di tipo InvalidOperationException.
Se, invece, abbiamo spazio per inserire la tile, il sistema mostrerà all’utente la finestra di conferma (attualmente non bypassabile) mostrata nella seguente figura:
RemoveTileAsync
Il metodo RemoveTileAsync permette la rimozione di una tile dalla stripe delle tile del Band. Il metodo accetta sia una tile (magari recuperata utilizzando il metodo GetTilesAsync esposto in precedenza), sia il guid di una tile.
Try
If Await App.CurrentBandClient.TileManager.RemoveTileAsync(tile) Then
Dim msgDlg = New MessageDialog("Tile removed!!")
Await msgDlg.ShowAsync()
End If
Catch ex As Exception
End Try
If Await App.CurrentBandClient.TileManager.RemoveTileAsync(tile) Then
Dim msgDlg = New MessageDialog("Tile removed!!")
Await msgDlg.ShowAsync()
End If
Catch ex As Exception
End Try
Se la tile (o il guid della tile) non esiste, il metodo restituisce false. Se la rimozione avviene con successo, il metodo restituisce true.
Cambiare il tema della tile
E’ possibile impostare un tema differente rispetto a quello del Band nel momento in cui si aggiunge una tile, semplicemente valorizzando la proprieta’ Theme dell’istanza di BandTile.
Public Shared Async Function CreateStandardTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
Dim tile = New BandTile(Guid.NewGuid())
tile.Name = tileName
tile.IsBadgingEnabled = isBadgingEnabled
Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
tile.TileIcon = icon.ToBandIcon()
tile.SmallIcon = smallIcon.ToBandIcon()
Return tile
End Function
Public Shared Async Function CreateRedTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
Dim tile = Await CreateStandardTileAsync(tileName, isBadgingEnabled)
tile.Theme=New Personalization.BandTheme()
With tile.Theme
.Base=Colors.Red.ToBandColor()
.HighContrast=Colors.blueviolet.ToBandColor()
.Highlight=Colors.blueviolet.ToBandColor()
.SecondaryText=Colors.LightGray.ToBandColor()
.Muted=Colors.DarkRed.ToBandColor()
.Lowlight=Colors.DarkRed.ToBandColor()
End With
Return tile
End Function
Dim tile = New BandTile(Guid.NewGuid())
tile.Name = tileName
tile.IsBadgingEnabled = isBadgingEnabled
Dim icon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconLarge.png"))
Dim smallIcon = Await BitmapFactory.[New](1, 1).FromContent(New Uri("ms-appx:///Assets/IconSmall.png"))
tile.TileIcon = icon.ToBandIcon()
tile.SmallIcon = smallIcon.ToBandIcon()
Return tile
End Function
Public Shared Async Function CreateRedTileAsync(tileName As String, isBadgingEnabled As Boolean) As Task(Of BandTile)
Dim tile = Await CreateStandardTileAsync(tileName, isBadgingEnabled)
tile.Theme=New Personalization.BandTheme()
With tile.Theme
.Base=Colors.Red.ToBandColor()
.HighContrast=Colors.blueviolet.ToBandColor()
.Highlight=Colors.blueviolet.ToBandColor()
.SecondaryText=Colors.LightGray.ToBandColor()
.Muted=Colors.DarkRed.ToBandColor()
.Lowlight=Colors.DarkRed.ToBandColor()
End With
Return tile
End Function
Nell’esempio precedente viene impostato il tema della tile valorizzando opportunamente i colori. Il significato dei colori è riportato nella seguente figura.
La classe BandTheme (che vedremo dettagliatamente in un successivo post) una proprieta’ per ogni colore del tema. Queste proprietà sono di tipo BandColor, una struttura proprietaria dell’SDK del Band. Anche in questo caso abbiamo un metodo di estensione (il metodo ToBandColor) che ci consente di convertire un colore espresso con la classe Windows.UI.Color nella struttura BandColor corrispondente.
Nell’attuale versione dell’SDK sembrerebbe che il colore Base (cioè quello dello sfondo dell’icona non venga preso in considerazione).
Vedremo in un post apposito i dettagli sulla personalizzazione del Band e su come usare l’SDK per impostare il tema del device.
Il codice sorgente dell’esempio usato in questo post è disponibile al seguente link.
Rimanete connessi!!!
Commenti