summaryrefslogtreecommitdiff
path: root/Juick/Classes
diff options
context:
space:
mode:
Diffstat (limited to 'Juick/Classes')
-rw-r--r--Juick/Classes/TileHelper.cs78
1 files changed, 78 insertions, 0 deletions
diff --git a/Juick/Classes/TileHelper.cs b/Juick/Classes/TileHelper.cs
new file mode 100644
index 0000000..223340b
--- /dev/null
+++ b/Juick/Classes/TileHelper.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Microsoft.Phone.Shell;
+
+namespace Juick.Classes
+{
+ static class TileHelper
+ {
+ public static void UpdateFlipTile(
+ string title,
+ string backTitle,
+ string backContent,
+ string wideBackContent,
+ int? count,
+ string smallBackgroundImageStringUri,
+ string backgroundImageStringUri,
+ string backBackgroundImageStringUri,
+ string wideBackgroundImageStringUri,
+ string wideBackBackgroundImageStringUri)
+ {
+ if (!CanUseLiveTiles)
+ {
+ return;
+ }
+ var smallBackgroundImage = CreateRelativeUri(smallBackgroundImageStringUri);
+ var backgroundImage = CreateRelativeUri(backgroundImageStringUri);
+ var backBackgroundImage = CreateRelativeUri(backBackgroundImageStringUri);
+ var wideBackgroundImage = CreateRelativeUri(wideBackgroundImageStringUri);
+ var wideBackBackgroundImage = CreateRelativeUri(wideBackBackgroundImageStringUri);
+
+ Type flipTileDataType = Type.GetType("Microsoft.Phone.Shell.FlipTileData, Microsoft.Phone");
+
+ // Get the ShellTile type so we can call the new version of "Update" that takes the new Tile templates.
+ Type shellTileType = Type.GetType("Microsoft.Phone.Shell.ShellTile, Microsoft.Phone");
+
+ // Loop through any existing Tiles that are pinned to Start.
+ foreach (var tileToUpdate in ShellTile.ActiveTiles)
+ {
+ var UpdateTileData = flipTileDataType.GetConstructor(new Type[] { }).Invoke(null);
+
+ // Set the properties.
+ SetProperty(UpdateTileData, "Title", title);
+ SetProperty(UpdateTileData, "Count", count);
+ SetProperty(UpdateTileData, "BackTitle", backTitle);
+ SetProperty(UpdateTileData, "BackContent", backContent);
+ SetProperty(UpdateTileData, "SmallBackgroundImage", smallBackgroundImage);
+ SetProperty(UpdateTileData, "BackgroundImage", backgroundImage);
+ SetProperty(UpdateTileData, "BackBackgroundImage", backBackgroundImage);
+ SetProperty(UpdateTileData, "WideBackgroundImage", wideBackgroundImage);
+ SetProperty(UpdateTileData, "WideBackBackgroundImage", wideBackBackgroundImage);
+ SetProperty(UpdateTileData, "WideBackContent", wideBackContent);
+
+ // Invoke the new version of ShellTile.Update.
+ shellTileType.GetMethod("Update").Invoke(tileToUpdate, new Object[] { UpdateTileData });
+ }
+ }
+
+ static Uri CreateRelativeUri(string uriString)
+ {
+ return !string.IsNullOrEmpty(uriString) ? new Uri(uriString, UriKind.Relative) : null;
+ }
+
+ static void SetProperty(object instance, string name, object value)
+ {
+ var setMethod = instance.GetType().GetProperty(name).GetSetMethod();
+ setMethod.Invoke(instance, new object[] { value });
+ }
+
+ static readonly Version targetedVersion78 = new Version(7, 10, 8858);
+
+ static bool CanUseLiveTiles
+ {
+ get { return Environment.OSVersion.Version >= targetedVersion78; }
+ }
+ }
+}