Skip to content

Commit 9401950

Browse files
committed
Fix Split chat not working on Livestreams
1 parent 403bc13 commit 9401950

File tree

2 files changed

+33
-3
lines changed

2 files changed

+33
-3
lines changed

mod/app/src/main/java/bttv/SplitChat.java

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212

1313
import bttv.settings.Settings;
1414
import tv.twitch.android.app.core.ThemeManager;
15+
import tv.twitch.android.shared.chat.adapter.item.ChatMessageViewHolder;
1516
import tv.twitch.android.shared.chat.chomments.ChommentRecyclerItem.ChommentItemViewHolder;
1617
import tv.twitch.android.shared.chat.messagefactory.adapteritem.UserNoticeRecyclerItem.UserNoticeViewHolder;
1718

@@ -49,7 +50,8 @@ public static void setBackgroundColor(int position, RecyclerView.ViewHolder view
4950
// so make sure not to do anything when
5051
// not a ViewHolder used in Chat
5152
if (
52-
!(viewHolder instanceof ChommentItemViewHolder)
53+
!(viewHolder instanceof ChatMessageViewHolder)
54+
&& !(viewHolder instanceof ChommentItemViewHolder)
5355
&& !(viewHolder instanceof UserNoticeViewHolder)
5456
) {
5557
Log.i(TAG, "viewHolder is not known: " + viewHolder.toString());
@@ -59,11 +61,26 @@ public static void setBackgroundColor(int position, RecyclerView.ViewHolder view
5961
Context context = view.getContext();
6062

6163
// make sure we only change chat message items
64+
// Other elements like redeems or Sub Anniversaries are ConstraintLayouts
65+
66+
// If view is a LinearLayout, check the childrens to find chat_message_item
67+
if(view instanceof LinearLayout) {
68+
Log.d(TAG, "view is LinearLayout: " + view.toString());
69+
LinearLayout linearLayout = (LinearLayout) view;
70+
for (int j = 0; j < linearLayout.getChildCount(); j++) {
71+
View nestedChild = linearLayout.getChildAt(j);
72+
if (nestedChild.getId() == ResUtil.getResourceId(context, "chat_message_item", "id")) {
73+
Log.d(TAG, "found chat_message_item: " + nestedChild.toString());
74+
view = nestedChild;
75+
break;
76+
}
77+
}
78+
}
6279
boolean hasChatMessageId = view.getId() == ResUtil.getResourceId(context, "chat_message_item", "id");
6380
boolean hasChommentRootId = view.getId() == ResUtil.getResourceId(context, "chomment_root_view", "id");
6481

65-
if (!hasChatMessageId && !hasChommentRootId) {
66-
Log.i(TAG, "view skipped, as it's not a chat message or chomment" + viewHolder.toString());
82+
if (!(hasChatMessageId || hasChommentRootId)) {
83+
Log.i(TAG, "view skipped, as it's not a chat message or chomment, " + viewHolder.toString() + " ID: " + view.getId() + " View: " + view.toString() + " Expected ID: " + ResUtil.getResourceId(context, "chat_message_item", "id") + " or " + ResUtil.getResourceId(context, "chomment_root_view", "id"));
6784
reset(view);
6885
return;
6986
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package tv.twitch.android.shared.chat.adapter.item;
2+
3+
import android.view.View;
4+
5+
import androidx.annotation.NonNull;
6+
7+
import tv.twitch.android.core.adapters.AbstractTwitchRecyclerViewHolder;
8+
9+
public abstract class ChatMessageViewHolder extends AbstractTwitchRecyclerViewHolder {
10+
public ChatMessageViewHolder(@NonNull View itemView) {
11+
super(itemView);
12+
}
13+
}

0 commit comments

Comments
 (0)