private static AdaptiveText GetTileAdaptiveText(TileContentBuilder builder, TileSize size) { TileBinding tileBinding; switch (size) { case TileSize.Small: tileBinding = builder.Content.Visual.TileSmall; break; case TileSize.Medium: tileBinding = builder.Content.Visual.TileMedium; break; case TileSize.Wide: tileBinding = builder.Content.Visual.TileWide; break; case TileSize.Large: tileBinding = builder.Content.Visual.TileLarge; break; default: return(null); } var content = (TileBindingContentAdaptive)tileBinding.Content; return(content.Children.FirstOrDefault() as AdaptiveText); }
public static TileNotification CreateTileNotificationForMessage(DiscordMessage message) { var tileContentBuilder = new TileContentBuilder() .SetBranding(TileBranding.NameAndLogo) .AddTile(TileSize.Large) .AddTile(TileSize.Medium) .AddTile(TileSize.Wide); if (message.Channel is DiscordDmChannel dm) { if (!string.IsNullOrEmpty(dm.IconHash)) { tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl)); } if (!string.IsNullOrEmpty(dm.Recipient?.AvatarHash)) { tileContentBuilder.SetPeekImage(new Uri(dm.Recipient.GetAvatarUrl(ImageFormat.Png))); } tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetChannelHeaderName(message.Channel), HintStyle = AdaptiveTextStyle.Base }) .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetMessageContent(message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true }) .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar()); } else { if (!string.IsNullOrWhiteSpace(message.Channel.Guild.IconUrl)) { tileContentBuilder.SetPeekImage(new Uri(message.Channel.Guild.IconUrl + "?size=1024")); } tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = $"#{message.Channel.Name}", HintStyle = AdaptiveTextStyle.Base }) .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = message.Channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body }) .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetMessageContent(message), HintStyle = AdaptiveTextStyle.Caption, HintWrap = true }) .SetDisplayName(new Moment(message.Timestamp.UtcDateTime).Calendar()); } var tileContent = tileContentBuilder.GetTileContent(); var doc = new XmlDocument(); doc.LoadXml(tileContent.GetContent()); return(new TileNotification(doc)); }
public static TileNotification CreateTileNotificationForChannel(DiscordChannel channel) { var tileContentBuilder = new TileContentBuilder() .SetBranding(TileBranding.NameAndLogo) .AddTile(TileSize.Large) .AddTile(TileSize.Medium) .AddTile(TileSize.Wide); if (channel is DiscordDmChannel dm) { if (!string.IsNullOrEmpty(dm.IconHash)) { tileContentBuilder.SetPeekImage(new Uri(dm.IconUrl)); } if (!string.IsNullOrEmpty(dm.Recipient?.AvatarHash)) { tileContentBuilder.SetPeekImage(new Uri(dm.Recipient.AvatarUrl)); } tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = GetChannelHeaderName(channel), HintStyle = AdaptiveTextStyle.Base }); } else { if (!string.IsNullOrWhiteSpace(channel.Guild.IconUrl)) { tileContentBuilder.SetPeekImage(new Uri(channel.Guild.IconUrl + "?size=1024")); } tileContentBuilder.AddAdaptiveTileVisualChild(new AdaptiveText() { Text = $"#{channel.Name}", HintStyle = AdaptiveTextStyle.Base }) .AddAdaptiveTileVisualChild(new AdaptiveText() { Text = channel.Guild.Name, HintStyle = AdaptiveTextStyle.Body }); } var tileContent = tileContentBuilder.GetTileContent(); var doc = new XmlDocument(); doc.LoadXml(tileContent.GetContent()); return(new TileNotification(doc)); }
private static TileBinding GenerateImageTileBinding(List <KeyValuePair <string, string> > pairs) { if (pairs != null && pairs.Count > 0) { return(new TileBinding { Branding = TileBranding.NameAndLogo, Content = TileContentBuilder.CreatePhotosTileContent(pairs.Select(x => new TileBasicImage() { Source = x.Key, AlternateText = x.Value })) }); } return(null); }
public void AddTextTest_OnLargeTileOnly() { // Arrange string text = "text on large tile"; TileContentBuilder builder = new TileContentBuilder(); builder.AddTile(TileSize.Large); // Act builder.AddText(text); // Assert var tileText = GetTileAdaptiveText(builder, TileSize.Large); Assert.IsNotNull(tileText); Assert.AreSame("text on large tile", (string)tileText.Text); }
public static TileContent GenerateTileContent() { TileContentBuilder builder = new TileContentBuilder(); // Small Tile builder.AddTile(Notifications.TileSize.Small) .SetTextStacking(TileTextStacking.Center, Notifications.TileSize.Small) .AddText("Mon", Notifications.TileSize.Small, hintStyle: AdaptiveTextStyle.Body, hintAlign: AdaptiveTextAlign.Center) .AddText("63°", Notifications.TileSize.Small, hintStyle: AdaptiveTextStyle.Base, hintAlign: AdaptiveTextAlign.Center); // Medium Tile builder.AddTile(Notifications.TileSize.Medium) .AddAdaptiveTileVisualChild( new AdaptiveGroup() { Children = { GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42), GenerateSubgroup("Tue", "Cloudy.png", 57, 38) } }, Notifications.TileSize.Medium); // Wide Tile builder.AddTile(Notifications.TileSize.Wide) .AddAdaptiveTileVisualChild( new AdaptiveGroup() { Children = { GenerateSubgroup("Mon", "Mostly Cloudy.png", 63, 42), GenerateSubgroup("Tue", "Cloudy.png", 57, 38), GenerateSubgroup("Wed", "Sunny.png", 59, 43), GenerateSubgroup("Thu", "Sunny.png", 62, 42), GenerateSubgroup("Fri", "Sunny.png", 71, 66) } }, Notifications.TileSize.Wide); // Large tile builder.AddTile(Notifications.TileSize.Large, GenerateLargeTileContent()); // Set the base URI for the images, so we don't redundantly specify the entire path builder.Content.Visual.BaseUri = new Uri("Assets/NotificationAssets/", UriKind.Relative); return(builder.Content); }
/// <summary> /// Method which sends a tile update. /// </summary> /// <param name="text">The text of the notification</param> public static void SendTileNotification(string text) { TileContentBuilder builder = new TileContentBuilder(); builder.AddTile(TileSize.Medium) .SetBranding(TileBranding.Logo) .SetTextStacking(TileTextStacking.Center, TileSize.Medium) .AddText(text, TileSize.Medium, AdaptiveTextStyle.Default, hintWrap: true, hintAlign: AdaptiveTextAlign.Center); builder.AddTile(TileSize.Wide) .SetBranding(TileBranding.Logo) .SetTextStacking(TileTextStacking.Center, TileSize.Wide) .AddText(text, TileSize.Wide, AdaptiveTextStyle.Body, hintWrap: true, hintAlign: AdaptiveTextAlign.Center); builder.AddTile(TileSize.Large) .SetBranding(TileBranding.Logo) .SetTextStacking(TileTextStacking.Center, TileSize.Large) .AddText(text, TileSize.Large, AdaptiveTextStyle.Body, hintWrap: true, hintAlign: AdaptiveTextAlign.Center); TileUpdateManager.CreateTileUpdaterForApplication().Update(new TileNotification(builder.Content.GetXml())); }
public static TileContent GenerateTileContent(string username, string avatarLogoSource) { var builder = new TileContentBuilder(); // Medium Tile built using only builder method. builder.AddTile(Notifications.TileSize.Medium) .SetPeekImage(new Uri(avatarLogoSource, UriKind.Relative), Notifications.TileSize.Medium, hintCrop: TilePeekImageCrop.Circle) .SetTextStacking(TileTextStacking.Center, Notifications.TileSize.Medium) .AddText("Hi,", Notifications.TileSize.Medium, hintStyle: AdaptiveTextStyle.Base, hintAlign: AdaptiveTextAlign.Center) .AddText(username, Notifications.TileSize.Medium, hintStyle: AdaptiveTextStyle.CaptionSubtle, hintAlign: AdaptiveTextAlign.Center); // Wide Tile using custom-made layout. builder.AddTile(Notifications.TileSize.Wide) .AddAdaptiveTileVisualChild(GenerateWideTileContent(username, avatarLogoSource), Notifications.TileSize.Wide); // Large Tile using custom-made layout conjunction with builder helper method builder.AddTile(Notifications.TileSize.Large) .AddAdaptiveTileVisualChild(CreateLargeTileLogoPayload(avatarLogoSource), Notifications.TileSize.Large) .AddText("Hi,", Notifications.TileSize.Large, hintAlign: AdaptiveTextAlign.Center, hintStyle: AdaptiveTextStyle.Title) .AddText(username, Notifications.TileSize.Large, hintAlign: AdaptiveTextAlign.Center, hintStyle: AdaptiveTextStyle.SubtitleSubtle); return(builder.Content); }