RS Post Settings: Performance improvements#22685
Open
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>
Collaborator
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>
Contributor
|
|
Contributor
|
|
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 118381 +48
Branches 16363 16367 +4
==========================================
+ Hits 44530 44531 +1
- Misses 70150 70200 +50
+ Partials 3653 3650 -3 ☔ 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>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.





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