Mercury-IM/app/src/main/java/org/mercury_im/messenger/ui/chat/ChatActivity.java

114 lines
3.9 KiB
Java
Raw Normal View History

2019-05-13 03:19:17 +02:00
package org.mercury_im.messenger.ui.chat;
2019-04-22 04:54:02 +02:00
import android.os.Bundle;
2019-06-21 03:45:33 +02:00
import android.util.Log;
2019-04-22 04:54:02 +02:00
2019-06-21 03:45:33 +02:00
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import org.jivesoftware.smack.SmackException;
import org.jivesoftware.smack.chat2.ChatManager;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.mercury_im.messenger.MercuryImApplication;
2019-05-13 03:19:17 +02:00
import org.mercury_im.messenger.R;
2019-06-21 03:45:33 +02:00
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 org.mercury_im.messenger.ui.BindingActivity;
import java.util.List;
import javax.inject.Inject;
public class ChatActivity extends BindingActivity implements ChatInputFragment.OnChatInputActionListener {
@Inject
AccountRepository accountRepository;
@Inject
MessageRepository messageRepository;
private EntityBareJid jid;
2019-04-22 04:54:02 +02:00
2019-06-21 03:45:33 +02:00
private long accountId;
2019-04-22 04:54:02 +02:00
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chat);
2019-06-21 03:45:33 +02:00
MercuryImApplication.getApplication().getAppComponent().inject(this);
RecyclerView recyclerView = findViewById(R.id.recyclerView);
ChatRecyclerViewAdapter adapter = new ChatRecyclerViewAdapter();
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
if (savedInstanceState == null) {
savedInstanceState = getIntent().getExtras();
}
String jidString = savedInstanceState.getString("JID");
if (jidString != null) {
jid = JidCreate.entityBareFromOrThrowUnchecked(jidString);
accountId = savedInstanceState.getLong("ACCOUNT");
LiveData<AccountModel> accountModel = accountRepository.getAccount(accountId);
ChatViewModel viewModel = ViewModelProviders.of(this).get(ChatViewModel.class);
accountModel.observe(this, new Observer<AccountModel>() {
@Override
public void onChanged(AccountModel accountModel) {
viewModel.init(accountModel, jid);
}
});
LiveData<List<MessageModel>> messages = messageRepository.getAllMessagesFrom(accountId, jid);
messages.observe(this, new Observer<List<MessageModel>>() {
@Override
public void onChanged(List<MessageModel> messageModels) {
Log.d(MercuryImApplication.TAG, "Updating messages: " + messageModels.size());
adapter.updateMessages(messageModels);
}
});
getSupportFragmentManager().beginTransaction().replace(R.id.fab, ChatInputFragment.newInstance())
.commitAllowingStateLoss();
}
2019-06-06 23:32:41 +02:00
}
@Override
public void onButtonMediaClicked() {
}
@Override
public void onComposingBodyChanged(String body) {
}
@Override
public void onComposingBodySend(String body) {
2019-06-21 03:45:33 +02:00
new Thread() {
@Override
public void run() {
try {
ChatManager.getInstanceFor(connectionService.getConnection(accountId).getConnection())
.chatWith(jid).send(body);
} catch (SmackException.NotConnectedException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
2019-06-06 23:32:41 +02:00
2019-04-22 04:54:02 +02:00
}
}