Skip to content

Commit 4ddd11c

Browse files
jakob-mcdukhovnyi
authored andcommitted
Fix operator avatar not removed issue (#182)
1 parent 6456c12 commit 4ddd11c

File tree

5 files changed

+106
-62
lines changed

5 files changed

+106
-62
lines changed

widgetssdk/src/main/java/com/glia/widgets/chat/adapter/ChatAdapter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int
123123
} else if (viewType == OPERATOR_IMAGE_VIEW_TYPE) {
124124
return new OperatorImageAttachmentViewHolder(
125125
inflater.inflate(R.layout.chat_attachment_operator_image_layout, parent, false),
126+
uiTheme,
126127
getImageFileFromCacheUseCase,
127128
getImageFileFromDownloadsUseCase,
128129
getImageFileFromNetworkUseCase
@@ -165,9 +166,8 @@ public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi
165166
});
166167
} else {
167168
OperatorImageAttachmentViewHolder viewHolder = (OperatorImageAttachmentViewHolder) holder;
168-
AttachmentFile file = ((OperatorAttachmentItem) chatItem).attachmentFile;
169-
viewHolder.bind(file);
170-
viewHolder.itemView.setOnClickListener(v -> onImageItemClickListener.onImageItemClick(file));
169+
OperatorAttachmentItem item = (OperatorAttachmentItem) chatItem;
170+
viewHolder.bind(item, onImageItemClickListener);
171171
}
172172
} else if (chatItem instanceof VisitorAttachmentItem) {
173173
if (chatItem.getViewType() == VISITOR_FILE_VIEW_TYPE) {

widgetssdk/src/main/java/com/glia/widgets/chat/adapter/holder/imageattachment/OperatorImageAttachmentViewHolder.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,47 @@
44

55
import androidx.annotation.NonNull;
66

7+
import com.glia.widgets.R;
8+
import com.glia.widgets.UiTheme;
9+
import com.glia.widgets.chat.adapter.ChatAdapter;
10+
import com.glia.widgets.chat.model.history.OperatorAttachmentItem;
711
import com.glia.widgets.filepreview.domain.usecase.GetImageFileFromCacheUseCase;
812
import com.glia.widgets.filepreview.domain.usecase.GetImageFileFromDownloadsUseCase;
913
import com.glia.widgets.filepreview.domain.usecase.GetImageFileFromNetworkUseCase;
14+
import com.glia.widgets.view.OperatorStatusView;
1015

1116
public class OperatorImageAttachmentViewHolder extends ImageAttachmentViewHolder {
17+
private final OperatorStatusView operatorStatusView;
18+
1219
public OperatorImageAttachmentViewHolder(
1320
@NonNull View itemView,
21+
UiTheme uiTheme,
1422
GetImageFileFromCacheUseCase getImageFileFromCacheUseCase,
1523
GetImageFileFromDownloadsUseCase getImageFileFromDownloadsUseCase,
1624
GetImageFileFromNetworkUseCase getImageFileFromNetworkUseCase
1725
) {
1826
super(itemView, getImageFileFromCacheUseCase, getImageFileFromDownloadsUseCase, getImageFileFromNetworkUseCase);
27+
operatorStatusView = itemView.findViewById(R.id.chat_head_view);
28+
setupOperatorStatus(uiTheme);
29+
}
30+
31+
private void setupOperatorStatus(UiTheme uiTheme) {
32+
operatorStatusView.setTheme(uiTheme);
33+
operatorStatusView.isRippleAnimationShowing(false);
34+
}
35+
36+
public void bind(OperatorAttachmentItem item, ChatAdapter.OnImageItemClickListener onImageItemClickListener) {
37+
super.bind(item.attachmentFile);
38+
itemView.setOnClickListener(v -> onImageItemClickListener.onImageItemClick(item.attachmentFile));
39+
updateOperatorStatus(item);
40+
}
41+
42+
private void updateOperatorStatus(OperatorAttachmentItem item) {
43+
operatorStatusView.setVisibility(item.showChatHead ? View.VISIBLE : View.GONE);
44+
if (item.operatorProfileImgUrl != null) {
45+
operatorStatusView.showProfileImage(item.operatorProfileImgUrl);
46+
} else {
47+
operatorStatusView.showPlaceHolder();
48+
}
1949
}
2050
}

widgetssdk/src/main/java/com/glia/widgets/chat/adapter/holder/imageattachment/VisitorImageAttachmentViewHolder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ public VisitorImageAttachmentViewHolder(
2727
GetImageFileFromNetworkUseCase getImageFileFromNetworkUseCase
2828
) {
2929
super(itemView, getImageFileFromCacheUseCase, getImageFileFromDownloadsUseCase, getImageFileFromNetworkUseCase);
30-
this.deliveredView = itemView.findViewById(R.id.delivered_view);
30+
deliveredView = itemView.findViewById(R.id.delivered_view);
3131
setupDeliveredView(itemView.getContext(), uiTheme);
3232
}
3333

widgetssdk/src/main/java/com/glia/widgets/chat/controller/ChatController.java

Lines changed: 60 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ public void error(GliaException ex) {
188188

189189
private Disposable disposable = null;
190190

191-
// pending photoCaptureFileUri - need to move some place better
191+
// TODO pending photoCaptureFileUri - need to move some place better
192192
private Uri photoCaptureFileUri = null;
193193

194194
public ChatController(
@@ -725,7 +725,7 @@ private void appendHistoryChatItem(List<ChatItem> currentChatItems, ChatMessage
725725
appendHistoryMessage(currentChatItems, message);
726726
addVisitorAttachmentItemsToChatItems(currentChatItems, message);
727727
} else if (message.getSender() == Chat.Participant.OPERATOR) {
728-
changeLastOperatorMessages(currentChatItems, message);
728+
appendOperatorMessage(currentChatItems, message);
729729
}
730730
}
731731

@@ -752,7 +752,7 @@ private void appendMessageItem(List<ChatItem> currentChatItems, ChatMessage mess
752752
}
753753

754754
private void onOperatorMessageReceived(List<ChatItem> currentChatItems, ChatMessage message) {
755-
changeLastOperatorMessages(currentChatItems, message);
755+
appendOperatorMessage(currentChatItems, message);
756756
appendMessagesNotSeen();
757757
changeChatInputMode(message);
758758
}
@@ -864,87 +864,90 @@ private void setDelivered(List<ChatItem> currentChatItems, int i, VisitorAttachm
864864
);
865865
}
866866

867-
private void changeLastOperatorMessages(List<ChatItem> currentChatItems, ChatMessage message) {
868-
replaceLastChatHeadItem(currentChatItems);
869-
addOperatorDownloadableItems(currentChatItems, message);
870-
addLastMessageItem(currentChatItems, message);
867+
private void appendOperatorMessage(List<ChatItem> currentChatItems, ChatMessage message) {
868+
setLastOperatorItemChatHeadVisibility(currentChatItems, false);
869+
appendOperatorMessageItem(currentChatItems, message);
870+
appendOperatorAttachmentItems(currentChatItems, message);
871+
setLastOperatorItemChatHeadVisibility(currentChatItems, true);
871872
}
872873

873-
private void replaceLastChatHeadItem(List<ChatItem> currentChatItems) {
874+
private void setLastOperatorItemChatHeadVisibility(List<ChatItem> currentChatItems, boolean showChatHead) {
874875
if (!currentChatItems.isEmpty()) {
875876
ChatItem lastItem = currentChatItems.get(currentChatItems.size() - 1);
876-
877877
if (lastItem instanceof OperatorMessageItem) {
878878
OperatorMessageItem lastItemInView = (OperatorMessageItem) lastItem;
879879
currentChatItems.remove(lastItemInView);
880-
currentChatItems.add(new OperatorMessageItem(
881-
lastItemInView.getId(),
882-
lastItemInView.operatorProfileImgUrl,
883-
false,
884-
lastItemInView.content,
885-
lastItemInView.singleChoiceOptions,
886-
lastItemInView.selectedChoiceIndex,
887-
lastItemInView.choiceCardImageUrl
888-
));
880+
currentChatItems.add(
881+
new OperatorMessageItem(
882+
lastItemInView.getId(),
883+
lastItemInView.operatorProfileImgUrl,
884+
showChatHead,
885+
lastItemInView.content,
886+
lastItemInView.singleChoiceOptions,
887+
lastItemInView.selectedChoiceIndex,
888+
lastItemInView.choiceCardImageUrl
889+
)
890+
);
889891
} else if (lastItem instanceof OperatorAttachmentItem) {
890892
OperatorAttachmentItem lastItemInView = (OperatorAttachmentItem) lastItem;
891893
currentChatItems.remove(lastItemInView);
892-
currentChatItems.add(new OperatorAttachmentItem(
893-
lastItemInView.getId(),
894-
lastItemInView.getViewType(),
895-
true,
896-
lastItemInView.attachmentFile,
897-
lastItemInView.operatorProfileImgUrl, false, false));
894+
currentChatItems.add(
895+
new OperatorAttachmentItem(
896+
lastItemInView.getId(),
897+
lastItemInView.getViewType(),
898+
showChatHead,
899+
lastItemInView.attachmentFile,
900+
lastItemInView.operatorProfileImgUrl,
901+
false,
902+
false
903+
)
904+
);
898905
}
899906
}
900907
}
901908

902-
private void addOperatorDownloadableItems(List<ChatItem> currentChatItems, ChatMessage message) {
909+
private void appendOperatorAttachmentItems(List<ChatItem> currentChatItems, ChatMessage message) {
903910
MessageAttachment attachment = message.getAttachment();
904911
if (attachment instanceof FilesAttachment) {
905912
FilesAttachment filesAttachment = (FilesAttachment) attachment;
906913
AttachmentFile[] files = filesAttachment.getFiles();
907914

908-
for (int i = 0; i < files.length; i++) {
909-
AttachmentFile file = files[i];
910-
boolean showChatHead = i == files.length - 1;
911-
String mimeType = file.getContentType();
912-
if (mimeType.startsWith("image")) {
913-
currentChatItems.add(
914-
new OperatorAttachmentItem(
915-
message.getId(),
916-
ChatAdapter.OPERATOR_IMAGE_VIEW_TYPE,
917-
showChatHead,
918-
file,
919-
chatState.operatorProfileImgUrl, false, false)
920-
);
915+
for (AttachmentFile file : files) {
916+
int viewType;
917+
if (file.getContentType().startsWith("image")) {
918+
viewType = ChatAdapter.OPERATOR_IMAGE_VIEW_TYPE;
921919
} else {
922-
currentChatItems.add(
923-
new OperatorAttachmentItem(
924-
message.getId(),
925-
ChatAdapter.OPERATOR_FILE_VIEW_TYPE,
926-
showChatHead,
927-
file,
928-
chatState.operatorProfileImgUrl, false, false)
929-
);
920+
viewType = ChatAdapter.OPERATOR_FILE_VIEW_TYPE;
930921
}
931-
922+
currentChatItems.add(
923+
new OperatorAttachmentItem(
924+
message.getId(),
925+
viewType,
926+
false,
927+
file,
928+
chatState.operatorProfileImgUrl,
929+
false,
930+
false
931+
)
932+
);
932933
}
933934
}
934935
}
935936

936-
private void addLastMessageItem(List<ChatItem> currentChatItems, ChatMessage message) {
937+
private void appendOperatorMessageItem(List<ChatItem> currentChatItems, ChatMessage message) {
937938
if (!message.getContent().equals("")) {
938939
MessageAttachment messageAttachment = message.getAttachment();
939-
currentChatItems.add(new OperatorMessageItem(
940-
message.getId(),
941-
chatState.operatorProfileImgUrl,
942-
true,
943-
message.getContent(),
944-
getSingleChoiceAttachmentOptions(messageAttachment),
945-
null,
946-
getSingleChoiceAttachmentImgUrl(messageAttachment)
947-
));
940+
currentChatItems.add(
941+
new OperatorMessageItem(
942+
message.getId(),
943+
chatState.operatorProfileImgUrl,
944+
false,
945+
message.getContent(),
946+
getSingleChoiceAttachmentOptions(messageAttachment),
947+
null,
948+
getSingleChoiceAttachmentImgUrl(messageAttachment)
949+
)
950+
);
948951
}
949952
}
950953

widgetssdk/src/main/res/layout/chat_attachment_operator_image_layout.xml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
android:orientation="vertical"
2121
app:layout_constraintGuide_end="@dimen/glia_chat_operator_message_end" />
2222

23+
<com.glia.widgets.view.OperatorStatusView
24+
android:id="@+id/chat_head_view"
25+
android:layout_width="0dp"
26+
android:layout_height="wrap_content"
27+
android:layout_marginStart="@dimen/glia_small"
28+
android:layout_marginEnd="@dimen/glia_small"
29+
app:imageSize="@dimen/glia_chat_operator_item_chat_head_size"
30+
app:layout_constraintBottom_toBottomOf="@id/incoming_image_attachment"
31+
app:layout_constraintEnd_toStartOf="@id/start_guideline"
32+
app:layout_constraintStart_toStartOf="parent"
33+
tools:ignore="ContentDescription" />
34+
2335
<include
2436
layout="@layout/chat_attachment_image_item"
2537
android:layout_width="@dimen/glia_chat_attachment_image_width"
@@ -29,5 +41,4 @@
2941
app:layout_constraintHorizontal_bias="0.0"
3042
app:layout_constraintStart_toStartOf="@id/start_guideline"
3143
app:layout_constraintTop_toTopOf="parent" />
32-
3344
</androidx.constraintlayout.widget.ConstraintLayout>

0 commit comments

Comments
 (0)