mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-29 17:59:22 +00:00
Fixed meetings list scroll position not retained upon rotation
This commit is contained in:
parent
84af9437bc
commit
4628560411
1 changed files with 23 additions and 7 deletions
|
|
@ -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()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue