package io.coreflodev.openchat.chat; import android.os.Bundle; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.widget.EditText; import android.widget.ImageView; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import io.coreflodev.openchat.ChatApplication; import io.coreflodev.openchat.R; import io.coreflodev.openchat.api.ChatMessage; import io.coreflodev.openchat.common.mvp.MVPBaseActivity; import io.reactivex.Observable; import io.reactivex.android.MainThreadDisposable; public class ChatActivity extends MVPBaseActivity<ChatPresenter.View> implements ChatPresenter.View { @BindView(R.id.rv_chat_message_list) RecyclerView rvMessageList; @BindView(R.id.et_chat_new_message_content) EditText etMessageContent; @BindView(R.id.ib_chat_new_message_send) ImageView ivSend; @Inject ChatPresenter chatPresenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chat); ((ChatApplication) getApplication()).getChatComponent().inject(this); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); rvMessageList.setLayoutManager(linearLayoutManager); ChatAdapter chatAdapter = new ChatAdapter(); rvMessageList.setAdapter(chatAdapter); chatAdapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() { @Override public void onItemRangeInserted(int positionStart, int itemCount) { super.onItemRangeInserted(positionStart, itemCount); linearLayoutManager.scrollToPosition(positionStart); } }); addPresenter(chatPresenter, this); } @Override public void setListOfMessage(List<ChatMessage> messages) { if (rvMessageList.getAdapter() != null) { ((ChatAdapter) rvMessageList.getAdapter()).addMessages(messages); } } @Override public Observable<String> getNewMessage() { return Observable.create(emitter -> { MainThreadDisposable.verifyMainThread(); ivSend.setOnClickListener(view -> { if (!etMessageContent.getText().toString().isEmpty()) { emitter.onNext(etMessageContent.getText().toString()); etMessageContent.setText(""); } }); emitter.setDisposable(new MainThreadDisposable() { @Override protected void onDispose() { ivSend.setOnClickListener(null); } }); }); } }