Fixes part of #5345 : Introduced Feature Flag Screen
Fixes part of #5345 This pull request introduces a new "Feature Flags" functionality in the developer options of the app, allowing developers to view and modify feature flags. The changes include adding a new activity, fragment, view models, and necessary wiring to integrate this feature into the existing developer options structure.
Feature Flags Functionality Integration:
-
New Activity and Fragment for Feature Flags:
- Added
FeatureFlagActivityandFeatureFlagFragmentto provide a dedicated UI for managing feature flags. (FeatureFlagActivity.kt[1]],FeatureFlagFragment.kt[2]]) - Added
FeatureFlagActivityPresenterandFeatureFlagFragmentPresenterto handle the UI logic for the activity and fragment. (FeatureFlagActivityPresenter.kt[1]],FeatureFlagFragmentPresenter.kt[2]])
- Added
-
View Models for Feature Flags:
- Introduced
FeatureFlagViewModelandFeatureFlagItemViewModelto manage the state and data of feature flags in the UI. (app/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt[FeatureFlagItemViewModel.ktR1-R12])
- Introduced
Developer Options Updates:
-
Routing to Feature Flags:
- Added
RouteToFeatureFlagsListenerinterface and implemented it inDeveloperOptionsActivityto enable navigation to the new feature flags activity. (app/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt[1]],DeveloperOptionsActivity.kt[2]], [3]])
- Added
-
Integration with Developer Options UI:
- Updated
DeveloperOptionsViewModelandDeveloperOptionsOverrideAppBehaviorsViewModelto include a new option for navigating to the feature flags screen. (app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt[1]], [2]],app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt[3]], [4]])
- Updated
Configuration and Dependency Updates:
-
Bazel Build File Updates:
- Added new files for feature flags to
LISTENERS,VIEW_MODELS, and dependencies inBUILD.bazel. (app/BUILD.bazel[1]], [2]], [3]])
- Added new files for feature flags to
-
Manifest and Dependency Injection:
- Registered
FeatureFlagActivityin the Android manifest. (app/src/main/AndroidManifest.xml[app/src/main/AndroidManifest.xmlR307-R310]) - Updated
ActivityComponentImplto support dependency injection forFeatureFlagActivity. (app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt[1]], [2]])
- Registered
Screenshots
Essential Checklist
- [x] 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: ...".)
- [x] Any changes to scripts/assets files have their rationale included in the PR explanation.
- [x] The PR follows the style guide.
- [x] The PR does not contain any unnecessary code changes from Android Studio (reference).
- [x] The PR is made from a branch that's not called "develop" and is up-to-date with "develop".
- [x] 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
Coverage Report
Results
Number of files assessed: 18 Overall Coverage: 77.35% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
GaApplicationComponent.ktapp/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
PlatformParameterControllerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerDebugImpl.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
@adhiamboperes — checking if Ayush should continue assigning Subhajit for the initial review pass for the follow-up PRs, as done with PR 1.1 (#5845)?
Hi @Rd4dev, since the assignment flow for reviewers in training is not yet fully established, it is best to assign PRs to me first then I can delegate as needed.
PTAL @Rd4dev .
Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!
Coverage Report
Results
Number of files assessed: 22 Overall Coverage: 77.35% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
BetaApplicationComponent.ktapp/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperApplicationComponent.ktapp/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt |
This file is exempted from having a test file; skipping coverage check. |
GaApplicationComponent.ktapp/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterDebugModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterDebugModule.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
PlatformParameterControllerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerDebugImpl.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
PlatformParameterDebugController.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterDebugController.kt |
This file is exempted from having a test file; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
Thanks @theayushyadav11.
Hi @Rd4dev, since the assignment flow for reviewers in training is not yet fully established, it is best to assign PRs to me first then I can delegate as needed.
Assigning to @adhiamboperes as per the above comment. Would take a pass once assigned back.
Hi @Rd4dev, due to the size of the PR, please do the first pass then assign to me for codeowner approval.
Unassigning @Rd4dev since the review is done.
Hi @theayushyadav11, it looks like some changes were requested on this pull request by @Rd4dev. PTAL. Thanks!
@BenHenning, @adhiamboperes -- requesting input on the right approach to proceed with the module setup for this debug specific implementations.
We implemented the PlatformParmaeterControllerDebugImpl extending the PlatformParameterController and to support ephemeral loading logic for dev-only UI rendering, we introduced a debug specific interface PlatformParameterDebugController — considering to avoid injecting debug implementations directly.
However, while setting up tests (especially broader test suites), we noticed that other unrelated test cases now indirectly depend on this debug controller interface, causing DI graph issues. [CI Stacktrace]
We considered three options to resolve this:
- Use the DebugImpl directly, Since it's a debug-specific class under devoptions, this compromise seemed reasonable for now, even though it technically breaks clean abstraction principles by injecting a concrete class.
Edit: Also, we're currently preferring options 2 and 3, as the
DebugControllerwould be useful for mocking debug functionalities in the UI tests. - Create a dedicated debug module, similar to how NetworkDebugUtil is handled, and wire it into all relevant test suites (roughly 180). We paused this approach as it was flagged confusing + needs cleanup in #5823
- Use
TestPlatformParameterModule(atleast temporarily) to provide the debug interface, which unblocks other tests for now, but we’re unsure if it’s sustainable or appropriate long-term going forward with #5725.
We’d appreciate suggestions on the best way forward here—or if there's a better, cleaner approach to move ahead. // cc: @theayushyadav11
Thanks!
@BenHenning, @adhiamboperes -- requesting input on the right approach to proceed with the module setup for this debug specific implementations.
We implemented the
PlatformParmaeterControllerDebugImplextending thePlatformParameterControllerand to support ephemeral loading logic for dev-only UI rendering, we introduced a debug specific interfacePlatformParameterDebugController— considering to avoid injecting debug implementations directly.However, while setting up tests (especially broader test suites), we noticed that other unrelated test cases now indirectly depend on this debug controller interface, causing DI graph issues. [CI Stacktrace]
We considered three options to resolve this:
- Use the DebugImpl directly, Since it's a debug-specific class under devoptions, this compromise seemed reasonable for now, even though it technically breaks clean abstraction principles by injecting a concrete class. Edit: Also, we're currently preferring options 2 and 3, as the
DebugControllerwould be useful for mocking debug functionalities in the UI tests.- Create a dedicated debug module, similar to how NetworkDebugUtil is handled, and wire it into all relevant test suites (roughly 180). We paused this approach as it was flagged confusing + needs cleanup in Fix part of #59: Clean up Dagger module names and bindings #5823
- Use
TestPlatformParameterModule(atleast temporarily) to provide the debug interface, which unblocks other tests for now, but we’re unsure if it’s sustainable or appropriate long-term going forward with Introduce new platform parameter system infrastructure #5725.We’d appreciate suggestions on the best way forward here—or if there's a better, cleaner approach to move ahead. // cc: @theayushyadav11
Thanks!
@Rd4dev @theayushyadav11
Unfortunately the logs have been deleted (they clean up automatically after a few days, so it's probably better to Gist them if long and link them here or just copy the logs directly if they aren't too long).
I don't understand how dependencies are picking up the debug implementation. Is this because of the fact that the activity and fragment classes need to be part of the central ActivtyComponentImpl/FragmentComponentImpl classes? Those being pulled out the way that they are should avoid this since a DI graph only "realizes" a dependency at injection time. It's completely valid to have compile-time references to multiple bindings across multiple classes as the actual resolution will depend on the specific Dagger components generated (e.g. the Dagger graph) for that build unit. There's one of these per test, and one per build flavor of the app.
That means this comes down to two things:
- Where the debug implementation is being injected
- What the Dagger components are setting up to facilitate this injection
For (1) we should presumably only need to inject the debug implementation in the new dashboard fragment/activity presenters. Assuming we're still setting these up so that they're properly isolated (i.e. only included in the dev build of the app), then only the dev build and tests that directly use these fragments/activities would require the debug implementation. It doesn't sound like this is the case per your message mentioning 180 tests that need updating.
For (2) if the graph is correctly isolated, then the only application components that would need the new debug module would be the one for the dev flavor of the app, plus the tests directly testing the new UI classes.
Edit: An example of this is HintsAndSolutionDebugModule I think. That has a prod and debug variant for HintHandler and is correctly wired only for relevant tests. However, it's not being injected in UI components so perhaps that's the difference here.
Edit 2: I think this is a consequence of the activity component injector since that needs to make all activities injectable. I didn't realize we don't have any debug-swapped implementations that aren't fully replaced for tests and also used in UI classes (NetworkConnectionUtil came to mind but its debug variant is used in all/nearly all tests).
Can we try to wrap PlatformParameterDebugController into a Provider and see if that resolves the issue? See https://docs.oracle.com/javaee/7/api/javax/inject/Provider.html and other uses in the codebase for specifics, but this defers needing to resolve the binding in ActivityComponentImpl which means avoiding needing to resolve it everywhere. It's a hack that we should fix properly (and should have a TODO issue filed for it), but it's likely the cleanest solution to this problem since it avoids affecting production or every test in the codebase.
@Rd4dev and @theayushyadav11 please look at the last paragraph in my previous message in particular--I think that will solve the problem you're running into and with the least amount of effort.
Hi @theayushyadav11, unassigning myself at the moment since I believe there is some worrk required before it is ready for my review pass. Please reassign when ready.
PTAL @Rd4dev .
Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!
Coverage Report
Results
Number of files assessed: 22 Overall Coverage: 77.35% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagsTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
StatePlayerRecyclerViewAssembler.ktapp/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt |
This file is exempted from having a test file; skipping coverage check. |
StateFragment.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
StateItemViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FlashbackButtonViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FlashbackButtonViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
StateFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterControllerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerDebugImpl.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
PlatformParameterModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
Unassigning @Rd4dev since the review is done.
Hi @theayushyadav11, it looks like some changes were requested on this pull request by @Rd4dev. PTAL. Thanks!
Coverage Report
Results
Number of files assessed: 17 Overall Coverage: 77.35% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagsTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterDebugModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterDebugModule.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterControllerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerDebugImpl.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
Coverage Report
Results
Number of files assessed: 35 Overall Coverage: 84.78% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
LintAnalysisReporter.ktscripts/src/java/org/oppia/android/scripts/lint/LintAnalysisReporter.kt |
98.54% | 203 / 206 | :white_check_mark: | 70% |
AndroidLintRunner.ktscripts/src/java/org/oppia/android/scripts/lint/AndroidLintRunner.kt |
93.62% | 44 / 47 | :white_check_mark: | 70% |
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
HintsAndSolutionViewModel.ktapp/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
SolutionViewModel.ktapp/src/main/java/org/oppia/android/app/hintsandsolution/SolutionViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
HintsAndSolutionDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
HintsDialogSolutionViewModel.ktapp/src/main/java/org/oppia/android/app/hintsandsolution/HintsDialogSolutionViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagsTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
StateFragmentTestActivity.ktapp/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
StatePlayerRecyclerViewAssembler.ktapp/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt |
This file is exempted from having a test file; skipping coverage check. |
StateFragment.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
StateItemViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
StateSolutionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateSolutionViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
ReturnToQuestionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ReturnToQuestionViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
StateFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FlashbackToolbarListener.ktapp/src/main/java/org/oppia/android/app/player/state/listener/FlashbackToolbarListener.kt |
This file is exempted from having a test file; skipping coverage check. |
ExplorationActivity.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
ExplorationViewModel.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
ExplorationActivityPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
ExplorationProgressController.ktdomain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressController.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
PlatformParameterDebugModule.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterDebugModule.kt |
This file is exempted from having a test file; skipping coverage check. |
PlatformParameterControllerDebugImpl.ktdomain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterControllerDebugImpl.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
PTAL @Rd4dev , I have tried incorporating all the changes requested.
Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!
theayushyadav11 -- I noticed that over 50% of the previous comments are still unreplied, which makes it difficult to determine whether they’ve been addressed. Some portions are marked as “done” or “addressed,” but they seem to be not completely done — so please verify those and respond to the comments to confirm their status or provide context.
Hey @theayushyadav11, reaching out quickly to check if you've replied to all the comments, as I could still see a lot of comments that are not being replied to—please make sure to respond to each one after verifying that the changes are fully addressed throughout the PR. You can use the 'Conversation' tab (as I showed in yesterday’s meeting) to spot any unresolved ones.
I’ll take another look as soon as that’s done so we can aim to wrap this up by EOD.
Having a replied comment helps confirm that the feedback has been acknowledged and addressed, rather than accidentally overlooked or left unresolved.
Coverage Report
Results
Number of files assessed: 16 Overall Coverage: 77.35% Coverage Analysis: PASS :white_check_mark:
Passing coverage
Files with passing code coverage
| File | Coverage | Lines Hit | Status | Min Required |
|---|---|---|---|---|
EventBundleCreator.ktutility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt |
77.35% | 338 / 437 | :white_check_mark: | 70% |
Exempted coverage
Files exempted from coverage
| File | Exemption Reason |
|---|---|
RouteToFeatureFlagsListener.ktapp/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragment.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/testing/FeatureFlagsTestActivity.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivity.kt |
This file is incompatible with code coverage tooling; skipping coverage check. |
FeatureFlagItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsFragmentPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
FeatureFlagsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/featureflags/FeatureFlagsActivityPresenter.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsOverrideAppBehaviorsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
EventLogItemViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/EventLogItemViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
DeveloperOptionsViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt |
This file is exempted from having a test file; skipping coverage check. |
FragmentComponentImpl.ktapp/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
ActivityComponentImpl.ktapp/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt |
This file is exempted from having a test file; skipping coverage check. |
TestPlatformParameterModule.kttesting/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt |
This file is exempted from having a test file; skipping coverage check. |
Refer test_file_exemptions.textproto for the comprehensive list of file exemptions and their required coverage percentages.
To learn more, visit the Oppia Android Code Coverage wiki page
Unassigning @Rd4dev since the review is done.
Hi @adhiamboperes seeking your directions on this comment as this will help to wrap us this PR.
Hi @Rd4dev , I have addressed all the comments PTAL and resolve the comments .
Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!
Unassigning @Rd4dev since they have already approved the PR.