Fixed meetings list scroll position not retained upon rotation

This commit is contained in:
Sylvain Berfini 2024-08-29 16:54:43 +02:00
parent 84af9437bc
commit 4628560411

View file

@ -26,11 +26,11 @@ import android.view.ViewGroup
import android.view.animation.Animation
import android.view.animation.AnimationUtils
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView.AdapterDataObserver
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import org.linphone.R
import org.linphone.core.tools.Log
@ -59,6 +59,16 @@ class MeetingsListFragment : AbstractMainFragment() {
private var bottomSheetDialog: BottomSheetDialogFragment? = null
private val dataObserver = object : AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0 && adapter.itemCount == itemCount) {
// First time we fill the list with messages
Log.i("$TAG First time meeting list is filled, scrolling to 'today'")
scrollToToday()
}
}
}
override fun onDefaultAccountChanged() {
if (!goToContactsIfMeetingsAreDisabledForCurrentlyDefaultAccount()) {
Log.i(
@ -145,12 +155,6 @@ class MeetingsListFragment : AbstractMainFragment() {
adapter.submitList(it)
Log.i("$TAG Meetings list ready with [$newCount] items")
listViewModel.fetchInProgress.value = false
(view.parent as? ViewGroup)?.doOnPreDraw {
if (currentCount < newCount) {
scrollToToday()
}
}
}
adapter.meetingLongClickedEvent.observe(viewLifecycleOwner) {
@ -225,6 +229,12 @@ class MeetingsListFragment : AbstractMainFragment() {
override fun onPause() {
super.onPause()
try {
adapter.unregisterAdapterDataObserver(dataObserver)
} catch (e: IllegalStateException) {
Log.e("$TAG Failed to unregister data observer to adapter: $e")
}
bottomSheetDialog?.dismiss()
bottomSheetDialog = null
}
@ -232,6 +242,12 @@ class MeetingsListFragment : AbstractMainFragment() {
override fun onResume() {
super.onResume()
try {
adapter.registerAdapterDataObserver(dataObserver)
} catch (e: IllegalStateException) {
Log.e("$TAG Failed to register data observer to adapter: $e")
}
goToContactsIfMeetingsAreDisabledForCurrentlyDefaultAccount()
}