Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce new platform parameter system infrastructure #5725

Draft
wants to merge 3 commits into
base: develop
Choose a base branch
from

Conversation

BenHenning
Copy link
Member

Explanation

TODO: Finish

Essential Checklist

  • The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".)
  • Any changes to scripts/assets files have their rationale included in the PR explanation.
  • The PR follows the style guide.
  • The PR does not contain any unnecessary code changes from Android Studio (reference).
  • The PR is made from a branch that's not called "develop" and is up-to-date with "develop".
  • The PR is assigned to the appropriate reviewers (reference).

For UI-specific PRs only

If your PR includes UI-related changes, then:

  • Add screenshots for portrait/landscape for both a tablet & phone of the before & after UI changes
  • For the screenshots above, include both English and pseudo-localized (RTL) screenshots (see RTL guide)
  • Add a video showing the full UX flow with a screen reader enabled (see accessibility guide)
  • For PRs introducing new UI elements or color changes, both light and dark mode screenshots must be included
  • Add a screenshot demonstrating that you ran affected Espresso tests locally & that they're passing

There's a lot left to do in the way of integration and testing, plus a
script that needs to be introduced. This is meant to be a first step
toward a much more robust and future-proof parameter system.
@BenHenning
Copy link
Member Author

@Rd4dev and @adhiamboperes I'd really like your thoughts on this initial approach for a reinventing of the platform parameter system. It's as much as I could get done today, but I'm really hoping it will serve as a significant foundation for both the testing work being done in #5565 and what we need to do for the rest of #5345.

At a high-level, the plan is:

  • Isolate the singleton properly for state--it's currently confusing and messy existing in two different layers of the app.
  • Introduce first-class support for feature flags.
  • Leverage textproto definitions to replace the constants classes for both feature flags and platform parameters to make the definitions much cleaner and less error-prone (they now have strong typing guarantees!).
  • Introduce code generation for the platform parameter module (not done yet) to automatically convert the textproto definitions to nice bindings (see the FeatureFlag and PlatformParameter qualifier files for examples).
  • New injection styles for parameters and flags (see above).
  • Proper loading ordering for parameters and flags (so that it doesn't race against splash).
  • Consolidation of all things parameters/flags into one controller (vs. splitting it up with the platform parameter worker).
  • Abstracting the controller so that multiple implementations can be provided (nice for testing and dev options).

A lot of files will eventually need to be updated, plus the old system torn out. Would be great to get your thoughts of progress so far.

Note that for testing I plan to update OppiaTestRule to sort of simulate an app restart by creating a completely separate application class in order to 'download' parameters and save them to disk, then load the parameters ahead of the test running. This will be used in conjunction with a new PlatformParameterTestOrchestrator class which will provide functionality for faking calls to the remote endpoint to simulate remotely synced parameters and flags. My hope is that this is relatively easy to hook into the work you're doing @Rd4dev.

@Rd4dev
Copy link
Collaborator

Rd4dev commented Mar 2, 2025

@BenHenning, actually it took me some time to understand the sync race issue, but I was able to get a better picture along the way.

The restructured implementation would be very helpful to have a more organized approach, with works #5565, #5345. And I’m in favor of having a dedicated debug implementation.

Note that for testing I plan to update OppiaTestRule to sort of simulate an app restart by creating a completely separate application class in order to 'download' parameters and save them to disk, then load the parameters ahead of the test running. This will be used in conjunction with a new PlatformParameterTestOrchestrator class which will provide functionality for faking calls to the remote endpoint to simulate remotely synced parameters and flags.

But I was not able to fully understand the testing plan for simulating an app restart. Is it intended for all platform parameter test scenarios? or is it specifically for validating the new system’s cache storage and retention?

If it's the latter, then what I was considering might not be relevant. But if not, I thought we could update the database before Dagger initialization in the test rule’s apply() method, based on test annotations, ensuring the updated values would already be picked up in the platform parameter controller during initialization. Wouldn't that be possible?

Would it be possible to clarify the testing overrides a bit more, particularly how the app restart simulation should be carried forward in #5565?

This introduces module generation, feature flag & platform parameter
definitions, working implementations to the parameter system itself,
plus demonstrated and verified support for overrides in tests and in the
main app binary.

There are still a lot of broken tests that need fixing, and the app
itself is integrating the system incorrectly due to a very early
platform parameter injection requirement that was missed. The
initialization flow from the app startup through splash will need to be
redone a bit in order to hook up the new system correctly, but this
commit proves the system should be viable.
@BenHenning
Copy link
Member Author

Thanks @Rd4dev, I appreciate the read-through and follow-up. A lot has changed since that comment as I worked through trying to make this work. :) It is, admittedly, rather complex to get the initialization flows correct (which affects both the app and all tests that interact with code which use parameters/flags, or need to override them).

I think I figured out a working model. Please look at the following files in the latest changes:

  • TestPlatformParameterConfigRetriever: This is the class that provides static override support for parameters and flags. An example of this working is EventBundleCreatorTest which performs overrides and utilizes the initializer. It also performs some recreation logic that was very difficult to fix earlier today. :)
  • PlatformParameterTestInitializer: This is the class that is needed in order to ensure that parameters and flags are loaded early enough for the Dagger injection bits to work. See LogReportingModuleTest for an example test that uses this without overrides. Basically we just need to inject it at the beginning of the test to make things work.

Note that application initialization has been hacked into AbstractOppiaApplication for now and needs to be redone. We really should be loading parameters in SplashActivityPresenter but we have a few parameters being used in the work management system. These need to be either carefully changed to Providers or outright removed if they're initialized too early in the application lifecycle. We'll run into problems like this on occasion (including in Splash* classes), but it's sort of definitionally unavoidable. We need to have sane state and load that asynchronously somehow.

As for how this affects testing, my thoughts are:

  • The static state managed by the config retriever can be easily bridged by your new test rules. This isn't much different than your existing/previous implementation (if I'm remembering correctly), but it's probably a lot cleaner/safer with this approach.
  • We may be able to eliminate the initializer in favor of a rule-based approach, but I'm personally not exactly sure how. One idea that may have merit: introduce an injector for PlatformParameterController and an injector provider for it, then have the rule cast the current application class to the injector provider to retrieve the injector. The injector can be used to retrieve the controller and perform the same initialization steps that are being done today. Something similar may have to be done with the monitor, as well (or we can just avoid it to keep dependencies simpler). Unfortunately, this does require updating a lot of TestApplications and their components to implement the new interfaces.

This PR still needs a lot of work to get tests passing and adding new tests (beyond the initialization revamp mentioned above), but I think that this at least proves the viability of the new approach. I think we can use this as the basis now for both finishing your test PR and building a more clearly defined foundation for the dashboard project.

@BenHenning BenHenning changed the title Introduction of new platform parameter system Introduce new platform parameter system Mar 3, 2025
@BenHenning BenHenning changed the title Introduce new platform parameter system Introduce new platform parameter system infrastructure Mar 3, 2025
Some of the more affected targets (such as for feature flag logging)
have been directly updated and verified to pass. Logging itself has also
been fixed by introducing some new sync status-specific generation
support.
Copy link

github-actions bot commented Mar 4, 2025

APK & AAB differences analysis

Note that this is a summarized snapshot. See the CI artifacts for detailed differences.

Dev

Expand to see flavor specifics

Universal APK

APK file size: 19 MiB (old), 19 MiB (new), 4368 bytes (Added)

APK download size (estimated): 17 MiB (old), 17 MiB (new), 7211 bytes (Added)

Method count: 260308 (old), 260851 (new), 543 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 6832 (old), 6832 (new), 0 (No change)

  • Anim: 43 (old), 43 (new), 0 (No change)
  • Animator: 26 (old), 26 (new), 0 (No change)
  • Array: 15 (old), 15 (new), 0 (No change)
  • Attr: 922 (old), 922 (new), 0 (No change)
  • Bool: 9 (old), 9 (new), 0 (No change)
  • Color: 967 (old), 967 (new), 0 (No change)
  • Dimen: 1048 (old), 1048 (new), 0 (No change)
  • Drawable: 380 (old), 380 (new), 0 (No change)
  • Id: 1285 (old), 1285 (new), 0 (No change)
  • Integer: 37 (old), 37 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 380 (old), 380 (new), 0 (No change)
  • Menu: 3 (old), 3 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • Raw: 2 (old), 2 (new), 0 (No change)
  • String: 855 (old), 855 (new), 0 (No change)
  • Style: 832 (old), 832 (new), 0 (No change)
  • Xml: 6 (old), 6 (new), 0 (No change)

Lesson assets: 111 (old), 113 (new), 2 (Added):

  • feature_flags.pb (added)
  • platform_parameters.pb (added)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 18 MiB (old), 18 MiB (new), 4368 bytes (Added)
APK download size (estimated): 17 MiB (old), 17 MiB (new), 7651 bytes (Added)
Method count: 260308 (old), 260851 (new), 543 (Added)
Lesson assets: 111 (old), 113 (new), 2 (Added)

Configuration hdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 18 KiB (old), 18 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 49 KiB (old), 49 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 45 KiB (old), 45 KiB (new), 0 bytes (No change)
APK download size (estimated): 14 KiB (old), 14 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 86 KiB (old), 86 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 57 KiB (old), 57 KiB (new), 0 bytes (No change)
APK download size (estimated): 21 KiB (old), 21 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 29 KiB (old), 29 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 63 KiB (old), 63 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Alpha

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 8521 bytes (Added)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 8922 bytes (Added)

Method count: 115790 (old), 116022 (new), 232 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5800 (old), 5800 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1231 (old), 1231 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 788 (old), 788 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 114 (new), 3 (Added):

  • feature_flags.pb (added)
  • feature_flags_overrides.pb (added)
  • platform_parameters.pb (added)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 11 MiB (old), 11 MiB (new), 8525 bytes (Added)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 5009 bytes (Added)
Method count: 115790 (old), 116022 (new), 232 (Added)
Lesson assets: 111 (old), 114 (new), 3 (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Beta

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 8668 bytes (Added)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 13 KiB (Added)

Method count: 115796 (old), 116028 (new), 232 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5800 (old), 5800 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1231 (old), 1231 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 788 (old), 788 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 114 (new), 3 (Added):

  • feature_flags.pb (added)
  • feature_flags_overrides.pb (added)
  • platform_parameters.pb (added)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 10 MiB (old), 10 MiB (new), 8668 bytes (Added)
APK download size (estimated): 9 MiB (old), 10 MiB (new), 8912 bytes (Added)
Method count: 115796 (old), 116028 (new), 232 (Added)
Lesson assets: 111 (old), 114 (new), 3 (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Ga

Expand to see flavor specifics

Universal APK

APK file size: 11 MiB (old), 11 MiB (new), 8738 bytes (Added)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 13 KiB (Added)

Method count: 115796 (old), 116028 (new), 232 (Added)

Features: 2 (old), 2 (new), 0 (No change)

Permissions: 6 (old), 6 (new), 0 (No change)

Resources: 5800 (old), 5800 (new), 0 (No change)

  • Anim: 33 (old), 33 (new), 0 (No change)
  • Animator: 24 (old), 24 (new), 0 (No change)
  • Array: 14 (old), 14 (new), 0 (No change)
  • Attr: 888 (old), 888 (new), 0 (No change)
  • Bool: 8 (old), 8 (new), 0 (No change)
  • Color: 820 (old), 820 (new), 0 (No change)
  • Dimen: 780 (old), 780 (new), 0 (No change)
  • Drawable: 342 (old), 342 (new), 0 (No change)
  • Id: 1231 (old), 1231 (new), 0 (No change)
  • Integer: 32 (old), 32 (new), 0 (No change)
  • Interpolator: 11 (old), 11 (new), 0 (No change)
  • Layout: 343 (old), 343 (new), 0 (No change)
  • Menu: 1 (old), 1 (new), 0 (No change)
  • Mipmap: 1 (old), 1 (new), 0 (No change)
  • Plurals: 10 (old), 10 (new), 0 (No change)
  • String: 788 (old), 788 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 114 (new), 3 (Added):

  • feature_flags.pb (added)
  • feature_flags_overrides.pb (added)
  • platform_parameters.pb (added)

AAB differences

Expand to see AAB specifics

Supported configurations:

  • hdpi (same)
  • ldpi (same)
  • mdpi (same)
  • tvdpi (same)
  • xhdpi (same)
  • xxhdpi (same)
  • xxxhdpi (same)

Base APK

APK file size: 10 MiB (old), 10 MiB (new), 8738 bytes (Added)
APK download size (estimated): 9 MiB (old), 10 MiB (new), 9267 bytes (Added)
Method count: 115796 (old), 116028 (new), 232 (Added)
Lesson assets: 111 (old), 114 (new), 3 (Added)

Configuration hdpi

APK file size: 43 KiB (old), 43 KiB (new), 0 bytes (No change)
APK download size (estimated): 17 KiB (old), 17 KiB (new), 0 bytes (No change)

Configuration ldpi

APK file size: 44 KiB (old), 44 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration mdpi

APK file size: 38 KiB (old), 38 KiB (new), 0 bytes (No change)
APK download size (estimated): 13 KiB (old), 13 KiB (new), 0 bytes (No change)

Configuration tvdpi

APK file size: 73 KiB (old), 73 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Configuration xhdpi

APK file size: 50 KiB (old), 50 KiB (new), 0 bytes (No change)
APK download size (estimated): 20 KiB (old), 20 KiB (new), 0 bytes (No change)

Configuration xxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 28 KiB (old), 28 KiB (new), 0 bytes (No change)

Configuration xxxhdpi

APK file size: 55 KiB (old), 55 KiB (new), 0 bytes (No change)
APK download size (estimated): 27 KiB (old), 27 KiB (new), 0 bytes (No change)

Copy link
Collaborator

@adhiamboperes adhiamboperes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@BenHenning, I took a higlevel look at the approach, and would just like two clarifications:

  1. It looks like we are planning to have the TestPlatformParameterConfigRetriever replace the annotation system introduced in Fixes part of #4302 - Introducing a JUnit annotation & rule for overriding Platform Parameters and Feature Flags #5565, since they perform the same ovveride function.
  2. In app module tests like OnboardingFragmentTest, TestPlatformParameterConfigRetriever.setFlagOverride() is used without first injecting PlatformParameterTestInitializer like in EventBundleCreatorTest for example. Is this by design or general work still needing to be updated?

@@ -389,7 +388,7 @@ class OnboardingProfileTypeFragmentTest {
ExplorationStorageModule::class, NetworkModule::class, NetworkConfigProdModule::class,
NetworkConnectionUtilDebugModule::class, NetworkConnectionDebugUtilModule::class,
AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class,
PlatformParameterSingletonModule::class,
PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Duplicate entry.

@@ -623,7 +627,7 @@ class AudioLanguageFragmentTest {
ExplorationStorageModule::class, NetworkModule::class, HintsAndSolutionProdModule::class,
NetworkConnectionUtilDebugModule::class, NetworkConnectionDebugUtilModule::class,
AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class,
NetworkConfigProdModule::class, PlatformParameterSingletonModule::class,
NetworkConfigProdModule::class, PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: duplicate entry.

Comment on lines +634 to +635
PlatformParameterTestModule::class,
RobolectricModule::class, PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: duplicate entry.

@@ -2877,7 +2876,7 @@ class ExplorationActivityTest {
@Component(
modules = [
RobolectricModule::class,
TestPlatformParameterModule::class, PlatformParameterSingletonModule::class,
PlatformParameterTestModule::class, PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: duplicate entry.

@@ -6178,7 +6205,7 @@ class StateFragmentTest {
ExplorationStorageModule::class, NetworkConnectionUtilDebugModule::class,
NetworkConnectionDebugUtilModule::class, NetworkModule::class, NetworkConfigProdModule::class,
AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class,
PlatformParameterSingletonModule::class,
PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: duplicate entry.

@@ -1134,7 +1135,7 @@ class OnboardingFragmentTest {
@Component(
modules = [
RobolectricModule::class,
TestPlatformParameterModule::class, PlatformParameterSingletonModule::class,
PlatformParameterTestModule::class, PlatformParameterTestModule::class,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Duplicates.

@adhiamboperes adhiamboperes removed their assignment Mar 4, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants