mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 03:18:06 +00:00
When opening delivery status bottom sheet select 'first' not empty tab automatically
This commit is contained in:
parent
3b561275a4
commit
07cae7eb12
2 changed files with 51 additions and 35 deletions
|
|
@ -96,6 +96,7 @@ import org.linphone.utils.showKeyboard
|
|||
import androidx.core.net.toUri
|
||||
import org.linphone.ui.main.chat.adapter.ConversationParticipantsAdapter
|
||||
import org.linphone.ui.main.chat.model.MessageDeleteDialogModel
|
||||
import kotlin.collections.arrayListOf
|
||||
|
||||
@UiThread
|
||||
open class ConversationFragment : SlidingPaneChildFragment() {
|
||||
|
|
@ -1426,49 +1427,59 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
private fun displayDeliveryStatuses(model: MessageDeliveryModel) {
|
||||
val tabs = binding.messageBottomSheet.tabs
|
||||
tabs.removeAllTabs()
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(model.readLabel.value).setId(
|
||||
|
||||
val displayedTab = tabs.newTab().setText(model.readLabel.value).setId(
|
||||
ChatMessage.State.Displayed.toInt()
|
||||
)
|
||||
)
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(
|
||||
model.receivedLabel.value
|
||||
).setId(
|
||||
val deliveredTab = tabs.newTab().setText(model.receivedLabel.value).setId(
|
||||
ChatMessage.State.DeliveredToUser.toInt()
|
||||
)
|
||||
)
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(model.sentLabel.value).setId(
|
||||
val sentTab = tabs.newTab().setText(model.sentLabel.value).setId(
|
||||
ChatMessage.State.Delivered.toInt()
|
||||
)
|
||||
)
|
||||
tabs.addTab(
|
||||
tabs.newTab().setText(
|
||||
model.errorLabel.value
|
||||
).setId(
|
||||
val errorTab = tabs.newTab().setText(model.errorLabel.value).setId(
|
||||
ChatMessage.State.NotDelivered.toInt()
|
||||
)
|
||||
)
|
||||
// Tabs must be added first otherwise select() will do nothing
|
||||
tabs.addTab(displayedTab)
|
||||
tabs.addTab(deliveredTab)
|
||||
tabs.addTab(sentTab)
|
||||
tabs.addTab(errorTab)
|
||||
|
||||
if (model.displayedModels.isNotEmpty()) {
|
||||
bottomSheetAdapter.submitList(model.displayedModels)
|
||||
displayedTab.select()
|
||||
} else {
|
||||
if (model.deliveredModels.isNotEmpty()) {
|
||||
bottomSheetAdapter.submitList(model.deliveredModels)
|
||||
deliveredTab.select()
|
||||
} else {
|
||||
if (model.sentModels.isNotEmpty()) {
|
||||
bottomSheetAdapter.submitList(model.sentModels)
|
||||
sentTab.select()
|
||||
} else {
|
||||
if (model.errorModels.isNotEmpty()) {
|
||||
bottomSheetAdapter.submitList(model.errorModels)
|
||||
errorTab.select()
|
||||
} else {
|
||||
// TODO FIXME: remove all tabs and show error message?
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tabs.setOnTabSelectedListener(object : OnTabSelectedListener {
|
||||
override fun onTabSelected(tab: TabLayout.Tab?) {
|
||||
val state = tab?.id ?: ChatMessage.State.Displayed.toInt()
|
||||
bottomSheetAdapter.submitList(
|
||||
model.computeListForState(ChatMessage.State.fromInt(state))
|
||||
model.getListForState(ChatMessage.State.fromInt(state))
|
||||
)
|
||||
}
|
||||
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) {
|
||||
}
|
||||
override fun onTabUnselected(tab: TabLayout.Tab?) { }
|
||||
|
||||
override fun onTabReselected(tab: TabLayout.Tab?) {
|
||||
}
|
||||
override fun onTabReselected(tab: TabLayout.Tab?) { }
|
||||
})
|
||||
|
||||
val initialList = model.displayedModels
|
||||
bottomSheetAdapter.submitList(initialList)
|
||||
Log.i("$TAG Submitted [${initialList.size}] items for default delivery status list")
|
||||
}
|
||||
|
||||
@UiThread
|
||||
|
|
|
|||
|
|
@ -51,11 +51,11 @@ class MessageDeliveryModel
|
|||
|
||||
val displayedModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
|
||||
private val deliveredModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
val deliveredModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
|
||||
private val sentModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
val sentModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
|
||||
private val errorModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
val errorModels = arrayListOf<MessageBottomSheetParticipantModel>()
|
||||
|
||||
private val chatMessageListener = object : ChatMessageListenerStub() {
|
||||
@WorkerThread
|
||||
|
|
@ -63,7 +63,7 @@ class MessageDeliveryModel
|
|||
message: ChatMessage,
|
||||
state: ParticipantImdnState
|
||||
) {
|
||||
Log.i("$TAG Participant IMDN state changed [${state.state}], updating delivery status")
|
||||
Log.i("$TAG Participant IMDN state changed [${state.state}] for message with ID [${message.messageId}], updating delivery status")
|
||||
computeDeliveryStatus()
|
||||
}
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ class MessageDeliveryModel
|
|||
}
|
||||
|
||||
@UiThread
|
||||
fun computeListForState(state: State): ArrayList<MessageBottomSheetParticipantModel> {
|
||||
fun getListForState(state: State): ArrayList<MessageBottomSheetParticipantModel> {
|
||||
return when (state) {
|
||||
State.DeliveredToUser -> {
|
||||
deliveredModels
|
||||
|
|
@ -98,6 +98,8 @@ class MessageDeliveryModel
|
|||
|
||||
@WorkerThread
|
||||
private fun computeDeliveryStatus() {
|
||||
Log.i("$TAG Message ID [${chatMessage.messageId}] is in state [${chatMessage.state}]")
|
||||
|
||||
displayedModels.clear()
|
||||
deliveredModels.clear()
|
||||
sentModels.clear()
|
||||
|
|
@ -175,12 +177,15 @@ class MessageDeliveryModel
|
|||
)
|
||||
)
|
||||
|
||||
if (displayedModels.isEmpty() && deliveredModels.isEmpty() && sentModels.isEmpty() && errorModels.isEmpty()) {
|
||||
Log.e("$TAG No participant found in state Displayed, DeliveredToUser, Delivered or Error for message ID [${chatMessage.messageId}]")
|
||||
}
|
||||
|
||||
displayedModels.sortBy { it.timestamp }
|
||||
deliveredModels.sortBy { it.timestamp }
|
||||
sentModels.sortBy { it.timestamp }
|
||||
errorModels.sortBy { it.timestamp }
|
||||
|
||||
Log.i("$TAG Message ID [${chatMessage.messageId}] is in state [${chatMessage.state}]")
|
||||
Log.i(
|
||||
"$TAG There are [$readCount] that have read this message, [$receivedCount] that have received it, [$sentCount] that haven't received it yet and [$errorCount] that probably won't receive it due to an error"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue