コード例 #1
0
        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;
        }
コード例 #2
0
 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;
 }
コード例 #3
0
        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);
            }
        }