Fluidify navigation if SDK is under burst

This commit is contained in:
Sylvain Berfini 2024-04-22 13:26:16 +02:00
parent ace9e02133
commit 7f1dc95cfc
16 changed files with 111 additions and 59 deletions

View file

@ -26,7 +26,6 @@ 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
@ -111,7 +110,6 @@ class ConversationsListFragment : AbstractTopBarFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
super.onViewCreated(view, savedInstanceState)
listViewModel = ViewModelProvider(this)[ConversationsListViewModel::class.java]
@ -184,10 +182,7 @@ class ConversationsListFragment : AbstractTopBarFragment() {
listViewModel.conversations.observe(viewLifecycleOwner) {
adapter.submitList(it)
Log.i("$TAG Conversations list ready with [${it.size}] items")
(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
}
listViewModel.fetchInProgress.value = false
}
sharedViewModel.showConversationEvent.observe(viewLifecycleOwner) {

View file

@ -105,6 +105,8 @@ class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewMod
}
init {
fetchInProgress.value = true
coreContext.postOnCoreThread { core ->
coreContext.contactsManager.addListener(contactsListener)
core.addListener(coreListener)
@ -179,12 +181,10 @@ class ConversationsListViewModel @UiThread constructor() : AbstractTopBarViewMod
if (count == 15) {
conversations.postValue(list)
fetchInProgress.postValue(false)
}
}
conversations.postValue(list)
fetchInProgress.postValue(false)
}
@WorkerThread

View file

@ -31,7 +31,6 @@ import android.view.animation.AnimationUtils
import android.widget.PopupWindow
import androidx.annotation.UiThread
import androidx.core.content.FileProvider
import androidx.core.view.doOnPreDraw
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
@ -97,7 +96,6 @@ class ContactsListFragment : AbstractTopBarFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
super.onViewCreated(view, savedInstanceState)
listViewModel = ViewModelProvider(this)[ContactsListViewModel::class.java]
@ -128,10 +126,7 @@ class ContactsListFragment : AbstractTopBarFragment() {
) {
adapter.submitList(it)
Log.i("$TAG Contacts list updated with [${it.size}] items")
(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
}
listViewModel.fetchInProgress.value = false
}
listViewModel.favourites.observe(

View file

@ -92,6 +92,7 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
}
init {
fetchInProgress.value = true
showFavourites.value = true
coreContext.postOnCoreThread { core ->
@ -259,7 +260,6 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
if (firstLoad && count == 20) {
contactsList.postValue(list)
fetchInProgress.postValue(false)
}
}
@ -273,7 +273,6 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
favourites.postValue(favouritesList)
contactsList.postValue(list)
fetchInProgress.postValue(false)
Log.i("$TAG Processed [${results.size}] results")
firstLoad = false

View file

@ -31,7 +31,6 @@ import android.view.animation.Animation
import android.view.animation.AnimationUtils
import android.widget.PopupWindow
import androidx.annotation.UiThread
import androidx.core.view.doOnPreDraw
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.navigation.findNavController
@ -98,7 +97,6 @@ class HistoryListFragment : AbstractTopBarFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
super.onViewCreated(view, savedInstanceState)
listViewModel = ViewModelProvider(this)[HistoryListViewModel::class.java]
@ -194,10 +192,7 @@ class HistoryListFragment : AbstractTopBarFragment() {
listViewModel.callLogs.observe(viewLifecycleOwner) {
adapter.submitList(it)
Log.i("$TAG Call logs ready with [${it.size}] items")
(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
}
listViewModel.fetchInProgress.value = false
}
listViewModel.historyDeletedEvent.observe(viewLifecycleOwner) {

View file

@ -61,6 +61,8 @@ class HistoryListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
}
init {
fetchInProgress.value = true
coreContext.postOnCoreThread { core ->
coreContext.contactsManager.addListener(contactsListener)
core.addListener(coreListener)
@ -123,11 +125,9 @@ class HistoryListViewModel @UiThread constructor() : AbstractTopBarViewModel() {
if (count == 20) {
callLogs.postValue(list)
fetchInProgress.postValue(false)
}
}
callLogs.postValue(list)
fetchInProgress.postValue(false)
}
}

View file

@ -92,7 +92,6 @@ class MeetingsListFragment : AbstractTopBarFragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
postponeEnterTransition()
super.onViewCreated(view, savedInstanceState)
listViewModel = ViewModelProvider(this)[MeetingsListViewModel::class.java]
@ -137,10 +136,9 @@ class MeetingsListFragment : AbstractTopBarFragment() {
val newCount = it.size
adapter.submitList(it)
Log.i("$TAG Meetings list ready with [$newCount] items")
listViewModel.fetchInProgress.value = false
(view.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()
if (currentCount < newCount) {
scrollToToday()
}

View file

@ -49,6 +49,8 @@ class MeetingsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
}
init {
fetchInProgress.value = true
coreContext.postOnCoreThread { core ->
core.addListener(coreListener)
@ -74,6 +76,10 @@ class MeetingsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
@WorkerThread
private fun computeMeetingsList(filter: String) {
if (meetings.value.orEmpty().isEmpty()) {
fetchInProgress.postValue(true)
}
val list = arrayListOf<MeetingListItemModel>()
var source = coreContext.core.defaultAccount?.conferenceInformationList

View file

@ -98,6 +98,18 @@
android:layout_marginTop="@dimen/top_bar_height"
android:layout_marginStart="@dimen/landscape_nav_bar_width" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toEndOf="@id/bottom_nav_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/new_conversation"
android:onClick="@{onNewConversationClicked}"
@ -114,10 +126,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -146,6 +146,18 @@
app:layout_constraintStart_toEndOf="@id/bottom_nav_bar"
app:layout_constraintTop_toBottomOf="@id/no_contacts_image" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toEndOf="@id/bottom_nav_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/new_contact"
android:onClick="@{onNewContactClicked}"
@ -162,10 +174,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -117,6 +117,18 @@
android:layout_marginTop="@dimen/top_bar_height"
android:layout_marginStart="@dimen/landscape_nav_bar_width" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toEndOf="@id/bottom_nav_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:onClick="@{startCallClickListener}"
android:id="@+id/new_call"
@ -133,10 +145,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -114,6 +114,18 @@
android:layout_marginTop="@dimen/top_bar_height"
android:layout_marginStart="@dimen/landscape_nav_bar_width" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toEndOf="@id/bottom_nav_bar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/new_meeting"
android:onClick="@{newMeetingClicked}"
@ -130,10 +142,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -89,6 +89,18 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<include
android:id="@+id/bottom_nav_bar"
android:layout_width="0dp"
@ -115,10 +127,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -138,6 +138,18 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/no_contacts_image" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<include
android:id="@+id/bottom_nav_bar"
android:layout_width="0dp"
@ -164,10 +176,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -108,6 +108,18 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<include
android:id="@+id/bottom_nav_bar"
android:layout_width="0dp"
@ -134,10 +146,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView

View file

@ -105,6 +105,18 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<com.google.android.material.progressindicator.CircularProgressIndicator
android:id="@+id/fetch_in_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:indeterminate="true"
android:visibility="@{viewModel.fetchInProgress ? View.VISIBLE : View.GONE}"
app:indicatorColor="@color/main1_500"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/bottom_nav_bar" />
<include
android:id="@+id/bottom_nav_bar"
android:layout_width="0dp"
@ -131,10 +143,6 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<!--<include
layout="@layout/operation_in_progress"
bind:visibility="@{viewModel.fetchInProgress}" />-->
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.fragment.app.FragmentContainerView