Skip to content

Commit 32930f2

Browse files
committed
Guard connectivity observers against LiveData replay side effects
LiveData replays the current value to each new observer, so a side effect that should only run on an offline->online transition also fired on open. - SuggestionActivity: only call viewModel.onConnectionChanged (which refreshes suggestions) on a genuine offline->online transition. The initial replay was triggering a redundant fetch on top of the one started in viewModel.init(). - ReaderPostListFragment: initialise lastConnected to true so the first replayed "connected" value doesn't re-run the search (e.g. on a restored fragment with an active search); only a real transition resubmits.
1 parent c617721 commit 32930f2

3 files changed

Lines changed: 14 additions & 2 deletions

File tree

WordPress/src/main/java/org/wordpress/android/ui/reader/ReaderPostListFragment.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,9 @@ class ReaderPostListFragment : ViewPagerFragment(), OnPostSelectedListener, OnFo
208208
@Inject
209209
lateinit var networkConnectionMonitor: NetworkConnectionMonitor
210210

211-
private var lastConnected = false
211+
// Initialised to true so the first LiveData replay of "connected" (e.g. on a freshly restored fragment
212+
// with an active search) doesn't re-fire the search; only a genuine offline->online transition should.
213+
private var lastConnected = true
212214

213215
private var readerPostAdapter: ReaderPostAdapter? = null
214216
private var siteSearchAdapter: ReaderSiteSearchAdapter? = null

WordPress/src/main/java/org/wordpress/android/ui/suggestion/SuggestionActivity.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class SuggestionActivity : BaseAppCompatActivity() {
3838
lateinit var networkConnectionMonitor: NetworkConnectionMonitor
3939
private lateinit var binding: SuggestUsersActivityBinding
4040

41+
private var lastConnected = true
42+
4143
override fun onCreate(savedInstanceState: Bundle?) {
4244
super.onCreate(savedInstanceState)
4345
(application as WordPress).component().inject(this)
@@ -180,7 +182,12 @@ class SuggestionActivity : BaseAppCompatActivity() {
180182
})
181183

182184
networkConnectionMonitor.isConnected.observe(this) { connected ->
183-
viewModel.onConnectionChanged(connected)
185+
// Only refresh on a genuine offline->online transition; the initial LiveData replay would
186+
// otherwise trigger a redundant fetch on top of the one already started in viewModel.init().
187+
if (connected && !lastConnected) {
188+
viewModel.onConnectionChanged(connected)
189+
}
190+
lastConnected = connected
184191
updateEmptyView()
185192
}
186193
}

gradle.properties

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,6 @@ org.gradle.configuration-cache=true
66
# Dependency Analysis Plugin
77
dependency.analysis.android.ignored.variants=release,wordpressRelease,jetpackRelease
88
dependency.analysis.test.analysis=false
9+
10+
# Enabled parallel sync for Gradle 9.4+
11+
org.gradle.tooling.parallel=true

0 commit comments

Comments
 (0)