16900 make navgraph inflation asynchronous #18889
16900 make navgraph inflation asynchronous #18889
Conversation
This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
lgtm after rebasing.
I realized there isn't too much to manual test here – you basically can (cold) start the app and see what happens so if you test all the ways to (cold) start, you've tested everything. I tried the standard intents (launcher, VIEW) but I'd ideally want QA to test a broader set of options.
e93ca1c
to
20a42e6
Compare
This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏 |
9fd23f4
to
dcb0635
Compare
This pull request has conflicts when rebasing. Could you fix it @MarcLeclair? 🙏 |
dcb0635
to
055a1b6
Compare
For mozilla-mobile#16900: removed nav graph from xml For mozilla-mobile#16900: inflate navGraph programatically For mozilla-mobile#16900: Made NavGraph inflation asynchronous For mozilla-mobile#16900: Changed to block with runBlocking For mozilla-mobile#16900: Refactored blocking call into a function For 16900: NavGraph inflation is now async We now attach the nav graph (or check if its attached) on every nav call ( an extension function for NavController). This is done by checking the value of the job stored in PerfNavController.map which keeps track of the job with the NavController as a Key. If the job hasn't been completed, it will block the main thread until the job is done. The job itself is responsible for attaching the navgraph to the navcontroller (and the inflation of the latter too) For 16900: rebased upstream master For 16900: Rebase on master For mozilla-mobile#16900: Fixed Async Navgraph navigation per review comments. 1)The Asynchronous method is now found in NavGraphProvider.kt. It creates a job on the IO dispatcher 2)The Job is tracked through a WeakHashMap from Controller --> NavGraph 3)The Coroutine scope doesn't use MainScope() anymore 4)The Coroutine is cancelled if the Activity is destroyed 5)The tests mockk the blockForNavGraphInflation method through the FenixReoboelectricTestApplication instead of calling the mock every setup() For mozilla-mobile#16900: inflateNavGraphAsync now takes navController For mozilla-mobile#16900: Pass lifecycleScope to NavGraphProvider For mozilla-mobile#16900: removed unused mock For mozilla-mobile#16900: Added linter rules for navigate calls We need linting rules to make sure no one calls the NavController.navigate() methods For mozilla-mobile#16900: Added TestRule to help abstract the mocks in the code For 16900: Fix linting problems For mozilla-mobile#16900: Cleaned duplicated code in tests For mozilla-mobile#16900: cleaned up NavGraphTestRule for finished test For mozilla-mobile#16900: had to revert an accidentally edited file For mozilla-mobile#16900: rebased master
This is composed of squash commits, the original messages can be found below: -> DisableNavGraphProviderAssertionRule + kdoc. Use test rule in RobolectricApplication. Fix failing CrashReporterControllerTest Fix blame by -> navigate in tests. This commit was generated by the following commands only: ``` find app/src/test -type f -exec sed -i '' "/import org.mozilla.fenix.ext.navigateBlockingForAsyncNavGraph/d" {} \; find app/src/test -type f -exec sed -i "" "s/navigateBlockingForAsyncNavGraph/navigate/g" {} \; git checkout app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker ``` Fix various blame This is expected to be squashed into the first commit so, if so, it'd fix the blame. Move test rule to helpers pkg. add missing license header Add import change I missed fix unused imports Replace robolectricTestrunner with test rule. Improve navGraphProvider docs Remove unnecessary rule as defined by robolectric. add clarifying comment to robolectric remove unnecessary space
… fixes 3 squash commits: *Changed violation message and fixed the lint rule for MozillaNavigateCheck *Added suppression to NavController.kt *Fixed detekt violations
055a1b6
to
9728ca0
Compare
9728ca0
to
dce81e3
Compare
Codecov Report
@@ Coverage Diff @@
## master #18889 +/- ##
============================================
+ Coverage 33.62% 33.64% +0.02%
- Complexity 1542 1545 +3
============================================
Files 531 532 +1
Lines 21569 21591 +22
Branches 3217 3218 +1
============================================
+ Hits 7253 7265 +12
- Misses 13428 13441 +13
+ Partials 888 885 -3
Continue to review full report at Codecov.
|
Pull Request checklist
To download an APK when reviewing a PR: