From 80eaf08fbfbe61fa36e152bf9e5b3836920385b6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Mon, 31 Mar 2025 16:20:37 +0200 Subject: [PATCH] Refresh lists content when going back from background after at least 1 hour (when keep alive service is enabled) --- .../chat/fragment/ConversationsListFragment.kt | 5 +++++ .../ui/main/fragment/AbstractMainFragment.kt | 17 +++++++++++++++++ .../history/fragment/HistoryListFragment.kt | 5 +++++ .../meetings/fragment/MeetingsListFragment.kt | 5 +++++ 4 files changed, 32 insertions(+) diff --git a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt index 1ef9a7c0e..862137b47 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/fragment/ConversationsListFragment.kt @@ -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() { diff --git a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt index 25e31dcef..189881a79 100644 --- a/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/fragment/AbstractMainFragment.kt @@ -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() diff --git a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt index c482ae0a4..510a4aa73 100644 --- a/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/history/fragment/HistoryListFragment.kt @@ -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) { diff --git a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt index 615df6227..2b59e0da0 100644 --- a/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/meetings/fragment/MeetingsListFragment.kt @@ -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() }