2323import io .getstream .chat .android .models .Channel ;
2424import io .getstream .chat .android .models .Message ;
2525import io .getstream .chat .android .models .TypingEvent ;
26- import io .getstream .chat .android .state . extensions .ChatClientExtensions ;
26+ import io .getstream .chat .android .client . api . state .ChatClientExtensions ;
2727import io .getstream .chat .android .ui .common .state .messages .Edit ;
2828import io .getstream .chat .android .ui .common .state .messages .MessageMode ;
29- import io .getstream .chat .android .ui .feature .messages .header .MessageListHeaderView ;
29+ import io .getstream .chat .android .ui .feature .messages .header .ChannelHeaderView ;
3030import io .getstream .chat .android .ui .feature .messages .list .adapter .viewholder .attachment .AttachmentFactoryManager ;
3131import io .getstream .chat .android .ui .viewmodel .messages .MessageComposerViewModel ;
3232import io .getstream .chat .android .ui .viewmodel .messages .MessageComposerViewModelBinding ;
33- import io .getstream .chat .android .ui .viewmodel .messages .MessageListHeaderViewModel ;
34- import io .getstream .chat .android .ui .viewmodel .messages .MessageListHeaderViewModelBinding ;
33+ import io .getstream .chat .android .ui .viewmodel .messages .ChannelHeaderViewModel ;
34+ import io .getstream .chat .android .ui .viewmodel .messages .ChannelHeaderViewModelBinding ;
3535import io .getstream .chat .android .ui .viewmodel .messages .MessageListViewModel ;
3636import io .getstream .chat .android .ui .viewmodel .messages .MessageListViewModelBinding ;
37- import io .getstream .chat .android .ui .viewmodel .messages .MessageListViewModelFactory ;
37+ import io .getstream .chat .android .ui .viewmodel .messages .ChannelViewModelFactory ;
3838import kotlinx .coroutines .flow .Flow ;
3939
4040public class ChannelActivity3 extends AppCompatActivity {
@@ -51,22 +51,24 @@ public static Intent newIntent(Context context, Channel channel) {
5151 protected void onCreate (@ Nullable Bundle savedInstanceState ) {
5252 super .onCreate (savedInstanceState );
5353
54- // Step 0 - inflate binding
54+ // inflate binding
5555 ActivityChannel3Binding binding = ActivityChannel3Binding .inflate (getLayoutInflater ());
5656 setContentView (binding .getRoot ());
5757
58+ EdgeToEdge .applySystemBarInsetsAsPadding (binding .getRoot ());
59+
5860 String cid = getIntent ().getStringExtra (CID_KEY );
5961 if (cid == null ) {
6062 throw new IllegalStateException ("Specifying a channel id is required when starting ChannelActivity3" );
6163 }
6264
63- // Step 1 - Create three separate ViewModels for the views so it's easy
64- // to customize them individually
65- ViewModelProvider .Factory factory = new MessageListViewModelFactory .Builder (this )
65+ // Create three separate ViewModels for the views so it's easy
66+ // to customize them individually
67+ ViewModelProvider .Factory factory = new ChannelViewModelFactory .Builder (this )
6668 .cid (cid )
6769 .build ();
6870 ViewModelProvider provider = new ViewModelProvider (this , factory );
69- MessageListHeaderViewModel messageListHeaderViewModel = provider .get (MessageListHeaderViewModel .class );
71+ ChannelHeaderViewModel channelHeaderViewModel = provider .get (ChannelHeaderViewModel .class );
7072 MessageListViewModel messageListViewModel = provider .get (MessageListViewModel .class );
7173 MessageComposerViewModel messageComposerViewModel = provider .get (MessageComposerViewModel .class );
7274
@@ -79,38 +81,38 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
7981 AttachmentFactoryManager attachmentFactoryManager = new AttachmentFactoryManager (imgurAttachmentViewFactories );
8082 binding .messageListView .setAttachmentFactoryManager (attachmentFactoryManager );
8183
82- // Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
83- MessageListHeaderViewModelBinding .bind (messageListHeaderViewModel , binding .messageListHeaderView , this );
84+ // Bind the view and ViewModels, they are loosely coupled so it's easy to customize
85+ ChannelHeaderViewModelBinding .bind (channelHeaderViewModel , binding .channelHeaderView , this );
8486 MessageListViewModelBinding .bind (messageListViewModel , binding .messageListView , this );
8587 MessageComposerViewModelBinding .bind (messageComposerViewModel , binding .messageComposerView , this );
8688
87- // Step 3 - Let both MessageListHeaderView and MessageComposerView know when we open a thread
89+ // Let both ChannelHeaderView and MessageComposerView know when we open a thread
8890 messageListViewModel .getMode ().observe (this , mode -> {
8991 if (mode instanceof MessageMode .MessageThread ) {
9092 Message parentMessage = ((MessageMode .MessageThread ) mode ).getParentMessage ();
91- messageListHeaderViewModel .setActiveThread (parentMessage );
93+ channelHeaderViewModel .setActiveThread (parentMessage );
9294 messageComposerViewModel .setMessageMode (new MessageMode .MessageThread (parentMessage ));
9395 } else if (mode instanceof MessageMode .Normal ) {
94- messageListHeaderViewModel .resetThread ();
96+ channelHeaderViewModel .resetThread ();
9597 messageComposerViewModel .leaveThread ();
9698 }
9799 });
98100
99- // Step 4 - Let the message input know when we are editing a message
101+ // Let the message input know when we are editing a message
100102 binding .messageListView .setMessageEditHandler (message -> {
101103 messageComposerViewModel .performMessageAction (new Edit (message ));
102104 });
103105
104- // Step 5 - Handle navigate up state
106+ // Handle navigate up state
105107 messageListViewModel .getState ().observe (this , state -> {
106108 if (state instanceof MessageListViewModel .State .NavigateUp ) {
107109 finish ();
108110 }
109111 });
110112
111- // Step 6 - Handle back button behaviour correctly when you're in a thread
112- MessageListHeaderView .OnClickListener backHandler = () -> messageListViewModel .onEvent (MessageListViewModel .Event .BackButtonPressed .INSTANCE );
113- binding .messageListHeaderView .setBackButtonClickListener (backHandler );
113+ // Handle back button behaviour correctly when you're in a thread
114+ ChannelHeaderView .OnClickListener backHandler = () -> messageListViewModel .onEvent (MessageListViewModel .Event .BackButtonPressed .INSTANCE );
115+ binding .channelHeaderView .setBackButtonClickListener (backHandler );
114116 getOnBackPressedDispatcher ().addCallback (this , new OnBackPressedCallback (true ) {
115117 @ Override
116118 public void handleOnBackPressed () {
0 commit comments