Refresh lists content when going back from background after at least 1 hour (when keep alive service is enabled)

This commit is contained in:
Sylvain Berfini 2025-03-31 16:20:37 +02:00
parent 903aaad6fe
commit 80eaf08fbf
4 changed files with 32 additions and 0 deletions

View file

@ -346,6 +346,11 @@ class ConversationsListFragment : AbstractMainFragment() {
} catch (e: IllegalStateException) {
Log.e("$TAG Failed to unregister data observer to adapter: $e")
}
if (shouldRefreshDataInOnResume()) {
Log.i("$TAG Keep app alive setting is enabled, refreshing view just in case")
listViewModel.filter()
}
}
override fun onPause() {

View file

@ -35,6 +35,7 @@ import androidx.navigation.fragment.findNavController
import androidx.slidingpanelayout.widget.SlidingPaneLayout
import androidx.slidingpanelayout.widget.SlidingPaneLayout.PanelSlideListener
import com.google.android.material.textfield.TextInputLayout
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.BottomNavBarBinding
@ -55,6 +56,8 @@ import org.linphone.utils.showKeyboard
abstract class AbstractMainFragment : GenericMainFragment() {
companion object {
private const val TAG = "[Abstract Main Fragment]"
private const val TIME_MS_AFTER_WHICH_REFRESH_DATA_ON_RESUME = 3600000 // 1 hour
}
protected val outlineProvider = object : ViewOutlineProvider() {
@ -65,6 +68,8 @@ abstract class AbstractMainFragment : GenericMainFragment() {
}
}
protected var lastOnPauseTimestamp: Long = -1L
private var currentFragmentId: Int = 0
private lateinit var viewModel: AbstractMainViewModel
@ -96,9 +101,21 @@ abstract class AbstractMainFragment : GenericMainFragment() {
backPressedCallback
)
lastOnPauseTimestamp = -1
super.onViewCreated(view, savedInstanceState)
}
override fun onPause() {
lastOnPauseTimestamp = System.currentTimeMillis()
super.onPause()
}
fun shouldRefreshDataInOnResume(): Boolean {
if (lastOnPauseTimestamp == -1L) return false
if (!corePreferences.keepServiceAlive) return false
return System.currentTimeMillis() - lastOnPauseTimestamp > TIME_MS_AFTER_WHICH_REFRESH_DATA_ON_RESUME
}
fun setViewModel(abstractMainViewModel: AbstractMainViewModel) {
(view?.parent as? ViewGroup)?.doOnPreDraw {
startPostponedEnterTransition()

View file

@ -274,6 +274,11 @@ class HistoryListFragment : AbstractMainFragment() {
Log.i("$TAG Fragment is resumed, resetting missed calls count")
sharedViewModel.resetMissedCallsCountEvent.value = Event(true)
sharedViewModel.refreshDrawerMenuAccountsListEvent.value = Event(false)
if (shouldRefreshDataInOnResume()) {
Log.i("$TAG Keep app alive setting is enabled, refreshing view just in case")
listViewModel.filter()
}
}
private fun copyNumberOrAddressToClipboard(value: String) {

View file

@ -287,6 +287,11 @@ class MeetingsListFragment : AbstractMainFragment() {
Log.e("$TAG Failed to register data observer to adapter: $e")
}
if (shouldRefreshDataInOnResume()) {
Log.i("$TAG Keep app alive setting is enabled, refreshing view just in case")
listViewModel.filter()
}
goToContactsIfMeetingsAreDisabledForCurrentlyDefaultAccount()
}