Fixed crash when rotating device while message's reactions bottom sheet is visible

This commit is contained in:
Sylvain Berfini 2023-09-07 11:31:45 +02:00
parent 0deb4d5c11
commit 928a4f129b
2 changed files with 41 additions and 28 deletions

View file

@ -28,16 +28,17 @@ import com.google.android.material.tabs.TabLayout
import org.linphone.R
import org.linphone.activities.main.chat.data.ChatMessageReactionsListData
import org.linphone.core.ChatMessage
import org.linphone.core.tools.Log
import org.linphone.databinding.ChatMessageReactionsListDialogBinding
import org.linphone.utils.AppUtils
class ChatMessageReactionsListDialogFragment(
private val chatMessage: ChatMessage
) : BottomSheetDialogFragment() {
class ChatMessageReactionsListDialogFragment() : BottomSheetDialogFragment() {
companion object {
const val TAG = "ChatMessageReactionsListDialogFragment"
}
private lateinit var binding: ChatMessageReactionsListDialogBinding
private lateinit var data: ChatMessageReactionsListData
override fun onCreateView(
@ -45,38 +46,43 @@ class ChatMessageReactionsListDialogFragment(
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val binding = ChatMessageReactionsListDialogBinding.inflate(layoutInflater)
binding = ChatMessageReactionsListDialogBinding.inflate(layoutInflater)
binding.lifecycleOwner = viewLifecycleOwner
if (::data.isInitialized) {
binding.data = data
data = ChatMessageReactionsListData(chatMessage)
binding.data = data
data.reactions.observe(viewLifecycleOwner) {
binding.tabs.removeAllTabs()
binding.tabs.addTab(
binding.tabs.newTab().setText(
AppUtils.getStringWithPlural(
R.plurals.chat_message_reactions_count,
it.orEmpty().size
)
).setId(0)
)
var index = 1
data.reactionsMap.forEach { (key, value) ->
data.reactions.observe(viewLifecycleOwner) {
binding.tabs.removeAllTabs()
binding.tabs.addTab(
binding.tabs.newTab().setText("$key $value").setId(index).setTag(key)
binding.tabs.newTab().setText(
AppUtils.getStringWithPlural(
R.plurals.chat_message_reactions_count,
it.orEmpty().size
)
).setId(0)
)
index += 1
var index = 1
data.reactionsMap.forEach { (key, value) ->
binding.tabs.addTab(
binding.tabs.newTab().setText("$key $value").setId(index).setTag(key)
)
index += 1
}
}
} else {
Log.w("$TAG View created but no message has been set, dismissing...")
dismiss()
}
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
override fun onTabSelected(tab: TabLayout.Tab) {
if (tab.id == 0) {
data.updateFilteredReactions("")
} else {
data.updateFilteredReactions(tab.tag.toString())
if (::data.isInitialized) {
if (tab.id == 0) {
data.updateFilteredReactions("")
} else {
data.updateFilteredReactions(tab.tag.toString())
}
}
}
@ -90,8 +96,14 @@ class ChatMessageReactionsListDialogFragment(
return binding.root
}
fun setMessage(chatMessage: ChatMessage) {
data = ChatMessageReactionsListData(chatMessage)
}
override fun onDestroy() {
data.onDestroy()
if (::data.isInitialized) {
data.onDestroy()
}
super.onDestroy()
}
}

View file

@ -636,7 +636,8 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
viewLifecycleOwner
) {
it.consume { message ->
val modalBottomSheet = ChatMessageReactionsListDialogFragment(message)
val modalBottomSheet = ChatMessageReactionsListDialogFragment()
modalBottomSheet.setMessage(message)
modalBottomSheet.show(
parentFragmentManager,
ChatMessageReactionsListDialogFragment.TAG