99import androidx .appcompat .app .AppCompatActivity ;
1010import androidx .lifecycle .ViewModelProvider ;
1111
12- import com .getstream .sdk .chat .view .ChannelHeaderView ;
13- import com .getstream .sdk .chat .view .MessageListView ;
14- import com .getstream .sdk .chat .view .messageinput .MessageInputView ;
12+ import com .example .chattutorialjava .databinding .ActivityChannelBinding ;
1513import com .getstream .sdk .chat .viewmodel .ChannelHeaderViewModel ;
16- import com .getstream .sdk .chat .viewmodel .ChannelHeaderViewModelBinding ;
1714import com .getstream .sdk .chat .viewmodel .MessageInputViewModel ;
18- import com .getstream .sdk .chat .viewmodel .MessageInputViewModelBinding ;
1915import com .getstream .sdk .chat .viewmodel .factory .ChannelViewModelFactory ;
2016import com .getstream .sdk .chat .viewmodel .messages .MessageListViewModel ;
2117import com .getstream .sdk .chat .viewmodel .messages .MessageListViewModel .Mode .Normal ;
2218import com .getstream .sdk .chat .viewmodel .messages .MessageListViewModel .Mode .Thread ;
2319import com .getstream .sdk .chat .viewmodel .messages .MessageListViewModel .State .NavigateUp ;
24- import com .getstream .sdk .chat .viewmodel .messages .MessageListViewModelBinding ;
2520
2621import io .getstream .chat .android .client .models .Channel ;
22+ import io .getstream .chat .android .ui .messages .header .ChannelHeaderViewModelBinding ;
23+ import io .getstream .chat .android .ui .messages .header .MessagesHeaderView ;
24+ import io .getstream .chat .android .ui .messages .view .MessageListViewModelBinding ;
25+ import io .getstream .chat .android .ui .textinput .MessageInputViewModelBinding ;
2726import kotlin .Unit ;
2827
2928public class ChannelActivity extends AppCompatActivity {
@@ -39,30 +38,29 @@ public static Intent newIntent(Context context, Channel channel) {
3938 @ Override
4039 protected void onCreate (@ Nullable Bundle savedInstanceState ) {
4140 super .onCreate (savedInstanceState );
42- setContentView (R .layout .activity_channel );
41+
42+ // Step 0 - inflate binding
43+ ActivityChannelBinding binding = ActivityChannelBinding .inflate (getLayoutInflater ());
44+ setContentView (binding .getRoot ());
45+
4346 String cid = getIntent ().getStringExtra (CID_KEY );
4447 if (cid == null ) {
4548 throw new IllegalStateException ("Specifying a channel id is required when starting ChannelActivity" );
4649 }
4750
48- // Step 0 - Get View references
49- MessageListView messageListView = findViewById (R .id .messageListView );
50- ChannelHeaderView channelHeaderView = findViewById (R .id .channelHeaderView );
51- MessageInputView messageInputView = findViewById (R .id .messageInputView );
52-
5351 // Step 1 - Create 3 separate ViewModels for the views so it's easy to customize one of the components
5452 ChannelViewModelFactory factory = new ChannelViewModelFactory (cid );
5553 ViewModelProvider provider = new ViewModelProvider (this , factory );
5654 ChannelHeaderViewModel channelHeaderViewModel = provider .get (ChannelHeaderViewModel .class );
5755 MessageListViewModel messageListViewModel = provider .get (MessageListViewModel .class );
5856 MessageInputViewModel messageInputViewModel = provider .get (MessageInputViewModel .class );
5957
60- // TODO set custom AttachmentViewHolderFactory
58+ // TODO set custom Imgur attachment View Holder Factory
6159
6260 // Step 2 - Bind the view and ViewModels, they are loosely coupled so it's easy to customize
63- ChannelHeaderViewModelBinding .bind (channelHeaderViewModel , channelHeaderView , this );
64- MessageListViewModelBinding .bind (messageListViewModel , messageListView , this );
65- MessageInputViewModelBinding .bind (messageInputViewModel , messageInputView , this );
61+ ChannelHeaderViewModelBinding .bind (channelHeaderViewModel , binding . messagesHeaderView , this );
62+ MessageListViewModelBinding .bind (messageListViewModel , binding . messageListView , this );
63+ MessageInputViewModelBinding .bind (messageInputViewModel , binding . messageInputView , this );
6664
6765 // Step 3 - Let the message input know when we open a thread
6866 messageListViewModel .getMode ().observe (this , mode -> {
@@ -72,10 +70,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
7270 messageInputViewModel .resetThread ();
7371 }
7472 });
73+
7574 // Step 4 - Let the message input know when we are editing a message
76- messageListView .setOnMessageEditHandler (message -> {
75+ binding . messageListView .setMessageEditHandler (message -> {
7776 messageInputViewModel .getEditMessage ().postValue (message );
78- return Unit .INSTANCE ;
7977 });
8078
8179 // Step 5 - Handle navigate up state
@@ -86,14 +84,16 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
8684 });
8785
8886 // Step 6 - Handle back button behaviour correctly when you're in a thread
89- channelHeaderView . setOnBackClick ( () -> {
87+ MessagesHeaderView . OnClickListener backHandler = () -> {
9088 messageListViewModel .onEvent (MessageListViewModel .Event .BackButtonPressed .INSTANCE );
91- return Unit .INSTANCE ;
92- });
89+ };
90+
91+ binding .messagesHeaderView .setBackButtonClickListener (backHandler );
92+
9393 getOnBackPressedDispatcher ().addCallback (this , new OnBackPressedCallback (true ) {
9494 @ Override
9595 public void handleOnBackPressed () {
96- channelHeaderView . getOnBackClick (). invoke ();
96+ backHandler . onClick ();
9797 }
9898 });
9999 }
0 commit comments