From 4a8749349f1e013196a239cc8a2961ae4471168f Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Mon, 3 Jul 2017 23:35:16 +0200 Subject: [PATCH] Changing incoming message states from unseen/seen to fresh/noticed/seen. --- CHANGELOG.md | 5 +++ MessengerProj/jni/mrwrapper.c | 20 ++++++----- .../messenger/AutoMessageHeardReceiver.java | 2 +- .../messenger/AutoMessageReplyReceiver.java | 2 +- .../main/java/com/b44t/messenger/MrChat.java | 5 +-- .../java/com/b44t/messenger/MrMailbox.java | 6 ++-- .../main/java/com/b44t/messenger/MrMsg.java | 5 ++- .../messenger/NotificationsController.java | 2 +- .../com/b44t/messenger/WearReplyReceiver.java | 2 +- .../ui/Adapters/DialogsSearchAdapter.java | 2 +- .../java/com/b44t/ui/Cells/DialogCell.java | 2 +- .../main/java/com/b44t/ui/ChatActivity.java | 36 +++++++++++++++---- 12 files changed, 58 insertions(+), 31 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf57a7818..2f6c9444a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Delta Chat Changelog +## UNRELEASED + +* Improve encryption dialog in profile +* Update Russian translation + ## v0.9.2 2017-06-28 diff --git a/MessengerProj/jni/mrwrapper.c b/MessengerProj/jni/mrwrapper.c index 50eec3317..d7b3252a8 100644 --- a/MessengerProj/jni/mrwrapper.c +++ b/MessengerProj/jni/mrwrapper.c @@ -363,15 +363,19 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getChatIdByContactId(JNIEnv *en } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_markseenMsg(JNIEnv *env, jclass cls, jint msg_id) +JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) { - return (jint)mrmailbox_markseen_msg(get_mrmailbox_t(env, cls), msg_id); + int msg_ids_cnt; + const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); + jint ret = mrmailbox_markseen_msgs(get_mrmailbox_t(env, cls), msg_ids_ptr, msg_ids_cnt); + free(msg_ids_ptr); + return ret; } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_markseenChat(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id) { - return (jlong)mrmailbox_markseen_chat(get_mrmailbox_t(env, cls), chat_id); + return (jlong)mrmailbox_marknoticed_chat(get_mrmailbox_t(env, cls), chat_id); } @@ -676,9 +680,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrChat_MrChatGetTotalMsgCount(JNIEnv *env } -JNIEXPORT jint Java_com_b44t_messenger_MrChat_MrChatGetUnseenCount(JNIEnv *env, jclass c, jlong hChat) +JNIEXPORT jint Java_com_b44t_messenger_MrChat_getFreshMsgCount(JNIEnv *env, jclass cls) { - return mrchat_get_unseen_count((mrchat_t*)hChat); + return mrchat_get_fresh_msg_count(get_mrchat_t(env, cls)); } @@ -764,9 +768,9 @@ JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jc } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getUnseenMsgs(JNIEnv *env, jclass cls) +JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getFreshMsgs(JNIEnv *env, jclass cls) { - carray* ca = mrmailbox_get_unseen_msgs(get_mrmailbox_t(env, cls)); + carray* ca = mrmailbox_get_fresh_msgs(get_mrmailbox_t(env, cls)); return carray2jintArray_n_carray_free(env, ca); } diff --git a/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageHeardReceiver.java b/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageHeardReceiver.java index e0cb72c15..e859cbbd8 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageHeardReceiver.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageHeardReceiver.java @@ -38,7 +38,7 @@ public class AutoMessageHeardReceiver extends BroadcastReceiver { if (dialog_id == 0 || max_id == 0) { return; } - MrMailbox.markseenChat((int)dialog_id); + MrMailbox.marknoticedChat((int)dialog_id); NotificationsController.getInstance().removeSeenMessages(); } } diff --git a/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageReplyReceiver.java b/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageReplyReceiver.java index 447f60686..d2b744b07 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageReplyReceiver.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/AutoMessageReplyReceiver.java @@ -49,7 +49,7 @@ public class AutoMessageReplyReceiver extends BroadcastReceiver { return; } SendMessagesHelper.getInstance().sendMessageText(text.toString(), dialog_id, null); - MrMailbox.markseenChat((int)dialog_id); + MrMailbox.marknoticedChat((int)dialog_id); NotificationsController.getInstance().removeSeenMessages(); } } diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MrChat.java b/MessengerProj/src/main/java/com/b44t/messenger/MrChat.java index b97221fa2..ac7f247fd 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MrChat.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MrChat.java @@ -68,9 +68,7 @@ public class MrChat { public int setDraft(String draft/*NULL=delete*/, long replyToMsgId) { return MrChatSetDraft(m_hChat, draft, replyToMsgId); } - public int getUnseenCount() { - return MrChatGetUnseenCount(m_hChat); - } + public native int getFreshMsgCount(); public int getTotalMsgCount() { return MrChatGetTotalMsgCount(m_hChat); @@ -86,7 +84,6 @@ public class MrChat { private native static long MrChatGetDraftTimestamp (long hChat); // returns 0 for "no draft" private native static int MrChatGetDraftReplyToMsgId (long hChat); // returns 0 for "no draft" private native static int MrChatSetDraft (long hChat, String draft/*NULL=delete*/, long replyToMsgId); - private native static int MrChatGetUnseenCount (long hChat); private native static int MrChatGetTotalMsgCount (long hChat); diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java b/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java index fd38ef9db..0163fe46a 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MrMailbox.java @@ -123,8 +123,8 @@ public class MrMailbox { return new MrChat(MrMailboxGetChat(m_hMailbox, chat_id)); } - public native static int markseenMsg (int msg_id); - public native static int markseenChat (int chat_id); + public native static int markseenMsgs (int msg_ids[]); + public native static int marknoticedChat (int chat_id); public native static int getChatIdByContactId (int contact_id); public native static int createChatByContactId(int contact_id); // returns chat_id @@ -140,7 +140,7 @@ public class MrMailbox { public native static int[] searchMsgs(int chat_id, String query); - public native static int[] getUnseenMsgs(); + public native static int[] getFreshMsgs(); public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type); public native static int getNextMedia(int msg_id, int dir); diff --git a/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java b/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java index f1b0fcd6d..3b8fd9d2c 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/MrMsg.java @@ -48,10 +48,9 @@ public class MrMsg { public final static int MR_MSG_FILE = 60; public final static int MR_STATE_UNDEFINED = 0; - public final static int MR_IN_UNREAD = 10; - public final static int MR_IN_READ = 16; + public final static int MR_IN_FRESH = 10; + public final static int MR_IN_NOTICED = 13; public final static int MR_OUT_PENDING = 20; - public final static int MR_OUT_SENDING = 22; public final static int MR_OUT_ERROR = 24; public final static int MR_OUT_DELIVERED = 26; public final static int MR_OUT_READ = 28; diff --git a/MessengerProj/src/main/java/com/b44t/messenger/NotificationsController.java b/MessengerProj/src/main/java/com/b44t/messenger/NotificationsController.java index fecee941f..be02acb3d 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/NotificationsController.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/NotificationsController.java @@ -502,7 +502,7 @@ public class NotificationsController { } // get all unread messages as a hash - int unseenArr[] = MrMailbox.getUnseenMsgs(); + int unseenArr[] = MrMailbox.getFreshMsgs(); int unseenCnt = unseenArr.length; HashMap unseenHash = new HashMap<>(); for( int i = 0; i < unseenCnt; i++ ) { diff --git a/MessengerProj/src/main/java/com/b44t/messenger/WearReplyReceiver.java b/MessengerProj/src/main/java/com/b44t/messenger/WearReplyReceiver.java index f614c574d..a05dbe3d6 100644 --- a/MessengerProj/src/main/java/com/b44t/messenger/WearReplyReceiver.java +++ b/MessengerProj/src/main/java/com/b44t/messenger/WearReplyReceiver.java @@ -49,7 +49,7 @@ public class WearReplyReceiver extends BroadcastReceiver { return; } SendMessagesHelper.getInstance().sendMessageText(text.toString(), dialog_id, null); - MrMailbox.markseenChat((int)dialog_id); + MrMailbox.marknoticedChat((int)dialog_id); NotificationsController.getInstance().removeSeenMessages(); } } diff --git a/MessengerProj/src/main/java/com/b44t/ui/Adapters/DialogsSearchAdapter.java b/MessengerProj/src/main/java/com/b44t/ui/Adapters/DialogsSearchAdapter.java index a6a26c0e0..2283bd1ed 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/Adapters/DialogsSearchAdapter.java +++ b/MessengerProj/src/main/java/com/b44t/ui/Adapters/DialogsSearchAdapter.java @@ -169,7 +169,7 @@ public class DialogsSearchAdapter extends RecyclerView.Adapter { MrPoortext mrSummary = mrMsg.getSummary(mrChat); cell.setDialog(mrChat, mrSummary, -1, - mrMsg.getState()==MrMsg.MR_IN_UNREAD /*show unread count only if the message itself is unread*/ ); + mrMsg.getState()==MrMsg.MR_IN_FRESH /*show unread count only if the message itself is unread*/ ); } } break; diff --git a/MessengerProj/src/main/java/com/b44t/ui/Cells/DialogCell.java b/MessengerProj/src/main/java/com/b44t/ui/Cells/DialogCell.java index 11ec09058..cf9264792 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/Cells/DialogCell.java +++ b/MessengerProj/src/main/java/com/b44t/ui/Cells/DialogCell.java @@ -526,7 +526,7 @@ public class DialogCell extends BaseCell { public void update(int mask) { if( m_showUnreadCount ) { - unreadCount = m_mrChat.getUnseenCount(); + unreadCount = m_mrChat.getFreshMsgCount(); } if (mask != 0) { diff --git a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java index 13938355f..f3c689b64 100644 --- a/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java +++ b/MessengerProj/src/main/java/com/b44t/ui/ChatActivity.java @@ -47,6 +47,7 @@ import android.text.TextUtils; import android.text.style.ClickableSpan; import android.text.style.URLSpan; import android.util.Log; +import android.util.SparseIntArray; import android.util.TypedValue; import android.view.Gravity; import android.view.MotionEvent; @@ -152,7 +153,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not private boolean paused = true; private boolean wasPaused = false; - private boolean readWhenResume = false; + private SparseIntArray markseenWhenResume = new SparseIntArray(); private boolean scrollToTopOnResume; private boolean forceScrollToTop; @@ -325,7 +326,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not AndroidUtilities.runOnUIThread(new Runnable() { @Override public void run() { - MrMailbox.markseenChat((int)dialog_id); + MrMailbox.marknoticedChat((int)dialog_id); NotificationsController.getInstance().removeSeenMessages(); } }, 700); @@ -1913,9 +1914,11 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not if (markAsRead) { if (paused) { - readWhenResume = true; + markseenWhenResume.put(evt_msg_id, 1); } else { - MrMailbox.markseenMsg(evt_msg_id); + int msg_ids[] = new int[1]; + msg_ids[0] = evt_msg_id; + MrMailbox.markseenMsgs(msg_ids); NotificationsController.getInstance().removeSeenMessages(); } } @@ -2251,9 +2254,15 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not scrollToMessage = null; } paused = false; - if (readWhenResume ) { - readWhenResume = false; - MrMailbox.markseenChat((int)dialog_id); + + int markseenWhenResumeCnt = markseenWhenResume.size(); + if (markseenWhenResumeCnt>0 ) { + int msg_ids[] = new int[markseenWhenResumeCnt]; + for(int i=0; i