Skip to content

Commit

Permalink
fix: Add friends multiple times bug
Browse files Browse the repository at this point in the history
  • Loading branch information
cofbro committed Dec 18, 2023
1 parent bfe4c17 commit fe7df0b
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 32 deletions.
1 change: 1 addition & 0 deletions app/src/main/java/com/cofbro/qian/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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?) {
Expand Down
12 changes: 6 additions & 6 deletions app/src/main/java/com/cofbro/qian/friend/FriendFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -301,8 +301,8 @@ class FriendFragment : BaseFragment<FriendViewModel, FragmentFriendBinding>(), 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),
Expand Down Expand Up @@ -367,7 +367,7 @@ class FriendFragment : BaseFragment<FriendViewModel, FragmentFriendBinding>(), I

private fun insertUserListIfNewFriend(
message: LCIMMessage?,
onSuccess: (String, String) -> Unit
onSuccess: (String?, String?) -> Unit
) {
friendList.forEach {
if (message?.from == (it.getString("uid") ?: "")) {
Expand Down Expand Up @@ -397,12 +397,12 @@ class FriendFragment : BaseFragment<FriendViewModel, FragmentFriendBinding>(), 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)
}
}
Expand Down
12 changes: 9 additions & 3 deletions app/src/main/java/com/cofbro/qian/friend/chat/ChatActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -130,15 +130,21 @@ class ChatActivity : BaseActivity<ChatViewModel, ActivityChatBinding>(), IMessag
}

binding?.ivSend?.setOnClickListener {
val msg = binding?.etSendMsg?.text.toString()
sendMsg(msg)
sendMsg()
}

binding?.ivMoreOption?.setOnClickListener {
showPopMenu(it)
}
}

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(
Expand Down Expand Up @@ -280,7 +286,7 @@ class ChatActivity : BaseActivity<ChatViewModel, ActivityChatBinding>(), 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) {
Expand Down
21 changes: 21 additions & 0 deletions app/src/main/java/com/cofbro/qian/friend/im/IMClientUtils.kt
Original file line number Diff line number Diff line change
Expand Up @@ -356,6 +356,27 @@ object IMClientUtils {
query.findInBackground().subscribe(DefaultObserver<List<LCObject>>(onSuccess, onError))
}

/**
* 查询特定对话
* @param friendId the objectId of your friend
* @param onSuccess success callback
* @param onError error callback
*/
fun querySpecificConversation(
friendId: String,
onSuccess: (List<LCObject>) -> Unit,
onError: (String) -> Unit
) {
val query1 = LCQuery<LCObject>("_Conversation")
query1.whereEqualTo("name", "${getCntUser()?.objectId} & $friendId")

val query2 = LCQuery<LCObject>("_Conversation")
query2.whereEqualTo("name", "$friendId & ${getCntUser()?.objectId}")

val query = LCQuery.or(listOf(query1, query2))
query.findInBackground().subscribe(DefaultObserver<List<LCObject>>(onSuccess, onError))
}

/**
* 更新Conversation的agree字段,表示已成为好友
* @param conversation conversation
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -108,18 +108,30 @@ class SearchFriendActivity : BaseActivity<SearchFriendViewModel, ActivitySearchF

private fun sendFriendRequest(uid: String) {
lifecycleScope.launch(Dispatchers.IO) {
IMClientUtils.createNewConversation(
uid,
onSuccess = {
ToastUtils.show("好友申请发送成功")
},
onError = {
ToastUtils.show("好友申请发送失败")
IMClientUtils.querySpecificConversation(uid, onSuccess = {
if (it.isEmpty()) {
sendFriendRequestReally(uid)
} else {
ToastUtils.show("您已经发送请求了,请等待对方同意")
}
)
}, onError = {
ToastUtils.show(it)
})
}
}

private fun sendFriendRequestReally(uid: String) {
IMClientUtils.createNewConversation(
uid,
onSuccess = {
ToastUtils.show("好友申请发送成功")
},
onError = {
ToastUtils.show("好友申请发送失败")
}
)
}

private fun initArgs() {
friendsList = intent.getStringArrayListExtra("friends")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
android:background="@drawable/search_user_edit_text_bg"
android:drawableEnd="@drawable/ic_search"
android:hint="@string/search_friend_hint"
android:inputType="number"
android:paddingStart="6dp"
android:paddingEnd="6dp"
android:textColor="@color/black"
Expand Down

0 comments on commit fe7df0b

Please sign in to comment.