fix(live-room): 라이브룸 입장 직후 UI 미갱신을 방지한다
This commit is contained in:
@@ -190,6 +190,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
// joinChannel 중복 호출 방지 플래그
|
||||
private var hasInvokedJoinChannel = false
|
||||
|
||||
// RTM/RTC 연결 완료 추적 플래그 (둘 다 연결되면 레이아웃 강제 갱신)
|
||||
private var isRtcJoined = false
|
||||
private var isRtmJoined = false
|
||||
|
||||
private var v2vSourceLanguage: String? = null
|
||||
private var v2vTargetLanguage: String? = null
|
||||
private var isV2vAvailable = false
|
||||
@@ -731,6 +735,41 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
}
|
||||
// endregion
|
||||
|
||||
// RTM과 RTC가 모두 연결되면 키보드를 잠깐 올렸다 내려 레이아웃을 강제 갱신한다.
|
||||
// 로딩 다이얼로그가 화면을 덮고 있는 동안 수행하여 사용자에게 변화가 보이지 않도록 한다.
|
||||
private fun tryForceLayoutRefresh(): Boolean {
|
||||
if (!isRtcJoined || !isRtmJoined) return false
|
||||
|
||||
handler.post {
|
||||
// 키보드가 화면을 밀어올리지 않도록 임시로 adjustNothing 전환
|
||||
window.setSoftInputMode(
|
||||
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
|
||||
or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING
|
||||
)
|
||||
|
||||
binding.etChat.requestFocus()
|
||||
imm.showSoftInput(binding.etChat, InputMethodManager.SHOW_IMPLICIT)
|
||||
|
||||
handler.postDelayed({
|
||||
imm.hideSoftInputFromWindow(
|
||||
binding.etChat.windowToken,
|
||||
InputMethodManager.HIDE_NOT_ALWAYS
|
||||
)
|
||||
binding.etChat.clearFocus()
|
||||
|
||||
// 원래 softInputMode 복원
|
||||
window.setSoftInputMode(
|
||||
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN
|
||||
or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
|
||||
)
|
||||
|
||||
// 키보드 트릭 완료 후 로딩 다이얼로그 dismiss
|
||||
loadingDialog.dismiss()
|
||||
}, 200)
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
private fun applyKeyboardPanInsets() {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.S) {
|
||||
return
|
||||
@@ -2188,6 +2227,8 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
override fun onJoinChannelSuccess(channel: String, uid: Int, elapsed: Int) {
|
||||
super.onJoinChannelSuccess(channel, uid, elapsed)
|
||||
Logger.e("onJoinChannelSuccess - uid: $uid, channel: $channel")
|
||||
isRtcJoined = true
|
||||
tryForceLayoutRefresh()
|
||||
}
|
||||
|
||||
override fun onStreamMessage(uid: Int, streamId: Int, data: ByteArray?) {
|
||||
@@ -2834,8 +2875,10 @@ class LiveRoomActivity : BaseActivity<ActivityLiveRoomBinding>(ActivityLiveRoomB
|
||||
rtmToken = roomInfo.rtmToken,
|
||||
channelName = roomInfo.channelName,
|
||||
rtmChannelJoinSuccess = {
|
||||
handler.post {
|
||||
loadingDialog.dismiss()
|
||||
isRtmJoined = true
|
||||
// 두 채널 모두 연결 시 키보드 트릭 후 dismiss, 아니면 즉시 dismiss
|
||||
if (!tryForceLayoutRefresh()) {
|
||||
handler.post { loadingDialog.dismiss() }
|
||||
}
|
||||
|
||||
if (userId == roomInfo.creatorId) {
|
||||
|
||||
Reference in New Issue
Block a user