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

Fix #1617: Remove source code genrules #5702

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

Conversation

BenHenning
Copy link
Member

@BenHenning BenHenning commented Feb 13, 2025

Explanation

Fixes #1617

This PR removes all genrules (https://bazel.build/reference/be/general#genrule) that generate Kotlin or Java source code in the repository. This corresponds to almost every app/ directory test and production file, including the few Java files used for binding adapters. While not every file was being regenerated, the vast majority were.

This change has fairly substantial implications:

  • Symbolization in Android Studio with the IntelliJ Bazel plugin should now work correctly if the corresponding targets are included in one's .bazelproject file. This didn't work before because the genrules would create a new file either with a different name or different path, so the plugin didn't know to associate the two during sync.
  • All old crash stack traces in crash dashboards (i.e. Crashlytics and the Play Console) may no longer match to the same crashes in versions of the app that will include this change if those stack traces include any affected app classes (since the names are now different). This isn't certain however, since the class names are the same (only the filenames are different, and it's possible the SourceFile attribute will be stripped or not included in corresponding Dex files that are deployed with the app).
  • The build will be a bit faster and take up fewer resources. While the genrules themselves ran very quickly, the bigger win is the large decrease in targets that need to be analyzed during a large build.
  • Imports will now appear fairly inconsistent across contexts as we now sometimes import R locally, from a common package, or from a very specific package (such as for tests). Databinding imports will face a similar issue. With symbolization in Android Studio, I'm hopeful this isn't too confusing to developers. In the long-term, we will try to remove the need for explicit imports entirely (and do away with databinding), but this sort of work will be on the order of years, not weeks or months, to complete. This will be the medium- to long-term state for development moving forward.

This change also includes a few noteworthy simplifications:

  • app_test has been removed entirely in favor of using oppia_android_test directly. This is the direction we want to go in general for simpler test definitions, so it's nice to see this was actually possible with the removal of test_with_resources. Using this for resource cases is a bit awkward right now due to needing to include the DataBinderMapperImpl.java bridge class for databinding, but hopefully this will be fixable in the future (android_local_test doesn't work with data-binding.  #1683).
  • A bunch of structures were simplified in app/BUILD.bazel due to the extra resources-specific splits of different libraries being no longer necessary. The notion of migrated targets were also removed since they were actually never needed with how Bazel's glob behaves.
  • Non-modularized app tests were able to be consolidated to one statement for both test/ and sharedTest/ tests (rather than having two), which is cleaner.

There was one wiki change needed since app_test is no longer available to use, and it has been clarified to better explain how to set up a test for resources vs. not.

For compatibility, this further cements Gradle no longer being able to be used for builds, but that's no longer a concern since we can't build with Gradle, anyway.

It's important to note that all of the updated import statements are reflecting the existing reality of the Bazel build configuration (i.e. these are exactly the import statements that Bazel was using via the genrule targets). Android resource processing is very complex, and even more so in the Bazel world. This means a lot of the R symbolic references are actually duplicated many times in the build pipeline, so there are other R files that can be used. This was an approach I took a few months ago to try and remove the genrules while maintaining Gradle compatibility. I didn't take that approach here for simplicity (it was more important to get this change in), but it's quite likely the import statements will see more iterations as we continue with modularization work. One useful goal may be to try and consolidate to local package R files to avoid needing an import at all (and thus remove potential confusion that there are many R files generated throughout the build graph), but there are other possibilities that can be explored as well.

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

N/A -- It's expected that this infrastructure-only change has no real impact on UIs, and this is assumed to be the case as per the passing tests.

This requires a whole bunch of import updates, and a lot of
simplifications in BUILD.bazel files. Some now unnecessary macros have
also been removed, as well as one wiki update.
@BenHenning BenHenning marked this pull request as ready for review February 13, 2025 20:58
@BenHenning BenHenning requested review from a team as code owners February 13, 2025 20:58
@BenHenning
Copy link
Member Author

Going to skip self-reviewing on this PR since it's quite a large number of files, and the way I did this change relied heavily on automation and verifying builds (so I'm rather confident in its correctness).

PTAL @adhiamboperes and feel free to delegate as needed since I know this is a large PR.

Copy link

Coverage Report

Results

Number of files assessed: 359
Overall Coverage: 0.00%
Coverage Analysis: PASS

Exempted coverage

Files exempted from coverage
File Exemption Reason
DeveloperOptionsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ViewEventLogsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/testing/ViewEventLogsTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ViewEventLogsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ViewEventLogsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ViewEventLogsActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DeveloperOptionsTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/testing/DeveloperOptionsTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
MathExpressionParserFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MathExpressionParserFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
This file is exempted from having a test file; skipping coverage check.
MathExpressionParserActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MathExpressionParserActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkStoriesCompletedActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkStoriesCompletedTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/testing/MarkStoriesCompletedTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
MarkStoriesCompletedFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkStoriesCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkTopicsCompletedTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/testing/MarkTopicsCompletedTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
MarkTopicsCompletedActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkTopicsCompletedFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkChaptersCompletedActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
MarkChaptersCompletedTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/testing/MarkChaptersCompletedTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
MarkChaptersCompletedFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarkChaptersCompletedActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivityPresenter.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.
ForceNetworkTypeFragment.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeTestActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/testing/ForceNetworkTypeTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ForceNetworkTypeActivityPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ForceNetworkTypeActivity.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ForceNetworkTypeViewModel.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ForceNetworkTypeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
DeveloperOptionsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ContinueButtonView.ktapp/src/main/java/org/oppia/android/app/customview/ContinueButtonView.kt
This file is exempted from having a test file; skipping coverage check.
LessonThumbnailImageView.ktapp/src/main/java/org/oppia/android/app/customview/LessonThumbnailImageView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ChapterNotStartedContainerConstraintLayout.ktapp/src/main/java/org/oppia/android/app/customview/ChapterNotStartedContainerConstraintLayout.kt
This file is exempted from having a test file; skipping coverage check.
MathExpressionInteractionsView.ktapp/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryCardView.ktapp/src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt
This file is exempted from having a test file; skipping coverage check.
VerticalDashedLineView.ktapp/src/main/java/org/oppia/android/app/customview/VerticalDashedLineView.kt
This file is exempted from having a test file; skipping coverage check.
SegmentedCircularProgressView.ktapp/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.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.
ConfettiConfig.ktapp/src/main/java/org/oppia/android/app/player/state/ConfettiConfig.kt
This file is exempted from having a test file; skipping coverage check.
StateFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.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.
MathExpressionInteractionsViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
SelectionInteractionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
SubmittedAnswerViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmittedAnswerViewModel.kt
This file is exempted from having a test file; skipping coverage check.
DragDropInteractionContentViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragDropInteractionContentViewModel.kt
This file is exempted from having a test file; skipping coverage check.
TextInputViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/TextInputViewModel.kt
This file is exempted from having a test file; skipping coverage check.
FractionInteractionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ImageRegionSelectionInteractionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ImageRegionSelectionInteractionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
PreviousResponsesHeaderViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/PreviousResponsesHeaderViewModel.kt
This file is exempted from having a test file; skipping coverage check.
RatioExpressionInputInteractionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt
This file is exempted from having a test file; skipping coverage check.
DragAndDropSortInteractionViewModel.ktapp/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragAndDropSortInteractionViewModel.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.
ProgressDatabaseFullDialogFragment.ktapp/src/main/java/org/oppia/android/app/player/stopplaying/ProgressDatabaseFullDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
StopExplorationDialogFragment.ktapp/src/main/java/org/oppia/android/app/player/stopplaying/StopExplorationDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
UnsavedExplorationDialogFragment.ktapp/src/main/java/org/oppia/android/app/player/stopplaying/UnsavedExplorationDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
BottomSheetOptionsMenu.ktapp/src/main/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenu.kt
This file is incompatible with code coverage tooling; 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.
ExplorationActivity.ktapp/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CellularAudioDialogFragment.ktapp/src/main/java/org/oppia/android/app/player/audio/CellularAudioDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
AudioViewModel.ktapp/src/main/java/org/oppia/android/app/player/audio/AudioViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AudioFragment.ktapp/src/main/java/org/oppia/android/app/player/audio/AudioFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/player/audio/AudioFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LanguageDialogFragment.ktapp/src/main/java/org/oppia/android/app/player/audio/LanguageDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageActivityPresenter.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AppLanguageFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReadingTextSizeActivity.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ReadingTextSizeActivityPresenter.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageFragmentPresenterV1.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragmentPresenterV1.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageActivity.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageFragment.ktapp/src/main/java/org/oppia/android/app/options/AppLanguageFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AudioLanguageItemViewModel.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ReadingTextSizeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioLanguageActivityPresenter.ktapp/src/main/java/org/oppia/android/app/options/AudioLanguageActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ReadingTextSizeFragment.ktapp/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionsActivity.ktapp/src/main/java/org/oppia/android/app/options/OptionsActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionsReadingTextSizeViewModel.ktapp/src/main/java/org/oppia/android/app/options/OptionsReadingTextSizeViewModel.kt
This file is exempted from having a test file; skipping coverage check.
OptionsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionsFragment.ktapp/src/main/java/org/oppia/android/app/options/OptionsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TextSizeItemViewModel.ktapp/src/main/java/org/oppia/android/app/options/TextSizeItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
PromotedStoryViewModel.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryViewModel.kt
This file is exempted from having a test file; skipping coverage check.
RecentlyPlayedFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
RecentlyPlayedViewModel.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedViewModel.kt
This file is exempted from having a test file; skipping coverage check.
RecentlyPlayedActivityPresenter.ktapp/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
HomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/HomeViewModel.kt
This file is exempted from having a test file; skipping coverage check.
PromotedStoryViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PromotedStoryListViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ComingSoonTopicsViewModel.ktapp/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
HomeActivityPresenter.ktapp/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WelcomeViewModel.ktapp/src/main/java/org/oppia/android/app/home/WelcomeViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TopicSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryViewModel.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
HomeActivity.ktapp/src/main/java/org/oppia/android/app/home/HomeActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinActivityPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileRenameActivityPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileDeleteSuccessDialogFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileDeleteSuccessDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
ProfileRenameFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileRenameFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileResetPinFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileListActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileResetPinFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileRenameActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditActivityPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileResetPinActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileEditActivity.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileEditDeletionDialogFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDeletionDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
ProfileEditFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt
This file is exempted from having a test file; skipping coverage check.
ProfileListFragment.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughFinalFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughActivity.ktapp/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
WalkthroughActivityPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughWelcomeFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughTopicListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
WalkthroughTopicSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicSummaryViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomListViewModel.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomListActivity.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListFragment.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ClassroomListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomList.ktapp/src/main/java/org/oppia/android/app/classroom/classroomlist/ClassroomList.kt
This file is exempted from having a test file; skipping coverage check.
AllClassroomsHeaderText.ktapp/src/main/java/org/oppia/android/app/classroom/classroomlist/AllClassroomsHeaderText.kt
This file is exempted from having a test file; skipping coverage check.
PromotedStoryList.ktapp/src/main/java/org/oppia/android/app/classroom/promotedlist/PromotedStoryList.kt
This file is exempted from having a test file; skipping coverage check.
ComingSoonTopicList.ktapp/src/main/java/org/oppia/android/app/classroom/promotedlist/ComingSoonTopicList.kt
This file is exempted from having a test file; skipping coverage check.
WelcomeText.ktapp/src/main/java/org/oppia/android/app/classroom/welcome/WelcomeText.kt
This file is exempted from having a test file; skipping coverage check.
ClassroomListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicCard.ktapp/src/main/java/org/oppia/android/app/classroom/topiclist/TopicCard.kt
This file is exempted from having a test file; skipping coverage check.
AllTopicsHeaderText.ktapp/src/main/java/org/oppia/android/app/classroom/topiclist/AllTopicsHeaderText.kt
This file is exempted from having a test file; skipping coverage check.
OsDeprecationNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
BetaNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OptionalAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
GeneralAvailabilityUpgradeNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ForcedAppDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
GeneralAvailabilityUpgradeNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
BetaNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AutomaticAppDeprecationNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/AutomaticAppDeprecationNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ForcedAppDeprecationNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OsDeprecationNoticeDialogFragment.ktapp/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OptionalAppDeprecationNoticeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
DragDropTestFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/testing/DragDropTestFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
BindableAdapterTestFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ColorBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/ColorBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
AppCompatCheckBoxBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/AppCompatCheckBoxBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ConceptCardFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TestFontScaleConfigurationUtilActivity.ktapp/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
DrawableBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/DrawableBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
RatioInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ListItemLeadingMarginSpanTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/ListItemLeadingMarginSpanTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ProfileEditFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ProfileEditFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MathExpressionInteractionsViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/MathExpressionInteractionsViewTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TextInputLayoutBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TextInputLayoutBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
HtmlParserTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/HtmlParserTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
DragDropTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/DragDropTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ColorBindingAdaptersTestFragment.ktapp/src/main/java/org/oppia/android/app/testing/ColorBindingAdaptersTestFragment.kt
This file is exempted from having a test file; skipping coverage check.
StateAssemblerPaddingBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/StateAssemblerPaddingBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TopicRevisionTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MarginBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/MarginBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TestFontScaleConfigurationUtilActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LessonThumbnailImageViewTestFragment.ktapp/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestFragment.kt
This file is exempted from having a test file; skipping coverage check.
PoliciesFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/PoliciesFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AudioFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TextInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TextInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ImageRegionSelectionTestFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ViewBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/ViewBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
FractionInputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
BindableAdapterTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/BindableAdapterTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ImageRegionSelectionTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
ImageViewBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/ImageViewBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
NavigationDrawerTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/NavigationDrawerTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
CircularProgressIndicatorAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
DragDropTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/DragDropTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HomeTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/HomeTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LessonThumbnailImageViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
SplashTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/SplashTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/SpotlightFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TextInputLayoutBindingAdaptersTestFragment.ktapp/src/main/java/org/oppia/android/app/testing/TextInputLayoutBindingAdaptersTestFragment.kt
This file is exempted from having a test file; skipping coverage check.
StateAssemblerMarginBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/StateAssemblerMarginBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
TextViewBindingAdaptersTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/TextViewBindingAdaptersTestActivity.kt
This file is exempted from having a test file; skipping coverage check.
AdministratorControlsFragmentTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/AdministratorControlsFragmentTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ExplorationTestActivityPresenter.ktapp/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
TopicTestActivityForStory.ktapp/src/main/java/org/oppia/android/app/testing/TopicTestActivityForStory.kt
This file is incompatible with code coverage tooling; skipping coverage check.
TestActivity.ktapp/src/main/java/org/oppia/android/app/testing/activity/TestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
InputInteractionViewTestActivity.ktapp/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ViewBindingShimImpl.ktapp/src/main/java/org/oppia/android/app/shim/ViewBindingShimImpl.kt
This file is exempted from having a test file; skipping coverage check.
SurveyWelcomeDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SurveyWelcomeDialogFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
SurveyActivity.ktapp/src/main/java/org/oppia/android/app/survey/SurveyActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ExitSurveyConfirmationDialogFragment.ktapp/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
SurveyActivityPresenter.ktapp/src/main/java/org/oppia/android/app/survey/SurveyActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SurveyViewModel.ktapp/src/main/java/org/oppia/android/app/survey/SurveyViewModel.kt
This file is exempted from having a test file; skipping coverage check.
SurveyFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
SurveyOutroDialogFragment.ktapp/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
UserTypeItemsViewModel.ktapp/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/UserTypeItemsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
MarketFitItemsViewModel.ktapp/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/MarketFitItemsViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ExitSurveyConfirmationDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SurveyFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/survey/SurveyFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SurveyOutroDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SplashActivityPresenter.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SplashActivity.ktapp/src/main/java/org/oppia/android/app/splash/SplashActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
HelpFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/help/HelpFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
HelpActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
HelpItemViewModel.ktapp/src/main/java/org/oppia/android/app/help/HelpItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
HelpActivity.ktapp/src/main/java/org/oppia/android/app/help/HelpActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
FAQSingleActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
FAQListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
FAQListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
FAQListViewModel.ktapp/src/main/java/org/oppia/android/app/help/faq/FAQListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
LicenseListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ThirdPartyDependencyListViewModel.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
LicenseTextViewerFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LicenseTextViewerActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LicenseListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
LicenseTextViewModel.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewModel.kt
This file is exempted from having a test file; skipping coverage check.
LicenseListViewModel.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ThirdPartyDependencyListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ThirdPartyDependencyListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
HelpListViewModel.ktapp/src/main/java/org/oppia/android/app/help/HelpListViewModel.kt
This file is exempted from having a test file; skipping coverage check.
HelpFragment.ktapp/src/main/java/org/oppia/android/app/help/HelpFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OngoingTopicItemViewModel.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicItemViewModel.kt
This file is exempted from having a test file; skipping coverage check.
OngoingTopicListActivity.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
OngoingTopicListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
OngoingTopicListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminSettingsDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ProfileChooserFragment.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AdminAuthActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AddProfileActivity.ktapp/src/main/java/org/oppia/android/app/profile/AddProfileActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
PinPasswordActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
ResetPinViewModel.ktapp/src/main/java/org/oppia/android/app/profile/ResetPinViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AddProfileActivityPresenter.ktapp/src/main/java/org/oppia/android/app/profile/AddProfileActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
PinPasswordActivity.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PinPasswordViewModel.ktapp/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
This file is exempted from having a test file; skipping coverage check.
AdminAuthActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminAuthActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ResetPinDialogFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
AdminPinActivity.ktapp/src/main/java/org/oppia/android/app/profile/AdminPinActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
ProfileChooserFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MyDownloadsActivity.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt
This file is exempted from having a test file; skipping coverage check.
MyDownloadsFragment.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
UpdatesTabFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MyDownloadsActivityPresenter.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
DownloadsTabFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
MyDownloadsFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
SpotlightFragment.ktapp/src/main/java/org/oppia/android/app/spotlight/SpotlightFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesActivityPresenter.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
PoliciesFragment.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
PoliciesFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
PoliciesActivity.ktapp/src/main/java/org/oppia/android/app/policies/PoliciesActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
AppLanguageResourceHandler.ktapp/src/main/java/org/oppia/android/app/translation/AppLanguageResourceHandler.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CompletedStoryListActivity.ktapp/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
CompletedStoryListActivityPresenter.ktapp/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
CompletedStoryListFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StoryActivity.ktapp/src/main/java/org/oppia/android/app/story/StoryActivity.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryChapterSummaryViewModel.ktapp/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryChapterSummaryViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StoryHeaderViewModel.ktapp/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryHeaderViewModel.kt
This file is exempted from having a test file; skipping coverage check.
StoryFragment.ktapp/src/main/java/org/oppia/android/app/story/StoryFragment.kt
This file is incompatible with code coverage tooling; skipping coverage check.
StoryActivityPresenter.ktapp/src/main/java/org/oppia/android/app/story/StoryActivityPresenter.kt
This file is exempted from having a test file; skipping coverage check.
StoryFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
NavigationDrawerItem.ktapp/src/main/java/org/oppia/android/app/drawer/NavigationDrawerItem.kt
This file is exempted from having a test file; skipping coverage check.
NavigationDrawerFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
This file is exempted from having a test file; skipping coverage check.
NavigationDrawerHeaderViewModel.ktapp/src/main/java/org/oppia/android/app/drawer/NavigationDrawerHeaderViewModel.kt
This file is exempted from having a test file; skipping coverage check.
ExitProfileDialogFragment.ktapp/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogFragment.kt
This file is exempted from having a test file; skipping coverage check.
ResumeLessonFragmentPresenter.ktapp/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentPresenter.kt
This file is exempted f...[Comment body truncated]

Copy link

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), 356 bytes (Removed)

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

Method count: 260321 (old), 260321 (new), 0 (No change)

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

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

Resources: 6830 (old), 6830 (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: 853 (old), 853 (new), 0 (No change)
  • Style: 832 (old), 832 (new), 0 (No change)
  • Xml: 6 (old), 6 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

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), 356 bytes (Removed)
APK download size (estimated): 17 MiB (old), 17 MiB (new), 2050 bytes (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), 8 bytes (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 469 bytes (Removed)

Method count: 115840 (old), 115840 (new), 0 (No change)

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

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

Resources: 5798 (old), 5798 (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: 786 (old), 786 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

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), 8 bytes (Removed)
APK download size (estimated): 10 MiB (old), 10 MiB (new), 21 bytes (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), 0 bytes (No change)

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

Method count: 115846 (old), 115846 (new), 0 (No change)

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

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

Resources: 5798 (old), 5798 (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: 786 (old), 786 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

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), 0 bytes (No change)
APK download size (estimated): 9 MiB (old), 9 MiB (new), 214 bytes (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), 4 bytes (Removed)

APK download size (estimated): 10 MiB (old), 10 MiB (new), 36 bytes (Removed)

Method count: 115846 (old), 115846 (new), 0 (No change)

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

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

Resources: 5798 (old), 5798 (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: 786 (old), 786 (new), 0 (No change)
  • Style: 473 (old), 473 (new), 0 (No change)
  • Xml: 1 (old), 1 (new), 0 (No change)

Lesson assets: 111 (old), 111 (new), 0 (No change)

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), 0 bytes (No change)
APK download size (estimated): 9 MiB (old), 9 MiB (new), 9 bytes (Removed)

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.

I have reviewed about 50% of these files, and mostly look good. I ran the code locally and my observation was:

  1. It appears that the Bazel plugin does not handle conflict resolution well, e.g.
  • when there are 2 versions of the same dependency, such as version 2.20 and 2.3.1, then it shows an error wherever classes of that dependency are used.
  • There is a possible conflic when multiple R classes are available, and I wonder if it has something to do with how DataBinderMapperImpl handles generated bindings, or perharps how the plugin interprets the bindings.
 public List<DataBinderMapper> collectDependencies() {
   ArrayList<DataBinderMapper> result = new ArrayList<DataBinderMapper>(5);
   result.add(new org.oppia.android.app.databinding.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.databinding.adapters.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.ui.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.view.models.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.views.DataBinderMapperImpl());
   return result;
 }

It seems that the generated R classes are prioritized based on the order of packages in the resulting list, such that the plugin can only resolve import org.oppia.android.app.databinding.R but not import org.oppia.android.app.ui.R, import org.oppia.android.app.view.models.R or import org.oppia.android.app.views.R.

  1. It is likely that import org.oppia.android.app.ui.R can safely be replaced by org.oppia.android.app.databinding.R

PTAL, thanks @BenHenning!

)

app_test(
oppia_android_test(
Copy link
Collaborator

Choose a reason for hiding this comment

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

Noticed in build warnings that TextInputLayoutBindingAdaptersTest is missing a test target here. It seems I forgot to create one when I added the test suite in a previous PR.

Copy link
Member Author

Choose a reason for hiding this comment

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

Good catch--I'll add this on the next pass for changes. I think I might've caught this in my modularization PR chain, though I'm actually surprised this wasn't caught by TestFileCheck. I'm assuming it might be because that script is only verifying against production Kotlin files and not Java. :) I suppose I could fix the check in this PR, but ideally we move away from Java long-term, anyway, so it may not actually be worth the effort.

I think I had some success migrating these Java files to Kotlin in the past, as well...

@@ -40,6 +39,7 @@ import org.oppia.android.app.devoptions.DeveloperOptionsModule
import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.test.R
Copy link
Collaborator

Choose a reason for hiding this comment

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

Import does not appear to be used (greyed out in IDE, and test ran fine when removed). It seems that the test is using local package R file instead.
Screenshot 2025-02-14 at 21 00 43

Copy link
Collaborator

Choose a reason for hiding this comment

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

Ditto all tests in this package.

Copy link
Member Author

@BenHenning BenHenning Feb 18, 2025

Choose a reason for hiding this comment

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

This is actually really surprising to me. I can try to remove the imports and re-run the tests. It may be the case that a LOT of code can technically rely on the locally produced R files (it's a really significant problem with android_library in my opinion as it adds a ton of unnecessary build complexity and time, but we don't have an obvious mitigation for now).

This is a great catch. My goal for the PR was reaching code parity with the actual build today, but I welcome simplifications like this.

@BenHenning
Copy link
Member Author

I have reviewed about 50% of these files, and mostly look good. I ran the code locally and my observation was:

  1. It appears that the Bazel plugin does not handle conflict resolution well, e.g.
  • when there are 2 versions of the same dependency, such as version 2.20 and 2.3.1, then it shows an error wherever classes of that dependency are used.
  • There is a possible conflic when multiple R classes are available, and I wonder if it has something to do with how DataBinderMapperImpl handles generated bindings, or perharps how the plugin interprets the bindings.
 public List<DataBinderMapper> collectDependencies() {
   ArrayList<DataBinderMapper> result = new ArrayList<DataBinderMapper>(5);
   result.add(new org.oppia.android.app.databinding.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.databinding.adapters.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.ui.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.view.models.DataBinderMapperImpl());
   result.add(new org.oppia.android.app.views.DataBinderMapperImpl());
   return result;
 }

It seems that the generated R classes are prioritized based on the order of packages in the resulting list, such that the plugin can only resolve import org.oppia.android.app.databinding.R but not import org.oppia.android.app.ui.R, import org.oppia.android.app.view.models.R or import org.oppia.android.app.views.R.

  1. It is likely that import org.oppia.android.app.ui.R can safely be replaced by org.oppia.android.app.databinding.R

PTAL, thanks @BenHenning!

Thanks @adhiamboperes! Usually, we should never have multiple versions (rules_jvm_external makes a strong effort to ensure this), but you're correct that there are cases with both databinding and Android resources code generation that could result in duplicated symbols.

I'm also not sure if the error you're describing is due to duplication--are you seeing an actual sync failure or broken symbols in Oppia Android code? Dependency management is much more complex in the Bazel world than Gradle since there are thousands of targets to build rather than ~6, so it's possible for multiple R files to exist with the same symbols but not be available for a given source file (if the corresponding kt_android_library is not in the deps for that target).

Separately, do you want me to make changes before you finish reviewing the PR? I'm assuming it will be much easier to review incremental changes after a full review since then your marked review files will correctly diff against later changes.

@oppiabot oppiabot bot assigned adhiamboperes and unassigned BenHenning Feb 18, 2025
Copy link

oppiabot bot commented Feb 18, 2025

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

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.

Remove genrules once Gradle has been removed
2 participants