1010import androidx .lifecycle .ViewModelProvider ;
1111
1212import 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
1914import java .util .ArrayList ;
2015import 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
3231public 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