Skip to content

Commit 8104877

Browse files
committed
Add setting thread mode in MessageListHeaderViewModel
1 parent fda6446 commit 8104877

File tree

8 files changed

+71
-28
lines changed

8 files changed

+71
-28
lines changed

samplejava/src/main/java/com/example/chattutorial/ChannelActivity.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.State.NavigateUp;
1818

1919
import io.getstream.chat.android.client.models.Channel;
20+
import io.getstream.chat.android.client.models.Message;
2021
import io.getstream.chat.android.ui.message.input.viewmodel.MessageInputViewModelBinding;
2122
import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView;
2223
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel;
@@ -50,22 +51,25 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5051
// Step 1 - Create 3 separate ViewModels for the views so it's easy to customize one of the components
5152
MessageListViewModelFactory factory = new MessageListViewModelFactory(cid);
5253
ViewModelProvider provider = new ViewModelProvider(this, factory);
53-
MessageListHeaderViewModel channelHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
54+
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
5455
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
5556
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
5657

5758
// TODO set custom Imgur ViewHolderFactory
5859

5960
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
60-
MessageListHeaderViewModelBinding.bind(channelHeaderViewModel, binding.messageListHeaderView, this);
61+
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
6162
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
6263
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
6364

64-
// Step 3 - Let the message input know when we open a thread
65+
// Step 3 - Let both message list header and message input know when we open a thread
6566
messageListViewModel.getMode().observe(this, mode -> {
6667
if (mode instanceof Thread) {
67-
messageInputViewModel.setActiveThread(((Thread) mode).getParentMessage());
68+
Message parentMessage = ((Thread) mode).getParentMessage();
69+
messageListHeaderViewModel.setActiveThread(parentMessage);
70+
messageInputViewModel.setActiveThread(parentMessage);
6871
} else if (mode instanceof Normal) {
72+
messageListHeaderViewModel.setActiveThread(null);
6973
messageInputViewModel.resetThread();
7074
}
7175
});

samplejava/src/main/java/com/example/chattutorial/ChannelActivity2.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.State.NavigateUp;
1818

1919
import io.getstream.chat.android.client.models.Channel;
20+
import io.getstream.chat.android.client.models.Message;
2021
import io.getstream.chat.android.ui.message.input.viewmodel.MessageInputViewModelBinding;
2122
import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView;
2223
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel;
@@ -50,23 +51,26 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5051
// Step 1 - Create 3 separate ViewModels for the views so it's easy to customize one of the components
5152
MessageListViewModelFactory factory = new MessageListViewModelFactory(cid);
5253
ViewModelProvider provider = new ViewModelProvider(this, factory);
53-
MessageListHeaderViewModel channelHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
54+
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
5455
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
5556
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
5657

5758
// Set view holder factory for Imgur attachments
5859
binding.messageListView.setMessageViewHolderFactory(new ImgurAttachmentViewHolderFactory());
5960

6061
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
61-
MessageListHeaderViewModelBinding.bind(channelHeaderViewModel, binding.messageListHeaderView, this);
62+
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
6263
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
6364
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
6465

65-
// Step 3 - Let the message input know when we open a thread
66+
// Step 3 - Let both message list header and message input know when we open a thread
6667
messageListViewModel.getMode().observe(this, mode -> {
6768
if (mode instanceof Thread) {
68-
messageInputViewModel.setActiveThread(((Thread) mode).getParentMessage());
69+
Message parentMessage = ((Thread) mode).getParentMessage();
70+
messageListHeaderViewModel.setActiveThread(parentMessage);
71+
messageInputViewModel.setActiveThread(parentMessage);
6972
} else if (mode instanceof Normal) {
73+
messageListHeaderViewModel.setActiveThread(null);
7074
messageInputViewModel.resetThread();
7175
}
7276
});

samplejava/src/main/java/com/example/chattutorial/ChannelActivity3.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.util.List;
2323

2424
import io.getstream.chat.android.client.models.Channel;
25+
import io.getstream.chat.android.client.models.Message;
2526
import io.getstream.chat.android.client.models.User;
2627
import io.getstream.chat.android.livedata.ChatDomain;
2728
import io.getstream.chat.android.livedata.controller.ChannelController;
@@ -58,23 +59,26 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5859
// Step 1 - Create 3 separate ViewModels for the views so it's easy to customize one of the components
5960
MessageListViewModelFactory factory = new MessageListViewModelFactory(cid);
6061
ViewModelProvider provider = new ViewModelProvider(this, factory);
61-
MessageListHeaderViewModel channelHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
62+
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
6263
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
6364
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
6465

6566
// Set custom AttachmentViewHolderFactory
6667
binding.messageListView.setMessageViewHolderFactory(new ImgurAttachmentViewHolderFactory());
6768

6869
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
69-
MessageListHeaderViewModelBinding.bind(channelHeaderViewModel, binding.messageListHeaderView, this);
70+
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
7071
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
7172
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
7273

73-
// Step 3 - Let the message input know when we open a thread
74+
// Step 3 - Let both message list header and message input know when we open a thread
7475
messageListViewModel.getMode().observe(this, mode -> {
7576
if (mode instanceof Thread) {
76-
messageInputViewModel.setActiveThread(((Thread) mode).getParentMessage());
77+
Message parentMessage = ((Thread) mode).getParentMessage();
78+
messageListHeaderViewModel.setActiveThread(parentMessage);
79+
messageInputViewModel.setActiveThread(parentMessage);
7780
} else if (mode instanceof Normal) {
81+
messageListHeaderViewModel.setActiveThread(null);
7882
messageInputViewModel.resetThread();
7983
}
8084
});

samplejava/src/main/java/com/example/chattutorial/ChannelActivity4.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.getstream.chat.android.client.events.TypingStartEvent;
2626
import io.getstream.chat.android.client.events.TypingStopEvent;
2727
import io.getstream.chat.android.client.models.Channel;
28+
import io.getstream.chat.android.client.models.Message;
2829
import io.getstream.chat.android.client.models.User;
2930
import io.getstream.chat.android.ui.message.input.viewmodel.MessageInputViewModelBinding;
3031
import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView;
@@ -59,23 +60,26 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5960
// Step 1 - Create 3 separate ViewModels for the views so it's easy to customize one of the components
6061
MessageListViewModelFactory factory = new MessageListViewModelFactory(cid);
6162
ViewModelProvider provider = new ViewModelProvider(this, factory);
62-
MessageListHeaderViewModel channelHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
63+
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
6364
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
6465
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
6566

6667
// Set custom AttachmentViewHolderFactory
6768
binding.messageListView.setMessageViewHolderFactory(new ImgurAttachmentViewHolderFactory());
6869

6970
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
70-
MessageListHeaderViewModelBinding.bind(channelHeaderViewModel, binding.messageListHeaderView, this);
71+
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
7172
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
7273
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
7374

74-
// Step 3 - Let the message input know when we open a thread
75+
// Step 3 - Let both message list header and message input know when we open a thread
7576
messageListViewModel.getMode().observe(this, mode -> {
7677
if (mode instanceof Thread) {
77-
messageInputViewModel.setActiveThread(((Thread) mode).getParentMessage());
78+
Message parentMessage = ((Thread) mode).getParentMessage();
79+
messageListHeaderViewModel.setActiveThread(parentMessage);
80+
messageInputViewModel.setActiveThread(parentMessage);
7881
} else if (mode instanceof Normal) {
82+
messageListHeaderViewModel.setActiveThread(null);
7983
messageInputViewModel.resetThread();
8084
}
8185
});

samplekotlin/src/main/java/com/example/chattutorial/ChannelActivity.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,18 @@ class ChannelActivity : AppCompatActivity() {
4747
messageListViewModel.bindView(binding.messageListView, this)
4848
messageInputViewModel.bindView(binding.messageInputView, this)
4949

50-
// Step 3 - Let the message input know when we open a thread
50+
// Step 3 - Let both message list header and message input know when we open a thread
5151
// Note: the .observe support was added in kotlin 1.4, upgrade kotlin to support this syntax
5252
messageListViewModel.mode.observe(this) { mode ->
5353
when (mode) {
54-
is Thread -> messageInputViewModel.setActiveThread(mode.parentMessage)
55-
is Normal -> messageInputViewModel.resetThread()
54+
is Thread -> {
55+
messageInputViewModel.setActiveThread(mode.parentMessage)
56+
messageListHeaderViewModel.setActiveThread(mode.parentMessage)
57+
}
58+
is Normal -> {
59+
messageListHeaderViewModel.setActiveThread(null)
60+
messageInputViewModel.resetThread()
61+
}
5662
}
5763
}
5864

samplekotlin/src/main/java/com/example/chattutorial/ChannelActivity2.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,11 +48,18 @@ class ChannelActivity2 : AppCompatActivity() {
4848
messageListViewModel.bindView(binding.messageListView, this)
4949
messageInputViewModel.bindView(binding.messageInputView, this)
5050

51-
// Step 3 - Let the message input know when we open a thread
51+
// Step 3 - Let both message list header and message input know when we open a thread
52+
// Note: the .observe support was added in kotlin 1.4, upgrade kotlin to support this syntax
5253
messageListViewModel.mode.observe(this) { mode ->
5354
when (mode) {
54-
is Thread -> messageInputViewModel.setActiveThread(mode.parentMessage)
55-
is Normal -> messageInputViewModel.resetThread()
55+
is Thread -> {
56+
messageInputViewModel.setActiveThread(mode.parentMessage)
57+
messageListHeaderViewModel.setActiveThread(mode.parentMessage)
58+
}
59+
is Normal -> {
60+
messageListHeaderViewModel.setActiveThread(null)
61+
messageInputViewModel.resetThread()
62+
}
5663
}
5764
}
5865

samplekotlin/src/main/java/com/example/chattutorial/ChannelActivity3.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,18 @@ class ChannelActivity3 : AppCompatActivity() {
5050
messageListViewModel.bindView(binding.messageListView, this)
5151
messageInputViewModel.bindView(binding.messageInputView, this)
5252

53-
// Step 3 - Let the message input know when we open a thread
53+
// Step 3 - Let both message list header and message input know when we open a thread
54+
// Note: the .observe support was added in kotlin 1.4, upgrade kotlin to support this syntax
5455
messageListViewModel.mode.observe(this) { mode ->
5556
when (mode) {
56-
is Thread -> messageInputViewModel.setActiveThread(mode.parentMessage)
57-
is Normal -> messageInputViewModel.resetThread()
57+
is Thread -> {
58+
messageInputViewModel.setActiveThread(mode.parentMessage)
59+
messageListHeaderViewModel.setActiveThread(mode.parentMessage)
60+
}
61+
is Normal -> {
62+
messageListHeaderViewModel.setActiveThread(null)
63+
messageInputViewModel.resetThread()
64+
}
5865
}
5966
}
6067

samplekotlin/src/main/java/com/example/chattutorial/ChannelActivity4.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,18 @@ class ChannelActivity4 : AppCompatActivity() {
5353
messageListViewModel.bindView(binding.messageListView, this)
5454
messageInputViewModel.bindView(binding.messageInputView, this)
5555

56-
// Step 3 - Let the message input know when we open a thread
56+
// Step 3 - Let both message list header and message input know when we open a thread
57+
// Note: the .observe support was added in kotlin 1.4, upgrade kotlin to support this syntax
5758
messageListViewModel.mode.observe(this) { mode ->
5859
when (mode) {
59-
is Thread -> messageInputViewModel.setActiveThread(mode.parentMessage)
60-
is Normal -> messageInputViewModel.resetThread()
60+
is Thread -> {
61+
messageInputViewModel.setActiveThread(mode.parentMessage)
62+
messageListHeaderViewModel.setActiveThread(mode.parentMessage)
63+
}
64+
is Normal -> {
65+
messageListHeaderViewModel.setActiveThread(null)
66+
messageInputViewModel.resetThread()
67+
}
6168
}
6269
}
6370

0 commit comments

Comments
 (0)