public void SetReplyMessage(MessageElementModel messageElementModel) { // Ensure to be on Main UI Thread if (!MainThread.IsMainThread) { MainThread.BeginInvokeOnMainThread(() => SetReplyMessage(messageElementModel)); return; } // We can't add attachments FrameBeforeButtonAttachment.IsVisible = false; ButtonAttachment.IsVisible = false; replyToMessageId = messageElementModel?.Reply?.Id; MessageContentReply.SetUsageMode(true); MessageContentReply.BindingContext = messageElementModel; MessageContentReplyElement.IsVisible = true; }
protected override void OnBindingContextChanged() { if ((BindingContext != null) && (message == null)) { message = (MessageElementModel)BindingContext; if (message != null) { // Add Urgency element ? if (message.Content.Urgency != UrgencyType.Std) { if (messageContentUrgency == null) { messageContentUrgency = new MessageContentUrgency(); messageContentUrgency.BindingContext = message; ContentGrid.Children.Add(messageContentUrgency, 0, 0); Grid.SetColumnSpan(messageContentUrgency, 2); } } // Add forward header if (message.IsForwarded) { if (messageContentForward == null) { messageContentForward = new MessageContentForward(); messageContentForward.BindingContext = message; ContentGrid.Children.Add(messageContentForward, 0, 0); Grid.SetColumnSpan(messageContentForward, 2); } } // Add Reply element ? if (message.Reply != null) { if (messageContentReply == null) { messageContentReply = new MessageContentReply(); messageContentReply.BindingContext = message; ContentGrid.Children.Add(messageContentReply, 0, 1); Grid.SetColumnSpan(messageContentReply, 2); } } // Add Body element ? if (!String.IsNullOrEmpty(message.Content?.Body)) { if (message.Content.Body.StartsWith("/img", StringComparison.InvariantCultureIgnoreCase)) { if (messageContentBodyWithImg == null) { messageContentBodyWithImg = new MessageContentBodyWithImg(); messageContentBodyWithImg.BindingContext = message; ContentGrid.Children.Add(messageContentBodyWithImg, 0, 2); } } else if (message.Content.Body.StartsWith("/code", StringComparison.InvariantCultureIgnoreCase)) { if (messageContentBodyWithCode == null) { messageContentBodyWithCode = new MessageContentBodyWithCode(); messageContentBodyWithCode.BindingContext = message; ContentGrid.Children.Add(messageContentBodyWithCode, 0, 2); } } else if (messageContentBody == null) { messageContentBody = new MessageContentBody(); messageContentBody.BindingContext = message; ContentGrid.Children.Add(messageContentBody, 0, 2); } BtnPosition = 2; } else if (message.Content.Type == "deletedMessage") { // We don't need action button in this case needActionButton = false; // Create MessageContentDeleted messageContentDeleted = new MessageContentDeleted(); messageContentDeleted.BindingContext = message; ContentGrid.Children.Add(messageContentDeleted, 0, 2); Grid.SetColumnSpan(messageContentDeleted, 2); } // Add Attachment element ? if (message.Content.Attachment != null) { if (messageContentAttachment == null) { messageContentAttachment = new MessageContentAttachment(); messageContentAttachment.BindingContext = message; ContentGrid.Children.Add(messageContentAttachment, 0, 3); if (BtnPosition == -1) { BtnPosition = 3; } else { Grid.SetColumnSpan(messageContentAttachment, 2); } } } // Are we managing a msg of the current user ? if (message.Peer.Id == Helper.SdkWrapper.GetCurrentContactId()) { color = Helper.GetResourceDictionaryById <Color>("ColorConversationStreamMessageCurrentUserFont"); backgroundColor = Helper.GetResourceDictionaryById <Color>("ColorConversationStreamMessageCurrentUserBackGround"); } else { color = Helper.GetResourceDictionaryById <Color>("ColorConversationStreamMessageOtherUserFont"); backgroundColor = Helper.GetResourceDictionaryById <Color>("ColorConversationStreamMessageOtherUserBackGround"); } interpolateColor = ColorInterpolator.InterpolateBetween(color, backgroundColor, 0.5); Frame.BackgroundColor = backgroundColor; // Add Btn Action in the correct place if (needActionButton && (BtnPosition != -1)) { CreateBtnAction(); BtnAction.ImageSourceId = null; BtnAction.BackgroundColor = backgroundColor; BtnAction.BackgroundColorOnMouseOver = interpolateColor; ContentGrid.Children.Add(BtnAction, 1, BtnPosition); } } } }