@ -110,16 +110,16 @@ public class ConversationItem extends LinearLayout
private Recipient recipient ;
private Recipient recipient ;
private GlideRequests glideRequests ;
private GlideRequests glideRequests ;
protected CornerMasking View bodyBubble ;
protected ViewGroup bodyBubble ;
private QuoteView quoteView ;
private QuoteView quoteView ;
private TextView bodyText ;
private TextView bodyText ;
private ConversationItemFooter footer ;
private ConversationItemFooter footer ;
private TextView groupSender ;
private TextView groupSender ;
private TextView groupSenderProfileName ;
private TextView groupSenderProfileName ;
private View groupSenderHolder ;
private View groupSenderHolder ;
private AvatarImageView contactPhoto ;
private AvatarImageView contactPhoto ;
private AlertView alertView ;
private AlertView alertView ;
private ViewGroup container ;
private ViewGroup container ;
private @NonNull Set < MessageRecord > batchSelected = new HashSet < > ( ) ;
private @NonNull Set < MessageRecord > batchSelected = new HashSet < > ( ) ;
private @NonNull Recipient conversationRecipient ;
private @NonNull Recipient conversationRecipient ;
@ -203,7 +203,9 @@ public class ConversationItem extends LinearLayout
this . recipient . addListener ( this ) ;
this . recipient . addListener ( this ) ;
this . conversationRecipient . addListener ( this ) ;
this . conversationRecipient . addListener ( this ) ;
setMediaAttributes ( messageRecord , nextMessageRecord , previousMessageRecord , conversationRecipient , groupThread ) ;
setGutterSizes ( messageRecord , groupThread ) ;
setMessageShape ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
setMediaAttributes ( messageRecord , previousMessageRecord , nextMessageRecord , conversationRecipient , groupThread ) ;
setInteractionState ( messageRecord , pulseHighlight ) ;
setInteractionState ( messageRecord , pulseHighlight ) ;
setBodyText ( messageRecord ) ;
setBodyText ( messageRecord ) ;
setBubbleState ( messageRecord ) ;
setBubbleState ( messageRecord ) ;
@ -213,9 +215,7 @@ public class ConversationItem extends LinearLayout
setAuthor ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
setAuthor ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
setQuote ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
setQuote ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
setMessageSpacing ( context , messageRecord , nextMessageRecord ) ;
setMessageSpacing ( context , messageRecord , nextMessageRecord ) ;
setGutterSizes ( messageRecord , groupThread ) ;
setFooter ( messageRecord , nextMessageRecord , locale , groupThread ) ;
setFooter ( messageRecord , nextMessageRecord , locale , groupThread ) ;
setMessageShape ( messageRecord , previousMessageRecord , nextMessageRecord , groupThread ) ;
}
}
@Override
@Override
@ -414,6 +414,8 @@ public class ConversationItem extends LinearLayout
sharedContactStub . get ( ) . setOnClickListener ( sharedContactClickListener ) ;
sharedContactStub . get ( ) . setOnClickListener ( sharedContactClickListener ) ;
sharedContactStub . get ( ) . setOnLongClickListener ( passthroughClickListener ) ;
sharedContactStub . get ( ) . setOnLongClickListener ( passthroughClickListener ) ;
setSharedContactCorners ( messageRecord , previousRecord , nextRecord , isGroupThread ) ;
ViewUtil . updateLayoutParams ( bodyText , ViewGroup . LayoutParams . WRAP_CONTENT , ViewGroup . LayoutParams . WRAP_CONTENT ) ;
ViewUtil . updateLayoutParams ( bodyText , ViewGroup . LayoutParams . WRAP_CONTENT , ViewGroup . LayoutParams . WRAP_CONTENT ) ;
footer . setVisibility ( GONE ) ;
footer . setVisibility ( GONE ) ;
} else if ( hasAudio ( messageRecord ) ) {
} else if ( hasAudio ( messageRecord ) ) {
@ -464,7 +466,7 @@ public class ConversationItem extends LinearLayout
mediaThumbnailStub . get ( ) . setOnClickListener ( passthroughClickListener ) ;
mediaThumbnailStub . get ( ) . setOnClickListener ( passthroughClickListener ) ;
mediaThumbnailStub . get ( ) . showShade ( TextUtils . isEmpty ( messageRecord . getDisplayBody ( ) ) ) ;
mediaThumbnailStub . get ( ) . showShade ( TextUtils . isEmpty ( messageRecord . getDisplayBody ( ) ) ) ;
setThumbnailOutlineCorners ( messageRecord , nextRecord, previous Record, isGroupThread ) ;
setThumbnailOutlineCorners ( messageRecord , previousRecord, next Record, isGroupThread ) ;
ViewUtil . updateLayoutParams ( bodyText , ViewGroup . LayoutParams . MATCH_PARENT , ViewGroup . LayoutParams . WRAP_CONTENT ) ;
ViewUtil . updateLayoutParams ( bodyText , ViewGroup . LayoutParams . MATCH_PARENT , ViewGroup . LayoutParams . WRAP_CONTENT ) ;
footer . setVisibility ( VISIBLE ) ;
footer . setVisibility ( VISIBLE ) ;
@ -537,6 +539,18 @@ public class ConversationItem extends LinearLayout
mediaThumbnailStub . get ( ) . setOutlineCorners ( topLeft , topRight , bottomRight , bottomLeft ) ;
mediaThumbnailStub . get ( ) . setOutlineCorners ( topLeft , topRight , bottomRight , bottomLeft ) ;
}
}
private void setSharedContactCorners ( @NonNull MessageRecord current , @NonNull Optional < MessageRecord > previous , @NonNull Optional < MessageRecord > next , boolean isGroupThread ) {
if ( isSingularMessage ( current , previous , next , isGroupThread ) | | isEndOfMessageCluster ( current , next , isGroupThread ) ) {
sharedContactStub . get ( ) . setSingularStyle ( ) ;
} else {
if ( current . isOutgoing ( ) ) {
sharedContactStub . get ( ) . setClusteredOutgoingStyle ( ) ;
} else {
sharedContactStub . get ( ) . setClusteredIncomingStyle ( ) ;
}
}
}
private void setContactPhoto ( @NonNull Recipient recipient ) {
private void setContactPhoto ( @NonNull Recipient recipient ) {
if ( contactPhoto = = null ) return ;
if ( contactPhoto = = null ) return ;
@ -621,18 +635,10 @@ public class ConversationItem extends LinearLayout
}
}
private void setGutterSizes ( @NonNull MessageRecord current , boolean isGroupThread ) {
private void setGutterSizes ( @NonNull MessageRecord current , boolean isGroupThread ) {
if ( isGroupThread ) {
if ( isGroupThread & & current . isOutgoing ( ) ) {
if ( current . isOutgoing ( ) ) {
ViewUtil . setLeftMargin ( container , readDimen ( R . dimen . conversation_group_left_gutter ) ) ;
ViewUtil . setLeftMargin ( container , readDimen ( R . dimen . conversation_group_left_gutter ) ) ;
} else if ( current . isOutgoing ( ) ) {
} else {
ViewUtil . setLeftMargin ( container , readDimen ( R . dimen . conversation_individual_left_gutter ) ) ;
ViewUtil . setLeftMargin ( bodyBubble , readDimen ( R . dimen . conversation_group_left_gutter ) ) ;
}
} else {
if ( current . isOutgoing ( ) ) {
ViewUtil . setLeftMargin ( container , readDimen ( R . dimen . conversation_individual_left_gutter ) ) ;
} else {
ViewUtil . setLeftMargin ( bodyBubble , readDimen ( R . dimen . conversation_individual_left_gutter ) ) ;
}
}
}
}
}
@ -698,7 +704,7 @@ public class ConversationItem extends LinearLayout
if ( ! next . isPresent ( ) | | next . get ( ) . isUpdate ( ) | | ! current . getRecipient ( ) . getAddress ( ) . equals ( next . get ( ) . getRecipient ( ) . getAddress ( ) ) ) {
if ( ! next . isPresent ( ) | | next . get ( ) . isUpdate ( ) | | ! current . getRecipient ( ) . getAddress ( ) . equals ( next . get ( ) . getRecipient ( ) . getAddress ( ) ) ) {
contactPhoto . setVisibility ( VISIBLE ) ;
contactPhoto . setVisibility ( VISIBLE ) ;
} else {
} else {
contactPhoto . setVisibility ( GON E) ;
contactPhoto . setVisibility ( INVISIBL E) ;
}
}
} else {
} else {
groupSenderHolder . setVisibility ( GONE ) ;
groupSenderHolder . setVisibility ( GONE ) ;
@ -710,45 +716,22 @@ public class ConversationItem extends LinearLayout
}
}
private void setMessageShape ( @NonNull MessageRecord current , @NonNull Optional < MessageRecord > previous , @NonNull Optional < MessageRecord > next , boolean isGroupThread ) {
private void setMessageShape ( @NonNull MessageRecord current , @NonNull Optional < MessageRecord > previous , @NonNull Optional < MessageRecord > next , boolean isGroupThread ) {
int background ;
if ( isSingularMessage ( current , previous , next , isGroupThread ) ) {
if ( isSingularMessage ( current , previous , next , isGroupThread ) ) {
bodyBubble . setRadius ( readDimen ( R . dimen . message_corner_radius ) ) ;
background = current . isOutgoing ( ) ? R . drawable . message_bubble_background_sent_alone
: R . drawable . message_bubble_background_received_alone ;
} else if ( isStartOfMessageCluster ( current , previous , isGroupThread ) ) {
} else if ( isStartOfMessageCluster ( current , previous , isGroupThread ) ) {
if ( current . isOutgoing ( ) ) {
background = current . isOutgoing ( ) ? R . drawable . message_bubble_background_sent_start
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_radius ) ,
: R . drawable . message_bubble_background_received_start ;
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ) ;
} else {
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_collapse_radius ) ) ;
}
} else if ( isEndOfMessageCluster ( current , next , isGroupThread ) ) {
} else if ( isEndOfMessageCluster ( current , next , isGroupThread ) ) {
if ( current . isOutgoing ( ) ) {
background = current . isOutgoing ( ) ? R . drawable . message_bubble_background_sent_end
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_radius ) ,
: R . drawable . message_bubble_background_received_end ;
readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ) ;
} else {
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ) ;
}
} else {
} else {
if ( current . isOutgoing ( ) ) {
background = current . isOutgoing ( ) ? R . drawable . message_bubble_background_sent_middle
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_radius ) ,
: R . drawable . message_bubble_background_received_middle ;
readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ) ;
} else {
bodyBubble . setRadii ( readDimen ( R . dimen . message_corner_collapse_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_radius ) ,
readDimen ( R . dimen . message_corner_collapse_radius ) ) ;
}
}
}
bodyBubble . setBackgroundResource ( background ) ;
}
}
private boolean isStartOfMessageCluster ( @NonNull MessageRecord current , @NonNull Optional < MessageRecord > previous , boolean isGroupThread ) {
private boolean isStartOfMessageCluster ( @NonNull MessageRecord current , @NonNull Optional < MessageRecord > previous , boolean isGroupThread ) {