RS Post Settings: Performance improvements#22685
Conversation
Replace Toast with Compose Snackbar for inline error messages with retry actions, add pull-to-refresh support, show "Saving..." label alongside the spinner, display "Not Set" placeholder for empty status, and improve accessibility with content descriptions for password toggle and featured image placeholder. Extract shared error utilities from PostRsListViewModel into PostRsErrorUtils for reuse across both list and settings screens. Add unit tests for PostRsSettingsViewModel. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Preserve unsaved edits when refreshing post from server - Remove unreachable snackbar when site is null (activity finishes immediately) - Fix PullToRefreshBox content indentation - Remove redundant offline mocks in refresh tests - Rename misleading test name for status selection - Add test for save-online sets isSaving Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract preserveEdits() helper to shorten refreshPost() below the 60-line detekt limit, and remove empty line after opening brace in test class. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add navigationBarsPadding to SnackbarHost so snackbars aren't obscured by the system navigation bar. Wrap ErrorContent in a centered Box so the error message displays in the center of the screen instead of at the top. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add fillMaxWidth and TextAlign.Center to the ErrorContent on the term selection screen so the network error message is properly centered horizontally. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The network error snackbar shown when saving in airplane mode was missing an actionLabel and onAction callback, so no Retry button appeared. Add both so the user can retry saving after reconnecting. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Set the snackbar action color to MaterialTheme.colorScheme.primary so the Retry text on snackbars matches the primary color used by the Retry button on the error empty state. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…race condition When disabling airplane mode and immediately tapping Retry, Android may not have re-established connectivity yet, causing a spurious network error. Now the save always proceeds to the API call, which handles network errors naturally via its catch block using PostRsErrorUtils.friendlyErrorMessage(). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use BackHandler(onBack=) instead of wrapping lambda
- Use ?.let { } ?: Modifier for conditional click modifiers
- Replace PostApiException with RuntimeException
- Inline isAuthError wrapper in PostRsListViewModel
- Remove status bar hiding to fix PTR triggering on system bar pull
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace RuntimeException with PostApiRequestException to fix TooGenericExceptionThrown detekt violations. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
On self-hosted sites, a new WpApiClient was created for every API call (5 instantiations just to open post settings). Cache self-hosted clients in WpApiClientProvider (mirroring the existing WP.com pattern), add a per-site client cache in PostRsRestClient, and use a lazy property in PostRsSettingsViewModel to reuse the same client across fetch and save. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Now that WpApiClientProvider caches self-hosted clients, the per-site client cache in PostRsRestClient is redundant — remove it. Also remove the now-unused site parameters from fetchPost() and savePost() in the ViewModel, and replace shadowed locals with simple null guards. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Generated by 🚫 Danger |
…eption, remove unused methods Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## trunk #22685 +/- ##
==========================================
- Coverage 37.63% 37.61% -0.02%
==========================================
Files 2272 2272
Lines 118333 118378 +45
Branches 16363 16369 +6
==========================================
+ Hits 44530 44531 +1
- Misses 70150 70195 +45
+ Partials 3653 3652 -1 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show hero image shimmer and placeholder rows while loading instead of a titled app bar with a centered spinner. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Extract shared HeroOverlay composable to deduplicate gradient and back button between loading skeleton and hero layout - Inline statusResId variable - Remove unreachable site null guards in ViewModel - Remove extra blank line in WpApiClientProvider Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
I found Claude finding some point that are worth to have a look at them. If you think they are false positives, just let me know.
|
Clear self-hosted client cache on sign-out to prevent stale credentials, remove double background in ShimmerRow so the animated shimmer renders correctly, and restore early-return guards for null apiClient in ViewModel. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
I fixed all three of those issues. I also fixed a shimmer issue that a fresh local |
Check `site == null` instead of `apiClient == null` to avoid triggering unnecessary lazy evaluation and to match the original guard pattern the code previously used. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
Hmm, I'm not seeing this with any of my sites. Perhaps you need to sync with Gradle since earlier you were working with a wp-rs update? |
A fresh install worked. So, yes probably a cache issue 🤷♂️ |






Description
On self-hosted sites, a new
WpApiClientwas created for every API call — 5 client instantiations just to open the settings screen (1 post fetch + 4 async field resolutions). NowWpApiClientProvidercaches self-hosted clients the same way it already caches WP.com clients, and the ViewModel reuses a single lazy client. This reduces self-hosted load time from 5 client creations to 1.This PR also adds a shimmer effect when loading post settings, improving upon the simple progress spinner we used previously.
Testing instructions
trunkwith a content-heavy self-hosted site (provided via DM)content-heavy.mp4