From fe7df0b34d623f5d158469f72e1ee21d890205f5 Mon Sep 17 00:00:00 2001 From: cofbro <1808413743@qq.com> Date: Mon, 18 Dec 2023 23:47:58 +0800 Subject: [PATCH] fix: Add friends multiple times bug --- app/src/main/java/com/cofbro/qian/App.kt | 1 + .../com/cofbro/qian/friend/FriendFragment.kt | 12 ++++---- .../cofbro/qian/friend/chat/ChatActivity.kt | 12 ++++++-- .../cofbro/qian/friend/im/IMClientUtils.kt | 21 ++++++++++++++ .../qian/friend/search/DelayedTextWatcher.kt | 25 ++++++++--------- .../friend/search/SearchFriendActivity.kt | 28 +++++++++++++------ .../page/layout/activity_search_friend.xml | 1 - 7 files changed, 68 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/com/cofbro/qian/App.kt b/app/src/main/java/com/cofbro/qian/App.kt index ba813a4a..e729995b 100644 --- a/app/src/main/java/com/cofbro/qian/App.kt +++ b/app/src/main/java/com/cofbro/qian/App.kt @@ -26,6 +26,7 @@ class App : Application(), Application.ActivityLifecycleCallbacks { val filter = IntentFilter(Intent.ACTION_PACKAGE_REPLACED) filter.addDataScheme("package") registerReceiver(installCompleteReceiver, filter) + //LeanCloud.initializeSecurely(this, "C8NqVi2SeysVgB2AImB7CAFB-gzGzoHsz", "https://c8nqvi2s.lc-cn-n1-shared.com") } override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { diff --git a/app/src/main/java/com/cofbro/qian/friend/FriendFragment.kt b/app/src/main/java/com/cofbro/qian/friend/FriendFragment.kt index 97fbd156..da187a3d 100644 --- a/app/src/main/java/com/cofbro/qian/friend/FriendFragment.kt +++ b/app/src/main/java/com/cofbro/qian/friend/FriendFragment.kt @@ -301,8 +301,8 @@ class FriendFragment : BaseFragment(), I // 根据uid查询当前聊天user queryContainsUserInfo(queryUserInfoUid, onSuccess = { it.forEachIndexed { index, user -> - val username = user["username"].toString() - val url = user["avatar"].toString() + val username = user["username"]?.toString() ?: "" + val url = user["avatar"]?.toString() ?: "" val data = MsgFactory.createConversationMsg( convList.getOrNull(index), @@ -367,7 +367,7 @@ class FriendFragment : BaseFragment(), I private fun insertUserListIfNewFriend( message: LCIMMessage?, - onSuccess: (String, String) -> Unit + onSuccess: (String?, String?) -> Unit ) { friendList.forEach { if (message?.from == (it.getString("uid") ?: "")) { @@ -397,12 +397,12 @@ class FriendFragment : BaseFragment(), I private fun insertMessageAccordingToConv( conversation: LCIMConversation?, - username: String = "", - url: String = "" + username: String? = "", + url: String? = "" ) { if (!notifyConversationMsgChanged(conversation)) { // 如果找不到一样的,说明列表中没有该对话,应该将其插入对话列表中 - val data = MsgFactory.createConversationMsg(conversation, url, username) + val data = MsgFactory.createConversationMsg(conversation, url ?: "", username ?: "") insertMessageConv(data) } } diff --git a/app/src/main/java/com/cofbro/qian/friend/chat/ChatActivity.kt b/app/src/main/java/com/cofbro/qian/friend/chat/ChatActivity.kt index 271323a1..e9c2e579 100644 --- a/app/src/main/java/com/cofbro/qian/friend/chat/ChatActivity.kt +++ b/app/src/main/java/com/cofbro/qian/friend/chat/ChatActivity.kt @@ -130,8 +130,7 @@ class ChatActivity : BaseActivity(), IMessag } binding?.ivSend?.setOnClickListener { - val msg = binding?.etSendMsg?.text.toString() - sendMsg(msg) + sendMsg() } binding?.ivMoreOption?.setOnClickListener { @@ -139,6 +138,13 @@ class ChatActivity : BaseActivity(), IMessag } } + private fun sendMsg() { + val msg = binding?.etSendMsg?.text.toString() + if (msg.isNotEmpty()) { + sendMsg(msg) + } + } + private fun registerKeyboardHeight() { val layout = binding?.root?.layoutParams as? MarginLayoutParams KeyboardUtil.registerKeyboardHeightListener( @@ -280,7 +286,7 @@ class ChatActivity : BaseActivity(), IMessag private fun showPopMenu(view: View) { val menu = PopupMenu(this, view) - menu.gravity = Gravity.RIGHT + menu.gravity = Gravity.END menu.menuInflater.inflate(R.menu.pop_request_option, menu.menu) menu.setOnMenuItemClickListener { if (it.itemId == R.id.pop_request_sign) { diff --git a/app/src/main/java/com/cofbro/qian/friend/im/IMClientUtils.kt b/app/src/main/java/com/cofbro/qian/friend/im/IMClientUtils.kt index 8fe1ab1f..1740f8cd 100644 --- a/app/src/main/java/com/cofbro/qian/friend/im/IMClientUtils.kt +++ b/app/src/main/java/com/cofbro/qian/friend/im/IMClientUtils.kt @@ -356,6 +356,27 @@ object IMClientUtils { query.findInBackground().subscribe(DefaultObserver>(onSuccess, onError)) } + /** + * 查询特定对话 + * @param friendId the objectId of your friend + * @param onSuccess success callback + * @param onError error callback + */ + fun querySpecificConversation( + friendId: String, + onSuccess: (List) -> Unit, + onError: (String) -> Unit + ) { + val query1 = LCQuery("_Conversation") + query1.whereEqualTo("name", "${getCntUser()?.objectId} & $friendId") + + val query2 = LCQuery("_Conversation") + query2.whereEqualTo("name", "$friendId & ${getCntUser()?.objectId}") + + val query = LCQuery.or(listOf(query1, query2)) + query.findInBackground().subscribe(DefaultObserver>(onSuccess, onError)) + } + /** * 更新Conversation的agree字段,表示已成为好友 * @param conversation conversation diff --git a/app/src/main/java/com/cofbro/qian/friend/search/DelayedTextWatcher.kt b/app/src/main/java/com/cofbro/qian/friend/search/DelayedTextWatcher.kt index 0dcb505e..63baf10c 100644 --- a/app/src/main/java/com/cofbro/qian/friend/search/DelayedTextWatcher.kt +++ b/app/src/main/java/com/cofbro/qian/friend/search/DelayedTextWatcher.kt @@ -5,7 +5,6 @@ import android.text.TextWatcher import android.widget.EditText import android.os.Handler import android.os.Looper -import android.util.Log class DelayedTextWatcher( private val editText: EditText, @@ -32,20 +31,18 @@ class DelayedTextWatcher( lastInputTime = System.currentTimeMillis() return } - val lastChar = input.last() - if (Character.isDigit(lastChar)) { - val currentTime = System.currentTimeMillis() - val timeSinceLastInput = currentTime - lastInputTime - if (timeSinceLastInput >= delayMillis) { - search = true - action.invoke() - } else { - search = false - val delay = delayMillis - timeSinceLastInput - handler.postDelayed({ action.invoke() }, delay) - } - lastInputTime = currentTime + //val lastChar = input.last() + val currentTime = System.currentTimeMillis() + val timeSinceLastInput = currentTime - lastInputTime + if (timeSinceLastInput >= delayMillis) { + search = true + action.invoke() + } else { + search = false + val delay = delayMillis - timeSinceLastInput + handler.postDelayed({ action.invoke() }, delay) } + lastInputTime = currentTime } } diff --git a/app/src/main/java/com/cofbro/qian/friend/search/SearchFriendActivity.kt b/app/src/main/java/com/cofbro/qian/friend/search/SearchFriendActivity.kt index 776c5419..eb659edc 100644 --- a/app/src/main/java/com/cofbro/qian/friend/search/SearchFriendActivity.kt +++ b/app/src/main/java/com/cofbro/qian/friend/search/SearchFriendActivity.kt @@ -108,18 +108,30 @@ class SearchFriendActivity : BaseActivity