Skip to content

Commit ba9dea1

Browse files
committed
Migrate Java tutorials to Strea CHat SDK v6
1 parent 6a7065e commit ba9dea1

File tree

12 files changed

+197
-207
lines changed

12 files changed

+197
-207
lines changed

samplejava/build.gradle

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ android {
3131

3232
dependencies {
3333
// Add new dependencies
34-
implementation "io.getstream:stream-chat-android-ui-components:5.12.0"
35-
implementation "com.google.android.material:material:1.6.1"
36-
implementation "androidx.activity:activity-ktx:1.5.1"
37-
implementation "io.coil-kt:coil:2.1.0"
34+
implementation "io.getstream:stream-chat-android-ui-components:6.0.2"
35+
implementation "io.getstream:stream-chat-android-offline:6.0.2"
36+
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.6.2"
37+
implementation "com.google.android.material:material:1.9.0"
38+
implementation "androidx.activity:activity-ktx:1.7.2"
39+
implementation "io.coil-kt:coil:2.4.0"
3840
}

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

Lines changed: 27 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,19 @@
1010
import androidx.lifecycle.ViewModelProvider;
1111

1212
import com.example.chattutorial.databinding.ActivityChannelBinding;
13-
import com.getstream.sdk.chat.viewmodel.MessageInputViewModel;
14-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel;
15-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.Mode.Normal;
16-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.Mode.Thread;
17-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.State.NavigateUp;
18-
19-
import io.getstream.chat.android.client.models.Channel;
20-
import io.getstream.chat.android.client.models.Message;
21-
import io.getstream.chat.android.ui.message.input.viewmodel.MessageInputViewModelBinding;
22-
import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView;
23-
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel;
24-
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModelBinding;
25-
import io.getstream.chat.android.ui.message.list.viewmodel.MessageListViewModelBinding;
26-
import io.getstream.chat.android.ui.message.list.viewmodel.factory.MessageListViewModelFactory;
13+
14+
import io.getstream.chat.android.models.Channel;
15+
import io.getstream.chat.android.models.Message;
16+
import io.getstream.chat.android.ui.common.state.messages.Edit;
17+
import io.getstream.chat.android.ui.common.state.messages.MessageMode;
18+
import io.getstream.chat.android.ui.feature.messages.header.MessageListHeaderView;
19+
import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModel;
20+
import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModelBinding;
21+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModel;
22+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModelBinding;
23+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModel;
24+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelBinding;
25+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelFactory;
2726

2827
public class ChannelActivity extends AppCompatActivity {
2928

@@ -50,47 +49,47 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5049

5150
// Step 1 - Create three separate ViewModels for the views so it's easy
5251
// to customize them individually
53-
ViewModelProvider.Factory factory = new MessageListViewModelFactory.Builder()
52+
ViewModelProvider.Factory factory = new MessageListViewModelFactory.Builder(this)
5453
.cid(cid)
5554
.build();
5655
ViewModelProvider provider = new ViewModelProvider(this, factory);
5756
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
5857
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
59-
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
58+
MessageComposerViewModel messageComposerViewModel = provider.get(MessageComposerViewModel.class);
6059

6160
// TODO set custom Imgur attachment factory
6261

6362
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
6463
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
65-
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this, true);
66-
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
64+
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
65+
MessageComposerViewModelBinding.bind(messageComposerViewModel, binding.messageComposerView, this);
6766

6867
// Step 3 - Let both MessageListHeaderView and MessageInputView know when we open a thread
6968
messageListViewModel.getMode().observe(this, mode -> {
70-
if (mode instanceof Thread) {
71-
Message parentMessage = ((Thread) mode).getParentMessage();
69+
if (mode instanceof MessageMode.MessageThread) {
70+
Message parentMessage = ((MessageMode.MessageThread) mode).getParentMessage();
7271
messageListHeaderViewModel.setActiveThread(parentMessage);
73-
messageInputViewModel.setActiveThread(parentMessage);
74-
} else if (mode instanceof Normal) {
72+
messageComposerViewModel.setMessageMode(new MessageMode.MessageThread(parentMessage));
73+
} else if (mode instanceof MessageMode.Normal) {
7574
messageListHeaderViewModel.resetThread();
76-
messageInputViewModel.resetThread();
75+
messageComposerViewModel.leaveThread();
7776
}
7877
});
7978

8079
// Step 4 - Let the message input know when we are editing a message
81-
binding.messageListView.setMessageEditHandler(messageInputViewModel::postMessageToEdit);
80+
binding.messageListView.setMessageEditHandler(message -> {
81+
messageComposerViewModel.performMessageAction(new Edit(message));
82+
});
8283

8384
// Step 5 - Handle navigate up state
8485
messageListViewModel.getState().observe(this, state -> {
85-
if (state instanceof NavigateUp) {
86+
if (state instanceof MessageListViewModel.State.NavigateUp) {
8687
finish();
8788
}
8889
});
8990

9091
// Step 6 - Handle back button behaviour correctly when you're in a thread
91-
MessageListHeaderView.OnClickListener backHandler = () -> {
92-
messageListViewModel.onEvent(MessageListViewModel.Event.BackButtonPressed.INSTANCE);
93-
};
92+
MessageListHeaderView.OnClickListener backHandler = () -> messageListViewModel.onEvent(MessageListViewModel.Event.BackButtonPressed.INSTANCE);
9493
binding.messageListHeaderView.setBackButtonClickListener(backHandler);
9594
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
9695
@Override

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

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -10,31 +10,30 @@
1010
import androidx.lifecycle.ViewModelProvider;
1111

1212
import com.example.chattutorial.databinding.ActivityChannel2Binding;
13-
import com.getstream.sdk.chat.viewmodel.MessageInputViewModel;
14-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel;
15-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.Mode.Normal;
16-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.Mode.Thread;
17-
import com.getstream.sdk.chat.viewmodel.messages.MessageListViewModel.State.NavigateUp;
1813

1914
import java.util.ArrayList;
2015
import java.util.List;
2116

22-
import io.getstream.chat.android.client.models.Channel;
23-
import io.getstream.chat.android.client.models.Message;
24-
import io.getstream.chat.android.ui.message.input.viewmodel.MessageInputViewModelBinding;
25-
import io.getstream.chat.android.ui.message.list.adapter.viewholder.attachment.AttachmentFactoryManager;
26-
import io.getstream.chat.android.ui.message.list.header.MessageListHeaderView;
27-
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModel;
28-
import io.getstream.chat.android.ui.message.list.header.viewmodel.MessageListHeaderViewModelBinding;
29-
import io.getstream.chat.android.ui.message.list.viewmodel.MessageListViewModelBinding;
30-
import io.getstream.chat.android.ui.message.list.viewmodel.factory.MessageListViewModelFactory;
17+
import io.getstream.chat.android.models.Channel;
18+
import io.getstream.chat.android.models.Message;
19+
import io.getstream.chat.android.ui.common.state.messages.Edit;
20+
import io.getstream.chat.android.ui.common.state.messages.MessageMode;
21+
import io.getstream.chat.android.ui.feature.messages.header.MessageListHeaderView;
22+
import io.getstream.chat.android.ui.feature.messages.list.adapter.viewholder.attachment.AttachmentFactoryManager;
23+
import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModel;
24+
import io.getstream.chat.android.ui.viewmodel.messages.MessageComposerViewModelBinding;
25+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModel;
26+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListHeaderViewModelBinding;
27+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModel;
28+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelBinding;
29+
import io.getstream.chat.android.ui.viewmodel.messages.MessageListViewModelFactory;
3130

3231
public class ChannelActivity2 extends AppCompatActivity {
3332

3433
private final static String CID_KEY = "key:cid";
3534

3635
public static Intent newIntent(Context context, Channel channel) {
37-
final Intent intent = new Intent(context, ChannelActivity2.class);
36+
final Intent intent = new Intent(context, ChannelActivity.class);
3837
intent.putExtra(CID_KEY, channel.getCid());
3938
return intent;
4039
}
@@ -54,54 +53,54 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
5453

5554
// Step 1 - Create three separate ViewModels for the views so it's easy
5655
// to customize them individually
57-
ViewModelProvider.Factory factory = new MessageListViewModelFactory.Builder()
56+
ViewModelProvider.Factory factory = new MessageListViewModelFactory.Builder(this)
5857
.cid(cid)
5958
.build();
6059
ViewModelProvider provider = new ViewModelProvider(this, factory);
6160
MessageListHeaderViewModel messageListHeaderViewModel = provider.get(MessageListHeaderViewModel.class);
6261
MessageListViewModel messageListViewModel = provider.get(MessageListViewModel.class);
63-
MessageInputViewModel messageInputViewModel = provider.get(MessageInputViewModel.class);
62+
MessageComposerViewModel messageComposerViewModel = provider.get(MessageComposerViewModel.class);
6463

6564
// Set a view factory manager for Imgur attachments
6665
ImgurAttachmentFactory imgurAttachmentFactory = new ImgurAttachmentFactory();
6766

68-
List<ImgurAttachmentFactory> imgurAttachmentViewFactories = new ArrayList<ImgurAttachmentFactory>();
67+
List<ImgurAttachmentFactory> imgurAttachmentViewFactories = new ArrayList<>();
6968
imgurAttachmentViewFactories.add(imgurAttachmentFactory);
7069

7170
AttachmentFactoryManager attachmentFactoryManager = new AttachmentFactoryManager(imgurAttachmentViewFactories);
7271
binding.messageListView.setAttachmentFactoryManager(attachmentFactoryManager);
7372

7473
// Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
7574
MessageListHeaderViewModelBinding.bind(messageListHeaderViewModel, binding.messageListHeaderView, this);
76-
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this, true);
77-
MessageInputViewModelBinding.bind(messageInputViewModel, binding.messageInputView, this);
75+
MessageListViewModelBinding.bind(messageListViewModel, binding.messageListView, this);
76+
MessageComposerViewModelBinding.bind(messageComposerViewModel, binding.messageComposerView, this);
7877

7978
// Step 3 - Let both MessageListHeaderView and MessageInputView know when we open a thread
8079
messageListViewModel.getMode().observe(this, mode -> {
81-
if (mode instanceof Thread) {
82-
Message parentMessage = ((Thread) mode).getParentMessage();
80+
if (mode instanceof MessageMode.MessageThread) {
81+
Message parentMessage = ((MessageMode.MessageThread) mode).getParentMessage();
8382
messageListHeaderViewModel.setActiveThread(parentMessage);
84-
messageInputViewModel.setActiveThread(parentMessage);
85-
} else if (mode instanceof Normal) {
83+
messageComposerViewModel.setMessageMode(new MessageMode.MessageThread(parentMessage));
84+
} else if (mode instanceof MessageMode.Normal) {
8685
messageListHeaderViewModel.resetThread();
87-
messageInputViewModel.resetThread();
86+
messageComposerViewModel.leaveThread();
8887
}
8988
});
9089

9190
// Step 4 - Let the message input know when we are editing a message
92-
binding.messageListView.setMessageEditHandler(messageInputViewModel::postMessageToEdit);
91+
binding.messageListView.setMessageEditHandler(message -> {
92+
messageComposerViewModel.performMessageAction(new Edit(message));
93+
});
9394

9495
// Step 5 - Handle navigate up state
9596
messageListViewModel.getState().observe(this, state -> {
96-
if (state instanceof NavigateUp) {
97+
if (state instanceof MessageListViewModel.State.NavigateUp) {
9798
finish();
9899
}
99100
});
100101

101102
// Step 6 - Handle back button behaviour correctly when you're in a thread
102-
MessageListHeaderView.OnClickListener backHandler = () -> {
103-
messageListViewModel.onEvent(MessageListViewModel.Event.BackButtonPressed.INSTANCE);
104-
};
103+
MessageListHeaderView.OnClickListener backHandler = () -> messageListViewModel.onEvent(MessageListViewModel.Event.BackButtonPressed.INSTANCE);
105104
binding.messageListHeaderView.setBackButtonClickListener(backHandler);
106105
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
107106
@Override

0 commit comments

Comments
 (0)