oppia-android icon indicating copy to clipboard operation
oppia-android copied to clipboard

Fixes part of #5345 : Introduced Feature Flag Screen

Open theayushyadav11 opened this issue 6 months ago • 11 comments

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 FeatureFlagActivity and FeatureFlagFragment to provide a dedicated UI for managing feature flags. (FeatureFlagActivity.kt [1]], FeatureFlagFragment.kt [2]])
    • Added FeatureFlagActivityPresenter and FeatureFlagFragmentPresenter to handle the UI logic for the activity and fragment. (FeatureFlagActivityPresenter.kt [1]], FeatureFlagFragmentPresenter.kt [2]])
  • View Models for Feature Flags:

    • Introduced FeatureFlagViewModel and FeatureFlagItemViewModel to 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])

Developer Options Updates:

  • Routing to Feature Flags:

    • Added RouteToFeatureFlagsListener interface and implemented it in DeveloperOptionsActivity to enable navigation to the new feature flags activity. (app/src/main/java/org/oppia/android/app/devoptions/RouteToFeatureFlagsListener.kt [1]], DeveloperOptionsActivity.kt [2]], [3]])
  • Integration with Developer Options UI:

    • Updated DeveloperOptionsViewModel and DeveloperOptionsOverrideAppBehaviorsViewModel to 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]])

Configuration and Dependency Updates:

  • Bazel Build File Updates:

    • Added new files for feature flags to LISTENERS, VIEW_MODELS, and dependencies in BUILD.bazel. (app/BUILD.bazel [1]], [2]], [3]])
  • Manifest and Dependency Injection:

    • Registered FeatureFlagActivity in the Android manifest. (app/src/main/AndroidManifest.xml [app/src/main/AndroidManifest.xmlR307-R310])
    • Updated ActivityComponentImpl to support dependency injection for FeatureFlagActivity. (app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt [1]], [2]])

Screenshots

Screenshot 1 Screenshot 2

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

theayushyadav11 avatar Jun 12 '25 22:06 theayushyadav11

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

github-actions[bot] avatar Jun 15 '25 17:06 github-actions[bot]

@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)?

Rd4dev avatar Jun 16 '25 17:06 Rd4dev

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.

adhiamboperes avatar Jun 17 '25 13:06 adhiamboperes

PTAL @Rd4dev .

theayushyadav11 avatar Jun 17 '25 23:06 theayushyadav11

Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!

oppiabot[bot] avatar Jun 17 '25 23:06 oppiabot[bot]

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

github-actions[bot] avatar Jun 18 '25 01:06 github-actions[bot]

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.

Rd4dev avatar Jun 18 '25 17:06 Rd4dev

Hi @Rd4dev, due to the size of the PR, please do the first pass then assign to me for codeowner approval.

adhiamboperes avatar Jun 18 '25 20:06 adhiamboperes

Unassigning @Rd4dev since the review is done.

oppiabot[bot] avatar Jun 20 '25 14:06 oppiabot[bot]

Hi @theayushyadav11, it looks like some changes were requested on this pull request by @Rd4dev. PTAL. Thanks!

oppiabot[bot] avatar Jun 20 '25 14:06 oppiabot[bot]

@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:

  1. 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 DebugController would be useful for mocking debug functionalities in the UI tests.
  2. 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
  3. 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!

Rd4dev avatar Jun 20 '25 14:06 Rd4dev

@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:

  1. 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 DebugController would be useful for mocking debug functionalities in the UI tests.
  2. 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
  3. 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.

BenHenning avatar Jun 23 '25 18:06 BenHenning

@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.

BenHenning avatar Jun 23 '25 18:06 BenHenning

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.

adhiamboperes avatar Jun 26 '25 09:06 adhiamboperes

PTAL @Rd4dev .

theayushyadav11 avatar Jun 27 '25 00:06 theayushyadav11

Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!

oppiabot[bot] avatar Jun 27 '25 00:06 oppiabot[bot]

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

github-actions[bot] avatar Jun 27 '25 00:06 github-actions[bot]

Unassigning @Rd4dev since the review is done.

oppiabot[bot] avatar Jun 29 '25 21:06 oppiabot[bot]

Hi @theayushyadav11, it looks like some changes were requested on this pull request by @Rd4dev. PTAL. Thanks!

oppiabot[bot] avatar Jun 29 '25 21:06 oppiabot[bot]

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

github-actions[bot] avatar Jul 01 '25 10:07 github-actions[bot]

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

github-actions[bot] avatar Jul 01 '25 11:07 github-actions[bot]

PTAL @Rd4dev , I have tried incorporating all the changes requested.

theayushyadav11 avatar Jul 01 '25 12:07 theayushyadav11

Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!

oppiabot[bot] avatar Jul 01 '25 12:07 oppiabot[bot]

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.

image

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.

Rd4dev avatar Jul 01 '25 12:07 Rd4dev

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

github-actions[bot] avatar Jul 01 '25 15:07 github-actions[bot]

Unassigning @Rd4dev since the review is done.

oppiabot[bot] avatar Jul 01 '25 17:07 oppiabot[bot]

Hi @adhiamboperes seeking your directions on this comment as this will help to wrap us this PR.

theayushyadav11 avatar Jul 02 '25 08:07 theayushyadav11

Hi @Rd4dev , I have addressed all the comments PTAL and resolve the comments .

theayushyadav11 avatar Jul 02 '25 15:07 theayushyadav11

Unassigning @theayushyadav11 since a re-review was requested. @theayushyadav11, please make sure you have addressed all review comments. Thanks!

oppiabot[bot] avatar Jul 02 '25 15:07 oppiabot[bot]

Unassigning @Rd4dev since they have already approved the PR.

oppiabot[bot] avatar Jul 02 '25 19:07 oppiabot[bot]