fix: refresh course structure on Android - #499
Conversation
|
Thanks for the pull request, @edschema! This repository is currently maintained by Once you've gone through the following steps feel free to tag them in a comment and let them know that your changes are ready for engineering review. 🔘 Get product approvalIf you haven't already, check this list to see if your contribution needs to go through the product review process.
🔘 Provide contextTo help your reviewers and other members of the community understand the purpose and larger context of your changes, feel free to add as much of the following information to the PR description as you can:
🔘 Get a green buildIf one or more checks are failing, continue working on your changes until this is no longer the case and your build turns green. DetailsWhere can I find more information?If you'd like to get more details on all aspects of the review process for open source pull requests (OSPRs), check out the following resources: When can I expect my changes to be merged?Our goal is to get community contributions seen and reviewed as efficiently as possible. However, the amount of time that it takes to review and merge a PR can vary significantly based on factors such as:
💡 As a result it may take up to several weeks or months to complete a review and merge your PR. |
Description
Fixes a course-refresh issue on Android. When the app asked to refresh course structure while online, it could return the first saved copy and stop before making a new request. That saved copy can be out of date. iOS already makes a fresh request in this situation.
Now, when a caller explicitly asks for a refresh and the app is online, Android sends a
Cache-Control: no-cacherequest. A saved response must be checked before it can be reused. This request is separate from ordinary course loading. An explicit refresh while offline still reads only saved data. Ordinary course loading remains cache first.This better aligns Android's course-refresh behavior with iOS. It is also an Android prerequisite for later course-routing work. The routing change will be a separate PR after this one merges. Both PRs must land before mobile Inbox can be enabled.
Out of Scope
This PR does not add Inbox or routing behavior. It does not change the server API, database schema, database migrations, or the caching behavior for status, dates, progress, or enrollment. It adds tests that confirm the existing status, dates, and progress flows still recognize a refresh request after an earlier course-structure request finishes.
Change Log
Cache-Control: no-cacherequest path.Notes
An explicit online refresh that fails does not silently return older course structure. An explicit offline refresh continues to use saved data only.
A refresh cannot reuse an ordinary course-loading request because the two requests have different cache rules.
The existing Dates caller that asks for a refresh benefits from this change. No Dates code changes are included.
CourseInteractornow checks network availability before choosing the refresh path. Its public interface and the course API contract are unchanged.Tests Done
CourseInteractorFreshTestCourseRepositoryFreshTestCoalescingCacheTest:course:testDevelopDebugUnitTest:app:assembleDevelopDebugdetektAllAI Assistance
AI tools were used to aid diagnosis, planning, implementation, testing, and review. All work was checked and reviewed.