Made unread messages counting

This commit is contained in:
ChronosX88 2019-05-24 20:51:05 +04:00
parent 88c061da45
commit ba2fbc2d0e
8 changed files with 34 additions and 17 deletions

View File

@ -84,4 +84,8 @@ public class LocalDBWrapper {
long messageID = dbInstance.messageDao().getLastMessageByChatID(chatID);
return getMessageByID(messageID);
}
public static void updateChatUnreadMessagesCount(String chatID, int unreadMessagesCount) {
dbInstance.chatDao().updateUnreadMessagesCount(chatID, unreadMessagesCount);
}
}

View File

@ -33,12 +33,15 @@ public class NetworkHandler implements IncomingChatMessageListener {
@Override
public void newIncomingMessage(EntityBareJid from, Message message, Chat chat) {
String chatID = chat.getXmppAddressOfChatPartner().asUnescapedString();
if(LocalDBWrapper.getChatByChatID(from.asEntityBareJidString()) == null) {
LocalDBWrapper.createChatEntry(chat.getXmppAddressOfChatPartner().asUnescapedString(), chat.getXmppAddressOfChatPartner().asBareJid().asUnescapedString());
LocalDBWrapper.createChatEntry(chatID, chat.getXmppAddressOfChatPartner().asBareJid().asUnescapedString());
}
long messageID = LocalDBWrapper.createMessageEntry(chat.getXmppAddressOfChatPartner().asUnescapedString(), from.asUnescapedString(), TrueTime.now().getTime(), message.getBody(), true, false);
long messageID = LocalDBWrapper.createMessageEntry(chatID, from.asUnescapedString(), TrueTime.now().getTime(), message.getBody(), true, false);
int newUnreadMessagesCount = LocalDBWrapper.getChatByChatID(chatID).unreadMessagesCount + 1;
LocalDBWrapper.updateChatUnreadMessagesCount(chatID, newUnreadMessagesCount);
EventBus.getDefault().post(new NewMessageEvent(chat.getXmppAddressOfChatPartner().toString(), messageID));
EventBus.getDefault().post(new LastMessageEvent(chat.getXmppAddressOfChatPartner().toString(), new GenericMessage(LocalDBWrapper.getMessageByID(messageID))));
EventBus.getDefault().post(new NewMessageEvent(chatID, messageID));
EventBus.getDefault().post(new LastMessageEvent(chatID, new GenericMessage(LocalDBWrapper.getMessageByID(messageID))));
}
}

View File

@ -33,12 +33,10 @@ import io.github.chronosx88.influence.models.roomEntities.MessageEntity;
public class ChatLogic implements CoreContracts.IChatLogicContract {
private String chatID;
private ChatEntity chatEntity;
//private KeyPairManager keyPairManager;
public ChatLogic(ChatEntity chatEntity) {
this.chatEntity = chatEntity;
this.chatID = chatEntity.jid;
//this.keyPairManager = new KeyPairManager();
}
@Override

View File

@ -75,4 +75,8 @@ public class GenericDialog implements IDialog {
public int getUnreadCount() {
return unreadMessagesCount;
}
public void setUnreadMessagesCount(int unreadMessagesCount) {
this.unreadMessagesCount = unreadMessagesCount;
}
}

View File

@ -44,4 +44,7 @@ public interface ChatDao {
@Query("DELETE FROM chats")
void clearChats();
@Query("UPDATE chats SET unreadMessagesCount = :unreadMessagesCount WHERE jid = :chatID")
void updateUnreadMessagesCount(String chatID, int unreadMessagesCount);
}

View File

@ -74,7 +74,7 @@ class ChatPresenter(private val view: CoreContracts.IChatViewContract, private v
}
override fun onDestroy() {
//
EventBus.getDefault().unregister(this)
}
@Subscribe(threadMode = ThreadMode.MAIN)
@ -82,6 +82,7 @@ class ChatPresenter(private val view: CoreContracts.IChatViewContract, private v
if(event.chatID.equals(chatEntity!!.jid)) {
val messageID = event.messageID
chatAdapter.addToStart(GenericMessage(LocalDBWrapper.getMessageByID(messageID)), true)
LocalDBWrapper.updateChatUnreadMessagesCount(chatEntity.jid, 0)
}
}
}

View File

@ -17,27 +17,17 @@
package io.github.chronosx88.influence.presenters;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import androidx.appcompat.app.AlertDialog;
import com.amulyakhare.textdrawable.TextDrawable;
import com.amulyakhare.textdrawable.util.ColorGenerator;
import com.stfalcon.chatkit.dialogs.DialogsListAdapter;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import org.jivesoftware.smack.roster.RosterEntry;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;
import org.jxmpp.stringprep.XmppStringprepException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import io.github.chronosx88.influence.R;
@ -115,6 +105,8 @@ public class DialogListPresenter implements CoreContracts.IDialogListPresenterCo
intent.putExtra("chatName", LocalDBWrapper.getChatByChatID(chatID).chatName);
intent.putExtra("chatAvatar", AppHelper.avatarsCache.get(chatID));
view.startActivity(intent);
setUnreadMessagesCount(chatID, 0);
LocalDBWrapper.updateChatUnreadMessagesCount(chatID, 0);
}
@Subscribe
@ -161,6 +153,17 @@ public class DialogListPresenter implements CoreContracts.IDialogListPresenterCo
@Subscribe(threadMode = ThreadMode.MAIN)
public void onLastMessage(LastMessageEvent event) {
dialogListAdapter.updateDialogWithMessage(event.chatID, event.message);
GenericDialog dialog = new GenericDialog(LocalDBWrapper.getChatByChatID(event.chatID));
dialog.setLastMessage(event.message);
dialogListAdapter.updateItemById(dialog);
dialogListAdapter.sort(dialogComparator);
}
private void setUnreadMessagesCount(String chatID, int unreadMessagesCount) {
GenericDialog dialog = dialogListAdapter.getItemById(chatID);
if(dialog != null) {
dialog.setUnreadMessagesCount(unreadMessagesCount);
dialogListAdapter.updateItemById(dialog);
}
}
}

View File

@ -84,6 +84,7 @@ class ChatActivity : AppCompatActivity(), CoreContracts.IChatViewContract {
override fun onDestroy() {
super.onDestroy()
presenter!!.onDestroy()
presenter = null
}
override fun setAdapter(adapter: MessagesListAdapter<GenericMessage>) {