From 2c80614defa883f2777ec16d7d8ca134572e09b4 Mon Sep 17 00:00:00 2001 From: Rd Date: Tue, 18 Jun 2024 14:34:20 +0530 Subject: [PATCH 01/12] Update the test exemption check script & its exemption format along with test_file_exemptions.textproto --- scripts/assets/test_file_exemptions.textproto | 4435 +++++++++++++---- .../scripts/proto/script_exemptions.proto | 49 +- .../android/scripts/testfile/TestFileCheck.kt | 3 +- 3 files changed, 3591 insertions(+), 896 deletions(-) diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto index ccc591f02a4..63309b039fd 100644 --- a/scripts/assets/test_file_exemptions.textproto +++ b/scripts/assets/test_file_exemptions.textproto @@ -1,887 +1,3548 @@ -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactoriesModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/route/Route.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AdministratorControlsFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AdministratorControlsFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/MathExpressionInteractionsViewTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadAppVersionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadLearnerAnalyticsListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadProfileEditListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadProfileListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LogoutDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/ProfileEditDeletionDialogListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToAppVersionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToLearnerAnalyticsListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToProfileListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/ShowLogoutDialogListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAccountActionsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAppInformationViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsGeneralViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsProfileAndDeviceIdViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsProfileViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/CopyIdMaterialButtonView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/DeviceIdItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileLearnerIdItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ControlButtonsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/SyncStatusItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ActivityComponentFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationContext.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alpha/AlphaOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaBuildFlavorModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/beta/BetaOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/dev/DeveloperOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ga/GaOppiaApplication.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/ChapterNotStartedContainerConstraintLayout.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/ContinueButtonView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SurveyOnboardingBackgroundView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/VerticalDashedLineView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/AutomaticAppDeprecationNoticeDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/AutomaticAppDeprecationNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/BetaNoticeClosedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/DeprecationNoticeExitAppListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeClosedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarterImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarterModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/ForceCrashButtonClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToForceNetworkTypeListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkChaptersCompletedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkStoriesCompletedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkTopicsCompletedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMathExpressionParserTestListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToViewEventLogsListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsModifyLessonProgressViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsViewLogsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/NetworkTypeItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/testing/ForceNetworkTypeTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/ChapterSelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/ChapterSummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/StorySummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/testing/MarkChaptersCompletedTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/StorySelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/StorySummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/testing/MarkStoriesCompletedTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/testing/MarkTopicsCompletedTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/TopicSelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/TopicViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/testing/DeveloperOptionsTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/EventLogItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/testing/ViewEventLogsTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFooterViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerItem.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/RouteToProfileProgressListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItems.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadFaqListFragmentListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadLicenseListFragmentListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadLicenseTextViewerFragmentListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadPoliciesFragmentListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadThirdPartyDependencyListFragmentListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/RouteToFAQListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/RouteToThirdPartyDependencyListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/RouteToFAQSingleListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQContentViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/RouteToLicenseListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/RouteToLicenseTextListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/ExpandedHintListIndexListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/ReturnToLessonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealHintListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealSolutionDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealSolutionInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/SolutionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToExplorationListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToRecentlyPlayedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicPlayStoryListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/UserAppHistoryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsListView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryListAdapter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/SectionTitleViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/AllTopicsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsTab.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsViewPagerAdapter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/DeprecationNoticeActionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/BetaNoticeDialogFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/ForcedAppDeprecationNoticeDialogFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/GeneralAvailabilityUpgradeNoticeDialogFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/OptionalAppDeprecationNoticeDialogFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/OsDeprecationNoticeDialogFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboadingSlideViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingNavigationListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingSlideFinalViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingViewPagerViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/RouteToProfileListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/ViewPagerSlide.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageRadioButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageSelectionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageRadioButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageSelectionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAppLanguageListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAudioLanguageListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadReadingTextSizeListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAppLanguageViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAudioLanguageViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsReadingTextSizeViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeSelectionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAppLanguageListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAudioLanguageListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToReadingTextSizeListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeRadioButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioUiManager.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/CellularAudioDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/CellularDataInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/LanguageDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/LanguageInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuItemClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/DefaultFontSizeStateListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/RequestVoiceOverIconSpotlightListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/testing/BottomSheetOptionsMenuTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/ConfettiConfig.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/DragDropSortInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/SelectionInteractionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/answerhandling/InteractionAnswerErrorOrAvailabilityCheckReceiver.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/answerhandling/InteractionAnswerHandler.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContentViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContinueInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContinueNavigationButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragAndDropSortInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragDropInteractionContentViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FeedbackViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ImageRegionSelectionInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/InteractionViewModelFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/InteractionViewModelModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NextButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/PreviousButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/PreviousResponsesHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ReplayButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ReturnToTopicButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionContentViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SplitScreenInteractionIds.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SplitScreenInteractionModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmitButtonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmittedAnswerViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/TextInputViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ContinueNavigationButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/NextNavigationButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/PreviousNavigationButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/PreviousResponsesHeaderClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReplayButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReturnToTopicNavigationButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/RouteToHintsAndSolutionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ShowHintAvailabilityListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/StateKeyboardButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/SubmitNavigationButtonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/RestartPlayingSessionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopExplorationDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/ProgressDatabaseFullDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/UnsavedExplorationDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopStatePlayingSessionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopStatePlayingSessionWithSavedProgressListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/PoliciesActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/PoliciesFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/RouteToPoliciesListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthEnum.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/RouteToAdminPinListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureDialogInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureEditDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RecentlyPlayedStorySummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToCompletedStoryListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToOngoingTopicListListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/DividerItemDecorator.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/DragAndDropItemFacilitator.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/OnDragEndedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/OnItemDragListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/StartSnapHelper.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/LoadProfileEditDeletionDialogListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDeletionDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDialogInterface.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/RouteToProfileEditListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShimImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewComponentFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/ExplorationSelectionListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentScroller.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryChapterSummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SelectedAnswerAvailabilityReceiver.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/FreeFormItemsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/MarketFitItemsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/MultipleChoiceOptionContentViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/NpsItemsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/SurveyAnswerItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/UserTypeItemsViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyMultipleChoiceOptionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyNpsItemOptionView.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AppCompatCheckBoxBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestDataModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DrawableBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationInjectionActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HtmlParserTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageViewBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ListItemLeadingMarginSpanTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/MarginBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/NavigationDrawerTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/PoliciesFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/PoliciesFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileEditFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileEditFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SpotlightFragmentTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SpotlightFragmentTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/StateAssemblerMarginBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/StateAssemblerPaddingBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TextViewBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ViewBindingAdaptersTestActivity.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToConceptCardListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToQuestionPlayerListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToResumeLessonListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToRevisionCardListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToStoryListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicTab.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/ViewPagerAdapter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummarySelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ExpandedChapterListIndexListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummarySelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsTitleViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/SubtopicSelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeFooterViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeSubtopicViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragment.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/RevisionSubtopicSelector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/revisionitemviewmodel/TopicRevisionItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/ReturnToTopicClickListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/ClickableAreasImage.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/FontScaleConfigurationUtil.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/KeyboardHelper.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/OnClickableAreaClickedListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/RegionClickEvent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/SplitScreenManager.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/TextInputEditTextHelper.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponent.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderModule.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentImpl.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewScope.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughFragmentChangeListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughPageChanger.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughPages.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughEndPageChanger.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalListener.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicItemViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicHeaderViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicSummaryViewModel.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt" -exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeViewModel.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/recyclerview/RecyclerViewMatcher.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/ClickActions.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DragViewAction.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DrawableMatcher.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/EspressoTestsMatchers.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/FontSizeMatcher.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/OrientationChangeAction.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/ProgressMatcher.kt" -exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/TabMatcher.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/BaseUrl.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/Constants.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/NetworkApiKey.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/OppiaRetrofit.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/XssiPrefix.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReport.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingAppContext.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingDeviceContext.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingEntryPoint.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingSystemContext.kt" -exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeUserSuppliedFeedback.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationContext.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationResult.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/GenericInteractionClassifier.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/InteractionClassifier.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/InteractionsModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/RuleClassifier.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/GenericRuleClassifier.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/InteractionObjectTypeExtractorRepository.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/RuleClassifierProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/RuleQualifiers.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/continueinteraction/ContinueModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYClassifierProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYClassifierProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsRuleModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputRuleModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputRuleModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressListener.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetrieverImpl.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/TimerSessionState.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationStorageDatabaseSize.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/feedbackreporting/FeedbackReportingModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowAdditionalHintsFromWrongAnswerMillis.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowAdditionalHintsMillis.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowInitialHintMillis.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigAlphaKenyaModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigFastShowTestModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandler.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/locale/LocaleApplicationInjector.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/locale/LocaleApplicationInjectorProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetrieverImpl.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetrieverModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/testing/ExpirationMetaDataRetrieverTestModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/testing/FakeExpirationMetaDataRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/ApplicationIdSeed.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/ApplicationStartupListener.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsStartupListener.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleListener.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceLoggingTimePeriodMillis.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsInactivityLimitMillis.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulingWorkerFactory.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerFactory.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkerModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterSingletonImpl.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterSingletonModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkerFactory.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkerModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentCalculation.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgress.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionConstantsProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionSessionMetrics.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionTrainingConstantsProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateDeck.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateGraph.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateList.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyProgress.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyConstantsProvider.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyQuestionDeck.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyQuestionGraph.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/ConceptCardRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsController.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsControllerImpl.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsControllerModule.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/RevisionCardRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/JsonAssetRetriever.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/JsonExtensions.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/WorkDataExtensions.kt" -exempted_file_path: "domain/src/main/java/org/oppia/android/domain/workmanager/WorkManagerConfigurationModule.kt" -exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/InteractionObjectTestBuilder.kt" -exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt" -exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/application/TestOppiaApplication.kt" -exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/testing/EndToEndTestHelper.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/CommandExecutor.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/CommandResult.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/model/GitHubIssue.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/remote/GitHubService.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/MavenArtifactPropertyFetcher.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/MavenArtifactPropertyFetcherImpl.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/LicenseFetcher.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/LicenseFetcherImpl.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/model/CopyrightLicense.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/model/Dependency.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/maven/model/MavenArtifact.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/maven/model/MavenInstallJson.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/telemetry/DecodeUserStudyEventString.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Issue.kt" -exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Todo.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AccessibilityTestRule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AssertionHelpers.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/DisableAccessibilityChecks.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestAnnotations.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/RichTextViewMatcher.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TextInputActionTestActivity.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/data/AsyncResultSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/environment/TestEnvironmentConfig.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/EditTextInputAction.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/GenericViewMatchers.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/ImageViewMatcher.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/KonfettiViewMatcher.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/DefineAppLanguageLocaleContext.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/OppiaParameterizedBaseRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/OppiaParameterizedTestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedAndroidJunit4TestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedAutoAndroidTestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedJunitTestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedMethod.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRobolectricTestRunner.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRunnerDelegate.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRunnerOverrideMethods.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterValue.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/ComparableOperationSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/FractionSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathExpressionSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathEquationSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathParsingErrorSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/PolynomialSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/RealSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/TokenSubject.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/mockito/MockitoKotlinHelper.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/ApiMockLoader.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockClassroomService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockConceptCardService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockExplorationService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockFeedbackReportingService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockQuestionPlayerService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockStoryService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockSubtopicService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockTopicService.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/RetrofitTestModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterConstants.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/robolectric/IsOnRobolectric.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/robolectric/RobolectricModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/BackgroundTestDispatcher.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/BlockingTestDispatcher.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchers.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersEspressoImpl.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersRobolectricImpl.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestDispatcherModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/time/FakeOppiaClockModule.kt" -exempted_file_path: "testing/src/main/java/org/oppia/android/testing/time/FakeSystemClock.kt" -exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherTestBase.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityService.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityServiceImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityProdModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityTestModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/AssetRepository.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/AssetRepositoryImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/CacheAssetsLocally.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/CachingModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/LoadImagesFromAssets.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/LoadLessonProtosFromAssets.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/TopicListToCache.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/testing/CachingTestModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/testing/FakeAssetRepository.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/AsyncDataSubscriptionManager.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvider.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvidersInjector.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvidersInjectorProvider.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/extensions/ContextExtensions.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/gcsresource/GcsResourceAnnotations.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/gcsresource/GcsResourceModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/locale/OppiaBidiFormatter.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/locale/OppiaLocale.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/AnalyticsEventLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ConsoleLoggerInjector.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ConsoleLoggerInjectorProvider.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/EventTypeToHumanReadableNameConverter.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ExceptionLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/KenyaAlphaEventTypeToHumanReadableNameConverterImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LogLevel.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LoggerModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LoggingAnnotations.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/SyncStatusManager.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/SyncStatusModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/DebugAnalyticsEventLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseAnalyticsEventLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseExceptionLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploaderModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FloatExtensions.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FractionExtensions.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/MathParsingError.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/ConnectionStatus.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionDebugUtil.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionDebugUtilModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtil.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/ExplorationHtmlParserEntityType.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/HtmlParserEntityTypeModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/PolicyType.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/BitmapBlurTransformation.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/BitmapBlurrer.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoaderModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageAssetFetcher.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageLoader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageParsingAnnotations.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageParsingModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageTargets.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageTransformation.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/RepositoryGlideModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/RepositoryModelLoader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/TestGlideImageLoader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/TextPictureDrawable.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/math/MathBitmapModelLoader.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/BlockPictureDrawable.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/BlockSvgDrawableTranscoder.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/ScalableVectorGraphic.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgBlurTransformation.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgDecoder.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgPictureDrawable.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/TextSvgDrawableTranscoder.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterValue.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/statusbar/StatusBarColor.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClock.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockImpl.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockInjector.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockInjectorProvider.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/BackgroundDispatcher.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/BlockingDispatcher.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/ConcurrentCollections.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherInjector.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherInjectorProvider.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherModule.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessor.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/MetricLogScheduler.kt" -exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsEventLogger.kt" -exempted_file_path: "utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerTestBase.kt" +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponentFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityIntentFactoriesModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityScope.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/route/Route.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/route/RouteKey.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AdministratorControlsFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AdministratorControlsFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/MathExpressionInteractionsViewTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadAppVersionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadLearnerAnalyticsListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadProfileEditListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LoadProfileListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/LogoutDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/ProfileEditDeletionDialogListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToAppVersionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToLearnerAnalyticsListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/RouteToProfileListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/ShowLogoutDialogListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAccountActionsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsAppInformationViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsDownloadPermissionsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsGeneralViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsProfileAndDeviceIdViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/administratorcontrolsitemviewmodel/AdministratorControlsProfileViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/appversion/AppVersionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/CopyIdMaterialButtonView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/DeviceIdItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileLearnerIdItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/ControlButtonsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/administratorcontrols/learneranalytics/SyncStatusItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/AbstractOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ActivityComponentFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ApplicationStartupListenerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alpha/AlphaOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaBuildFlavorModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/beta/BetaOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/dev/DeveloperOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ga/GaOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/completedstorylist/CompletedStoryListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/ChapterNotStartedContainerConstraintLayout.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/ContinueButtonView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SurveyOnboardingBackgroundView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/VerticalDashedLineView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/AutomaticAppDeprecationNoticeDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/AutomaticAppDeprecationNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/BetaNoticeClosedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/DeprecationNoticeExitAppListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeClosedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarterImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsStarterModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/ForceCrashButtonClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToForceNetworkTypeListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkChaptersCompletedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkStoriesCompletedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMarkTopicsCompletedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToMathExpressionParserTestListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/RouteToViewEventLogsListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsModifyLessonProgressViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsOverrideAppBehaviorsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/devoptionsitemviewmodel/DeveloperOptionsViewLogsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/NetworkTypeItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/forcenetworktype/testing/ForceNetworkTypeTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/ChapterSelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/ChapterSummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/MarkChaptersCompletedViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/StorySummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markchapterscompleted/testing/MarkChaptersCompletedTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/MarkStoriesCompletedViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/StorySelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/StorySummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/markstoriescompleted/testing/MarkStoriesCompletedTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/MarkTopicsCompletedViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/testing/MarkTopicsCompletedTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/TopicSelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/marktopicscompleted/TopicViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/testing/DeveloperOptionsTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/EventLogItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/testing/ViewEventLogsTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/ExitProfileDialogInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFooterViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerItem.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/drawer/RouteToProfileProgressListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentBuilderModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/FragmentScope.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableBottomSheetDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/fragment/InjectableFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpItems.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/HelpListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadFaqListFragmentListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadLicenseListFragmentListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadLicenseTextViewerFragmentListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadPoliciesFragmentListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/LoadThirdPartyDependencyListFragmentListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/RouteToFAQListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/RouteToThirdPartyDependencyListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/FAQListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/RouteToFAQSingleListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQContentViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqItemViewModel/FAQItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/faq/faqsingle/FAQSingleActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/LicenseTextViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/RouteToLicenseListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/RouteToLicenseTextListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/help/thirdparty/ThirdPartyDependencyListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/ExpandedHintListIndexListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintsAndSolutionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/HintViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/ReturnToLessonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealHintListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealSolutionDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/RevealSolutionInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/hintsandsolution/SolutionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/HomeViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToExplorationListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToRecentlyPlayedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/RouteToTopicPlayStoryListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/UserAppHistoryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsListView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/ComingSoonTopicsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/promotedlist/PromotedStoryListView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryListAdapter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/PromotedStoryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/RecentlyPlayedViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/recentlyplayed/SectionTitleViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/AllTopicsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/home/topiclist/TopicSummaryClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/DownloadsTabFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsTab.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/MyDownloadsViewPagerAdapter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/mydownloads/UpdatesTabFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/DeprecationNoticeActionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/BetaNoticeDialogFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/ForcedAppDeprecationNoticeDialogFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/GeneralAvailabilityUpgradeNoticeDialogFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/OptionalAppDeprecationNoticeDialogFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/notice/testing/OsDeprecationNoticeDialogFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboadingSlideViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingNavigationListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingSlideFinalViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingViewPagerViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/RouteToProfileListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/ViewPagerSlide.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageRadioButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AppLanguageSelectionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageRadioButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/AudioLanguageSelectionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAppLanguageListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadAudioLanguageListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/LoadReadingTextSizeListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAppLanguageViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsAudioLanguageViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/OptionsReadingTextSizeViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/ReadingTextSizeSelectionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAppLanguageListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToAudioLanguageListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/RouteToReadingTextSizeListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/options/TextSizeRadioButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioUiManager.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/AudioViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/CellularAudioDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/CellularDataInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/LanguageDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/audio/LanguageInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuItemClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/DefaultFontSizeStateListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationManagerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/ExplorationViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/HintsAndSolutionExplorationManagerListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/RequestVoiceOverIconSpotlightListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/exploration/testing/BottomSheetOptionsMenuTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/ConfettiConfig.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/DragDropSortInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/SelectionInteractionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StatePlayerRecyclerViewAssembler.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/StateViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/answerhandling/InteractionAnswerErrorOrAvailabilityCheckReceiver.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/answerhandling/InteractionAnswerHandler.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContentViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContinueInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ContinueNavigationButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragAndDropSortInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/DragDropInteractionContentViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FeedbackViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ImageRegionSelectionInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/InteractionViewModelFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/InteractionViewModelModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NextButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/PreviousButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/PreviousResponsesHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ReplayButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/ReturnToTopicButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionContentViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SelectionInteractionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SplitScreenInteractionIds.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SplitScreenInteractionModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/StateItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmitButtonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/SubmittedAnswerViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/TextInputViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ContinueNavigationButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/NextNavigationButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/PreviousNavigationButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/PreviousResponsesHeaderClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReplayButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ReturnToTopicNavigationButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/RouteToHintsAndSolutionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/ShowHintAvailabilityListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/StateKeyboardButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/listener/SubmitNavigationButtonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/state/testing/StateFragmentTestViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/RestartPlayingSessionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopExplorationDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/ProgressDatabaseFullDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/UnsavedExplorationDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopStatePlayingSessionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/player/stopplaying/StopStatePlayingSessionWithSavedProgressListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/PoliciesActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/PoliciesFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/policies/RouteToPoliciesListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthEnum.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ResetPinViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/RouteToAdminPinListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureActivityViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureDialogInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfilePictureEditDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/ProfileProgressViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RecentlyPlayedStorySummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToCompletedStoryListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/profileprogress/RouteToOngoingTopicListListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/DividerItemDecorator.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/DragAndDropItemFacilitator.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/OnDragEndedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/OnItemDragListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/recyclerview/StartSnapHelper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/resumelesson/ResumeLessonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/LoadProfileEditDeletionDialogListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDeletionDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditDialogInterface.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileEditViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileListViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileRenameViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/ProfileResetPinViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/settings/profile/RouteToProfileEditListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShim.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/IntentFactoryShimModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShim.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShimImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewBindingShimModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/shim/ViewComponentFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/splash/SplashActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/ExplorationSelectionListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightManager.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightNavigationListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightShape.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/spotlight/SpotlightTarget.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryFragmentScroller.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/StoryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryChapterSummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/story/storyitemviewmodel/StoryItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/ExitSurveyConfirmationDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SelectedAnswerAvailabilityReceiver.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyWelcomeDialogFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/FreeFormItemsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/MarketFitItemsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/MultipleChoiceOptionContentViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/NpsItemsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/SurveyAnswerItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/surveyitemviewmodel/UserTypeItemsViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyMultipleChoiceOptionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyNpsItemOptionView.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AppCompatCheckBoxBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/AudioFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestDataModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/BindableAdapterTestViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DrawableBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationInjectionActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/HtmlParserTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/DragDropTestFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ImageViewBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ListItemLeadingMarginSpanTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/MarginBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/NavigationDrawerTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/PoliciesFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/PoliciesFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileEditFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileEditFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ProfileChooserFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SplashTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SpotlightFragmentTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/SpotlightFragmentTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/StateAssemblerMarginBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/StateAssemblerPaddingBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TextViewBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicRevisionTestActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/TopicTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ViewBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToConceptCardListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToQuestionPlayerListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToResumeLessonListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToRevisionCardListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/RouteToStoryListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicTab.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/TopicViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/ViewPagerAdapter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/conceptcard/ConceptCardViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/info/TopicInfoViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummarySelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ChapterSummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/ExpandedChapterListIndexListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummarySelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/StorySummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/lessons/TopicLessonsTitleViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/SubtopicSelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/TopicPracticeViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeFooterViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/practice/practiceitemviewmodel/TopicPracticeSubtopicViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/HintsAndSolutionQuestionManagerListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragment.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/RevisionSubtopicSelector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/TopicRevisionViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revision/revisionitemviewmodel/TopicRevisionItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/ReturnToTopicClickListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/topic/revisioncard/RevisionCardViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreator.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/ActivityRecreatorProdModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageActivityInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/AppLanguageApplicationInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/translation/testing/ActivityRecreatorTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/ClickableAreasImage.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/FontScaleConfigurationUtil.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/KeyboardHelper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/lifecycle/LifecycleSafeTimerFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/OnClickableAreaClickedListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/RegionClickEvent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/SplitScreenManager.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/utility/TextInputEditTextHelper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentBuilderModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewComponentImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/view/ViewScope.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/viewmodel/ObservableArrayList.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/viewmodel/ObservableViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughActivityPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughFragmentChangeListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughPageChanger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughPages.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/WalkthroughViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughEndPageChanger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/end/WalkthroughFinalViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicItemViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicListFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/WalkthroughTopicViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicHeaderViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/topiclist/topiclistviewmodel/WalkthroughTopicSummaryViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeFragmentPresenter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/walkthrough/welcome/WalkthroughWelcomeViewModel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/recyclerview/RecyclerViewMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/ClickActions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DragViewAction.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/DrawableMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/EspressoTestsMatchers.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/FontSizeMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/OrientationChangeAction.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/ProgressMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/sharedTest/java/org/oppia/android/app/utility/TabMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/BaseUrl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/Constants.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/NetworkApiKey.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/OppiaRetrofit.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/XssiPrefix.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReport.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingAppContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingDeviceContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingEntryPoint.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeFeedbackReportingSystemContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeUserSuppliedFeedback.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/ClassificationResult.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/GenericInteractionClassifier.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/InteractionClassifier.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/InteractionsModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/RuleClassifier.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/GenericRuleClassifier.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/InteractionObjectTypeExtractorRepository.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/RuleClassifierProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/RuleQualifiers.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/continueinteraction/ContinueModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXAtPositionYClassifierProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputHasElementXBeforeElementYClassifierProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/dragAndDropSortInput/DragDropSortInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/fractioninput/FractionInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/imageClickInput/ImageClickInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/itemselectioninput/ItemSelectionInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/multiplechoiceinput/MultipleChoiceInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/numberwithunits/NumberWithUnitsRuleModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/numericinput/NumericInputRuleModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/ratioinput/RatioInputModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/classify/rules/textinput/TextInputRuleModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgress.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationProgressListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/ExplorationRetrieverImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/TimerSessionState.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationStorageDatabaseSize.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/feedbackreporting/FeedbackReportingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowAdditionalHintsFromWrongAnswerMillis.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowAdditionalHintsMillis.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/DelayShowInitialHintMillis.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigAlphaKenyaModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigFastShowTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintsAndSolutionConfigModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/hintsandsolution/HintHandler.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/locale/LocaleApplicationInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/locale/LocaleApplicationInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetrieverImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/ExpirationMetaDataRetrieverModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/testing/ExpirationMetaDataRetrieverTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/onboarding/testing/FakeExpirationMetaDataRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/ApplicationIdSeed.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/ApplicationStartupListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/AnalyticsStartupListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/ApplicationLifecycleListener.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/CpuPerformanceLoggingTimePeriodMillis.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsInactivityLimitMillis.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/exceptions/UncaughtExceptionLoggerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/logscheduler/MetricLogSchedulingWorkerFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterSingletonImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterSingletonModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkerFactory.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/platformparameter/syncup/PlatformParameterSyncUpWorkerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentCalculation.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionAssessmentProgress.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionConstantsProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionSessionMetrics.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/question/QuestionTrainingConstantsProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateDeck.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateGraph.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/state/StateList.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyProgress.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyConstantsProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyQuestionDeck.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/survey/SurveyQuestionGraph.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/ConceptCardRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsController.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsControllerImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/PrimeTopicAssetsControllerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/topic/RevisionCardRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/JsonAssetRetriever.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/JsonExtensions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/util/WorkDataExtensions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/main/java/org/oppia/android/domain/workmanager/WorkManagerConfigurationModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "domain/src/test/java/org/oppia/android/domain/classify/InteractionObjectTestBuilder.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/application/TestOppiaApplication.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "instrumentation/src/java/org/oppia/android/instrumentation/testing/EndToEndTestHelper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/CommandExecutor.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/CommandResult.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/model/GitHubIssue.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/common/remote/GitHubService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/MavenArtifactPropertyFetcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/MavenArtifactPropertyFetcherImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/LicenseFetcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/LicenseFetcherImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/model/CopyrightLicense.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/license/model/Dependency.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/maven/model/MavenArtifact.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/maven/model/MavenInstallJson.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/telemetry/DecodeUserStudyEventString.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Issue.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Todo.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AccessibilityTestRule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/AssertionHelpers.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/DisableAccessibilityChecks.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestAnnotations.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/OppiaTestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/RichTextViewMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/TextInputActionTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/data/AsyncResultSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/environment/TestEnvironmentConfig.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/EditTextInputAction.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/GenericViewMatchers.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/ImageViewMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/espresso/KonfettiViewMatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/DefineAppLanguageLocaleContext.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/OppiaParameterizedBaseRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/OppiaParameterizedTestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedAndroidJunit4TestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedAutoAndroidTestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedJunitTestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedMethod.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRobolectricTestRunner.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRunnerDelegate.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterizedRunnerOverrideMethods.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/junit/ParameterValue.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/ComparableOperationSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/FractionSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathExpressionSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathEquationSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/MathParsingErrorSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/PolynomialSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/RealSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/math/TokenSubject.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/mockito/MockitoKotlinHelper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/ApiMockLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockClassroomService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockConceptCardService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockExplorationService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockFeedbackReportingService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockQuestionPlayerService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockStoryService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockSubtopicService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/MockTopicService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/network/RetrofitTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterConstants.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/robolectric/IsOnRobolectric.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/robolectric/RobolectricModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/BackgroundTestDispatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/BlockingTestDispatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchers.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersEspressoImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestCoroutineDispatchersRobolectricImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/threading/TestDispatcherModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/time/FakeOppiaClockModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/main/java/org/oppia/android/testing/time/FakeSystemClock.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "testing/src/test/java/org/oppia/android/testing/threading/TestCoroutineDispatcherTestBase.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityService.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityServiceImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityProdModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/accessibility/AccessibilityTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/AssetRepository.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/AssetRepositoryImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/CacheAssetsLocally.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/CachingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/LoadImagesFromAssets.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/LoadLessonProtosFromAssets.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/TopicListToCache.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/testing/CachingTestModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/caching/testing/FakeAssetRepository.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/AsyncDataSubscriptionManager.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvidersInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/data/DataProvidersInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/extensions/ContextExtensions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/gcsresource/GcsResourceAnnotations.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/gcsresource/GcsResourceModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/locale/OppiaBidiFormatter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/locale/OppiaLocale.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/AnalyticsEventLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ConsoleLoggerInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ConsoleLoggerInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/EventTypeToHumanReadableNameConverter.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/ExceptionLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/KenyaAlphaEventTypeToHumanReadableNameConverterImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LogLevel.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LoggerModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/LoggingAnnotations.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/SyncStatusManager.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/SyncStatusModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/DebugAnalyticsEventLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseAnalyticsEventLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseExceptionLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploaderModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FloatExtensions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/FractionExtensions.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/MathParsingError.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/ConnectionStatus.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionDebugUtil.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionDebugUtilModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtil.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/ExplorationHtmlParserEntityType.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/HtmlParserEntityTypeModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/html/PolicyType.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/BitmapBlurTransformation.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/BitmapBlurrer.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/GlideImageLoaderModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageAssetFetcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageParsingAnnotations.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageParsingModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageTargets.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/ImageTransformation.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/RepositoryGlideModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/RepositoryModelLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/TestGlideImageLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/image/TextPictureDrawable.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/math/MathBitmapModelLoader.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/BlockPictureDrawable.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/BlockSvgDrawableTranscoder.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/ScalableVectorGraphic.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgBlurTransformation.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgDecoder.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/SvgPictureDrawable.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/parser/svg/TextSvgDrawableTranscoder.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterValue.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/statusbar/StatusBarColor.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClock.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockImpl.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/system/OppiaClockModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/BackgroundDispatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/BlockingDispatcher.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/ConcurrentCollections.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherInjector.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherInjectorProvider.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/threading/DispatcherModule.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsAssessor.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/MetricLogScheduler.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/performancemetrics/PerformanceMetricsEventLogger.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerTestBase.kt" + test_file_not_required: true +} diff --git a/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto b/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto index a7f2957d026..ce735c07b66 100644 --- a/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto +++ b/scripts/src/java/org/oppia/android/scripts/proto/script_exemptions.proto @@ -5,19 +5,52 @@ package proto; option java_package = "org.oppia.android.scripts.proto"; option java_multiple_files = true; -// Exemptions for the test-file check. Exemptions indicate files for which we should not check for -// having test files. +// Exemptions for the test-file check. +// Exemptions indicate files either for which we should not check for having test files, +// or to override the minimum coverage threshold for the code coverage analysis. message TestFileExemptions { - // List of all the files which should be exempted for the test-file check. For exempting any - // file, provide its relative path to root in 'script/assets/test_file_exemptions.textproto'. + // List of all test file exemptions. + // // Also, note that the file paths in the textproto file are maintained in lexicographical order. // While adding any new file, please add it only at the correct lexicographical position, so that // the list remains sorted. // - // For example if we want to add the 'ActivityComponent.kt' file to the exemption list, add: - // 'exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt"' - // at the correct lexicographical position in the textproto file. - repeated string exempted_file_path = 1; + // For example, to exempt 'ActivityComponent.kt' from the test-file check, add: + // ``` + // test_file_exemption { + // exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/ActivityComponent.kt" + // test_file_not_required: true + // } + // ``` + // + // Example for overriding minimum coverage threshold: + // ``` + // test_file_exemption { + // exempted_file_path: "utility/src/main/java/org/oppia/android/util/math/ComparatorExtensions.kt" + // override_min_coverage_percent_required: 0 + // } + // ``` + repeated TestFileExemption test_file_exemption = 1; + + // Represents an individual test file exemption. + message TestFileExemption { + // Provide the relative path to the file in 'script/assets/test_file_exemptions.textproto' + // along with any one of the states of exemption: + // 1.'test_file_not_required' to exempt the test itself. + // 2.'override_min_coverage_percent_required' to have the test file but override min coverage threshold + // + // The relative path to the file from the root directory. + string exempted_file_path = 1; + + // Specifies the type of exemption. + oneof exemption_type { + // Indicates that a test file is not required for the given file. + bool test_file_not_required = 2; + + // Overrides the minimum coverage percent required for the given file. + int32 override_min_coverage_percent_required = 3; + } + } } // Exemptions for the accessibility label check. Exemptions indicate Activities for which we should diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index f83f6b00ef1..f511c97d9f2 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -26,7 +26,8 @@ fun main(vararg args: String) { // A list of all the files to be exempted for this check. // TODO(#3436): Develop a mechanism for permanently exempting files which do not ever need tests. val testFileExemptionList = loadTestFileExemptionsProto(testFileExemptiontextProto) - .getExemptedFilePathList() + .testFileExemptionList + .map { it.exemptedFilePath } // A list of all kotlin files in the repo to be analyzed. val searchFiles = RepositoryFile.collectSearchFiles( From 3c8008a9d0b2170dc7916e7e6829bedf5b3b16f6 Mon Sep 17 00:00:00 2001 From: Rd Date: Tue, 18 Jun 2024 17:31:40 +0530 Subject: [PATCH 02/12] Fix: Filter TestFileExemptionList to include only files with test_file_not_required flag --- .../src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index f511c97d9f2..949da05ae08 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -27,6 +27,7 @@ fun main(vararg args: String) { // TODO(#3436): Develop a mechanism for permanently exempting files which do not ever need tests. val testFileExemptionList = loadTestFileExemptionsProto(testFileExemptiontextProto) .testFileExemptionList + .filter { it.testFileNotRequired } .map { it.exemptedFilePath } // A list of all kotlin files in the repo to be analyzed. From 0fb3c44ae959f9da8d19d20c43b75ab846041cea Mon Sep 17 00:00:00 2001 From: Rd Date: Wed, 19 Jun 2024 01:54:23 +0530 Subject: [PATCH 03/12] Trigger re-checks for NetworkLoggingInterceptorTest failure status From 9b7bf5aa8f7ddcaa4d09bdf35e61863b372f966f Mon Sep 17 00:00:00 2001 From: Rd Date: Wed, 19 Jun 2024 07:38:48 +0530 Subject: [PATCH 04/12] Resolve Merge conflicts with new additions to test_file_exemptions.textproto --- scripts/assets/test_file_exemptions.textproto | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto index 63309b039fd..a84bd17397f 100644 --- a/scripts/assets/test_file_exemptions.textproto +++ b/scripts/assets/test_file_exemptions.textproto @@ -287,15 +287,15 @@ test_file_exemption { test_file_not_required: true } test_file_exemption { - exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt" + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/OppiaCurveBackgroundView.kt" test_file_not_required: true } test_file_exemption { - exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt" + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/PromotedStoryCardView.kt" test_file_not_required: true } test_file_exemption { - exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SurveyOnboardingBackgroundView.kt" + exempted_file_path: "app/src/main/java/org/oppia/android/app/customview/SegmentedCircularProgressView.kt" test_file_not_required: true } test_file_exemption { @@ -998,6 +998,10 @@ test_file_exemption { exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenter.kt" test_file_not_required: true } +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingFragmentPresenterV1.kt" + test_file_not_required: true +} test_file_exemption { exempted_file_path: "app/src/main/java/org/oppia/android/app/onboarding/OnboardingNavigationListener.kt" test_file_not_required: true @@ -1894,6 +1898,14 @@ test_file_exemption { exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/CircularProgressIndicatorAdaptersTestViewModel.kt" test_file_not_required: true } +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ColorBindingAdaptersTestActivity.kt" + test_file_not_required: true +} +test_file_exemption { + exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ColorBindingAdaptersTestFragment.kt" + test_file_not_required: true +} test_file_exemption { exempted_file_path: "app/src/main/java/org/oppia/android/app/testing/ConceptCardFragmentTestActivity.kt" test_file_not_required: true From 9b90ca2b2c88e60a1aa2c2c57bbdf6e2cbc1944c Mon Sep 17 00:00:00 2001 From: Rd Date: Fri, 21 Jun 2024 11:01:35 +0530 Subject: [PATCH 05/12] Restructured TestFileCheck to enable testing of min_coverage set exemption not exempted from test file check --- .../android/scripts/testfile/TestFileCheck.kt | 97 ++++++++++++------- .../scripts/testfile/TestFileCheckTest.kt | 33 +++++++ 2 files changed, 95 insertions(+), 35 deletions(-) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index 949da05ae08..3366f88ba20 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -23,46 +23,73 @@ fun main(vararg args: String) { val testFileExemptiontextProto = "scripts/assets/test_file_exemptions" - // A list of all the files to be exempted for this check. - // TODO(#3436): Develop a mechanism for permanently exempting files which do not ever need tests. - val testFileExemptionList = loadTestFileExemptionsProto(testFileExemptiontextProto) - .testFileExemptionList - .filter { it.testFileNotRequired } - .map { it.exemptedFilePath } - - // A list of all kotlin files in the repo to be analyzed. - val searchFiles = RepositoryFile.collectSearchFiles( - repoPath = repoPath, - expectedExtension = ".kt", - exemptionsList = testFileExemptionList - ) - - // A list of all the prod files present in the repo. - val prodFilesList = searchFiles.filter { file -> !file.name.endsWith("Test.kt") } - - // A list of all the test files present in the repo. - val testFilesList = searchFiles.filter { file -> file.name.endsWith("Test.kt") } - - // A list of all the prod files that do not have a corresponding test file. - val matchedFiles = prodFilesList.filter { prodFile -> - !testFilesList.any { testFile -> - testFile.name == computeExpectedTestFileName(prodFile) - } + val testFileCheck = TestFileCheck(repoPath, testFileExemptiontextProto) + testFileCheck.execute() +} + +class TestFileCheck ( + private val repoPath: String, + private val testFileExemptiontextProto: String + ) { + + /** + * Retrieves a list of files exempted from requiring a test file based on the specified protocol buffer. + * + * This function loads the test file exemptions from the provided protocol buffer file path, + * filters and returns list of paths for files that are not required for having a test file. + * + * The files specifically marked as exempt from needing a test file are included, + * rather than those exempt from meeting a minimum coverage percentage. + * + * @param testFileExemptiontextProto The path to the protocol buffer file containing test file exemptions. + * @return A list of file paths that are exempted from requiring a test file. + */ + fun getTestFileExemptionList(testFileExemptiontextProto: String): List { + + return loadTestFileExemptionsProto(testFileExemptiontextProto) + .testFileExemptionList + .filter { it.testFileNotRequired } + .map { it.exemptedFilePath } } - logFailures(matchedFiles) + /** Executes the test file presence check mechanism for the repository. */ + fun execute() { + // TODO(#3436): Develop a mechanism for permanently exempting files which do not ever need tests. + val testFileExemptionList = getTestFileExemptionList(testFileExemptiontextProto) - if (matchedFiles.isNotEmpty()) { - println( - "Refer to https://github.com/oppia/oppia-android/wiki/Static-Analysis-Checks" + - "#test-file-presence-check for more details on how to fix this.\n" + val searchFiles = RepositoryFile.collectSearchFiles( + repoPath = repoPath, + expectedExtension = ".kt", + exemptionsList = testFileExemptionList ) - } - if (matchedFiles.isNotEmpty()) { - throw Exception("TEST FILE CHECK FAILED") - } else { - println("TEST FILE CHECK PASSED") + // A list of all the prod files present in the repo. + val prodFilesList = searchFiles.filter { file -> !file.name.endsWith("Test.kt") } + + // A list of all the test files present in the repo. + val testFilesList = searchFiles.filter { file -> file.name.endsWith("Test.kt") } + + // A list of all the prod files that do not have a corresponding test file. + val matchedFiles = prodFilesList.filter { prodFile -> + !testFilesList.any { testFile -> + testFile.name == computeExpectedTestFileName(prodFile) + } + } + + logFailures(matchedFiles) + + if (matchedFiles.isNotEmpty()) { + println( + "Refer to https://github.com/oppia/oppia-android/wiki/Static-Analysis-Checks" + + "#test-file-presence-check for more details on how to fix this.\n" + ) + } + + if (matchedFiles.isNotEmpty()) { + throw Exception("TEST FILE CHECK FAILED") + } else { + println("TEST FILE CHECK PASSED") + } } } diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index 3ed1817dc82..f4e269817f4 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -1,6 +1,9 @@ package org.oppia.android.scripts.testfile import com.google.common.truth.Truth.assertThat +import org.junit.Assert.assertEquals +import org.oppia.android.scripts.proto.TestFileExemptions +import org.oppia.android.scripts.proto.TestFileExemptions.TestFileExemption import org.junit.After import org.junit.Before import org.junit.Rule @@ -9,6 +12,9 @@ import org.junit.rules.TemporaryFolder import org.oppia.android.testing.assertThrows import java.io.ByteArrayOutputStream import java.io.PrintStream +import java.io.File +import java.io.FileInputStream +import java.io.FileOutputStream /** Tests for [TestFileCheck]. */ class TestFileCheckTest { @@ -125,6 +131,33 @@ class TestFileCheckTest { assertThat(outContent.toString().trim()).isEqualTo(TEST_FILE_CHECK_PASSED_OUTPUT_INDICATOR) } + @Test + fun testTestFileCheck_minCoverageExemptedFile_notExemptedFromTestFileCheck() { + val testFileExemptions = TestFileExemptions.newBuilder() + .addTestFileExemption( + TestFileExemption.newBuilder() + .setExemptedFilePath("test/TestExemptedFile.kt") + .setTestFileNotRequired(true) + ) + .addTestFileExemption( + TestFileExemption.newBuilder() + .setExemptedFilePath("coverage/CoverageTestFile.kt") + .setOverrideMinCoveragePercentRequired(5) + ) + .build() + + val coverageTestExemptiontextProto = tempFolder.newFile("test_exemption.pb") + coverageTestExemptiontextProto.outputStream().use { (testFileExemptions.writeTo(it)) } + + val result = TestFileCheck( + "${tempFolder.root}", + "${tempFolder.root}/test_exemption" + ).getTestFileExemptionList("${tempFolder.root}/test_exemption") + + assertEquals(listOf("test/TestExemptedFile.kt"), result) + } + + /** Retrieves the absolute path of testfiles directory. */ private fun retrieveTestFilesDirectoryPath(): String { return "${tempFolder.root}/testfiles" From dd24d3cdd30671bf61fb8ef0b9b7fe1a1e71481f Mon Sep 17 00:00:00 2001 From: Rd Date: Fri, 21 Jun 2024 11:41:42 +0530 Subject: [PATCH 06/12] Fix Lint Checks and Kdoc additions --- .../oppia/android/scripts/testfile/TestFileCheck.kt | 12 +++++++++--- .../android/scripts/testfile/TestFileCheckTest.kt | 10 +++------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index 3366f88ba20..059ff337c39 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -27,10 +27,16 @@ fun main(vararg args: String) { testFileCheck.execute() } -class TestFileCheck ( +/** + * Class for checking the presence of test files in a repository. + * + * @param repoPath The path of the repo + * @param testFileExemptiontextProto the location of the test file exemption textproto file. + */ +class TestFileCheck( private val repoPath: String, private val testFileExemptiontextProto: String - ) { +) { /** * Retrieves a list of files exempted from requiring a test file based on the specified protocol buffer. @@ -41,7 +47,7 @@ class TestFileCheck ( * The files specifically marked as exempt from needing a test file are included, * rather than those exempt from meeting a minimum coverage percentage. * - * @param testFileExemptiontextProto The path to the protocol buffer file containing test file exemptions. + * @param testFileExemptiontextProto the location of the test file exemption textproto file. * @return A list of file paths that are exempted from requiring a test file. */ fun getTestFileExemptionList(testFileExemptiontextProto: String): List { diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index f4e269817f4..6c87d3574f7 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -1,20 +1,17 @@ package org.oppia.android.scripts.testfile import com.google.common.truth.Truth.assertThat -import org.junit.Assert.assertEquals -import org.oppia.android.scripts.proto.TestFileExemptions -import org.oppia.android.scripts.proto.TestFileExemptions.TestFileExemption import org.junit.After +import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.rules.TemporaryFolder +import org.oppia.android.scripts.proto.TestFileExemptions +import org.oppia.android.scripts.proto.TestFileExemptions.TestFileExemption import org.oppia.android.testing.assertThrows import java.io.ByteArrayOutputStream import java.io.PrintStream -import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream /** Tests for [TestFileCheck]. */ class TestFileCheckTest { @@ -157,7 +154,6 @@ class TestFileCheckTest { assertEquals(listOf("test/TestExemptedFile.kt"), result) } - /** Retrieves the absolute path of testfiles directory. */ private fun retrieveTestFilesDirectoryPath(): String { return "${tempFolder.root}/testfiles" From 8522410fe2ed7f6c9941666e05be723d1921b5d6 Mon Sep 17 00:00:00 2001 From: Rd Date: Sat, 22 Jun 2024 12:53:01 +0530 Subject: [PATCH 07/12] Added test cases to check the test exemption doesn't exclude override min coverage percentage files too --- .../android/scripts/testfile/TestFileCheck.kt | 29 ++------- .../scripts/testfile/TestFileCheckTest.kt | 59 +++++++++++++++++-- 2 files changed, 58 insertions(+), 30 deletions(-) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index 059ff337c39..734c7c82916 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -23,8 +23,7 @@ fun main(vararg args: String) { val testFileExemptiontextProto = "scripts/assets/test_file_exemptions" - val testFileCheck = TestFileCheck(repoPath, testFileExemptiontextProto) - testFileCheck.execute() + TestFileCheck(repoPath, testFileExemptiontextProto).execute() } /** @@ -37,31 +36,13 @@ class TestFileCheck( private val repoPath: String, private val testFileExemptiontextProto: String ) { - - /** - * Retrieves a list of files exempted from requiring a test file based on the specified protocol buffer. - * - * This function loads the test file exemptions from the provided protocol buffer file path, - * filters and returns list of paths for files that are not required for having a test file. - * - * The files specifically marked as exempt from needing a test file are included, - * rather than those exempt from meeting a minimum coverage percentage. - * - * @param testFileExemptiontextProto the location of the test file exemption textproto file. - * @return A list of file paths that are exempted from requiring a test file. - */ - fun getTestFileExemptionList(testFileExemptiontextProto: String): List { - - return loadTestFileExemptionsProto(testFileExemptiontextProto) - .testFileExemptionList - .filter { it.testFileNotRequired } - .map { it.exemptedFilePath } - } - /** Executes the test file presence check mechanism for the repository. */ fun execute() { // TODO(#3436): Develop a mechanism for permanently exempting files which do not ever need tests. - val testFileExemptionList = getTestFileExemptionList(testFileExemptiontextProto) + val testFileExemptionList = loadTestFileExemptionsProto(testFileExemptiontextProto) + .testFileExemptionList + .filter { it.testFileNotRequired } + .map { it.exemptedFilePath } val searchFiles = RepositoryFile.collectSearchFiles( repoPath = repoPath, diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index 6c87d3574f7..11845a75f87 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -130,28 +130,75 @@ class TestFileCheckTest { @Test fun testTestFileCheck_minCoverageExemptedFile_notExemptedFromTestFileCheck() { + tempFolder.newFile("testfiles/ProdFile1.kt") + tempFolder.newFile("testfiles/ProdFile2.kt") + tempFolder.newFile("testfiles/ProdFile2Test.kt") + val testFileExemptions = TestFileExemptions.newBuilder() .addTestFileExemption( TestFileExemption.newBuilder() - .setExemptedFilePath("test/TestExemptedFile.kt") + .setExemptedFilePath("testfiles/ProdFile1.kt") .setTestFileNotRequired(true) ) .addTestFileExemption( TestFileExemption.newBuilder() - .setExemptedFilePath("coverage/CoverageTestFile.kt") + .setExemptedFilePath("testfiles/ProdFile2.kt") .setOverrideMinCoveragePercentRequired(5) ) .build() val coverageTestExemptiontextProto = tempFolder.newFile("test_exemption.pb") - coverageTestExemptiontextProto.outputStream().use { (testFileExemptions.writeTo(it)) } + coverageTestExemptiontextProto.outputStream().use { + (testFileExemptions.writeTo(it)) + } - val result = TestFileCheck( + TestFileCheck( "${tempFolder.root}", "${tempFolder.root}/test_exemption" - ).getTestFileExemptionList("${tempFolder.root}/test_exemption") + ).execute() - assertEquals(listOf("test/TestExemptedFile.kt"), result) + assertThat(outContent.toString().trim()).isEqualTo(TEST_FILE_CHECK_PASSED_OUTPUT_INDICATOR) + } + + @Test + fun testTestFileCheck_minCoverageExemptedFileFails_notExemptedFromTestFileCheck() { + + tempFolder.newFile("testfiles/ProdFile1.kt") + tempFolder.newFile("testfiles/ProdFile2.kt") + + val testFileExemptions = TestFileExemptions.newBuilder() + .addTestFileExemption( + TestFileExemption.newBuilder() + .setExemptedFilePath("testfiles/ProdFile1.kt") + .setTestFileNotRequired(true) + ) + .addTestFileExemption( + TestFileExemption.newBuilder() + .setExemptedFilePath("testfiles/ProdFile2.kt") + .setOverrideMinCoveragePercentRequired(5) + ) + .build() + + val coverageTestExemptiontextProto = tempFolder.newFile("test_exemption.pb") + coverageTestExemptiontextProto.outputStream().use { + (testFileExemptions.writeTo(it)) + } + + val exception = assertThrows() { + TestFileCheck( + "${tempFolder.root}", + "${tempFolder.root}/test_exemption" + ).execute() + } + + assertThat(exception).hasMessageThat().contains(TEST_FILE_CHECK_FAILED_OUTPUT_INDICATOR) + val failureMessage = + """ + File ${retrieveTestFilesDirectoryPath()}/ProdFile2.kt does not have a corresponding test file. + + $wikiReferenceNote + """.trimIndent() + assertThat(outContent.toString().trim()).isEqualTo(failureMessage) } /** Retrieves the absolute path of testfiles directory. */ From 29346c2f405e6653bd26ae2067327734a3a5d0f7 Mon Sep 17 00:00:00 2001 From: Rd Date: Sat, 22 Jun 2024 12:55:37 +0530 Subject: [PATCH 08/12] Fix punctuation and unusued import removal --- .../java/org/oppia/android/scripts/testfile/TestFileCheck.kt | 2 +- .../org/oppia/android/scripts/testfile/TestFileCheckTest.kt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index 734c7c82916..18e52770d5e 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -30,7 +30,7 @@ fun main(vararg args: String) { * Class for checking the presence of test files in a repository. * * @param repoPath The path of the repo - * @param testFileExemptiontextProto the location of the test file exemption textproto file. + * @param testFileExemptiontextProto the location of the test file exemption textproto file */ class TestFileCheck( private val repoPath: String, diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index 11845a75f87..a6debb242a2 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -2,7 +2,6 @@ package org.oppia.android.scripts.testfile import com.google.common.truth.Truth.assertThat import org.junit.After -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test From b637d64a22d55c9b77eeb6da61fbaeccd905c30e Mon Sep 17 00:00:00 2001 From: Rd Date: Sat, 22 Jun 2024 14:58:38 +0530 Subject: [PATCH 09/12] Renamed test cases to match standard file practice used --- .../org/oppia/android/scripts/testfile/TestFileCheckTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index a6debb242a2..16d2fae017f 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -128,7 +128,7 @@ class TestFileCheckTest { } @Test - fun testTestFileCheck_minCoverageExemptedFile_notExemptedFromTestFileCheck() { + fun testTestFileCheck_minCoverageExemptedFile_testFileIsRequired() tempFolder.newFile("testfiles/ProdFile1.kt") tempFolder.newFile("testfiles/ProdFile2.kt") tempFolder.newFile("testfiles/ProdFile2Test.kt") @@ -160,7 +160,7 @@ class TestFileCheckTest { } @Test - fun testTestFileCheck_minCoverageExemptedFileFails_notExemptedFromTestFileCheck() { + fun testTestFileCheck_missTestFilesForCoverageExemptedFile_testFileIsNotPresent() tempFolder.newFile("testfiles/ProdFile1.kt") tempFolder.newFile("testfiles/ProdFile2.kt") From 2bf98fea824798d13d4b9a2f3a86f6156d531784 Mon Sep 17 00:00:00 2001 From: Rd Date: Sat, 22 Jun 2024 15:33:44 +0530 Subject: [PATCH 10/12] Added missing curly braces --- .../org/oppia/android/scripts/testfile/TestFileCheckTest.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt index 16d2fae017f..f9c5cdcd14d 100644 --- a/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt +++ b/scripts/src/javatests/org/oppia/android/scripts/testfile/TestFileCheckTest.kt @@ -128,7 +128,7 @@ class TestFileCheckTest { } @Test - fun testTestFileCheck_minCoverageExemptedFile_testFileIsRequired() + fun testTestFileCheck_minCoverageExemptedFile_testFileIsRequired() { tempFolder.newFile("testfiles/ProdFile1.kt") tempFolder.newFile("testfiles/ProdFile2.kt") tempFolder.newFile("testfiles/ProdFile2Test.kt") @@ -160,7 +160,7 @@ class TestFileCheckTest { } @Test - fun testTestFileCheck_missTestFilesForCoverageExemptedFile_testFileIsNotPresent() + fun testTestFileCheck_missTestFilesForCoverageExemptedFile_testFileIsNotPresent() { tempFolder.newFile("testfiles/ProdFile1.kt") tempFolder.newFile("testfiles/ProdFile2.kt") From d367c7bde4c0ce09d911adfb188ff70056f70de1 Mon Sep 17 00:00:00 2001 From: Rd Date: Sat, 22 Jun 2024 15:43:22 +0530 Subject: [PATCH 11/12] Trigger commit for Unexpected HTTP response: 500 erro in CI JDK setup From cd0b55ba83055692a003409fab5c0842c46059e3 Mon Sep 17 00:00:00 2001 From: Rd Date: Sun, 23 Jun 2024 21:23:09 +0530 Subject: [PATCH 12/12] Removed KDocs on the private methods --- .../android/scripts/testfile/TestFileCheck.kt | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt index 18e52770d5e..c14ac3dcf78 100644 --- a/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt +++ b/scripts/src/java/org/oppia/android/scripts/testfile/TestFileCheck.kt @@ -80,21 +80,10 @@ class TestFileCheck( } } -/** - * Computes the expected test file name for a prod file. - * - * @param prodFile the prod file for which expected test file name has to be computed - * @return expected name of the test file - */ private fun computeExpectedTestFileName(prodFile: File): String { return "${prodFile.nameWithoutExtension}Test.kt" } -/** - * Logs the file names of all the prod files that do not have a test file. - * - * @param matchedFiles list of all the files missing a test file - */ private fun logFailures(matchedFiles: List) { if (matchedFiles.isNotEmpty()) { matchedFiles.sorted().forEach { file -> @@ -104,12 +93,6 @@ private fun logFailures(matchedFiles: List) { } } -/** - * Loads the test file exemptions list to proto. - * - * @param testFileExemptiontextProto the location of the test file exemption textproto file - * @return proto class from the parsed textproto file - */ private fun loadTestFileExemptionsProto(testFileExemptiontextProto: String): TestFileExemptions { val protoBinaryFile = File("$testFileExemptiontextProto.pb") val builder = TestFileExemptions.getDefaultInstance().newBuilderForType()