Fixed crash when rotating device while message's reactions bottom sheet is visible
This commit is contained in:
parent
0deb4d5c11
commit
928a4f129b
2 changed files with 41 additions and 28 deletions
|
@ -28,16 +28,17 @@ import com.google.android.material.tabs.TabLayout
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.main.chat.data.ChatMessageReactionsListData
|
import org.linphone.activities.main.chat.data.ChatMessageReactionsListData
|
||||||
import org.linphone.core.ChatMessage
|
import org.linphone.core.ChatMessage
|
||||||
|
import org.linphone.core.tools.Log
|
||||||
import org.linphone.databinding.ChatMessageReactionsListDialogBinding
|
import org.linphone.databinding.ChatMessageReactionsListDialogBinding
|
||||||
import org.linphone.utils.AppUtils
|
import org.linphone.utils.AppUtils
|
||||||
|
|
||||||
class ChatMessageReactionsListDialogFragment(
|
class ChatMessageReactionsListDialogFragment() : BottomSheetDialogFragment() {
|
||||||
private val chatMessage: ChatMessage
|
|
||||||
) : BottomSheetDialogFragment() {
|
|
||||||
companion object {
|
companion object {
|
||||||
const val TAG = "ChatMessageReactionsListDialogFragment"
|
const val TAG = "ChatMessageReactionsListDialogFragment"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private lateinit var binding: ChatMessageReactionsListDialogBinding
|
||||||
|
|
||||||
private lateinit var data: ChatMessageReactionsListData
|
private lateinit var data: ChatMessageReactionsListData
|
||||||
|
|
||||||
override fun onCreateView(
|
override fun onCreateView(
|
||||||
|
@ -45,38 +46,43 @@ class ChatMessageReactionsListDialogFragment(
|
||||||
container: ViewGroup?,
|
container: ViewGroup?,
|
||||||
savedInstanceState: Bundle?
|
savedInstanceState: Bundle?
|
||||||
): View {
|
): View {
|
||||||
val binding = ChatMessageReactionsListDialogBinding.inflate(layoutInflater)
|
binding = ChatMessageReactionsListDialogBinding.inflate(layoutInflater)
|
||||||
binding.lifecycleOwner = viewLifecycleOwner
|
binding.lifecycleOwner = viewLifecycleOwner
|
||||||
|
if (::data.isInitialized) {
|
||||||
|
binding.data = data
|
||||||
|
|
||||||
data = ChatMessageReactionsListData(chatMessage)
|
data.reactions.observe(viewLifecycleOwner) {
|
||||||
binding.data = data
|
binding.tabs.removeAllTabs()
|
||||||
|
|
||||||
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) ->
|
|
||||||
binding.tabs.addTab(
|
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 {
|
binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
|
||||||
override fun onTabSelected(tab: TabLayout.Tab) {
|
override fun onTabSelected(tab: TabLayout.Tab) {
|
||||||
if (tab.id == 0) {
|
if (::data.isInitialized) {
|
||||||
data.updateFilteredReactions("")
|
if (tab.id == 0) {
|
||||||
} else {
|
data.updateFilteredReactions("")
|
||||||
data.updateFilteredReactions(tab.tag.toString())
|
} else {
|
||||||
|
data.updateFilteredReactions(tab.tag.toString())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,8 +96,14 @@ class ChatMessageReactionsListDialogFragment(
|
||||||
return binding.root
|
return binding.root
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun setMessage(chatMessage: ChatMessage) {
|
||||||
|
data = ChatMessageReactionsListData(chatMessage)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
data.onDestroy()
|
if (::data.isInitialized) {
|
||||||
|
data.onDestroy()
|
||||||
|
}
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -636,7 +636,8 @@ class DetailChatRoomFragment : MasterFragment<ChatRoomDetailFragmentBinding, Cha
|
||||||
viewLifecycleOwner
|
viewLifecycleOwner
|
||||||
) {
|
) {
|
||||||
it.consume { message ->
|
it.consume { message ->
|
||||||
val modalBottomSheet = ChatMessageReactionsListDialogFragment(message)
|
val modalBottomSheet = ChatMessageReactionsListDialogFragment()
|
||||||
|
modalBottomSheet.setMessage(message)
|
||||||
modalBottomSheet.show(
|
modalBottomSheet.show(
|
||||||
parentFragmentManager,
|
parentFragmentManager,
|
||||||
ChatMessageReactionsListDialogFragment.TAG
|
ChatMessageReactionsListDialogFragment.TAG
|
||||||
|
|
Loading…
Reference in a new issue