package org.mercury_im.messenger.ui.chat; import android.os.Bundle; import android.util.Log; import android.view.Menu; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.LiveData; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import org.jxmpp.jid.EntityBareJid; import org.jxmpp.jid.impl.JidCreate; import org.mercury_im.messenger.MercuryImApplication; import org.mercury_im.messenger.R; import org.mercury_im.messenger.persistence.model.AccountModel; import org.mercury_im.messenger.persistence.model.MessageModel; import org.mercury_im.messenger.persistence.repository.AccountRepository; import org.mercury_im.messenger.persistence.repository.MessageRepository; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; import io.reactivex.Maybe; public class ChatActivity extends AppCompatActivity implements ChatInputFragment.OnChatInputActionListener { public static final String EXTRA_JID = "JID"; public static final String EXTRA_ACCOUNT = "ACCOUNT"; @Inject AccountRepository accountRepository; @Inject MessageRepository messageRepository; @BindView(R.id.toolbar) Toolbar toolbar; @BindView(R.id.recyclerView) RecyclerView recyclerView; private ChatViewModel chatViewModel; private EntityBareJid jid; private long accountId; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Log.d("Mercury", "onCreate"); setContentView(R.layout.activity_chat); ButterKnife.bind(this); setSupportActionBar(toolbar); MercuryImApplication.getApplication().getAppComponent().inject(this); ChatRecyclerViewAdapter adapter = new ChatRecyclerViewAdapter(); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); if (savedInstanceState == null) { savedInstanceState = getIntent().getExtras(); if (savedInstanceState == null) return; } String jidString = savedInstanceState.getString(EXTRA_JID); if (jidString != null) { getSupportActionBar().setTitle(jidString); jid = JidCreate.entityBareFromOrThrowUnchecked(jidString); accountId = savedInstanceState.getLong(EXTRA_ACCOUNT); Maybe accountModel = accountRepository.getAccount(accountId); chatViewModel = ViewModelProviders.of(this).get(ChatViewModel.class); /* accountModel.observe(this, new Observer() { @Override public void onChanged(AccountModel accountModel) { chatViewModel.init(accountModel, jid); } }); LiveData> messages = messageRepository.getAllMessagesOfChat(accountId, jid); messages.observe(this, new Observer>() { @Override public void onChanged(List messageModels) { Log.d(MercuryImApplication.TAG, "Updating messages: " + messageModels.size()); adapter.updateMessages(messageModels); recyclerView.scrollToPosition(messageModels.size() - 1); } }); getSupportFragmentManager().beginTransaction().replace(R.id.stub_compose, ChatInputFragment.newInstance()) .commitAllowingStateLoss(); */ } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_chat, menu); return true; } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { outState.putString(EXTRA_JID, jid.toString()); outState.putLong(EXTRA_ACCOUNT, accountId); super.onSaveInstanceState(outState); } @Override public void onButtonMediaClicked() { } @Override public void onComposingBodyChanged(String body) { } @Override public void onComposingBodySend(String body) { String msg = body.trim(); if (msg.isEmpty()) { return; } /* new Thread() { @Override public void run() { try { ChatManager.getInstanceFor(connectionService.getConnection(accountId).getConnection()) .chatWith(jid).send(msg); } catch (SmackException.NotConnectedException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); */ } }