Bläddra i källkod

feat: 退登问题不回登录页面,消息列表增加登录检查逻辑

DoggyZhang 1 månad sedan
förälder
incheckning
dbd7c05a61

+ 3 - 1
module/account/src/main/java/com/adealink/weparty/account/login/manager/LoginManager.kt

@@ -193,7 +193,9 @@ class LoginManager : BaseFrame<ILoginListener>(), ILoginManager {
 
     override fun onKickedOffline(reason: UserKickReason) {
         launch {
-            handleKickOut(reason)
+            withContext(Dispatcher.UI) {
+                handleKickOut(UserKickReason.REASON_LOCAL_KICK_TOKEN_EXPIRE)
+            }
         }
     }
 

+ 2 - 0
module/im/src/main/java/com/adealink/weparty/im/list/SessionListFragment.kt

@@ -23,6 +23,7 @@ import com.adealink.weparty.im.list.adapter.viewbinder.OfficialListItemViewBinde
 import com.adealink.weparty.im.list.adapter.viewbinder.SessionListItemViewBinder
 import com.adealink.weparty.im.list.viewmodel.SessionListViewModel
 import com.adealink.weparty.im.listener.IUserInfoListener
+import com.adealink.weparty.im.manager.login.imLoginManager
 import com.adealink.weparty.im.viewmodel.IMViewModelFactory
 import com.adealink.weparty.module.im.IM
 import com.adealink.weparty.module.profile.Profile
@@ -90,6 +91,7 @@ class SessionListFragment : BaseFragment(R.layout.fragment_session_list),
 
     override fun onResume() {
         super.onResume()
+        imLoginManager.checkLogin()
         presenter.loadConversation(OFFICIAL_CONVERSATION_ID)
         binding.conversationLayout.loadConversation()
         binding.conversationLayout.loadMarkedConversation()

+ 5 - 0
module/im/src/main/java/com/adealink/weparty/im/manager/login/ILoginManager.kt

@@ -14,4 +14,9 @@ interface ILoginManager : IBaseFrame<ILoginListener> {
 
     fun updateSelfUserInfo(userInfo: UserInfo?)
 
+    /**
+     * 检查登录状态,如果没有在登录,则尝试重新登录
+     */
+    fun checkLogin()
+
 }

+ 30 - 1
module/im/src/main/java/com/adealink/weparty/im/manager/login/LoginManager.kt

@@ -1,6 +1,7 @@
 package com.adealink.weparty.im.manager.login
 
 import android.app.Application
+import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.base.CommonDataNullError
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.base.fastLazy
@@ -9,6 +10,8 @@ import com.adealink.frame.log.Log
 import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.App
 import com.adealink.weparty.commonui.ext.isFailure
+import com.adealink.weparty.commonui.toast.util.showToast
+import com.adealink.weparty.im.R
 import com.adealink.weparty.im.constant.TAG_IM_LOGIN
 import com.adealink.weparty.im.data.UserInfo.Companion.loginUserInfo
 import com.adealink.weparty.im.datasource.remote.IMHttpService
@@ -64,14 +67,19 @@ class LoginManager : BaseFrame<ILoginListener>(),
         login(true)
     }
 
+    private var isIMLogin = false
     override fun login(reLogin: Boolean) {
         launch {
+            if (isIMLogin) {
+                Log.d(TAG_IM_LOGIN, "handleLogin, return, for im is login-ing")
+                return@launch
+            }
             if (!AccountModule.isLogin()) {
                 Log.d(TAG_IM_LOGIN, "login return, Account is not Login")
                 return@launch
             }
             if (TUILogin.isUserLogined()) {
-                Log.d(TAG_IM_LOGIN, "login return, TUILogin.isUserLogined")
+                Log.d(TAG_IM_LOGIN, "login return, TUILogin.isUserLogin")
                 return@launch
             }
             val uid = AccountModule.uid
@@ -87,6 +95,7 @@ class LoginManager : BaseFrame<ILoginListener>(),
             }
             val userSign = (userSignRlt as Rlt.Success).data
             val tuiLoginConfig: TUILoginConfig = TUIUtils.getLoginConfig()
+            isIMLogin = true
             LoginWrapper.loginIMSDK(
                 AppUtil.appContext,
                 IMConfig.APP_ID,
@@ -94,6 +103,7 @@ class LoginManager : BaseFrame<ILoginListener>(),
                 userSign, tuiLoginConfig,
                 object : TUICallback() {
                     override fun onSuccess() {
+                        isIMLogin = false
                         Log.i(TAG_IM_LOGIN, "login onSuccess, uid: $uid")
                         TUILogin.addLoginListener(mLoginListener)
 
@@ -101,10 +111,18 @@ class LoginManager : BaseFrame<ILoginListener>(),
                     }
 
                     override fun onError(errorCode: Int, errorMessage: String?) {
+                        isIMLogin = false
                         Log.e(
                             TAG_IM_LOGIN,
                             "login fail errorCode: $errorCode errorMessage:$errorMessage"
                         )
+                        showToast(
+                            getCompatString(
+                                R.string.im_login_fail,
+                                errorCode.toString(),
+                                errorMessage ?: ""
+                            )
+                        )
                     }
                 })
         }
@@ -156,6 +174,17 @@ class LoginManager : BaseFrame<ILoginListener>(),
         }
     }
 
+    override fun checkLogin() {
+        launch {
+            val isLogin = isLogin()
+            if (isLogin) {
+                Log.d(TAG_IM_LOGIN, "checkLogin return, for user already login")
+                return@launch
+            }
+            reLogin()
+        }
+    }
+
 
     private fun logout() {
         try {

+ 2 - 0
module/im/src/main/res/values-in/strings.xml

@@ -17,6 +17,7 @@
     <string name="im_setting_black">Blokir</string>
     <string name="im_setting_report">Laporkan</string>
     <string name="im_playmate_order_title">Pesanan Playmate</string>
+    <string name="im_playmate_reply">Balasan</string>
     <string name="im_official_msg_name">Pesan Resmi</string>
     <string name="im_send_msg_error_in_black_msg">Anda telah diblokir.</string>
     <string name="im_send_msg_error_user_not_find">Pengguna tidak ditemukan.</string>
@@ -38,4 +39,5 @@
     <string name="im_playmate_order_refund">Pengembalian dana pengguna</string>
     <string name="im_playmate_order_note">Komentar: %s</string>
     <string name="im_audio_permission_request_tips">Izin penggunaan mikrofon diperlukan untuk menggunakan fungsi suara.</string>
+    <string name="im_login_fail">Login IM gagal., %1$s, %2$s</string>
 </resources>

+ 2 - 0
module/im/src/main/res/values-zh/strings.xml

@@ -17,6 +17,7 @@
     <string name="im_setting_black">拉黑</string>
     <string name="im_setting_report">举报</string>
     <string name="im_playmate_order_title">陪玩订单</string>
+    <string name="im_playmate_reply">回应</string>
     <string name="im_official_msg_name">官方消息</string>
     <string name="im_send_msg_error_in_black_msg">对方已把你拉黑</string>
     <string name="im_send_msg_error_user_not_find">找不到用户</string>
@@ -38,4 +39,5 @@
     <string name="im_playmate_order_refund">用户退款</string>
     <string name="im_playmate_order_note">备注: %s</string>
     <string name="im_audio_permission_request_tips">使用语音功能需要授予麦克风权限</string>
+    <string name="im_login_fail">IM登录失败, %1$s, %2$s</string>
 </resources>

+ 1 - 0
module/im/src/main/res/values/strings.xml

@@ -39,4 +39,5 @@
     <string name="im_playmate_order_refund">User refund</string>
     <string name="im_playmate_order_note">Note: %s</string>
     <string name="im_audio_permission_request_tips">Microphone permissions need to be granted to use the voice function.</string>
+    <string name="im_login_fail">Login IM gagal, %1$s, %2$s</string>
 </resources>