public ChatMessageNode( ChatMessageViewModel viewModel, IItemActionHandler <ChatMessageViewModel> contextMenuComponent) { _viewModelRef = WeakReferenceEx.Create(viewModel); _contextMenuComponent = contextMenuComponent; _isMyMessage = viewModel.IsMine; Execute.BeginOnUIThread(() => View.AddGestureRecognizer(new UILongPressGestureRecognizer(TryShowMenu))); BackgroundColor = UIColor.FromRGB(245, 245, 245); SelectionStyle = UITableViewCellSelectionStyle.None; AutomaticallyManagesSubnodes = true; UpdateText(); if (_viewModelRef.Target != null) { var dateTimeText = _viewModelRef.Target?.TextDateTime; var attributedDateTimeText = dateTimeText.BuildAttributedString() .Font(UIFont.SystemFontOfSize(11, UIFontWeight.Semibold)) .Foreground(UIColor.FromRGB(141, 141, 141)); _dateTimeTextNode.AttributedText = attributedDateTimeText; } _avatarImageNode.ImageModificationBlock = image => { var size = new CGSize(AvatarSize, AvatarSize); return(image.MakeCircularImageWithSize(size)); }; _avatarImageNode.ContentMode = UIViewContentMode.ScaleAspectFill; _avatarImageNode.Hidden = _isMyMessage; if (!_isMyMessage) { _avatarImageNode.LoadImageWithTextPlaceholder( _viewModelRef.Target.SenderPhotoUrl, _viewModelRef.Target.SenderName, new AvatarImageHelpers.AvatarStyles { BackgroundHexColors = StyleHelper.Style.AvatarStyles.BackgroundHexColors, Font = StyleHelper.Style.AvatarStyles.Font, Size = new System.Drawing.Size((int)AvatarSize, (int)AvatarSize) }); } _attachmentImageNode.ContentMode = UIViewContentMode.ScaleAspectFit; _attachmentImageNode.ImageModificationBlock = image => image.MakeImageWithRoundedCorners(12); LoadAttachmentImageIfNeeded(); _statusImageNode.ContentMode = UIViewContentMode.Center; _statusImageNode.Hidden = !_isMyMessage; }
public ConversationsObservableRecyclerViewAdapter( ObservableKeyGroupsCollection <DateTimeOffset, ChatMessageViewModel> items, Action <int> collectionChangedAction, Action <int> lastItemsLoadedAction, Func <DateTimeOffset, string> headerGroupConverter, IItemActionHandler <ChatMessageViewModel> actionHandler) : base(items, null) { _collectionChangedAction = new WeakAction <int>(collectionChangedAction); _lastItemsLoadedAction = new WeakAction <int>(lastItemsLoadedAction); _headerGroupConverter = new WeakFunc <DateTimeOffset, string>(headerGroupConverter); _actionHandler = actionHandler; }
public ConversationViewHolder( View itemView, bool isIncomingMessageViewType, IItemActionHandler <ChatMessageViewModel> actionHandler) : base(itemView) { _isIncomingMessageViewType = isIncomingMessageViewType; _actionHandler = actionHandler; MessageContainer = itemView.FindViewById <LinearLayout>(Resource.Id.ll_message_container); MessageBodyTextView = itemView.FindViewById <TextView>(Resource.Id.tv_message_body); MessageDateTimeTextView = itemView.FindViewById <TextView>(Resource.Id.tv_message_date_time); AttachmentImageView = itemView.FindViewById <MvxCachedImageView>(Resource.Id.iv_message_attachment); AttachmentImageView.Click += OnMessageImageClicked; AttachmentImageView.SetAdjustViewBounds(true); AttachmentImageView.SetScaleType(ImageView.ScaleType.CenterCrop); var resourceId = _isIncomingMessageViewType ? StyleHelper.Style.IncomingMessageBg : StyleHelper.Style.OutcomingMessageBg; var imageBg = itemView.FindViewById <ImageView>(Resource.Id.item_chat_conversation_bg); imageBg.SetBackgroundResource(resourceId); // setup ViewHolder for in/outcoming messages if (_isIncomingMessageViewType) { SenderPhotoImageView = itemView.FindViewById <MvxCachedImageView>(Resource.Id.iv_sender_photo); } else { _messageLongClickSubscription = new WeakEventSubscription <LinearLayout, View.LongClickEventArgs>( MessageContainer, nameof(MessageContainer.LongClick), MessageContainerLongClickHandler); MessageStatusView = itemView.FindViewById <ImageView>(Resource.Id.iv_message_status); } }