From 164f33b86bec3dcaab6a3f39d15f6be82a4a28f8 Mon Sep 17 00:00:00 2001 From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com> Date: Sat, 27 Jan 2024 01:31:47 +0300 Subject: [PATCH] Fix #5001: Set Up Firestore and Upload Free Form Responses (#5098) ## Explanation Fixes #5001. This is PR 5 of 6 Planned PRs. We are adding a whole new infrastructure for uploading data to Firebase Firestore. ### Key Changes - Introducing a `FirestoreDataController` that handles Anonymous Authentication and logging to Firestore, based on connectivity status. - Adding the Firestore, Auth and AppCheck dependencies, and reppining these maven dependencies. - New event logger for converting event logs to documents(hashmaps) and uploading them to firestore. - Introduce AuthenticationController This new controller provides functionality to retrieve the current signed in user and also sign in a user anonymously, and can be called from anywhere. It has a fake that is to be used in tests. - Adding the newly created `utility` module files to `CODEOWNERS` - Creating wrappers for FirebaseAuth, and Firestore in order to allow switching out with fakes in tests and development versions using dagger. The implementation relies on an AuthenticationWrapper to switch out the real and fake authentication controllers for testing purposes. To do this, I created a dagger module to provide the correct listener where needed, hence the test file changes in the _app_ module tests. ### Technical Decisions - I opted to create a new cache for events that will eventually be uploaded to Firestore. This means they will not be accidentally uploaded to Firebase. - I opted to use EventLogs and convert them to Documents on the fly as opposed to creating an entirely new model and logging infrastruture that is Firestore-specific. - I calculated the `FirestoreLogStorageCacheSize` based on the [average length of a Google Review ](https://www.meetsoci.com/resources/insights/brands-franchises/state-of-google-reviews/#:~:text=Average%20review%20length%20ranges%20from,per%20review%20for%20department%20stores.&text=In%20comparison%20to%20other%20local%20platforms%2C%20Google%20reviews%20skew%20positively.)and the [storage size computation specs](https://firebase.google.com/docs/firestore/storage-size) defined by Firebase. I computed it based on 10 profiles on a device over a 3 month period. - I opted to use existing log upload infrastructure to upload to firebase, as opposed to creating a whole new upload workflow so I can reuse the existing test infrastructure as well. ### Dependency Updates - I added dependencies for Firestore and Auth. The selected versions were both the earliest compatible with the rest of our existing dependencies and the latest that didn't cause proguarding issues. There were incidental updates to transitive dependencies, both major and minor. ### Proguard Added new -dontwarns for the following: `-dontwarn javax.naming.**` [Reference](https://github.com/firebase/firebase-android-sdk/blob/00d4626/firebase-firestore/proguard.txt.) ## Essential Checklist - [x] The PR title and explanation each start with "Fix #bugnum: " (If this PR fixes part of an issue, prefix the title with "Fix part of #bugnum: ...".) - [x] Any changes to [scripts/assets](https://github.com/oppia/oppia-android/tree/develop/scripts/assets) files have their rationale included in the PR explanation. - [x] The PR follows the [style guide](https://github.com/oppia/oppia-android/wiki/Coding-style-guide). - [x] The PR does not contain any unnecessary code changes from Android Studio ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#undo-unnecessary-changes)). - [x] The PR is made from a branch that's **not** called "develop" and is up-to-date with "develop". - [x] The PR is **assigned** to the appropriate reviewers ([reference](https://github.com/oppia/oppia-android/wiki/Guidance-on-submitting-a-PR#clarification-regarding-assignees-and-reviewers-section)). ## Upload Screenshots ### Firestore Upload Screenshot 2024-01-23 at 11 18 26 ## Querying Synced Firestore Data on BigQuery Screenshot 2024-01-23 at 11 26 26 Screenshot 2024-01-23 at 11 26 44 --- .github/CODEOWNERS | 8 + app/BUILD.bazel | 10 +- app/build.gradle | 2 + .../alpha/AlphaApplicationComponent.kt | 2 + .../android/app/application/alpha/BUILD.bazel | 1 + .../AlphaKenyaApplicationComponent.kt | 2 + .../app/application/alphakenya/BUILD.bazel | 1 + .../android/app/application/beta/BUILD.bazel | 1 + .../beta/BetaApplicationComponent.kt | 3 +- .../android/app/application/dev/BUILD.bazel | 1 + .../dev/DeveloperApplicationComponent.kt | 2 + .../android/app/application/ga/BUILD.bazel | 1 + .../application/ga/GaApplicationComponent.kt | 3 +- .../vieweventlogs/ViewEventLogsViewModel.kt | 15 +- .../SurveyOutroDialogFragmentPresenter.kt | 6 +- .../AdministratorControlsActivityTest.kt | 4 +- .../AdministratorControlsFragmentTest.kt | 4 +- .../AppVersionActivityTest.kt | 4 +- .../ProfileAndDeviceIdActivityTest.kt | 4 +- .../ProfileAndDeviceIdFragmentTest.kt | 4 +- .../CompletedStoryListActivityTest.kt | 4 +- .../LessonThumbnailImageViewTest.kt | 4 +- .../MathExpressionInteractionsViewTest.kt | 4 +- .../AppCompatCheckBoxBindingAdaptersTest.kt | 4 +- .../CircularProgressIndicatorAdaptersTest.kt | 4 +- .../DrawableBindingAdaptersTest.kt | 4 +- .../ImageViewBindingAdaptersTest.kt | 4 +- .../databinding/MarginBindingAdaptersTest.kt | 4 +- ...StateAssemblerMarginBindingAdaptersTest.kt | 4 +- ...tateAssemblerPaddingBindingAdaptersTest.kt | 4 +- .../TextViewBindingAdaptersTest.kt | 4 +- .../databinding/ViewBindingAdaptersTest.kt | 4 +- .../DeveloperOptionsActivityTest.kt | 4 +- .../DeveloperOptionsFragmentTest.kt | 4 +- .../MarkChaptersCompletedActivityTest.kt | 4 +- .../MarkChaptersCompletedFragmentTest.kt | 4 +- .../MarkStoriesCompletedActivityTest.kt | 4 +- .../MarkStoriesCompletedFragmentTest.kt | 4 +- .../MarkTopicsCompletedActivityTest.kt | 4 +- .../MarkTopicsCompletedFragmentTest.kt | 4 +- .../devoptions/ViewEventLogsActivityTest.kt | 4 +- .../devoptions/ViewEventLogsFragmentTest.kt | 220 +- .../ForceNetworkTypeActivityTest.kt | 4 +- .../ForceNetworkTypeFragmentTest.kt | 4 +- .../MathExpressionParserActivityTest.kt | 4 +- .../MathExpressionParserFragmentTest.kt | 4 +- .../android/app/faq/FAQListFragmentTest.kt | 4 +- .../android/app/faq/FAQSingleActivityTest.kt | 4 +- .../android/app/faq/FaqListActivityTest.kt | 4 +- .../android/app/help/HelpActivityTest.kt | 5 +- .../android/app/help/HelpFragmentTest.kt | 4 +- .../android/app/home/HomeActivityTest.kt | 4 +- .../app/home/RecentlyPlayedFragmentTest.kt | 4 +- .../app/home/TopicSummaryViewModelTest.kt | 4 +- .../android/app/home/WelcomeViewModelTest.kt | 4 +- .../PromotedStoryListViewModelTest.kt | 4 +- .../PromotedStoryViewModelTest.kt | 4 +- .../mydownloads/MyDownloadsActivityTest.kt | 4 +- .../mydownloads/MyDownloadsFragmentTest.kt | 4 +- .../notice/BetaNoticeDialogFragmentTest.kt | 4 +- ...dAppDeprecationNoticeDialogFragmentTest.kt | 4 +- ...labilityUpgradeNoticeDialogFragmentTest.kt | 4 +- ...lAppDeprecationNoticeDialogFragmentTest.kt | 4 +- .../OsDeprecationNoticeDialogFragmentTest.kt | 7 +- .../app/onboarding/OnboardingActivityTest.kt | 5 +- .../app/onboarding/OnboardingFragmentTest.kt | 4 +- .../OngoingTopicListActivityTest.kt | 4 +- .../app/options/AppLanguageActivityTest.kt | 4 +- .../app/options/AppLanguageFragmentTest.kt | 4 +- .../app/options/AudioLanguageActivityTest.kt | 4 +- .../app/options/AudioLanguageFragmentTest.kt | 4 +- .../app/options/OptionsActivityTest.kt | 4 +- .../app/options/OptionsFragmentTest.kt | 4 +- .../options/ReadingTextSizeActivityTest.kt | 4 +- .../options/ReadingTextSizeFragmentTest.kt | 4 +- .../android/app/parser/HtmlParserTest.kt | 4 +- .../app/player/audio/AudioFragmentTest.kt | 4 +- .../exploration/BottomSheetOptionsMenuTest.kt | 4 +- .../exploration/ExplorationActivityTest.kt | 4 +- .../app/player/state/StateFragmentTest.kt | 4 +- .../app/policies/PoliciesActivityTest.kt | 4 +- .../app/policies/PoliciesFragmentTest.kt | 4 +- .../app/profile/AddProfileActivityTest.kt | 4 +- .../app/profile/AdminAuthActivityTest.kt | 4 +- .../app/profile/AdminPinActivityTest.kt | 4 +- .../app/profile/PinPasswordActivityTest.kt | 4 +- .../app/profile/ProfileChooserActivityTest.kt | 4 +- .../app/profile/ProfileChooserFragmentTest.kt | 4 +- .../ProfilePictureActivityTest.kt | 2 + .../ProfileProgressActivityTest.kt | 2 + .../ProfileProgressFragmentTest.kt | 2 + .../app/recyclerview/BindableAdapterTest.kt | 4 +- .../resumelesson/ResumeLessonActivityTest.kt | 4 +- .../resumelesson/ResumeLessonFragmentTest.kt | 4 +- .../profile/ProfileEditActivityTest.kt | 4 +- .../profile/ProfileEditFragmentTest.kt | 4 +- .../profile/ProfileListActivityTest.kt | 4 +- .../profile/ProfileListFragmentTest.kt | 4 +- .../profile/ProfileRenameActivityTest.kt | 4 +- .../profile/ProfileRenameFragmentTest.kt | 4 +- .../profile/ProfileResetPinActivityTest.kt | 4 +- .../profile/ProfileResetPinFragmentTest.kt | 4 +- .../android/app/splash/SplashActivityTest.kt | 4 +- .../app/spotlight/SpotlightFragmentTest.kt | 4 +- .../android/app/story/StoryActivityTest.kt | 4 +- .../android/app/story/StoryFragmentTest.kt | 4 +- .../android/app/survey/SurveyActivityTest.kt | 4 +- .../android/app/survey/SurveyFragmentTest.kt | 4 +- .../app/testing/DragDropTestActivityTest.kt | 4 +- ...ionInputInteractionViewTestActivityTest.kt | 4 +- ...ImageRegionSelectionInteractionViewTest.kt | 4 +- .../InputInteractionViewTestActivityTest.kt | 4 +- .../NavigationDrawerActivityDebugTest.kt | 4 +- .../NavigationDrawerActivityProdTest.kt | 4 +- ...tioInputInteractionViewTestActivityTest.kt | 4 +- ...tFontScaleConfigurationUtilActivityTest.kt | 4 +- .../testing/TopicTestActivityForStoryTest.kt | 4 +- .../app/thirdparty/LicenseListActivityTest.kt | 4 +- .../app/thirdparty/LicenseListFragmentTest.kt | 4 +- .../LicenseTextViewerActivityTest.kt | 4 +- .../LicenseTextViewerFragmentTest.kt | 4 +- .../ThirdPartyDependencyListActivityTest.kt | 4 +- .../ThirdPartyDependencyListFragmentTest.kt | 4 +- .../android/app/topic/TopicActivityTest.kt | 4 +- .../android/app/topic/TopicFragmentTest.kt | 4 +- .../conceptcard/ConceptCardFragmentTest.kt | 4 +- .../app/topic/info/TopicInfoFragmentTest.kt | 4 +- .../topic/lessons/TopicLessonsFragmentTest.kt | 4 +- .../practice/TopicPracticeFragmentTest.kt | 4 +- .../QuestionPlayerActivityTest.kt | 4 +- .../revision/TopicRevisionFragmentTest.kt | 4 +- .../revisioncard/RevisionCardActivityTest.kt | 4 +- .../revisioncard/RevisionCardFragmentTest.kt | 4 +- .../app/utility/RatioExtensionsTest.kt | 4 +- .../walkthrough/WalkthroughActivityTest.kt | 4 +- .../WalkthroughFinalFragmentTest.kt | 4 +- .../WalkthroughTopicListFragmentTest.kt | 4 +- .../WalkthroughWelcomeFragmentTest.kt | 4 +- .../activity/ActivityIntentFactoriesTest.kt | 4 +- .../route/ActivityRouterModuleTest.kt | 4 +- .../app/activity/route/ActivityRouterTest.kt | 4 +- .../android/app/home/HomeActivityLocalTest.kt | 4 +- .../app/parser/FractionParsingUiErrorTest.kt | 4 +- .../parser/ListItemLeadingMarginSpanTest.kt | 4 +- .../app/parser/StringToRatioParserTest.kt | 4 +- .../ExplorationActivityLocalTest.kt | 2 + .../player/state/StateFragmentLocalTest.kt | 4 +- .../ProfileChooserFragmentLocalTest.kt | 4 +- .../app/story/StoryActivityLocalTest.kt | 4 +- .../app/testing/CompletedStoryListSpanTest.kt | 4 +- .../oppia/android/app/testing/HomeSpanTest.kt | 4 +- .../app/testing/OngoingTopicListSpanTest.kt | 4 +- .../PlatformParameterIntegrationTest.kt | 4 +- .../app/testing/ProfileChooserSpanTest.kt | 4 +- .../testing/ProfileProgressSpanCountTest.kt | 4 +- .../app/testing/RecentlyPlayedSpanTest.kt | 4 +- .../app/testing/TopicRevisionSpanTest.kt | 4 +- .../app/testing/activity/TestActivityTest.kt | 4 +- .../AdministratorControlsFragmentTest.kt | 4 +- .../testing/options/OptionsFragmentTest.kt | 4 +- .../player/split/PlayerSplitScreenTest.kt | 4 +- .../state/StateFragmentAccessibilityTest.kt | 4 +- .../topic/info/TopicInfoFragmentLocalTest.kt | 4 +- .../lessons/TopicLessonsFragmentLocalTest.kt | 4 +- .../QuestionPlayerActivityLocalTest.kt | 4 +- .../RevisionCardActivityLocalTest.kt | 4 +- .../ActivityLanguageLocaleHandlerTest.kt | 4 +- .../AppLanguageResourceHandlerTest.kt | 4 +- .../AppLanguageWatcherMixinTest.kt | 4 +- .../app/utility/datetime/DateTimeUtilTest.kt | 3 +- .../MathExpressionAccessibilityUtilTest.kt | 4 +- .../firebase-components-proguard-rules.pro | 2 + domain/BUILD.bazel | 1 + domain/build.gradle | 4 +- .../domain/auth/AuthenticationController.kt | 49 + .../domain/auth/AuthenticationModule.kt | 19 + .../org/oppia/android/domain/auth/BUILD.bazel | 75 + .../domain/auth/FirebaseAuthInstance.kt | 8 + .../auth/FirebaseAuthInstanceWrapper.kt | 7 + .../auth/FirebaseAuthInstanceWrapperImpl.kt | 11 + .../domain/auth/FirebaseAuthWrapper.kt | 10 + .../domain/auth/FirebaseAuthWrapperImpl.kt | 28 + .../domain/auth/FirebaseUserWrapper.kt | 8 + .../domain/oppialogger/LogStorageModule.kt | 13 + .../domain/oppialogger/analytics/BUILD.bazel | 21 + .../analytics/FirestoreDataController.kt | 183 ++ .../oppialogger/loguploader/BUILD.bazel | 1 + .../LogReportWorkManagerInitializer.kt | 26 + .../loguploader/LogUploadWorker.kt | 17 + .../oppialogger/survey/SurveyEventsLogger.kt | 30 +- .../domain/survey/SurveyProgressController.kt | 23 +- .../loguploader/FakeLogUploader.kt | 11 + .../domain/audio/AudioPlayerControllerTest.kt | 2 + .../auth/AuthenticationControllerTest.kt | 144 ++ .../domain/auth/AuthenticationModuleTest.kt | 92 + .../org/oppia/android/domain/auth/BUILD.bazel | 30 + .../auth/FirebaseAuthWrapperImplTest.kt | 113 + .../ExplorationDataControllerTest.kt | 4 +- .../ExplorationProgressControllerTest.kt | 3 +- .../ExplorationCheckpointControllerTest.kt | 3 +- .../analytics/FirestoreDataControllerTest.kt | 486 +++++ .../analytics/LearnerAnalyticsLoggerTest.kt | 2 + .../analytics/SurveyEventsLoggerTest.kt | 33 +- .../LogReportWorkManagerInitializerTest.kt | 27 +- .../loguploader/LogUploadWorkerTest.kt | 136 +- .../domain/survey/SurveyControllerTest.kt | 3 +- .../survey/SurveyProgressControllerTest.kt | 28 +- .../instrumentation/application/BUILD.bazel | 1 + .../application/TestApplicationComponent.kt | 4 +- scripts/assets/maven_dependencies.textproto | 136 +- scripts/assets/test_file_exemptions.textproto | 12 + testing/build.gradle | 1 + .../FakeFirebaseAuthInstanceWrapperImpl.kt | 11 + .../testing/FakeFirebaseAuthWrapperImpl.kt | 49 + .../testing/FakeFirestoreEventLogger.kt | 41 + .../FakeFirestoreInstanceWrapperImpl.kt | 16 + .../testing/TestAuthenticationModule.kt | 15 + .../android/testing/TestLogReportingModule.kt | 11 + .../testing/logging/EventLogSubject.kt | 87 +- .../FakeFirebaseAuthWrapperImplTest.kt | 122 ++ .../testing/FakeFirestoreEventLoggerTest.kt | 302 +++ .../testing/TestAuthenticationModuleTest.kt | 81 + ...alizeDefaultLocaleRuleCustomContextTest.kt | 4 +- ...InitializeDefaultLocaleRuleOmissionTest.kt | 4 +- .../junit/InitializeDefaultLocaleRuleTest.kt | 4 +- third_party/maven_install.json | 1920 ++++++++++++++--- third_party/versions.bzl | 4 + utility/BUILD.bazel | 2 + utility/build.gradle | 2 + .../oppia/android/util/logging/LogUploader.kt | 6 + .../android/util/logging/firebase/BUILD.bazel | 69 + .../firebase/DebugFirestoreEventLoggerImpl.kt | 33 + .../firebase/DebugLogReportingModule.kt | 10 + .../logging/firebase/FirebaseLogUploader.kt | 12 + .../logging/firebase/FirestoreEventLogger.kt | 13 + .../firebase/FirestoreEventLoggerProdImpl.kt | 31 + .../logging/firebase/FirestoreInstance.kt | 8 + .../firebase/FirestoreInstanceWrapper.kt | 7 + .../firebase/FirestoreInstanceWrapperImpl.kt | 13 + .../logging/firebase/LogReportingModule.kt | 10 + .../android/util/logging/firebase/BUILD.bazel | 25 + .../DebugFirestoreEventLoggerImplTest.kt | 193 ++ 242 files changed, 5214 insertions(+), 592 deletions(-) create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt create mode 100644 domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel create mode 100644 domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt create mode 100644 domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt create mode 100644 testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt create mode 100644 testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt create mode 100644 testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt create mode 100644 testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt create mode 100644 testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt create mode 100644 utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt create mode 100644 utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 0a66f305ef8..00aff7fcea9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -93,12 +93,20 @@ # All domain and utility-specific shared test infrastructure. /testing/src/main/java/org/oppia/android/testing/FakeAnalyticsEventLogger.kt @oppia/android-app-infrastructure-reviewers /testing/src/main/java/org/oppia/android/testing/FakeExceptionLogger.kt @oppia/android-app-infrastructure-reviewers +/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers +/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt @oppia/android-app-infrastructure-reviewers +/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt @oppia/android-app-infrastructure-reviewers +/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt @oppia/android-app-infrastructure-reviewers /testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricAssessor.kt @oppia/android-app-infrastructure-reviewers /testing/src/main/java/org/oppia/android/testing/FakePerformanceMetricsEventLogger.kt @oppia/android-app-infrastructure-reviewers +/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt @oppia/android-app-infrastructure-reviewers +/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt @oppia/android-app-infrastructure-reviewers /testing/src/main/java/org/oppia/android/testing/TestImageLoaderModule.kt @oppia/android-app-infrastructure-reviewers /testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt @oppia/android-app-infrastructure-reviewers /testing/src/test/java/org/oppia/android/testing/FakeAnalyticsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers /testing/src/test/java/org/oppia/android/testing/FakeExceptionLoggerTest.kt @oppia/android-app-infrastructure-reviewers +/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt @oppia/android-app-infrastructure-reviewers +/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers /testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricAssessorTest.kt @oppia/android-app-infrastructure-reviewers /testing/src/test/java/org/oppia/android/testing/FakePerformanceMetricsEventLoggerTest.kt @oppia/android-app-infrastructure-reviewers diff --git a/app/BUILD.bazel b/app/BUILD.bazel index 32677435108..4030f93b7d2 100644 --- a/app/BUILD.bazel +++ b/app/BUILD.bazel @@ -713,7 +713,7 @@ kt_android_library( "//third_party:androidx_databinding_databinding-runtime", "//utility", "//utility/src/main/java/org/oppia/android/util/extensions:context_extensions", - "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_event_logger", + "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module", "//utility/src/main/java/org/oppia/android/util/math:fraction_parser", "//utility/src/main/java/org/oppia/android/util/networking:network_connection_debug_util", "//utility/src/main/java/org/oppia/android/util/parser/html:html_parser", @@ -1018,4 +1018,12 @@ android_library( ], ) +android_library( + name = "firestore_deps", + exports = [ + "//third_party:com_google_auto_value_auto-value-annotations", + "//third_party:org_checkerframework_checker-qual", + ], +) + dagger_rules() diff --git a/app/build.gradle b/app/build.gradle index 6de6e2c4757..95a33a7e7e0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -171,6 +171,8 @@ dependencies { 'com.google.firebase:firebase-analytics-ktx:17.5.0', 'com.google.firebase:firebase-core:17.5.0', 'com.google.firebase:firebase-crashlytics:17.0.0', + 'com.google.firebase:firebase-firestore-ktx:24.2.1', + 'com.google.firebase:firebase-auth-ktx:19.3.1', 'com.google.guava:guava:28.1-android', 'com.google.protobuf:protobuf-javalite:3.17.3', 'com.github.oppia:CircularImageview:35d08ba88a', diff --git a/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt index c91e02f702f..136fd1dbb9a 100644 --- a/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt +++ b/app/src/main/java/org/oppia/android/app/application/alpha/AlphaApplicationComponent.kt @@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule import org.oppia.android.app.translation.ActivityRecreatorProdModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.auth.AuthenticationModule import org.oppia.android.domain.classify.InteractionsModule import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule @@ -99,6 +100,7 @@ import javax.inject.Singleton PerformanceMetricsConfigurationsModule::class, AlphaBuildFlavorModule::class, EventLoggingConfigurationModule::class, CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class, ExplorationProgressModule::class, + AuthenticationModule::class, ] ) interface AlphaApplicationComponent : ApplicationComponent { diff --git a/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel index 9c410695450..ce982039b52 100644 --- a/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel +++ b/app/src/main/java/org/oppia/android/app/application/alpha/BUILD.bazel @@ -19,6 +19,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application:abstract_application", "//app/src/main/java/org/oppia/android/app/application:application_component", "//app/src/main/java/org/oppia/android/app/application:common_application_modules", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", "//utility/src/main/java/org/oppia/android/util/networking:prod_module", diff --git a/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt index a65a7cf5724..75d07359cd4 100644 --- a/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt +++ b/app/src/main/java/org/oppia/android/app/application/alphakenya/AlphaKenyaApplicationComponent.kt @@ -13,6 +13,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule import org.oppia.android.app.translation.ActivityRecreatorProdModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.auth.AuthenticationModule import org.oppia.android.domain.classify.InteractionsModule import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule @@ -100,6 +101,7 @@ import javax.inject.Singleton PerformanceMetricsConfigurationsModule::class, AlphaBuildFlavorModule::class, KenyaAlphaEventLoggingConfigurationModule::class, CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class, ExplorationProgressModule::class, + AuthenticationModule::class, ] ) interface AlphaKenyaApplicationComponent : ApplicationComponent { diff --git a/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel index 538d47308dc..ff7623c9481 100644 --- a/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel +++ b/app/src/main/java/org/oppia/android/app/application/alphakenya/BUILD.bazel @@ -20,6 +20,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application:application_component", "//app/src/main/java/org/oppia/android/app/application:common_application_modules", "//app/src/main/java/org/oppia/android/app/application/alpha:alpha_build_flavor_module", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", "//utility/src/main/java/org/oppia/android/util/logging:kenya_alpha_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", "//utility/src/main/java/org/oppia/android/util/networking:prod_module", diff --git a/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel index db532533d41..f8bc14be8ca 100644 --- a/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel +++ b/app/src/main/java/org/oppia/android/app/application/beta/BUILD.bazel @@ -22,6 +22,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application:abstract_application", "//app/src/main/java/org/oppia/android/app/application:application_component", "//app/src/main/java/org/oppia/android/app/application:common_application_modules", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", "//utility/src/main/java/org/oppia/android/util/networking:prod_module", diff --git a/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt index b427b4eaeb3..bbe79384e81 100644 --- a/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt +++ b/app/src/main/java/org/oppia/android/app/application/beta/BetaApplicationComponent.kt @@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule import org.oppia.android.app.translation.ActivityRecreatorProdModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.auth.AuthenticationModule import org.oppia.android.domain.classify.InteractionsModule import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule @@ -99,7 +100,7 @@ import javax.inject.Singleton PerformanceMetricsConfigurationsModule::class, BetaBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class, - ExplorationProgressModule::class, + ExplorationProgressModule::class, AuthenticationModule::class, ] ) interface BetaApplicationComponent : ApplicationComponent { diff --git a/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel index 53841df1c37..7949a279c20 100644 --- a/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel +++ b/app/src/main/java/org/oppia/android/app/application/dev/BUILD.bazel @@ -26,6 +26,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application:abstract_application", "//app/src/main/java/org/oppia/android/app/application:application_component", "//app/src/main/java/org/oppia/android/app/application:common_application_modules", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module", "//utility/src/main/java/org/oppia/android/util/networking:debug_module", diff --git a/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt index 1d718d5727e..522e68679f4 100644 --- a/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt +++ b/app/src/main/java/org/oppia/android/app/application/dev/DeveloperApplicationComponent.kt @@ -13,6 +13,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule import org.oppia.android.app.translation.ActivityRecreatorProdModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.auth.AuthenticationModule import org.oppia.android.domain.classify.InteractionsModule import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule @@ -101,6 +102,7 @@ import javax.inject.Singleton PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class, DeveloperBuildFlavorModule::class, EventLoggingConfigurationModule::class, CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + AuthenticationModule::class, ] ) interface DeveloperApplicationComponent : ApplicationComponent { diff --git a/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel b/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel index 5421f374f20..baa4b12237b 100644 --- a/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel +++ b/app/src/main/java/org/oppia/android/app/application/ga/BUILD.bazel @@ -22,6 +22,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application:abstract_application", "//app/src/main/java/org/oppia/android/app/application:application_component", "//app/src/main/java/org/oppia/android/app/application:common_application_modules", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", "//utility/src/main/java/org/oppia/android/util/networking:prod_module", diff --git a/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt b/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt index 92cc87a5043..b4b476bc6d3 100644 --- a/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt +++ b/app/src/main/java/org/oppia/android/app/application/ga/GaApplicationComponent.kt @@ -12,6 +12,7 @@ import org.oppia.android.app.shim.ViewBindingShimModule import org.oppia.android.app.translation.ActivityRecreatorProdModule import org.oppia.android.data.backends.gae.NetworkConfigProdModule import org.oppia.android.data.backends.gae.NetworkModule +import org.oppia.android.domain.auth.AuthenticationModule import org.oppia.android.domain.classify.InteractionsModule import org.oppia.android.domain.classify.rules.algebraicexpressioninput.AlgebraicExpressionInputModule import org.oppia.android.domain.classify.rules.continueinteraction.ContinueModule @@ -99,7 +100,7 @@ import javax.inject.Singleton PerformanceMetricsConfigurationsModule::class, GaBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, PerformanceMetricsAssessorModule::class, - ExplorationProgressModule::class, + ExplorationProgressModule::class, AuthenticationModule::class, ] ) interface GaApplicationComponent : ApplicationComponent { diff --git a/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt b/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt index 09362e1d90e..274079e2ce8 100644 --- a/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt +++ b/app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/ViewEventLogsViewModel.kt @@ -5,6 +5,7 @@ import org.oppia.android.app.translation.AppLanguageResourceHandler import org.oppia.android.app.viewmodel.ObservableViewModel import org.oppia.android.util.locale.OppiaLocale import org.oppia.android.util.logging.firebase.DebugAnalyticsEventLogger +import org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImpl import javax.inject.Inject /** @@ -14,11 +15,15 @@ import javax.inject.Inject @FragmentScope class ViewEventLogsViewModel @Inject constructor( debugAnalyticsEventLogger: DebugAnalyticsEventLogger, + debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl, private val machineLocale: OppiaLocale.MachineLocale, private val resourceHandler: AppLanguageResourceHandler ) : ObservableViewModel() { + // Retrieves events from cache that are meant to be uploaded to Firebase Firestore. + private val firestoreEvents = debugFirestoreEventLogger.getEventList() - private val eventList = debugAnalyticsEventLogger.getEventList() + // Retrieves events from cache that are meant to be uploaded to Firebase Analytics. + private val analyticsEvents = debugAnalyticsEventLogger.getEventList() /** * List of [EventLogItemViewModel] used to populate recyclerview of [ViewEventLogsFragment] @@ -29,8 +34,10 @@ class ViewEventLogsViewModel @Inject constructor( } private fun processEventLogsList(): List { - return eventList.map { - EventLogItemViewModel(it, machineLocale, resourceHandler) - }.reversed() + return (analyticsEvents + firestoreEvents) + .map { + EventLogItemViewModel(it, machineLocale, resourceHandler) + } + .sortedByDescending { it.eventLog.timestamp } } } diff --git a/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt index 8399bb9a0e5..ba001da3705 100644 --- a/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt +++ b/app/src/main/java/org/oppia/android/app/survey/SurveyOutroDialogFragmentPresenter.kt @@ -56,11 +56,11 @@ class SurveyOutroDialogFragmentPresenter @Inject constructor( private fun endSurveyWithCallback(callback: () -> Unit) { surveyController.stopSurveySession(surveyCompleted = true).toLiveData().observe( activity, - { - when (it) { + { result -> + when (result) { is AsyncResult.Pending -> oppiaLogger.d("SurveyActivity", "Stopping survey session") is AsyncResult.Failure -> { - oppiaLogger.d("SurveyActivity", "Failed to stop the survey session") + oppiaLogger.d("SurveyActivity", "Failed to stop the survey session", result.error) activity.finish() // Can't recover from the session failing to stop. } is AsyncResult.Success -> { diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt index 7eed7b8f290..7d0dbf96afc 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityTest.kt @@ -103,6 +103,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -971,7 +972,8 @@ class AdministratorControlsActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt index 14feb91afcc..ff5cba27e23 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AdministratorControlsFragmentTest.kt @@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -655,7 +656,8 @@ class AdministratorControlsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt index d6b1beaee52..cbe287cfaa9 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/AppVersionActivityTest.kt @@ -81,6 +81,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -306,7 +307,8 @@ class AppVersionActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt index 901453c91dd..2710157c685 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdActivityTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -229,7 +230,8 @@ class ProfileAndDeviceIdActivityTest { MathEquationInputModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, - ApplicationLifecycleModule::class, ExplorationProgressModule::class + ApplicationLifecycleModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt index 632098510b5..9bd43e39012 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/administratorcontrols/learneranalytics/ProfileAndDeviceIdFragmentTest.kt @@ -101,6 +101,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.logging.SyncStatusTestModule @@ -1028,7 +1029,8 @@ class ProfileAndDeviceIdFragmentTest { MathEquationInputModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, - ApplicationLifecycleModule::class, ExplorationProgressModule::class + ApplicationLifecycleModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt index f12311e7c86..17f0c3d6f73 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/completedstorylist/CompletedStoryListActivityTest.kt @@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -530,7 +531,8 @@ class CompletedStoryListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt index cd902d72732..29a4743fe20 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/customview/LessonThumbnailImageViewTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -178,7 +179,8 @@ class LessonThumbnailImageViewTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt index 8c53754b19a..768ba9a67a0 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsViewTest.kt @@ -78,6 +78,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -1780,7 +1781,8 @@ class MathExpressionInteractionsViewTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt index 9fcf2bd1e47..7ea576a3ebb 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/AppCompatCheckBoxBindingAdaptersTest.kt @@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -169,7 +170,8 @@ class AppCompatCheckBoxBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt index 48cd0f921ac..c84c6fc96b2 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/CircularProgressIndicatorAdaptersTest.kt @@ -68,6 +68,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -300,7 +301,8 @@ class CircularProgressIndicatorAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt index e996e8aebee..5a81aa9f654 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/DrawableBindingAdaptersTest.kt @@ -69,6 +69,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -189,7 +190,8 @@ class DrawableBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt index 464c7939a6f..72f19842249 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ImageViewBindingAdaptersTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -231,7 +232,8 @@ class ImageViewBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** Create a TestApplicationComponent. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt index 5b7202c4d9b..7bdc00ef976 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/MarginBindingAdaptersTest.kt @@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -352,7 +353,8 @@ class MarginBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** Create a TestApplicationComponent. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt index 32edc11fdd6..9e8a843ee06 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerMarginBindingAdaptersTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -507,7 +508,8 @@ class StateAssemblerMarginBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** Create a TestApplicationComponent. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt index 201fc1fdd6f..073add10f38 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/StateAssemblerPaddingBindingAdaptersTest.kt @@ -75,6 +75,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -505,7 +506,8 @@ class StateAssemblerPaddingBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt index 4b0c22416c3..ca6a286febb 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/TextViewBindingAdaptersTest.kt @@ -67,6 +67,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -338,7 +339,8 @@ class TextViewBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt index d45c83ec1a6..9db806e5f0e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/databinding/ViewBindingAdaptersTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -239,7 +240,8 @@ class ViewBindingAdaptersTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** Create a TestApplicationComponent. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt index d50f6dfa630..55bbad1e323 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityTest.kt @@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -341,7 +342,8 @@ class DeveloperOptionsActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt index e0340041713..8247b045e36 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/DeveloperOptionsFragmentTest.kt @@ -86,6 +86,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -662,7 +663,8 @@ class DeveloperOptionsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt index e1513f5a954..59415795065 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedActivityTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -272,7 +273,8 @@ class MarkChaptersCompletedActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt index 0fbc8a68ada..6125413e6f6 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkChaptersCompletedFragmentTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.topic.StoryProgressController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -1023,7 +1024,8 @@ class MarkChaptersCompletedFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt index 132b2656fdf..8d8204d9684 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedActivityTest.kt @@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -203,7 +204,8 @@ class MarkStoriesCompletedActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt index c02e5e07704..e67d776813a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkStoriesCompletedFragmentTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -570,7 +571,8 @@ class MarkStoriesCompletedFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt index 33e3259e66b..5a575360d80 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedActivityTest.kt @@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -203,7 +204,8 @@ class MarkTopicsCompletedActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt index 8360185d707..78214587b28 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/MarkTopicsCompletedFragmentTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -551,7 +552,8 @@ class MarkTopicsCompletedFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt index d350653c5d8..94dab9dd41d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsActivityTest.kt @@ -69,6 +69,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule import org.oppia.android.testing.threading.TestDispatcherModule @@ -194,7 +195,8 @@ class ViewEventLogsActivityTest { PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, - ExplorationProgressModule::class + ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt index 40ed8ae48fb..6ec2a227ec1 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/ViewEventLogsFragmentTest.kt @@ -16,7 +16,10 @@ import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.ext.junit.runners.AndroidJUnit4 import com.google.firebase.FirebaseApp +import com.google.firebase.crashlytics.FirebaseCrashlytics import dagger.Component +import dagger.Module +import dagger.Provides import org.junit.After import org.junit.Before import org.junit.Rule @@ -33,6 +36,8 @@ import org.oppia.android.app.application.ApplicationModule import org.oppia.android.app.application.ApplicationStartupListenerModule import org.oppia.android.app.application.testing.TestingBuildFlavorModule import org.oppia.android.app.devoptions.vieweventlogs.testing.ViewEventLogsTestActivity +import org.oppia.android.app.model.EventLog +import org.oppia.android.app.model.ProfileId import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.atPositionOnView import org.oppia.android.app.recyclerview.RecyclerViewMatcher.Companion.hasItemCount @@ -60,9 +65,12 @@ import org.oppia.android.domain.exploration.ExplorationStorageModule import org.oppia.android.domain.hintsandsolution.HintsAndSolutionConfigModule import org.oppia.android.domain.hintsandsolution.HintsAndSolutionProdModule import org.oppia.android.domain.onboarding.ExpirationMetaDataRetrieverModule -import org.oppia.android.domain.oppialogger.LogStorageModule +import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize +import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize import org.oppia.android.domain.oppialogger.LoggingIdentifierModule import org.oppia.android.domain.oppialogger.OppiaLogger +import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize import org.oppia.android.domain.oppialogger.analytics.AnalyticsController import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule import org.oppia.android.domain.oppialogger.analytics.CpuPerformanceSnapshotterModule @@ -73,7 +81,9 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.FakeFirestoreInstanceWrapperImpl import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule import org.oppia.android.testing.threading.TestCoroutineDispatchers @@ -85,13 +95,21 @@ import org.oppia.android.util.caching.AssetModule import org.oppia.android.util.caching.testing.CachingTestModule import org.oppia.android.util.gcsresource.GcsResourceModule import org.oppia.android.util.locale.LocaleProdModule +import org.oppia.android.util.logging.AnalyticsEventLogger import org.oppia.android.util.logging.EventLoggingConfigurationModule +import org.oppia.android.util.logging.ExceptionLogger import org.oppia.android.util.logging.LoggerModule import org.oppia.android.util.logging.SyncStatusModule -import org.oppia.android.util.logging.firebase.DebugLogReportingModule +import org.oppia.android.util.logging.firebase.DebugAnalyticsEventLogger +import org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImpl +import org.oppia.android.util.logging.firebase.FirebaseAnalyticsEventLogger +import org.oppia.android.util.logging.firebase.FirebaseExceptionLogger import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule +import org.oppia.android.util.logging.firebase.FirestoreEventLogger +import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessorModule import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsConfigurationsModule +import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule @@ -117,20 +135,28 @@ private const val TEST_SUB_TOPIC_ID = 1 class ViewEventLogsFragmentTest { @get:Rule val initializeDefaultLocaleRule = InitializeDefaultLocaleRule() + @get:Rule val oppiaTestRule = OppiaTestRule() @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers + @Inject lateinit var context: Context + @Inject lateinit var oppiaLogger: OppiaLogger + @Inject lateinit var analyticsController: AnalyticsController + @Inject lateinit var fakeOppiaClock: FakeOppiaClock + @Inject + lateinit var firestoreEventLogger: FirestoreEventLogger + @Before fun setUp() { setUpTestApplicationComponent() @@ -173,7 +199,7 @@ class ViewEventLogsFragmentTest { launch(ViewEventLogsTestActivity::class.java).use { testCoroutineDispatchers.runCurrent() onView(withId(R.id.view_event_logs_recycler_view)) - .check(hasItemCount(count = 5)) + .check(hasItemCount(count = 6)) } } @@ -183,7 +209,7 @@ class ViewEventLogsFragmentTest { testCoroutineDispatchers.runCurrent() onView(isRoot()).perform(orientationLandscape()) onView(withId(R.id.view_event_logs_recycler_view)) - .check(hasItemCount(count = 5)) + .check(hasItemCount(count = 6)) } } @@ -194,30 +220,36 @@ class ViewEventLogsFragmentTest { scrollToPosition(position = 0) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = "Open Revision Card", + stringToMatch = "Optional Response", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 1) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = "Open Story Activity", + stringToMatch = "Open Revision Card", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 2) verifyTextOnEventLogItemViewAtPosition( position = 2, - stringToMatch = "Open Lessons Tab", + stringToMatch = "Open Story Activity", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 3) verifyTextOnEventLogItemViewAtPosition( position = 3, - stringToMatch = "Open Home", + stringToMatch = "Open Lessons Tab", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 4) verifyTextOnEventLogItemViewAtPosition( position = 4, + stringToMatch = "Open Home", + targetViewId = R.id.view_event_logs_context_text_view + ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, stringToMatch = "Open Profile Chooser", targetViewId = R.id.view_event_logs_context_text_view ) @@ -232,30 +264,36 @@ class ViewEventLogsFragmentTest { scrollToPosition(position = 0) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = "Open Revision Card", + stringToMatch = "Optional Response", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 1) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = "Open Story Activity", + stringToMatch = "Open Revision Card", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 2) verifyTextOnEventLogItemViewAtPosition( position = 2, - stringToMatch = "Open Lessons Tab", + stringToMatch = "Open Story Activity", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 3) verifyTextOnEventLogItemViewAtPosition( position = 3, - stringToMatch = "Open Home", + stringToMatch = "Open Lessons Tab", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 4) verifyTextOnEventLogItemViewAtPosition( position = 4, + stringToMatch = "Open Home", + targetViewId = R.id.view_event_logs_context_text_view + ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, stringToMatch = "Open Profile Chooser", targetViewId = R.id.view_event_logs_context_text_view ) @@ -273,7 +311,7 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = "Open Revision Card", + stringToMatch = "Optional Response", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 1) @@ -283,7 +321,7 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = "Open Story Activity", + stringToMatch = "Open Revision Card", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 2) @@ -293,6 +331,16 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 2, + stringToMatch = "Open Story Activity", + targetViewId = R.id.view_event_logs_context_text_view + ) + scrollToPosition(position = 3) + verifyItemDisplayedOnEventLogItemViewAtPosition( + position = 3, + targetViewId = R.id.view_event_logs_context_text_view + ) + verifyTextOnEventLogItemViewAtPosition( + position = 3, stringToMatch = "Open Lessons Tab", targetViewId = R.id.view_event_logs_context_text_view ) @@ -311,7 +359,7 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = "Open Revision Card", + stringToMatch = "Optional Response", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 1) @@ -321,7 +369,7 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = "Open Story Activity", + stringToMatch = "Open Revision Card", targetViewId = R.id.view_event_logs_context_text_view ) scrollToPosition(position = 2) @@ -331,6 +379,16 @@ class ViewEventLogsFragmentTest { ) verifyTextOnEventLogItemViewAtPosition( position = 2, + stringToMatch = "Open Story Activity", + targetViewId = R.id.view_event_logs_context_text_view + ) + scrollToPosition(position = 3) + verifyItemDisplayedOnEventLogItemViewAtPosition( + position = 3, + targetViewId = R.id.view_event_logs_context_text_view + ) + verifyTextOnEventLogItemViewAtPosition( + position = 3, stringToMatch = "Open Lessons Tab", targetViewId = R.id.view_event_logs_context_text_view ) @@ -344,30 +402,36 @@ class ViewEventLogsFragmentTest { scrollToPosition(position = 0) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 50000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 1) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 2) verifyTextOnEventLogItemViewAtPosition( position = 2, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 3) verifyTextOnEventLogItemViewAtPosition( position = 3, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 4) verifyTextOnEventLogItemViewAtPosition( position = 4, + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000), + targetViewId = R.id.view_event_logs_time_text_view + ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP), targetViewId = R.id.view_event_logs_time_text_view ) @@ -382,30 +446,36 @@ class ViewEventLogsFragmentTest { scrollToPosition(position = 0) verifyTextOnEventLogItemViewAtPosition( position = 0, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 50000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 1) verifyTextOnEventLogItemViewAtPosition( position = 1, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 40000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 2) verifyTextOnEventLogItemViewAtPosition( position = 2, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 30000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 3) verifyTextOnEventLogItemViewAtPosition( position = 3, - stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000), + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 20000), targetViewId = R.id.view_event_logs_time_text_view ) scrollToPosition(position = 4) verifyTextOnEventLogItemViewAtPosition( position = 4, + stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP + 10000), + targetViewId = R.id.view_event_logs_time_text_view + ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, stringToMatch = scenario.convertTimeStampToDateAndTime(TEST_TIMESTAMP), targetViewId = R.id.view_event_logs_time_text_view ) @@ -446,6 +516,12 @@ class ViewEventLogsFragmentTest { stringToMatch = "Essential", targetViewId = R.id.view_event_logs_priority_text_view ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, + stringToMatch = "Essential", + targetViewId = R.id.view_event_logs_priority_text_view + ) } } @@ -484,6 +560,12 @@ class ViewEventLogsFragmentTest { stringToMatch = "Essential", targetViewId = R.id.view_event_logs_priority_text_view ) + scrollToPosition(position = 5) + verifyTextOnEventLogItemViewAtPosition( + position = 5, + stringToMatch = "Essential", + targetViewId = R.id.view_event_logs_priority_text_view + ) } } @@ -515,6 +597,39 @@ class ViewEventLogsFragmentTest { analyticsController.logImportantEvent( oppiaLogger.createOpenRevisionCardContext(TEST_TOPIC_ID, TEST_SUB_TOPIC_ID), profileId = null ) + + val eventLog = EventLog.newBuilder() + .setContext( + createOptionalSurveyResponseContext( + "survey_id", + profileId = null, + answer = "some response" + ) + ) + .setPriority(EventLog.Priority.ESSENTIAL) + .setTimestamp(TEST_TIMESTAMP + 50000) + .build() + + firestoreEventLogger.uploadEvent(eventLog) + } + + private fun createOptionalSurveyResponseContext( + surveyId: String, + profileId: ProfileId?, + answer: String + ): EventLog.Context { + return EventLog.Context.newBuilder() + .setOptionalResponse( + EventLog.OptionalSurveyResponseContext.newBuilder() + .setFeedbackAnswer(answer) + .setSurveyDetails( + EventLog.SurveyResponseContext.newBuilder() + .setProfileId(profileId?.internalId.toString()) + .setSurveyId(surveyId) + .build() + ) + ) + .build() } private fun verifyTextOnEventLogItemViewAtPosition( @@ -563,6 +678,56 @@ class ViewEventLogsFragmentTest { ) } + @Module + class TestLogStorageModule { + @Provides + @EventLogStorageCacheSize + fun provideEventLogStorageCacheSize(): Int = 2 + + @Provides + @ExceptionLogStorageCacheSize + fun provideExceptionLogStorageCacheSize(): Int = 2 + + @Provides + @PerformanceMetricsLogStorageCacheSize + fun providePerformanceMetricsLogStorageCacheSize(): Int = 2 + + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 2 + } + + @Module + class TestLogReportingModule { + @Provides + @Singleton + fun provideExceptionLogger(): ExceptionLogger = + FirebaseExceptionLogger(FirebaseCrashlytics.getInstance()) + + @Provides + @Singleton + fun provideDebugEventLogger(debugAnalyticsEventLogger: DebugAnalyticsEventLogger): + AnalyticsEventLogger = debugAnalyticsEventLogger + + @Provides + @Singleton + fun providePerformanceMetricsEventLogger( + factory: FirebaseAnalyticsEventLogger.Factory + ): PerformanceMetricsEventLogger = + factory.createPerformanceMetricEventLogger() + + @Provides + @Singleton + fun provideDebugFirestoreEventLogger( + debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl + ): FirestoreEventLogger = debugFirestoreEventLogger + + @Provides + @Singleton + fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FakeFirestoreInstanceWrapperImpl): + FirestoreInstanceWrapper = wrapperImpl + } + // TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them. @Singleton @Component( @@ -574,8 +739,8 @@ class ViewEventLogsFragmentTest { NumberWithUnitsRuleModule::class, NumericInputRuleModule::class, TextInputRuleModule::class, DragDropSortInputModule::class, ImageClickInputModule::class, InteractionsModule::class, GcsResourceModule::class, GlideImageLoaderModule::class, ImageParsingModule::class, - HtmlParserEntityTypeModule::class, QuestionModule::class, DebugLogReportingModule::class, - AccessibilityTestModule::class, LogStorageModule::class, CachingTestModule::class, + HtmlParserEntityTypeModule::class, QuestionModule::class, TestLogReportingModule::class, + AccessibilityTestModule::class, TestLogStorageModule::class, CachingTestModule::class, PrimeTopicAssetsControllerModule::class, ExpirationMetaDataRetrieverModule::class, ViewBindingShimModule::class, RatioInputModule::class, WorkManagerConfigurationModule::class, ApplicationStartupListenerModule::class, LogReportWorkerModule::class, @@ -592,7 +757,8 @@ class ViewEventLogsFragmentTest { MetricLogSchedulerModule::class, PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class, ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt index 3c5918d0f81..7bc720e4ae0 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeActivityTest.kt @@ -69,6 +69,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -194,7 +195,8 @@ class ForceNetworkTypeActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** [ApplicationComponent] for [ForceNetworkTypeActivityTest]. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt index 3c3548dd3d6..25cccdd0bd1 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/forcenetworktype/ForceNetworkTypeFragmentTest.kt @@ -73,6 +73,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -401,7 +402,8 @@ class ForceNetworkTypeFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) /** [ApplicationComponent] for [ForceNetworkTypeFragmentTest]. */ diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt index 5bb2ba6db0c..517da7ca48a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserActivityTest.kt @@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -179,7 +180,8 @@ class MathExpressionParserActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt index 036dfde42b4..cac62ddb6b4 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction @@ -1419,7 +1420,8 @@ class MathExpressionParserFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt index b32169576f9..41fefe4329b 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQListFragmentTest.kt @@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -253,7 +254,8 @@ class FAQListFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt index e343041c2fe..90d49553c6c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FAQSingleActivityTest.kt @@ -75,6 +75,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -240,7 +241,8 @@ class FAQSingleActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt index 1f9086d1c4d..680afbdeb44 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/faq/FaqListActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -167,7 +168,8 @@ class FaqListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt index d4da5be6dc7..f00931977eb 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -86,7 +87,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import javax.inject.Inject import javax.inject.Singleton - /** Tests for [HelpActivity]. */ @RunWith(AndroidJUnit4::class) @LooperMode(LooperMode.Mode.PAUSED) @@ -169,7 +169,8 @@ class HelpActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt index 7730b85edf8..73cfb22be58 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/help/HelpFragmentTest.kt @@ -93,6 +93,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -1448,7 +1449,8 @@ class HelpFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt index 8e7bf121487..f5e058dfb62 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/HomeActivityTest.kt @@ -121,6 +121,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -2000,7 +2001,8 @@ class HomeActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt index 91a5071439b..0aca510567f 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/RecentlyPlayedFragmentTest.kt @@ -108,6 +108,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -1500,7 +1501,8 @@ class RecentlyPlayedFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt index 97198f4f58c..97fc6eb4f8c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/TopicSummaryViewModelTest.kt @@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -390,7 +391,8 @@ class TopicSummaryViewModelTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt index 74ca4cbf4ff..9ede16565ca 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/WelcomeViewModelTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -363,7 +364,8 @@ class WelcomeViewModelTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt index 55b960353a7..99cd9dcd48e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryListViewModelTest.kt @@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -376,7 +377,8 @@ class PromotedStoryListViewModelTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt index 6e96d63a095..ac309882dd1 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/home/promotedlist/PromotedStoryViewModelTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -402,7 +403,8 @@ class PromotedStoryViewModelTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt index 11b4b912b73..c42a30b0d55 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsActivityTest.kt @@ -61,6 +61,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -160,7 +161,8 @@ class MyDownloadsActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt index 3e1ce04a34f..2441f617b3d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/mydownloads/MyDownloadsFragmentTest.kt @@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -239,7 +240,8 @@ class MyDownloadsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt index 9ab0a7a8159..b98726e61f3 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/notice/BetaNoticeDialogFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -250,7 +251,8 @@ class BetaNoticeDialogFragmentTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt index d0b1aa4fc7e..675426fe1eb 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/notice/ForcedAppDeprecationNoticeDialogFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -240,7 +241,8 @@ class ForcedAppDeprecationNoticeDialogFragmentTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt index d44a2e47d6a..29c1cde2351 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/notice/GeneralAvailabilityUpgradeNoticeDialogFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -257,7 +258,8 @@ class GeneralAvailabilityUpgradeNoticeDialogFragmentTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt index c9545e4e324..b981373f23d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OptionalAppDeprecationNoticeDialogFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -242,7 +243,8 @@ class OptionalAppDeprecationNoticeDialogFragmentTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt index becd031ecdb..1a522d1242d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/notice/OsDeprecationNoticeDialogFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -115,7 +116,8 @@ class OsDeprecationNoticeDialogFragmentTest { @get:Rule val oppiaTestRule = OppiaTestRule() - @field:[Rule JvmField] val mockitoRule: MockitoRule = MockitoJUnit.rule() + @field:[Rule JvmField] + val mockitoRule: MockitoRule = MockitoJUnit.rule() @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers @@ -224,7 +226,8 @@ class OsDeprecationNoticeDialogFragmentTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt index 101fbc9d757..23704d8ef36 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -86,7 +87,6 @@ import org.robolectric.annotation.Config import org.robolectric.annotation.LooperMode import javax.inject.Inject import javax.inject.Singleton - /** Tests for [OnboardingActivity]. */ @RunWith(AndroidJUnit4::class) @LooperMode(LooperMode.Mode.PAUSED) @@ -166,7 +166,8 @@ class OnboardingActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt index 53de66687fb..e1227d6396f 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/onboarding/OnboardingFragmentTest.kt @@ -88,6 +88,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -720,7 +721,8 @@ class OnboardingFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt index a8f96c78821..bf37a173a38 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/ongoingtopiclist/OngoingTopicListActivityTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.topic.RATIOS_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -474,7 +475,8 @@ class OngoingTopicListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt index c54852c2bc3..52e8a3cc154 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -174,7 +175,8 @@ class AppLanguageActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt index 6ec000c34d5..07df1432348 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/AppLanguageFragmentTest.kt @@ -75,6 +75,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -322,7 +323,8 @@ class AppLanguageFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt index 463b847ca30..a87d648e98e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -165,7 +166,8 @@ class AudioLanguageActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt index 10071c24349..9511978a74b 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/AudioLanguageFragmentTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -314,7 +315,8 @@ class AudioLanguageFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt index b15d9d269d2..7aff373149c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -168,7 +169,8 @@ class OptionsActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt index a96f83b18fd..da8a49d42a3 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/OptionsFragmentTest.kt @@ -90,6 +90,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -644,7 +645,8 @@ class OptionsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt index ac5a0cc08be..6c54efd52c8 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -165,7 +166,8 @@ class ReadingTextSizeActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt index 10760da6b34..56933de3067 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/options/ReadingTextSizeFragmentTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -317,7 +318,8 @@ class ReadingTextSizeFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt index b0e82b25dcd..a655da4b9e0 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/parser/HtmlParserTest.kt @@ -102,6 +102,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -913,7 +914,8 @@ class HtmlParserTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt index bf224018f5e..173b024aa5f 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/player/audio/AudioFragmentTest.kt @@ -87,6 +87,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -482,7 +483,8 @@ class AudioFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt index 12668ac7d76..e390e6eea1a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/BottomSheetOptionsMenuTest.kt @@ -70,6 +70,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -193,7 +194,8 @@ class BottomSheetOptionsMenuTest { ApplicationLifecycleModule::class, SyncStatusModule::class, TestingBuildFlavorModule::class, CachingTestModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt index 18acf05d0c9..6245681585e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/player/exploration/ExplorationActivityTest.kt @@ -130,6 +130,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -2566,7 +2567,8 @@ class ExplorationActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt index 2888906d8fd..0ee896da96d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/player/state/StateFragmentTest.kt @@ -151,6 +151,7 @@ import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -4962,7 +4963,8 @@ class StateFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt index a3c01568fb0..95dd5e209d2 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesActivityTest.kt @@ -79,6 +79,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -280,7 +281,8 @@ class PoliciesActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt index a66658b3875..2a318c9324a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/policies/PoliciesFragmentTest.kt @@ -91,6 +91,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -360,7 +361,8 @@ class PoliciesFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt index 6ead5d8438b..175b0a62bf9 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AddProfileActivityTest.kt @@ -96,6 +96,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -1796,7 +1797,8 @@ class AddProfileActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt index 87b7eaa2378..cb49cff5daa 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminAuthActivityTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -693,7 +694,8 @@ class AdminAuthActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt index 96b1025a35e..ea44c5d0d1c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/AdminPinActivityTest.kt @@ -91,6 +91,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -1110,7 +1111,8 @@ class AdminPinActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt index 16ce38b184e..f65a6f5f45a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/PinPasswordActivityTest.kt @@ -87,6 +87,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -1217,7 +1218,8 @@ class PinPasswordActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt index 3b8e8cfe439..3442c182a7d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -164,7 +165,8 @@ class ProfileChooserActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt index 8dbbf853b9b..0418a1339a8 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileChooserFragmentTest.kt @@ -84,6 +84,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -529,7 +530,8 @@ class ProfileChooserFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt index 5c870dc35dc..57d8180ed22 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfilePictureActivityTest.kt @@ -70,6 +70,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -221,6 +222,7 @@ class ProfilePictureActivityTest { SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt index 0e16912ffb1..fc6c676d227 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -171,6 +172,7 @@ class ProfileProgressActivityTest { SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt index 9568acdecff..a4c5187cf25 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/profileprogress/ProfileProgressFragmentTest.kt @@ -108,6 +108,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -930,6 +931,7 @@ class ProfileProgressFragmentTest { SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt index 0882da3a400..1d48ecfcf71 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/recyclerview/BindableAdapterTest.kt @@ -98,6 +98,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -683,7 +684,8 @@ class BindableAdapterTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt index 11effa33a84..988cbe99df3 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonActivityTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -240,7 +241,8 @@ class ResumeLessonActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt index e837fba1cfa..7bbc505d9dc 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/resumelesson/ResumeLessonFragmentTest.kt @@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0 import org.oppia.android.domain.topic.RATIOS_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -320,7 +321,8 @@ class ResumeLessonFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt index b06938a9be7..ab1aa374f27 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditActivityTest.kt @@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -372,7 +373,8 @@ class ProfileEditActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt index 5c28e75d5d9..a6f02aa8d7c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileEditFragmentTest.kt @@ -84,6 +84,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor @@ -487,7 +488,8 @@ class ProfileEditFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt index 5ab0aa0d058..fe93ebd5339 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListActivityTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -166,7 +167,8 @@ class ProfileListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt index f57ca938ce6..5e571de6a91 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileListFragmentTest.kt @@ -76,6 +76,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -395,7 +396,8 @@ class ProfileListFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt index 32711f2c916..dc8534a913f 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -192,7 +193,8 @@ class ProfileRenameActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt index b1e253d60f0..e95194f1de1 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileRenameFragmentTest.kt @@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -469,7 +470,8 @@ class ProfileRenameFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt index d0b9021240f..0a0d8c22316 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinActivityTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -201,7 +202,8 @@ class ProfileResetPinActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt index 830f3f885de..ce23631d2a0 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/settings/profile/ProfileResetPinFragmentTest.kt @@ -79,6 +79,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.TextInputAction.Companion.hasErrorText @@ -1033,7 +1034,8 @@ class ProfileResetPinFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt index 4483d5e3e6c..2ccef97076a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/splash/SplashActivityTest.kt @@ -95,6 +95,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -1246,7 +1247,8 @@ class SplashActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt index 3911274b902..36f978df8c1 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/spotlight/SpotlightFragmentTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -371,7 +372,8 @@ class SpotlightFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt index f0b4d27753b..c4a1776e814 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryActivityTest.kt @@ -85,6 +85,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -279,7 +280,8 @@ class StoryActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt index 21202b8915d..1e30882456e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/story/StoryFragmentTest.kt @@ -116,6 +116,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.mockito.anyOrNull @@ -1000,7 +1001,8 @@ class StoryFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt index 158296d3aa2..4af4459dfef 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyActivityTest.kt @@ -66,6 +66,7 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2 import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -193,7 +194,8 @@ class SurveyActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt index 4ac59d07d5b..f1398787462 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/survey/SurveyFragmentTest.kt @@ -89,6 +89,7 @@ import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.logging.EventLogSubject @@ -619,7 +620,8 @@ class SurveyFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt index cb81673b016..966ada83745 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/DragDropTestActivityTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -237,7 +238,8 @@ class DragDropTestActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt index 606f7b2f945..7f5c52581a6 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -578,7 +579,8 @@ class FractionInputInteractionViewTestActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt index 58978aa74b0..11088d08c32 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/ImageRegionSelectionInteractionViewTest.kt @@ -83,6 +83,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -404,7 +405,8 @@ class ImageRegionSelectionInteractionViewTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt index 01f4f9872bb..9041d7fa64d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/InputInteractionViewTestActivityTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -506,7 +507,8 @@ class InputInteractionViewTestActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt index 1b25eeb4eba..0fac18cd543 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityDebugTest.kt @@ -99,6 +99,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -457,7 +458,8 @@ class NavigationDrawerActivityDebugTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt index 08512202fb7..9ec9f47ee79 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/NavigationDrawerActivityProdTest.kt @@ -107,6 +107,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -1016,7 +1017,8 @@ class NavigationDrawerActivityProdTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt index 5a8249a9088..57b3c1b0604 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt @@ -79,6 +79,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -446,7 +447,8 @@ class RatioInputInteractionViewTestActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt index 9b8b64c3092..5815a6f0971 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TestFontScaleConfigurationUtilActivityTest.kt @@ -67,6 +67,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -212,7 +213,8 @@ class TestFontScaleConfigurationUtilActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt index e24a5dad28b..03c8b40c315 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/testing/TopicTestActivityForStoryTest.kt @@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -213,7 +214,8 @@ class TopicTestActivityForStoryTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt index 8cf61b1e656..cc6d13cc284 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -179,7 +180,8 @@ class LicenseListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt index aec669e81e3..b50e60a6cfa 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseListFragmentTest.kt @@ -78,6 +78,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -379,7 +380,8 @@ class LicenseListFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt index 93dc07a0ade..e1545f34c32 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerActivityTest.kt @@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -283,7 +284,8 @@ class LicenseTextViewerActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt index 76df5c92384..03d9b1c666a 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/LicenseTextViewerFragmentTest.kt @@ -68,6 +68,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -357,7 +358,8 @@ class LicenseTextViewerFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt index ca05cb9ddbc..da5a3be066d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListActivityTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -176,7 +177,8 @@ class ThirdPartyDependencyListActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt index af563731aa9..7691445e8a2 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/thirdparty/ThirdPartyDependencyListFragmentTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -489,7 +490,8 @@ class ThirdPartyDependencyListFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt index a765068fde4..8cf06d4dfb4 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicActivityTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -253,7 +254,8 @@ class TopicActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt index 333cab9044e..0b42029e742 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/TopicFragmentTest.kt @@ -94,6 +94,7 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat @@ -1024,7 +1025,8 @@ class TopicFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt index fcad7bafb88..846884c529d 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/conceptcard/ConceptCardFragmentTest.kt @@ -103,6 +103,7 @@ import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RichTextViewMatcher.Companion.containsRichText import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -597,7 +598,8 @@ class ConceptCardFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt index 0acdf90b1a6..a8ea6bf7896 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/info/TopicInfoFragmentTest.kt @@ -88,6 +88,7 @@ import org.oppia.android.domain.topic.RATIOS_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -498,7 +499,8 @@ class TopicInfoFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt index 8ea32a5e1ab..45abdc11143 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentTest.kt @@ -110,6 +110,7 @@ import org.oppia.android.domain.topic.RATIOS_STORY_ID_0 import org.oppia.android.domain.topic.RATIOS_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.lightweightcheckpointing.ExplorationCheckpointTestHelper @@ -1190,7 +1191,8 @@ class TopicLessonsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt index 74481e48ebc..3f8b7eae213 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/practice/TopicPracticeFragmentTest.kt @@ -88,6 +88,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -462,7 +463,8 @@ class TopicPracticeFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt index b34db800641..9bd58c51e8c 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityTest.kt @@ -126,6 +126,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -811,7 +812,8 @@ class QuestionPlayerActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt index 81f405e6f98..2daf1860e6b 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revision/TopicRevisionFragmentTest.kt @@ -89,6 +89,7 @@ import org.oppia.android.domain.topic.FRACTIONS_TOPIC_ID import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.ImageViewMatcher.Companion.hasScaleType @@ -358,7 +359,8 @@ class TopicRevisionFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt index d28d3428aa9..278c43c94d8 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityTest.kt @@ -82,6 +82,7 @@ import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -481,7 +482,8 @@ class RevisionCardActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt index 0f7721cbd58..7422990cea4 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/topic/revisioncard/RevisionCardFragmentTest.kt @@ -104,6 +104,7 @@ import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.DisableAccessibilityChecks import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform import org.oppia.android.testing.data.DataProviderTestMonitor @@ -800,7 +801,8 @@ class RevisionCardFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt index 9a306b03e31..f8e1dedfdb9 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/utility/RatioExtensionsTest.kt @@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -165,7 +166,8 @@ class RatioExtensionsTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt index d4e5a2afec0..e289674673e 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughActivityTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -254,7 +255,8 @@ class WalkthroughActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt index 0131d060c65..79e0caf8e70 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughFinalFragmentTest.kt @@ -76,6 +76,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -300,7 +301,8 @@ class WalkthroughFinalFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt index 7d86a720ab6..d90dca2bb15 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughTopicListFragmentTest.kt @@ -77,6 +77,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.environment.TestEnvironmentConfig @@ -326,7 +327,8 @@ class WalkthroughTopicListFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt index 8af2cebfb4c..0634f55de2b 100644 --- a/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt +++ b/app/src/sharedTest/java/org/oppia/android/app/walkthrough/WalkthroughWelcomeFragmentTest.kt @@ -72,6 +72,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.OppiaTestRule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -223,7 +224,8 @@ class WalkthroughWelcomeFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt index d10fdafe22e..47a343b0316 100644 --- a/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt +++ b/app/src/test/java/org/oppia/android/app/activity/ActivityIntentFactoriesTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -191,7 +192,8 @@ class ActivityIntentFactoriesTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt index b17646fb769..104ee920e47 100644 --- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt +++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterModuleTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -161,7 +162,8 @@ class ActivityRouterModuleTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt index 97988c9c5b9..bea5d205bc5 100644 --- a/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt +++ b/app/src/test/java/org/oppia/android/app/activity/route/ActivityRouterTest.kt @@ -74,6 +74,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -211,7 +212,8 @@ class ActivityRouterTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt index 50527e24b88..5c86e2b542c 100644 --- a/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/home/HomeActivityLocalTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -165,7 +166,8 @@ class HomeActivityLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt index 58b622c0ede..1b5dbb6b44a 100644 --- a/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt +++ b/app/src/test/java/org/oppia/android/app/parser/FractionParsingUiErrorTest.kt @@ -58,6 +58,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -270,7 +271,8 @@ class FractionParsingUiErrorTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt index 6c59d12202b..7aa3bba8f81 100644 --- a/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/parser/ListItemLeadingMarginSpanTest.kt @@ -84,6 +84,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.TestPlatform @@ -1077,7 +1078,8 @@ class ListItemLeadingMarginSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt index 2b9845c78b8..794be78f7bc 100644 --- a/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt +++ b/app/src/test/java/org/oppia/android/app/parser/StringToRatioParserTest.kt @@ -59,6 +59,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.junit.InitializeDefaultLocaleRule @@ -274,7 +275,8 @@ class StringToRatioParserTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt index c3e905658cc..9ba1741236e 100644 --- a/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/player/exploration/ExplorationActivityLocalTest.kt @@ -70,6 +70,7 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_0 import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -224,6 +225,7 @@ class ExplorationActivityLocalTest { SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt index a90c507ad4b..1d278a6a9da 100644 --- a/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/player/state/StateFragmentLocalTest.kt @@ -138,6 +138,7 @@ import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.BuildEnvironment import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestImageLoaderModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor @@ -2944,7 +2945,8 @@ class StateFragmentLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt index 787bd9dfd27..35dd0310c63 100644 --- a/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/profile/ProfileChooserFragmentLocalTest.kt @@ -61,6 +61,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -150,7 +151,8 @@ class ProfileChooserFragmentLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt index 323b25d8a73..ee383f8ec5b 100644 --- a/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/story/StoryActivityLocalTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -175,7 +176,8 @@ class StoryActivityLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt index 2fda58f0898..5ecdfdcf3cc 100644 --- a/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/CompletedStoryListSpanTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -183,7 +184,8 @@ class CompletedStoryListSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt index 2f550bccad7..7ef9b806b93 100644 --- a/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/HomeSpanTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -197,7 +198,8 @@ class HomeSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt index 06eafa277a4..b38e93506fd 100644 --- a/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/OngoingTopicListSpanTest.kt @@ -65,6 +65,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -194,7 +195,8 @@ class OngoingTopicListSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt index 4fdae5a1c31..0941c35c37c 100644 --- a/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/PlatformParameterIntegrationTest.kt @@ -81,6 +81,7 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.network.MockPlatformParameterService @@ -367,7 +368,8 @@ class PlatformParameterIntegrationTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt index 3cf5cbffe6b..bfea9b66185 100644 --- a/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/ProfileChooserSpanTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -396,7 +397,8 @@ class ProfileChooserSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt index c15d270d4e5..83608031b85 100644 --- a/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/ProfileProgressSpanCountTest.kt @@ -64,6 +64,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -180,7 +181,8 @@ class ProfileProgressSpanCountTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt index a2c129bc1c6..fed517d1912 100644 --- a/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/RecentlyPlayedSpanTest.kt @@ -67,6 +67,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -321,7 +322,8 @@ class RecentlyPlayedSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt index 19a9bd08b35..5fe8a3fb3c8 100644 --- a/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/TopicRevisionSpanTest.kt @@ -63,6 +63,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -180,7 +181,8 @@ class TopicRevisionSpanTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt index 307db040b61..f23ffd3dd6b 100644 --- a/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/activity/TestActivityTest.kt @@ -60,6 +60,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -205,7 +206,8 @@ class TestActivityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt index cfd5875545f..e6d2a7f4812 100644 --- a/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/administratorcontrols/AdministratorControlsFragmentTest.kt @@ -70,6 +70,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -204,7 +205,8 @@ class AdministratorControlsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt index af0187dfe7f..bd942c2b0e4 100644 --- a/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/options/OptionsFragmentTest.kt @@ -66,6 +66,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -239,7 +240,8 @@ class OptionsFragmentTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt index d5254b8fac9..649ad5306b8 100644 --- a/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/player/split/PlayerSplitScreenTest.kt @@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -213,7 +214,8 @@ class PlayerSplitScreenTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt index 12903d92b03..7b33b32cad0 100644 --- a/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt +++ b/app/src/test/java/org/oppia/android/app/testing/player/state/StateFragmentAccessibilityTest.kt @@ -70,6 +70,7 @@ import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_4 import org.oppia.android.domain.topic.TEST_STORY_ID_0 import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.profile.ProfileTestHelper @@ -220,7 +221,8 @@ class StateFragmentAccessibilityTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt index c4488a87440..cda806ffed1 100644 --- a/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/topic/info/TopicInfoFragmentLocalTest.kt @@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.platformparameter.TestPlatformParameterModule @@ -164,7 +165,8 @@ class TopicInfoFragmentLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt index 8a04d388eb3..b5ef86c5597 100644 --- a/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/topic/lessons/TopicLessonsFragmentLocalTest.kt @@ -60,6 +60,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -166,7 +167,8 @@ class TopicLessonsFragmentLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt index 9246d4e81d6..b388ade740a 100644 --- a/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/topic/questionplayer/QuestionPlayerActivityLocalTest.kt @@ -87,6 +87,7 @@ import org.oppia.android.domain.question.WrongAnswerScorePenalty import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.topic.TEST_SKILL_ID_1 import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.espresso.EditTextInputAction import org.oppia.android.testing.espresso.KonfettiViewMatcher.Companion.hasActiveConfetti @@ -513,7 +514,8 @@ class QuestionPlayerActivityLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt index 343e67f1705..42b14d83075 100644 --- a/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt +++ b/app/src/test/java/org/oppia/android/app/topic/revisioncard/RevisionCardActivityLocalTest.kt @@ -62,6 +62,7 @@ import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.topic.SUBTOPIC_TOPIC_ID import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -157,7 +158,8 @@ class RevisionCardActivityLocalTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt index 82ae2bc2ef8..b234a2ae58a 100644 --- a/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt +++ b/app/src/test/java/org/oppia/android/app/translation/ActivityLanguageLocaleHandlerTest.kt @@ -73,6 +73,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext @@ -330,7 +331,8 @@ class ActivityLanguageLocaleHandlerTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt index 95db3cf4cd7..9ce6d2ce22c 100644 --- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt +++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageResourceHandlerTest.kt @@ -66,6 +66,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.data.DataProviderTestMonitor @@ -623,7 +624,8 @@ class AppLanguageResourceHandlerTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt index dd6be083faf..95f05fa2ebb 100644 --- a/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt +++ b/app/src/test/java/org/oppia/android/app/translation/AppLanguageWatcherMixinTest.kt @@ -71,6 +71,7 @@ import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.translation.TranslationController import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.junit.DefineAppLanguageLocaleContext @@ -312,7 +313,8 @@ class AppLanguageWatcherMixinTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt index 926ea83dbec..5cd6e77f8cf 100644 --- a/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt +++ b/app/src/test/java/org/oppia/android/app/utility/datetime/DateTimeUtilTest.kt @@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.robolectric.RobolectricModule @@ -229,7 +230,7 @@ class DateTimeUtilTest { SyncStatusModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, CpuPerformanceSnapshotterModule::class, AnalyticsStartupListenerTestModule::class, - ExplorationProgressModule::class, + ExplorationProgressModule::class, TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt index daf8228b45a..64800e1d5e8 100644 --- a/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt +++ b/app/src/test/java/org/oppia/android/app/utility/math/MathExpressionAccessibilityUtilTest.kt @@ -78,6 +78,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.junit.InitializeDefaultLocaleRule import org.oppia.android.testing.junit.OppiaParameterizedTestRunner @@ -1340,7 +1341,8 @@ class MathExpressionAccessibilityUtilTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/config/proguard/firebase-components-proguard-rules.pro b/config/proguard/firebase-components-proguard-rules.pro index 2f72d567674..94bd0a15e3f 100644 --- a/config/proguard/firebase-components-proguard-rules.pro +++ b/config/proguard/firebase-components-proguard-rules.pro @@ -1,6 +1,8 @@ # Reference: https://github.com/firebase/firebase-android-sdk/blob/82b02af331/firebase-components/proguard.txt. +# Reference: https://github.com/firebase/firebase-android-sdk/blob/00d4626/firebase-firestore/proguard.txt. -dontwarn com.google.firebase.components.Component$Instantiation -dontwarn com.google.firebase.components.Component$ComponentType +-dontwarn javax.naming.** -keep class * implements com.google.firebase.components.ComponentRegistrar diff --git a/domain/BUILD.bazel b/domain/BUILD.bazel index 79bcd289f08..d25ebd140d7 100755 --- a/domain/BUILD.bazel +++ b/domain/BUILD.bazel @@ -27,6 +27,7 @@ package_group( # globs here to ensure that new files added to migrated packages don't accidentally get included in the # top-level module library. MIGRATED_PROD_FILES = glob([ + "src/main/java/org/oppia/android/domain/auth/*.kt", "src/main/java/org/oppia/android/domain/feedbackreporting/*.kt", "src/main/java/org/oppia/android/domain/onboarding/**/*.kt", "src/main/java/org/oppia/android/domain/oppialogger/**/*.kt", diff --git a/domain/build.gradle b/domain/build.gradle index f119c351808..4863351dd1b 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -93,9 +93,11 @@ dependencies { 'com.google.dagger:dagger:2.24', 'com.google.firebase:firebase-analytics-ktx:17.5.0', 'com.google.firebase:firebase-crashlytics:17.0.0', + 'com.google.firebase:firebase-firestore-ktx:24.2.1', + 'com.google.firebase:firebase-auth-ktx:19.3.1', 'com.google.guava:guava:28.1-android', 'com.google.protobuf:protobuf-javalite:3.17.3', - "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", ) compileOnly( 'jakarta.xml.bind:jakarta.xml.bind-api:2.3.2', diff --git a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt new file mode 100644 index 00000000000..72410c5f597 --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationController.kt @@ -0,0 +1,49 @@ +package org.oppia.android.domain.auth + +import kotlinx.coroutines.CompletableDeferred +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.launch +import kotlinx.coroutines.withTimeout +import org.oppia.android.util.data.AsyncResult +import org.oppia.android.util.threading.BackgroundDispatcher +import javax.inject.Inject + +/** Controller for signing in and retrieving a Firebase user. */ +class AuthenticationController @Inject constructor( + private val firebaseAuthWrapper: FirebaseAuthWrapper, + @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher +) { + /** Returns the current signed in user or null if there is no authenticated user. */ + val currentFirebaseUser: FirebaseUserWrapper? = firebaseAuthWrapper.currentUser + + /** Returns the result of an authentication task. */ + fun signInAnonymouslyWithFirebase(): CompletableDeferred> { + val deferredResult = CompletableDeferred>() + CoroutineScope(backgroundCoroutineDispatcher).launch { + try { + withTimeout(AUTHENTICATION_TIMEOUT_MILLIS) { + firebaseAuthWrapper.signInAnonymously( + onSuccess = { + deferredResult.complete(AsyncResult.Success(null)) + }, + onFailure = { exception -> + deferredResult.complete(AsyncResult.Failure(exception)) + } + ) + } + } catch (e: TimeoutCancellationException) { + deferredResult.complete( + AsyncResult.Failure(IllegalStateException(e)) + ) + } + } + return deferredResult + } + + companion object { + /** The amount of time the authentication task should run before timing out. */ + const val AUTHENTICATION_TIMEOUT_MILLIS = 30_000L + } +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt new file mode 100644 index 00000000000..faafb4c6baf --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/AuthenticationModule.kt @@ -0,0 +1,19 @@ +package org.oppia.android.domain.auth + +import dagger.Module +import dagger.Provides +import javax.inject.Singleton + +/** Provides an implementation of [FirebaseAuthWrapper]. */ +@Module +class AuthenticationModule { + @Provides + @Singleton + fun provideFirebaseAuthWrapper(firebaseAuthInstanceWrapper: FirebaseAuthInstanceWrapper): + FirebaseAuthWrapper = FirebaseAuthWrapperImpl(firebaseAuthInstanceWrapper) + + @Provides + @Singleton + fun provideFirebaseAuthInstanceWrapper(): FirebaseAuthInstanceWrapper = + FirebaseAuthInstanceWrapperImpl() +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel new file mode 100644 index 00000000000..d00f97bfb90 --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/BUILD.bazel @@ -0,0 +1,75 @@ +""" +Library for providing authentication with Firebase functionality. +""" + +load("@dagger//:workspace_defs.bzl", "dagger_rules") +load("@io_bazel_rules_kotlin//kotlin:kotlin.bzl", "kt_android_library") + +kt_android_library( + name = "authentication_controller", + srcs = [ + "AuthenticationController.kt", + ], + visibility = ["//:oppia_api_visibility"], + deps = [ + ":firebase_auth_wrapper", + "//third_party:javax_inject_javax_inject", + "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core", + "//utility/src/main/java/org/oppia/android/util/threading:annotations", + ], +) + +kt_android_library( + name = "firebase_auth_wrapper", + srcs = [ + "FirebaseAuthInstance.kt", + "FirebaseAuthInstanceWrapper.kt", + "FirebaseAuthWrapper.kt", + "FirebaseUserWrapper.kt", + ], + visibility = ["//:oppia_api_visibility"], + deps = [ + "//third_party:com_google_firebase_firebase-auth-ktx", + "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core", + "//utility/src/main/java/org/oppia/android/util/data:async_result", + ], +) + +kt_android_library( + name = "auth_module", + srcs = [ + "AuthenticationModule.kt", + ], + visibility = ["//:oppia_prod_module_visibility"], + deps = [ + ":authentication_controller", + ":dagger", + ":firebase_auth_wrapper_impl", + ], +) + +kt_android_library( + name = "firebase_auth_wrapper_impl", + srcs = [ + "FirebaseAuthWrapperImpl.kt", + ], + visibility = ["//:oppia_prod_module_visibility"], + deps = [ + ":dagger", + ":firebase_auth_instance_wrapper_impl", + ], +) + +kt_android_library( + name = "firebase_auth_instance_wrapper_impl", + srcs = [ + "FirebaseAuthInstanceWrapperImpl.kt", + ], + visibility = ["//:oppia_prod_module_visibility"], + deps = [ + ":dagger", + ":firebase_auth_wrapper", + ], +) + +dagger_rules() diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt new file mode 100644 index 00000000000..a270857b1cd --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstance.kt @@ -0,0 +1,8 @@ +package org.oppia.android.domain.auth + +import com.google.firebase.auth.FirebaseAuth + +/** Wrapper for [FirebaseAuth], used to pass an instance of [FirebaseAuth]. */ +data class FirebaseAuthInstance( + val firebaseAuth: FirebaseAuth +) diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt new file mode 100644 index 00000000000..50677af74c3 --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapper.kt @@ -0,0 +1,7 @@ +package org.oppia.android.domain.auth + +/** Interface for providing an implementation of [FirebaseAuthInstance]. */ +interface FirebaseAuthInstanceWrapper { + /** Returns a wrapped instance of FirebaseAuth. */ + val firebaseAuthInstance: FirebaseAuthInstance? +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt new file mode 100644 index 00000000000..f3a8ae2b24d --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthInstanceWrapperImpl.kt @@ -0,0 +1,11 @@ +package org.oppia.android.domain.auth + +import com.google.firebase.auth.ktx.auth +import com.google.firebase.ktx.Firebase +import javax.inject.Inject + +/** Implementation of [FirebaseAuthInstanceWrapper]. */ +class FirebaseAuthInstanceWrapperImpl @Inject constructor() : FirebaseAuthInstanceWrapper { + override val firebaseAuthInstance: FirebaseAuthInstance + get() = FirebaseAuthInstance(Firebase.auth) +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt new file mode 100644 index 00000000000..85c859eb62a --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapper.kt @@ -0,0 +1,10 @@ +package org.oppia.android.domain.auth + +/** Wrapper for FirebaseAuth. */ +interface FirebaseAuthWrapper { + /** Returns the current signed in user or null if there is no authenticated user. */ + val currentUser: FirebaseUserWrapper? + + /** Returns the authentication result. */ + fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit) +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt new file mode 100644 index 00000000000..d85163e3124 --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImpl.kt @@ -0,0 +1,28 @@ +package org.oppia.android.domain.auth + +import javax.inject.Inject +import javax.inject.Singleton + +/** Production implementation of FirebaseAuthWrapper. */ +@Singleton +class FirebaseAuthWrapperImpl @Inject constructor( + private val firebaseWrapper: FirebaseAuthInstanceWrapper +) : FirebaseAuthWrapper { + override val currentUser: FirebaseUserWrapper? + get() = firebaseWrapper.firebaseAuthInstance?.firebaseAuth?.currentUser?.let { + FirebaseUserWrapper(it.uid) + } + + override fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit) { + firebaseWrapper.firebaseAuthInstance?.firebaseAuth?.signInAnonymously() + ?.addOnSuccessListener { + onSuccess.invoke() + } + ?.addOnFailureListener { task -> + val exception = task.cause + if (exception != null) { + onFailure.invoke(exception) + } + } + } +} diff --git a/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt new file mode 100644 index 00000000000..16aeb8ebf5b --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/auth/FirebaseUserWrapper.kt @@ -0,0 +1,8 @@ +package org.oppia.android.domain.auth + +import com.google.firebase.auth.FirebaseUser + +/** Wrapper for [FirebaseUser]. */ +data class FirebaseUserWrapper( + val uid: String, +) diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt index 73fe03a7a3d..7ef560e730e 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/LogStorageModule.kt @@ -13,6 +13,9 @@ annotation class ExceptionLogStorageCacheSize @Qualifier annotation class PerformanceMetricsLogStorageCacheSize +@Qualifier +annotation class FirestoreLogStorageCacheSize + /** Provider to return any constants required during the storage of log reports. */ @Module class LogStorageModule { @@ -46,4 +49,14 @@ class LogStorageModule { @Provides @PerformanceMetricsLogStorageCacheSize fun provideMetricLogStorageCacheSize(): Int = 25_000 + + /** + * Provides the maximum number of firestore-bound event logs that can be cached on disk. + * + * At a configured cache size of 30 records & estimating 376 bytes per record, it's expected that + * no more than 11.1KB will be required for cache disk space. + */ + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 30 } diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel index 6b207de01aa..4ca1df4030e 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/BUILD.bazel @@ -196,4 +196,25 @@ kt_android_library( visibility = ["//:oppia_api_visibility"], ) +kt_android_library( + name = "data_controller", + srcs = [ + "FirestoreDataController.kt", + ], + visibility = ["//:oppia_api_visibility"], + deps = [ + ":dagger", + "//data/src/main/java/org/oppia/android/data/persistence:cache_store", + "//domain/src/main/java/org/oppia/android/domain/auth:authentication_controller", + "//domain/src/main/java/org/oppia/android/domain/oppialogger:prod_module", + "//model/src/main/proto:event_logger_java_proto_lite", + "//utility", + "//utility/src/main/java/org/oppia/android/util/logging:console_logger", + "//utility/src/main/java/org/oppia/android/util/logging:exception_logger", + "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", + "//utility/src/main/java/org/oppia/android/util/networking:network_connection_util", + "//utility/src/main/java/org/oppia/android/util/system:oppia_clock", + ], +) + dagger_rules() diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt new file mode 100644 index 00000000000..e68013aff83 --- /dev/null +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataController.kt @@ -0,0 +1,183 @@ +package org.oppia.android.domain.oppialogger.analytics + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.async +import org.oppia.android.app.model.EventLog +import org.oppia.android.app.model.OppiaEventLogs +import org.oppia.android.app.model.ProfileId +import org.oppia.android.data.persistence.PersistentCacheStore +import org.oppia.android.domain.auth.AuthenticationController +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize +import org.oppia.android.util.data.AsyncResult +import org.oppia.android.util.data.DataProvider +import org.oppia.android.util.logging.ConsoleLogger +import org.oppia.android.util.logging.ExceptionLogger +import org.oppia.android.util.logging.firebase.FirestoreEventLogger +import org.oppia.android.util.networking.NetworkConnectionUtil +import org.oppia.android.util.system.OppiaClock +import org.oppia.android.util.threading.BlockingDispatcher +import javax.inject.Inject +import javax.inject.Singleton + +/** Controller for handling event logging for Firestore-bound data. */ +@Singleton +class FirestoreDataController @Inject constructor( + cacheStoreFactory: PersistentCacheStore.Factory, + private val consoleLogger: ConsoleLogger, + private val networkConnectionUtil: NetworkConnectionUtil, + private val eventLogger: FirestoreEventLogger, + private val exceptionLogger: ExceptionLogger, + private val oppiaClock: OppiaClock, + private val authenticationController: AuthenticationController, + @BlockingDispatcher private val blockingDispatcher: CoroutineDispatcher, + @FirestoreLogStorageCacheSize private val logStorageCacheSize: Int +) { + private val firestoreEventsStore = + cacheStoreFactory.create("firestore_data", OppiaEventLogs.getDefaultInstance()) + + /** + * Uploads all events pending currently for upload, and blocks until the events are uploaded. An + * error will be thrown if something went wrong during upload. + */ + suspend fun uploadData() { + val eventLogsToUpload = firestoreEventsStore.readDataAsync().await().eventLogsToUploadList + + if (eventLogsToUpload.isNotEmpty()) { + eventLogsToUpload.forEach { eventLog -> + authenticateAndUploadToFirestore(eventLog) + } + } + } + + /** + * Logs an event defined by [eventContext] corresponding to time [timestamp]. + * + * This will schedule a background upload of the event if there's internet connectivity, otherwise + * it will cache the event for a later upload. + */ + fun logEvent( + eventContext: EventLog.Context, + profileId: ProfileId?, + timestamp: Long = oppiaClock.getCurrentTimeMs() + ) { + CoroutineScope(blockingDispatcher).async { + uploadOrCacheEventLog(createEventLog(profileId, timestamp, eventContext)) + }.invokeOnCompletion { failure -> + failure?.let { + consoleLogger.w( + "FirestoreDataController", + "Failed to upload or cache event: $eventContext (at time $timestamp).", + it + ) + } + } + } + + /** Returns an event log containing relevant data for event reporting. */ + private fun createEventLog( + profileId: ProfileId?, + timestamp: Long, + context: EventLog.Context + ): EventLog { + return EventLog.newBuilder().apply { + this.timestamp = timestamp + this.priority = EventLog.Priority.ESSENTIAL + this.context = context + profileId?.let { this.profileId = it } + }.build() + } + + /** Either uploads or caches [eventLog] depending on current internet connectivity. */ + private suspend fun uploadOrCacheEventLog(eventLog: EventLog) { + when (networkConnectionUtil.getCurrentConnectionStatus()) { + NetworkConnectionUtil.ProdConnectionStatus.NONE -> cacheEventForFirestore(eventLog) + else -> authenticateAndUploadToFirestore(eventLog) + } + } + + private suspend fun authenticateAndUploadToFirestore(eventLog: EventLog) { + if (authenticationController.currentFirebaseUser == null) { + when (val signInResult = authenticationController.signInAnonymouslyWithFirebase().await()) { + is AsyncResult.Success -> { + consoleLogger.i("FirestoreDataController", "Sign in succeeded") + uploadLog(eventLog) + } + is AsyncResult.Failure -> { + consoleLogger.e( + "FirestoreDataController", + "Sign in failed with cause ${signInResult.error}" + ) + cacheEventForFirestore(eventLog) + } + is AsyncResult.Pending -> { + consoleLogger.i("FirestoreDataController", "Signing in anonymously to Firebase") + } + } + } else { + uploadLog(eventLog) + } + } + + private fun uploadLog(eventLog: EventLog) { + eventLogger.uploadEvent(eventLog) + removeFirstEventLogFromStore() + } + + /** + * Adds an event to the storage. + * + * The [eventLog] is added to the store if the size of the store isn't exceeding + * [logStorageCacheSize]. If the limit is exceeded then the least recent event is removed from the + * [firestoreEventsStore]. + */ + private fun cacheEventForFirestore(eventLog: EventLog) { + firestoreEventsStore.storeDataAsync(updateInMemoryCache = true) { eventLogs -> + val storeSize = eventLogs.eventLogsToUploadList.size + if (storeSize + 1 > logStorageCacheSize) { + val eventLogRemovalIndex = getLeastRecentEventIndex(eventLogs) + if (eventLogRemovalIndex != null) { + return@storeDataAsync eventLogs.toBuilder() + .removeEventLogsToUpload(eventLogRemovalIndex) + .addEventLogsToUpload(eventLog) + .build() + } else { + val exception = + IllegalStateException( + "Least Recent Event index absent -- FirestoreLogStorageCacheSize is 0" + ) + consoleLogger.e("FirestoreDataController", "Failure while caching event.", exception) + exceptionLogger.logException(exception) + } + } + return@storeDataAsync eventLogs.toBuilder().addEventLogsToUpload(eventLog).build() + }.invokeOnCompletion { + it?.let { consoleLogger.e("FirestoreDataController", "Failed to store event log.", it) } + } + } + + /** + * Returns the index of the least recent event from the existing store on the basis of recency and + * priority. + */ + private fun getLeastRecentEventIndex(oppiaEventLogs: OppiaEventLogs): Int? = + oppiaEventLogs.eventLogsToUploadList.withIndex().minByOrNull { it.value.timestamp }?.index + + /** Returns a data provider for log reports that have been recorded for upload. */ + fun getEventLogStore(): DataProvider = firestoreEventsStore + + /** Removes the first log report that had been recorded for upload. */ + private fun removeFirstEventLogFromStore() { + firestoreEventsStore.storeDataAsync(updateInMemoryCache = true) { oppiaEventLogs -> + if (oppiaEventLogs.eventLogsToUploadCount > 0) { + return@storeDataAsync oppiaEventLogs.toBuilder().removeEventLogsToUpload(0).build() + } else { + return@storeDataAsync oppiaEventLogs // No event logs to remove + } + }.invokeOnCompletion { + it?.let { + consoleLogger.e("FirestoreDataController", "Failed to remove event log", it) + } + } + } +} diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel index ac5d1338364..58f18019799 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/BUILD.bazel @@ -34,6 +34,7 @@ kt_android_library( ], deps = [ "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:controller", + "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:data_controller", "//domain/src/main/java/org/oppia/android/domain/oppialogger/analytics:performance_metrics_controller", "//domain/src/main/java/org/oppia/android/domain/oppialogger/exceptions:controller", "//domain/src/main/java/org/oppia/android/domain/util:extensions", diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt index 5f40f82caac..ef31a5ab9dc 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializer.kt @@ -55,6 +55,13 @@ class LogReportWorkManagerInitializer @Inject constructor( ) .build() + private val workerCaseForUploadingFirestoreData: Data = Data.Builder() + .putString( + LogUploadWorker.WORKER_CASE_KEY, + LogUploadWorker.FIRESTORE_WORKER + ) + .build() + private val workerCaseForSchedulingPeriodicBackgroundMetricLogs: Data = Data.Builder() .putString( MetricLogSchedulingWorker.WORKER_CASE_KEY, @@ -124,6 +131,12 @@ class LogReportWorkManagerInitializer @Inject constructor( .setConstraints(logReportWorkerConstraints) .build() + private val workRequestForUploadingFireStoreData: PeriodicWorkRequest = + PeriodicWorkRequest.Builder(LogUploadWorker::class.java, 6, TimeUnit.HOURS) + .setInputData(workerCaseForUploadingFirestoreData) + .setConstraints(logReportWorkerConstraints) + .build() + override fun onCreate(workManager: WorkManager) { logUploader.enqueueWorkRequestForEvents(workManager, workRequestForUploadingEvents) logUploader.enqueueWorkRequestForExceptions(workManager, workRequestForUploadingExceptions) @@ -131,6 +144,10 @@ class LogReportWorkManagerInitializer @Inject constructor( workManager, workRequestForUploadingPerformanceMetrics ) + logUploader.enqueueWorkRequestForFirestore( + workManager, + workRequestForUploadingFireStoreData + ) metricLogScheduler.enqueueWorkRequestForPeriodicBackgroundMetrics( workManager, workRequestForSchedulingPeriodicBackgroundMetricLogs @@ -178,6 +195,9 @@ class LogReportWorkManagerInitializer @Inject constructor( fun getWorkRequestForSchedulingPeriodicBackgroundPerformanceMetricLogsId(): UUID = workRequestForSchedulingPeriodicBackgroundMetricLogs.id + /** Returns the [UUID] of the work request that is enqueued for uploading firestore data. */ + fun getWorkRequestForFirestoreId(): UUID = workRequestForUploadingFireStoreData.id + /** * Returns the [Data] that goes into the work request that is enqueued for uploading event logs. */ @@ -212,4 +232,10 @@ class LogReportWorkManagerInitializer @Inject constructor( */ fun getWorkRequestDataForSchedulingPeriodicBackgroundPerformanceMetricLogs(): Data = workerCaseForSchedulingPeriodicBackgroundMetricLogs + + /** + * Returns the [Data] that goes into the work request that is enqueued for uploading firestore + * data. + */ + fun getWorkRequestDataForFirestore(): Data = workerCaseForUploadingFirestoreData } diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt index ed860470f56..f31669e153b 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorker.kt @@ -10,6 +10,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.async import org.oppia.android.domain.oppialogger.analytics.AnalyticsController +import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController import org.oppia.android.domain.oppialogger.analytics.PerformanceMetricsController import org.oppia.android.domain.oppialogger.exceptions.ExceptionsController import org.oppia.android.domain.oppialogger.exceptions.toException @@ -29,6 +30,7 @@ class LogUploadWorker private constructor( private val exceptionsController: ExceptionsController, private val performanceMetricsController: PerformanceMetricsController, private val exceptionLogger: ExceptionLogger, + private val dataController: FirestoreDataController, private val performanceMetricsEventLogger: PerformanceMetricsEventLogger, private val consoleLogger: ConsoleLogger, private val syncStatusManager: SyncStatusManager, @@ -41,6 +43,7 @@ class LogUploadWorker private constructor( const val EVENT_WORKER = "event_worker" const val EXCEPTION_WORKER = "exception_worker" const val PERFORMANCE_METRICS_WORKER = "performance_metrics_worker" + const val FIRESTORE_WORKER = "firestore_worker" } @ExperimentalCoroutinesApi @@ -51,6 +54,7 @@ class LogUploadWorker private constructor( EVENT_WORKER -> uploadEvents() EXCEPTION_WORKER -> uploadExceptions() PERFORMANCE_METRICS_WORKER -> uploadPerformanceMetrics() + FIRESTORE_WORKER -> uploadFirestoreData() else -> Result.failure() } } @@ -111,12 +115,24 @@ class LogUploadWorker private constructor( } } + /** Extracts data from offline storage and logs them to the remote service. */ + private suspend fun uploadFirestoreData(): Result { + return try { + dataController.uploadData() + Result.success() + } catch (e: Exception) { + consoleLogger.e(TAG, e.toString(), e) + Result.failure() + } + } + /** Creates an instance of [LogUploadWorker] by properly injecting dependencies. */ class Factory @Inject constructor( private val analyticsController: AnalyticsController, private val exceptionsController: ExceptionsController, private val performanceMetricsController: PerformanceMetricsController, private val exceptionLogger: ExceptionLogger, + private val dataController: FirestoreDataController, private val performanceMetricsEventLogger: PerformanceMetricsEventLogger, private val consoleLogger: ConsoleLogger, private val syncStatusManager: SyncStatusManager, @@ -130,6 +146,7 @@ class LogUploadWorker private constructor( exceptionsController, performanceMetricsController, exceptionLogger, + dataController, performanceMetricsEventLogger, consoleLogger, syncStatusManager, diff --git a/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt b/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt index 7e1178b0ca0..b79f75fa081 100644 --- a/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt +++ b/domain/src/main/java/org/oppia/android/domain/oppialogger/survey/SurveyEventsLogger.kt @@ -6,6 +6,7 @@ import org.oppia.android.app.model.ProfileId import org.oppia.android.app.model.SurveyQuestionName import org.oppia.android.app.model.UserTypeAnswer import org.oppia.android.domain.oppialogger.analytics.AnalyticsController +import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController import javax.inject.Inject import javax.inject.Singleton @@ -17,6 +18,7 @@ import javax.inject.Singleton @Singleton class SurveyEventsLogger @Inject constructor( private val analyticsController: AnalyticsController, + private val dataController: FirestoreDataController ) { /** @@ -50,6 +52,14 @@ class SurveyEventsLogger @Inject constructor( ) } + /** Logs an event representing the response to the optional survey question. */ + fun logOptionalResponse(surveyId: String, profileId: ProfileId?, answer: String) { + dataController.logEvent( + createOptionalSurveyResponseContext(surveyId, profileId, answer), + profileId + ) + } + private fun createMandatorySurveyResponseContext( surveyId: String, profileId: ProfileId, @@ -88,11 +98,27 @@ class SurveyEventsLogger @Inject constructor( private fun createSurveyResponseContext( surveyId: String, - profileId: ProfileId + profileId: ProfileId? ): EventLog.SurveyResponseContext { return EventLog.SurveyResponseContext.newBuilder() - .setProfileId(profileId.internalId.toString()) + .setProfileId(profileId?.internalId.toString()) .setSurveyId(surveyId) .build() } + + private fun createOptionalSurveyResponseContext( + surveyId: String, + profileId: ProfileId?, + answer: String + ): EventLog.Context { + return EventLog.Context.newBuilder() + .setOptionalResponse( + EventLog.OptionalSurveyResponseContext.newBuilder() + .setFeedbackAnswer(answer) + .setSurveyDetails( + createSurveyResponseContext(surveyId, profileId) + ) + ) + .build() + } } diff --git a/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt b/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt index b7a612b2c1a..b1c412eca01 100644 --- a/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt +++ b/domain/src/main/java/org/oppia/android/domain/survey/SurveyProgressController.kt @@ -312,7 +312,7 @@ class SurveyProgressController @Inject constructor( controllerState.handleUpdatedQuestionsList(message.questionsList) is ControllerMessage.FinishSurveySession -> { try { - controllerState.completeSurveyImpl(message.surveyCompleted, message.callbackFlow) + controllerState.completeSurveyImpl(message.callbackFlow) } finally { // Ensure the actor ends since the session requires no further message processing. break @@ -387,10 +387,11 @@ class SurveyProgressController @Inject constructor( ) } - saveSelectedAnswer(currentQuestionId.toString(), selectedAnswer) - if (!progress.questionDeck.isCurrentQuestionTerminal()) { + saveSelectedAnswer(currentQuestionId.toString(), selectedAnswer) moveToNextQuestion() + } else { + surveyLogger.logOptionalResponse(surveyId, profileId, selectedAnswer.freeFormAnswer) } } } @@ -454,13 +455,12 @@ class SurveyProgressController @Inject constructor( } private suspend fun ControllerState.completeSurveyImpl( - surveyCompleted: Boolean, endSessionResultFlow: MutableStateFlow> ) { checkNotNull(this) { "Cannot stop a survey session which wasn't started." } tryOperation(endSessionResultFlow) { progress.advancePlayStageTo(SurveyProgress.SurveyStage.NOT_IN_SURVEY_SESSION) - finishSurveyAndLog(surveyCompleted) + finishSurveyAndLog() } } @@ -473,19 +473,8 @@ class SurveyProgressController @Inject constructor( convertAsyncToAutomaticDataProvider("${baseId}_$activeSessionId") } - private suspend fun ControllerState.finishSurveyAndLog(surveyIsComplete: Boolean) { + private suspend fun ControllerState.finishSurveyAndLog() { when { - surveyIsComplete -> { - surveyLogger.logMandatoryResponses( - surveyId, - profileId, - getStoredResponse(SurveyQuestionName.USER_TYPE)!!, - getStoredResponse(SurveyQuestionName.MARKET_FIT)!!, - getStoredResponse(SurveyQuestionName.NPS)!! - ) - - // TODO(#5001): Log the optional question response to Firestore - } progress.questionDeck.hasAnsweredAllMandatoryQuestions() -> { surveyLogger.logMandatoryResponses( surveyId, diff --git a/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt b/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt index 48783b794d5..a6a3aae43b1 100644 --- a/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt +++ b/domain/src/main/java/org/oppia/android/domain/testing/oppialogger/loguploader/FakeLogUploader.kt @@ -13,6 +13,7 @@ class FakeLogUploader @Inject constructor() : LogUploader { private val eventRequestIdList = mutableListOf() private val exceptionRequestIdList = mutableListOf() private val performanceMetricsRequestIdList = mutableListOf() + private val firestoreRequestIdList = mutableListOf() override fun enqueueWorkRequestForEvents( workManager: WorkManager, @@ -35,6 +36,13 @@ class FakeLogUploader @Inject constructor() : LogUploader { performanceMetricsRequestIdList.add(workRequest.id) } + override fun enqueueWorkRequestForFirestore( + workManager: WorkManager, + workRequest: PeriodicWorkRequest + ) { + firestoreRequestIdList.add(workRequest.id) + } + /** Returns the most recent work request id that's stored in the [eventRequestIdList]. */ fun getMostRecentEventRequestId() = eventRequestIdList.last() @@ -43,4 +51,7 @@ class FakeLogUploader @Inject constructor() : LogUploader { /** Returns the most recent work request id that's stored in the [performanceMetricsRequestIdList]. */ fun getMostRecentPerformanceMetricsRequestId() = performanceMetricsRequestIdList.last() + + /** Returns the most recent work request id that's stored in the [firestoreRequestIdList]. */ + fun getMostRecentFirestoreRequestId() = firestoreRequestIdList.last() } diff --git a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt index be7fcde0c86..dbf2d829fe1 100644 --- a/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/audio/AudioPlayerControllerTest.kt @@ -53,6 +53,7 @@ import org.oppia.android.domain.profile.ProfileManagementController import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5 import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.data.AsyncResultSubject.Companion.assertThat @@ -881,6 +882,7 @@ class AudioPlayerControllerTest { NumericExpressionInputModule::class, AlgebraicExpressionInputModule::class, MathEquationInputModule::class, CachingTestModule::class, HintsAndSolutionProdModule::class, HintsAndSolutionConfigModule::class, LoggerModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt new file mode 100644 index 00000000000..ca80f6e297d --- /dev/null +++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationControllerTest.kt @@ -0,0 +1,144 @@ +package org.oppia.android.domain.auth + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import kotlinx.coroutines.CoroutineDispatcher +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule +import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl +import org.oppia.android.testing.TestAuthenticationModule +import org.oppia.android.testing.TestLogReportingModule +import org.oppia.android.testing.assertThrows +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.data.DataProvidersInjectorProvider +import org.oppia.android.util.threading.BackgroundDispatcher +import org.oppia.android.util.threading.DispatcherModule +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [AuthenticationController]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(application = AuthenticationControllerTest.TestApplication::class) +class AuthenticationControllerTest { + @Inject + lateinit var firebaseAuthWrapper: FirebaseAuthWrapper + + @Inject + lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl + + @Inject + lateinit var authenticationController: AuthenticationController + + @field:[Inject BackgroundDispatcher] + lateinit var backgroundDispatcher: CoroutineDispatcher + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testAuthentication_getCurrentUser_userSignedIn_returnsInstanceOfFirebaseUserWrapper() { + fakeFirebaseAuthWrapperImpl.simulateSignInSuccess() + + firebaseAuthWrapper.signInAnonymously( + onSuccess = {}, + onFailure = {} + ) + + val user = authenticationController.currentFirebaseUser + + assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java) + } + + @Test + fun testAuthentication_signInAnonymously_succeeds() { + fakeFirebaseAuthWrapperImpl.simulateSignInSuccess() + + firebaseAuthWrapper.signInAnonymously( + onSuccess = {}, + onFailure = {} + ) + + val user = authenticationController.currentFirebaseUser + + assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java) + } + + @Test + fun testAuthentication_signInAnonymously_failure_returnsException() { + fakeFirebaseAuthWrapperImpl.simulateSignInFailure() + + assertThrows(Throwable::class) { + firebaseAuthWrapper.signInAnonymously( + onSuccess = {}, + onFailure = {} + ) + } + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext() + .inject(this) + } + + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class, + ApplicationLifecycleModule::class, DispatcherModule::class, + TestLogReportingModule::class, TestAuthenticationModule::class, + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + + fun build(): TestApplicationComponent + } + + fun inject(test: AuthenticationControllerTest) + } + + class TestApplication : Application(), DataProvidersInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerAuthenticationControllerTest_TestApplicationComponent.builder() + .setApplication(this) + .build() + } + + fun inject(test: AuthenticationControllerTest) { + component.inject(test) + } + + override fun getDataProvidersInjector(): DataProvidersInjector = component + } +} diff --git a/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt new file mode 100644 index 00000000000..c8ee88e7bd6 --- /dev/null +++ b/domain/src/test/java/org/oppia/android/domain/auth/AuthenticationModuleTest.kt @@ -0,0 +1,92 @@ +package org.oppia.android.domain.auth + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.data.DataProvidersInjectorProvider +import org.oppia.android.util.logging.firebase.DebugLogReportingModule +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [AuthenticationModule]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(application = AuthenticationModuleTest.TestApplication::class) +class AuthenticationModuleTest { + + @Inject + lateinit var firebaseAuthWrapper: FirebaseAuthWrapper + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testModule_injectsProductionImplementationOfFirebaseAuthWrapper() { + assertThat(firebaseAuthWrapper).isInstanceOf(FirebaseAuthWrapperImpl::class.java) + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext().inject(this) + } + + // TODO(#89): Move this to a common test application component. + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + @Singleton + @Component( + modules = [ + TestModule::class, TestDispatcherModule::class, AuthenticationModule::class, + RobolectricModule::class, DebugLogReportingModule::class + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + + fun build(): TestApplicationComponent + } + + fun inject(test: AuthenticationModuleTest) + } + + class TestApplication : Application(), DataProvidersInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerAuthenticationModuleTest_TestApplicationComponent.builder() + .setApplication(this) + .build() + } + + fun inject(test: AuthenticationModuleTest) { + component.inject(test) + } + + override fun getDataProvidersInjector(): DataProvidersInjector = component + } +} diff --git a/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel new file mode 100644 index 00000000000..61f22c5ed07 --- /dev/null +++ b/domain/src/test/java/org/oppia/android/domain/auth/BUILD.bazel @@ -0,0 +1,30 @@ +""" +Tests for libraries providing authentication with Firebase functionality. +""" + +load("@dagger//:workspace_defs.bzl", "dagger_rules") +load("//:oppia_android_test.bzl", "oppia_android_test") + +oppia_android_test( + name = "AuthenticationModuleTest", + srcs = ["AuthenticationModuleTest.kt"], + custom_package = "org.oppia.android.domain.auth", + test_class = "org.oppia.android.domain.auth.AuthenticationModuleTest", + test_manifest = "//domain:test_manifest", + deps = [ + ":dagger", + "//domain/src/main/java/org/oppia/android/domain/auth:auth_module", + "//testing", + "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module", + "//testing/src/main/java/org/oppia/android/testing/threading:test_module", + "//third_party:androidx_test_ext_junit", + "//third_party:com_google_truth_truth", + "//third_party:junit_junit", + "//third_party:org_mockito_mockito-core", + "//third_party:org_robolectric_robolectric", + "//third_party:robolectric_android-all", + "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module", + ], +) + +dagger_rules() diff --git a/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt new file mode 100644 index 00000000000..28a07b49b39 --- /dev/null +++ b/domain/src/test/java/org/oppia/android/domain/auth/FirebaseAuthWrapperImplTest.kt @@ -0,0 +1,113 @@ +package org.oppia.android.domain.auth + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule +import org.oppia.android.testing.FakeFirebaseAuthInstanceWrapperImpl +import org.oppia.android.testing.TestLogReportingModule +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.data.DataProvidersInjectorProvider +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [firebaseAuthWrapperImpl]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(application = FirebaseAuthWrapperImplTest.TestApplication::class) + +class FirebaseAuthWrapperImplTest { + + @Inject + lateinit var firebaseAuthWrapperImpl: FirebaseAuthWrapperImpl + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testAuthWrapperImpl_getCurrentSignedInUser_userIsNotSignedIn_returnsNull() { + val user = firebaseAuthWrapperImpl.currentUser + + assertThat(user).isNull() + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext() + .inject(this) + } + + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + @Module + class AuthenticationModule { + @Provides + @Singleton + fun provideFirebaseAuthWrapper(firebaseAuthInstanceWrapper: FirebaseAuthInstanceWrapper): + FirebaseAuthWrapper = FirebaseAuthWrapperImpl(firebaseAuthInstanceWrapper) + + @Provides + @Singleton + fun provideFirebaseAuthInstanceWrapper(): FirebaseAuthInstanceWrapper = + FakeFirebaseAuthInstanceWrapperImpl() + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class, + ApplicationLifecycleModule::class, TestDispatcherModule::class, + AuthenticationModule::class, TestLogReportingModule::class, + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + + fun build(): TestApplicationComponent + } + + fun inject(test: FirebaseAuthWrapperImplTest) + } + + class TestApplication : Application(), DataProvidersInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerFirebaseAuthWrapperImplTest_TestApplicationComponent.builder() + .setApplication(this) + .build() + } + + fun inject(test: FirebaseAuthWrapperImplTest) { + component.inject(test) + } + + override fun getDataProvidersInjector(): DataProvidersInjector = component + } +} diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt index 70fdb3df2b9..8aab3fe63ad 100644 --- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationDataControllerTest.kt @@ -50,6 +50,7 @@ import org.oppia.android.domain.topic.TEST_STORY_ID_2 import org.oppia.android.domain.topic.TEST_TOPIC_ID_0 import org.oppia.android.domain.topic.TEST_TOPIC_ID_1 import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.environment.TestEnvironmentConfig @@ -401,7 +402,8 @@ class ExplorationDataControllerTest { AlgebraicExpressionInputModule::class, MathEquationInputModule::class, LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, PlatformParameterModule::class, - PlatformParameterSingletonModule::class, ExplorationProgressModule::class + PlatformParameterSingletonModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt index 632b3eedcd5..f70c336f8bc 100644 --- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressControllerTest.kt @@ -83,6 +83,7 @@ import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.FakeExceptionLogger import org.oppia.android.testing.OppiaTestRule import org.oppia.android.testing.RunOn +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.data.DataProviderTestMonitor @@ -3214,7 +3215,7 @@ class ExplorationProgressControllerTest { AlgebraicExpressionInputModule::class, MathEquationInputModule::class, LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, PlatformParameterSingletonModule::class, - ExplorationProgressModule::class + ExplorationProgressModule::class, TestAuthenticationModule::class ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt index cb189de92ba..6256ff55290 100644 --- a/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/exploration/lightweightcheckpointing/ExplorationCheckpointControllerTest.kt @@ -49,6 +49,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_0 import org.oppia.android.domain.topic.FRACTIONS_EXPLORATION_ID_1 +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.environment.TestEnvironmentConfig @@ -1000,7 +1001,7 @@ class ExplorationCheckpointControllerTest { AlgebraicExpressionInputModule::class, MathEquationInputModule::class, RatioInputModule::class, ImageClickInputModule::class, InteractionsModule::class, HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class, - ExplorationProgressModule::class, + ExplorationProgressModule::class, TestAuthenticationModule::class ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt new file mode 100644 index 00000000000..02b49b292a9 --- /dev/null +++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/FirestoreDataControllerTest.kt @@ -0,0 +1,486 @@ +package org.oppia.android.domain.oppialogger.analytics + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.async +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.app.model.EventLog +import org.oppia.android.app.model.OppiaEventLogs +import org.oppia.android.app.model.ProfileId +import org.oppia.android.app.model.SurveyQuestionName +import org.oppia.android.data.persistence.PersistentCacheStore +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize +import org.oppia.android.domain.platformparameter.PlatformParameterModule +import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule +import org.oppia.android.testing.FakeFirestoreEventLogger +import org.oppia.android.testing.TestAuthenticationModule +import org.oppia.android.testing.TestLogReportingModule +import org.oppia.android.testing.data.DataProviderTestMonitor +import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestCoroutineDispatchers +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClock +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.data.AsyncResult +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.data.DataProvidersInjectorProvider +import org.oppia.android.util.locale.LocaleProdModule +import org.oppia.android.util.logging.EnableConsoleLog +import org.oppia.android.util.logging.EnableFileLog +import org.oppia.android.util.logging.GlobalLogLevel +import org.oppia.android.util.logging.LogLevel +import org.oppia.android.util.logging.SyncStatusModule +import org.oppia.android.util.networking.NetworkConnectionDebugUtil +import org.oppia.android.util.networking.NetworkConnectionUtil +import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule +import org.oppia.android.util.threading.BackgroundDispatcher +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Provider +import javax.inject.Singleton + +@Suppress("FunctionName", "SameParameterValue") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(application = FirestoreDataControllerTest.TestApplication::class) +class FirestoreDataControllerTest { + @Inject + lateinit var dataControllerProvider: Provider + + @Inject + lateinit var testCoroutineDispatchers: TestCoroutineDispatchers + + @Inject + lateinit var oppiaClock: FakeOppiaClock + + @Inject + lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger + + @Inject + lateinit var networkConnectionUtil: NetworkConnectionDebugUtil + + @Inject + lateinit var monitorFactory: DataProviderTestMonitor.Factory + + @field:[Inject BackgroundDispatcher] + lateinit var backgroundDispatcher: CoroutineDispatcher + + @Inject + lateinit var persistentCacheStoryFactory: PersistentCacheStore.Factory + + private val profileId by lazy { ProfileId.newBuilder().apply { internalId = 0 }.build() } + + private val dataController by lazy { dataControllerProvider.get() } + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testController_logEvent_withOptionalSurveyQuestionContext_checkLogsEvent() { + logOptionalSurveyResponseEvent() + + val eventLog = fakeFirestoreEventLogger.getMostRecentEvent() + + assertThat(eventLog).hasTimestampThat().isEqualTo(TEST_TIMESTAMP) + assertThat(eventLog).isEssentialPriority() + assertThat(eventLog).hasOptionalSurveyResponseContext() + } + + @Test + fun testController_logEvent_noProfile_hasNoProfileId() { + dataController.logEvent( + createOptionalSurveyResponseContext( + surveyId = TEST_SURVEY_ID, + profileId = null, + answer = TEST_ANSWER + ), + profileId = null, + TEST_TIMESTAMP + ) + testCoroutineDispatchers.runCurrent() + + val eventLog = fakeFirestoreEventLogger.getMostRecentEvent() + assertThat(eventLog.hasProfileId()).isFalse() + } + + @Test + fun testController_logEvent_withProfile_includesProfileId() { + logOptionalSurveyResponseEvent() + + val eventLog = fakeFirestoreEventLogger.getMostRecentEvent() + assertThat(eventLog.hasProfileId()).isTrue() + assertThat(eventLog).hasProfileIdThat().isEqualTo(profileId) + } + + @Test + fun testController_logEvent_withNoNetwork_exceedLimit_checkEventLogStoreSize() { + networkConnectionUtil.setCurrentConnectionStatus( + NetworkConnectionUtil.ProdConnectionStatus.NONE + ) + logFourEvents() + + val eventLogsProvider = dataController.getEventLogStore() + + val eventLogs = monitorFactory.waitForNextSuccessfulResult(eventLogsProvider) + assertThat(eventLogs.eventLogsToUploadList).hasSize(2) + assertThat(eventLogs.uploadedEventLogsList).isEmpty() + } + + @Test + fun testController_logEvents_exceedLimit_withNoNetwork_checkCorrectEventIsEvicted() { + networkConnectionUtil.setCurrentConnectionStatus( + NetworkConnectionUtil.ProdConnectionStatus.NONE + ) + logFourEvents() + + val logsProvider = dataController.getEventLogStore() + + val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider) + val firstEventLog = eventLogs.getEventLogsToUpload(0) + val secondEventLog = eventLogs.getEventLogsToUpload(1) + assertThat(eventLogs.eventLogsToUploadList).hasSize(2) + + // The pruning will be purely based on timestamp of the event as all the event logs have + // ESSENTIAL priority. + assertThat(firstEventLog).hasTimestampThat().isEqualTo(1556094120000) + assertThat(secondEventLog).hasTimestampThat().isEqualTo(1556094100000) + } + + @Test + fun testController_uploadEventLogs_noLogs_cacheUnchanged() { + setUpTestApplicationComponent() + val monitor = monitorFactory.createMonitor(dataController.getEventLogStore()) + + runSynchronously { dataController.uploadData() } + + val logs = monitor.ensureNextResultIsSuccess() + assertThat(logs.eventLogsToUploadList).isEmpty() + assertThat(logs.uploadedEventLogsList).isEmpty() + } + + @Test + fun testController_uploadEventLogs_withPreviousLogs_recordsEventsAsUploaded() { + setUpTestApplicationComponent() + logTwoEvents() + + runSynchronously { dataController.uploadData() } + + assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(2) + } + + @Test + fun testController_uploadEventLogs_withLogs_recordsEventsAsUploaded() { + setUpTestApplicationComponent() + logTwoEventsOffline() + + runSynchronously { dataController.uploadData() } + + assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(2) + } + + @Test + fun testController_uploadEventLogsAndWait_noLogs_cacheUnchanged() { + setUpTestApplicationComponent() + val monitor = monitorFactory.createMonitor(dataController.getEventLogStore()) + + runSynchronously { dataController.uploadData() } + + val logs = monitor.ensureNextResultIsSuccess() + assertThat(logs.eventLogsToUploadList).isEmpty() + assertThat(logs.uploadedEventLogsList).isEmpty() + } + + @Test + fun testController_cachedEventsFromLastAppInstance_logNewEvent_thenForceSync_everythingUploads() { + // Simulate events being logged in a previous instance of the app. + logTwoCachedEventsDirectlyOnDisk() + + dataController.logEvent( + createAbandonSurveyContext( + TEST_SURVEY_ID, + profileId, + SurveyQuestionName.MARKET_FIT + ), + profileId = profileId + ) + + runSynchronously { dataController.uploadData() } + + testCoroutineDispatchers.runCurrent() + + // The force sync should ensure everything is uploaded. NOTE TO DEVELOPER: If this test is + // failing, it may be due to FirestoreDataController being created before + // logTwoCachedEventsDirectlyOnDisk is called above. If that's the case, use the indirect + // injection pattern at the top of the test suite (for FirestoreDataController itself) to ensure + // whichever dependency is injecting FirestoreDataController is also only injected when needed + // (i.e. using a Provider). + assertThat(fakeFirestoreEventLogger.getEventListCount()).isEqualTo(3) + } + + @Test + fun testController_uploadEventLogs_onNetworkRestore_removesAllEventLogsFromStore() { + setUpTestApplicationComponent() + + logTwoEventsOffline() + + runSynchronously { dataController.uploadData() } + + val logsProvider = dataController.getEventLogStore() + + val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider) + + assertThat(eventLogs.eventLogsToUploadList).hasSize(0) + } + + @Test + fun testController_uploadEventLogs_withNetworkConnection_removesAllEventLogsFromStore() { + setUpTestApplicationComponent() + + logTwoEvents() + + runSynchronously { dataController.uploadData() } + + val logsProvider = dataController.getEventLogStore() + + val eventLogs = monitorFactory.waitForNextSuccessfulResult(logsProvider) + + assertThat(eventLogs.eventLogsToUploadList).hasSize(0) + } + + private fun createAbandonSurveyContext( + surveyId: String, + profileId: ProfileId, + questionName: SurveyQuestionName + ): EventLog.Context { + return EventLog.Context.newBuilder() + .setAbandonSurvey( + EventLog.AbandonSurveyContext.newBuilder() + .setQuestionName(questionName) + .setSurveyDetails( + createSurveyResponseContext(surveyId, profileId) + ) + ) + .build() + } + + private fun runSynchronously(operation: suspend () -> Unit) = + CoroutineScope(backgroundDispatcher).async { operation() }.waitForSuccessfulResult() + + private fun logTwoEvents() { + logOptionalSurveyResponseEvent() + logOptionalSurveyResponseEvent(timestamp = 1556094110000) + } + + private fun logTwoEventsOffline() { + networkConnectionUtil.setCurrentConnectionStatus( + NetworkConnectionUtil.ProdConnectionStatus.NONE + ) + logTwoEvents() + networkConnectionUtil.setCurrentConnectionStatus( + NetworkConnectionUtil.ProdConnectionStatus.LOCAL + ) + } + + private fun logTwoCachedEventsDirectlyOnDisk() { + persistentCacheStoryFactory.create( + "firestore_data", OppiaEventLogs.getDefaultInstance() + ).storeDataAsync { + OppiaEventLogs.newBuilder().apply { + addEventLogsToUpload( + createEventLog( + context = createOptionalSurveyResponseContext( + surveyId = TEST_SURVEY_ID, + profileId = profileId, + answer = TEST_ANSWER + ) + ) + ) + addEventLogsToUpload( + createEventLog( + context = createOptionalSurveyResponseContext( + surveyId = TEST_SURVEY_ID, + profileId = profileId, + answer = TEST_ANSWER + ) + ) + ) + }.build() + }.waitForSuccessfulResult() + } + + private fun Deferred.waitForSuccessfulResult() { + return when (val result = waitForResult()) { + is AsyncResult.Pending -> error("Deferred never finished.") + is AsyncResult.Success -> {} // Nothing to do; the result succeeded. + is AsyncResult.Failure -> throw IllegalStateException("Deferred failed", result.error) + } + } + + private fun Deferred.waitForResult() = toStateFlow().waitForLatestValue() + + private fun Deferred.toStateFlow(): StateFlow> { + val deferred = this + return MutableStateFlow>(value = AsyncResult.Pending()).also { flow -> + CoroutineScope(backgroundDispatcher).async { + flow.emit(AsyncResult.Success(deferred.await())) + }.invokeOnCompletion { + it?.let { flow.tryEmit(AsyncResult.Failure(it)) } + } + } + } + + private fun StateFlow.waitForLatestValue(): T = + also { testCoroutineDispatchers.runCurrent() }.value + + private fun createEventLog( + context: EventLog.Context, + priority: EventLog.Priority = EventLog.Priority.ESSENTIAL, + timestamp: Long = oppiaClock.getCurrentTimeMs() + ) = EventLog.newBuilder().apply { + this.timestamp = timestamp + this.priority = priority + this.context = context + }.build() + + private fun logFourEvents() { + logOptionalSurveyResponseEvent(timestamp = 1556094120000) + logOptionalSurveyResponseEvent(timestamp = 1556094110000) + logOptionalSurveyResponseEvent(timestamp = 1556093100000) + logOptionalSurveyResponseEvent(timestamp = 1556094100000) + } + + private fun logOptionalSurveyResponseEvent(timestamp: Long = TEST_TIMESTAMP) { + dataController.logEvent( + createOptionalSurveyResponseContext( + surveyId = TEST_SURVEY_ID, + profileId = profileId, + answer = TEST_ANSWER + ), + profileId, + timestamp + ) + testCoroutineDispatchers.runCurrent() + } + + private fun createOptionalSurveyResponseContext( + surveyId: String, + profileId: ProfileId?, + answer: String + ): EventLog.Context { + return EventLog.Context.newBuilder() + .setOptionalResponse( + EventLog.OptionalSurveyResponseContext.newBuilder() + .setFeedbackAnswer(answer) + .setSurveyDetails( + createSurveyResponseContext(surveyId, profileId) + ) + ) + .build() + } + + private fun createSurveyResponseContext( + surveyId: String, + profileId: ProfileId? + ): EventLog.SurveyResponseContext { + return EventLog.SurveyResponseContext.newBuilder() + .setProfileId(profileId?.internalId.toString()) + .setSurveyId(surveyId) + .build() + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext().inject(this) + } + + private companion object { + private const val TEST_SURVEY_ID = "test_survey_id" + private const val TEST_ANSWER = "Some text response" + private const val TEST_TIMESTAMP = 1556094120000 + } + + // TODO(#89): Move this to a common test application component. + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + + // TODO(#59): Either isolate these to their own shared test module, or use the real logging + // module in tests to avoid needing to specify these settings for tests. + @EnableConsoleLog + @Provides + fun provideEnableConsoleLog(): Boolean = true + + @EnableFileLog + @Provides + fun provideEnableFileLog(): Boolean = false + + @GlobalLogLevel + @Provides + fun provideGlobalLogLevel(): LogLevel = LogLevel.VERBOSE + } + + @Module + class TestLogStorageModule { + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 2 + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, TestLogReportingModule::class, TestLogStorageModule::class, + TestDispatcherModule::class, RobolectricModule::class, FakeOppiaClockModule::class, + NetworkConnectionUtilDebugModule::class, LocaleProdModule::class, + PlatformParameterSingletonModule::class, SyncStatusModule::class, + ApplicationLifecycleModule::class, PlatformParameterModule::class, + CpuPerformanceSnapshotterModule::class, TestAuthenticationModule::class, + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + fun build(): TestApplicationComponent + } + + fun inject(dataControllerTest: FirestoreDataControllerTest) + } + + class TestApplication : Application(), DataProvidersInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerFirestoreDataControllerTest_TestApplicationComponent.builder() + .setApplication(this) + .build() + } + + fun inject(dataControllerTest: FirestoreDataControllerTest) { + component.inject(dataControllerTest) + } + + override fun getDataProvidersInjector(): DataProvidersInjector = component + } +} diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt index 462dd3f04ad..74ab58fe35e 100644 --- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/LearnerAnalyticsLoggerTest.kt @@ -43,6 +43,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_2 import org.oppia.android.domain.topic.TEST_EXPLORATION_ID_5 import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.junit.OppiaParameterizedTestRunner @@ -1838,6 +1839,7 @@ class LearnerAnalyticsLoggerTest { MathEquationInputModule::class, ImageClickInputModule::class, AssetModule::class, HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class, CachingTestModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt index 4a5e3723f33..f82ab30c03d 100644 --- a/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/analytics/SurveyEventsLoggerTest.kt @@ -17,10 +17,13 @@ import org.oppia.android.app.model.SurveyQuestionName import org.oppia.android.app.model.UserTypeAnswer import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize import org.oppia.android.domain.oppialogger.LoggingIdentifierModule import org.oppia.android.domain.oppialogger.survey.SurveyEventsLogger import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule import org.oppia.android.testing.FakeAnalyticsEventLogger +import org.oppia.android.testing.FakeFirestoreEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.logging.EventLogSubject.Companion.assertThat import org.oppia.android.testing.logging.SyncStatusTestModule @@ -52,6 +55,7 @@ import javax.inject.Singleton class SurveyEventsLoggerTest { private companion object { private const val TEST_SURVEY_ID = "test_survey_id" + private const val TEST_ANSWER = "Some text response" } @Inject @@ -60,6 +64,9 @@ class SurveyEventsLoggerTest { @Inject lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger + @Inject + lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger + @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers @@ -110,6 +117,26 @@ class SurveyEventsLoggerTest { } } + @Test + fun testLogOptionalResponse_logsEventWithCorrectValues() { + surveyEventsLogger.logOptionalResponse( + TEST_SURVEY_ID, + profileId, + TEST_ANSWER + ) + testCoroutineDispatchers.runCurrent() + + val eventLog = fakeFirestoreEventLogger.getMostRecentEvent() + + assertThat(eventLog).hasOptionalSurveyResponseContextThat { + hasSurveyDetailsThat { + hasSurveyIdThat().isNotEmpty() + hasInternalProfileIdThat().isEqualTo("0") + } + hasFeedbackAnswerThat().isEqualTo(TEST_ANSWER) + } + } + private fun setUpTestApplicationComponent() { DaggerSurveyEventsLoggerTest_TestApplicationComponent.builder() .setApplication(ApplicationProvider.getApplicationContext()) @@ -150,6 +177,10 @@ class SurveyEventsLoggerTest { @Provides @ExceptionLogStorageCacheSize fun provideExceptionLogStorageCacheSize(): Int = 2 + + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 2 } // TODO(#89): Move this to a common test application component. @@ -161,7 +192,7 @@ class SurveyEventsLoggerTest { NetworkConnectionUtilDebugModule::class, LocaleProdModule::class, FakeOppiaClockModule::class, TestPlatformParameterModule::class, PlatformParameterSingletonModule::class, LoggingIdentifierModule::class, SyncStatusTestModule::class, - ApplicationLifecycleModule::class, AssetModule::class + ApplicationLifecycleModule::class, AssetModule::class, TestAuthenticationModule::class, ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt index cded74aa82b..50450041a09 100644 --- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogReportWorkManagerInitializerTest.kt @@ -24,6 +24,7 @@ import org.junit.Test import org.junit.runner.RunWith import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize import org.oppia.android.domain.oppialogger.LoggingIdentifierModule import org.oppia.android.domain.oppialogger.OppiaLogger import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize @@ -37,6 +38,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterModule import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule import org.oppia.android.domain.testing.oppialogger.loguploader.FakeLogUploader import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.robolectric.RobolectricModule import org.oppia.android.testing.threading.TestCoroutineDispatchers @@ -131,6 +133,8 @@ class LogReportWorkManagerInitializerTest { val enqueuedSchedulingPeriodicBackgroundPerformanceMetricWorkRequestId = logReportWorkManagerInitializer .getWorkRequestForSchedulingPeriodicBackgroundPerformanceMetricLogsId() + val enqueuedFirestoreWorkRequestId = + logReportWorkManagerInitializer.getWorkRequestForFirestoreId() assertThat(fakeLogUploader.getMostRecentEventRequestId()).isEqualTo(enqueuedEventWorkRequestId) assertThat(fakeLogUploader.getMostRecentExceptionRequestId()).isEqualTo( @@ -148,6 +152,9 @@ class LogReportWorkManagerInitializerTest { assertThat(fakeLogScheduler.getMostRecentPeriodicBackgroundMetricLoggingRequestId()).isEqualTo( enqueuedSchedulingPeriodicBackgroundPerformanceMetricWorkRequestId ) + assertThat(fakeLogUploader.getMostRecentFirestoreRequestId()).isEqualTo( + enqueuedFirestoreWorkRequestId + ) } @Test @@ -248,6 +255,20 @@ class LogReportWorkManagerInitializerTest { ).isEqualTo(workerCaseForSchedulingMemoryUsageMetricLogs) } + @Test + fun testWorkRequest_verifyWorkRequestData_forSchedulingFirestoreUpload() { + val workerCaseForUploadingFirestoreData: Data = Data.Builder() + .putString( + LogUploadWorker.WORKER_CASE_KEY, + LogUploadWorker.FIRESTORE_WORKER + ) + .build() + + assertThat( + logReportWorkManagerInitializer.getWorkRequestDataForFirestore() + ).isEqualTo(workerCaseForUploadingFirestoreData) + } + private fun setUpTestApplicationComponent() { ApplicationProvider.getApplicationContext().inject(this) } @@ -276,6 +297,10 @@ class LogReportWorkManagerInitializerTest { @Provides @PerformanceMetricsLogStorageCacheSize fun providePerformanceMetricsLogStorageCacheSize(): Int = 2 + + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 2 } @Module @@ -299,7 +324,7 @@ class LogReportWorkManagerInitializerTest { LoggerModule::class, AssetModule::class, LoggerModule::class, PlatformParameterModule::class, PlatformParameterSingletonModule::class, LoggingIdentifierModule::class, SyncStatusModule::class, ApplicationLifecycleModule::class, - CpuPerformanceSnapshotterModule::class + CpuPerformanceSnapshotterModule::class, TestAuthenticationModule::class, ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt index 4f4b2a1ca65..1b715670f33 100644 --- a/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/loguploader/LogUploadWorkerTest.kt @@ -29,18 +29,22 @@ import org.oppia.android.app.model.OppiaMetricLog import org.oppia.android.app.model.ScreenName.SCREEN_NAME_UNSPECIFIED import org.oppia.android.domain.oppialogger.EventLogStorageCacheSize import org.oppia.android.domain.oppialogger.ExceptionLogStorageCacheSize +import org.oppia.android.domain.oppialogger.FirestoreLogStorageCacheSize import org.oppia.android.domain.oppialogger.LoggingIdentifierModule import org.oppia.android.domain.oppialogger.OppiaLogger import org.oppia.android.domain.oppialogger.PerformanceMetricsLogStorageCacheSize import org.oppia.android.domain.oppialogger.analytics.AnalyticsController import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule +import org.oppia.android.domain.oppialogger.analytics.FirestoreDataController import org.oppia.android.domain.oppialogger.analytics.PerformanceMetricsController import org.oppia.android.domain.oppialogger.exceptions.ExceptionsController import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule import org.oppia.android.domain.testing.oppialogger.loguploader.FakeLogUploader import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.FakeFirestoreEventLogger import org.oppia.android.testing.FakePerformanceMetricsEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.logging.SyncStatusTestModule import org.oppia.android.testing.logging.TestSyncStatusManager @@ -64,6 +68,7 @@ import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.DATA_UPLOADIN import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.INITIAL_UNKNOWN import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.NO_CONNECTIVITY import org.oppia.android.util.logging.SyncStatusManager.SyncStatus.UPLOAD_ERROR +import org.oppia.android.util.logging.firebase.FirestoreEventLogger import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessorModule import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsConfigurationsModule import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger @@ -92,8 +97,10 @@ class LogUploadWorkerTest { @Inject lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger @Inject lateinit var fakeExceptionLogger: FakeExceptionLogger @Inject lateinit var fakePerformanceMetricsEventLogger: FakePerformanceMetricsEventLogger + @Inject lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger @Inject lateinit var oppiaLogger: OppiaLogger @Inject lateinit var analyticsController: AnalyticsController + @Inject lateinit var dataController: FirestoreDataController @Inject lateinit var exceptionsController: ExceptionsController @Inject lateinit var performanceMetricsController: PerformanceMetricsController @Inject lateinit var logUploadWorkerFactory: LogUploadWorkerFactory @@ -102,6 +109,8 @@ class LogUploadWorkerTest { @Inject lateinit var testSyncStatusManager: TestSyncStatusManager @Inject lateinit var monitorFactory: DataProviderTestMonitor.Factory @field:[Inject MockEventLogger] lateinit var mockAnalyticsEventLogger: AnalyticsEventLogger + @field:[Inject MockFirestoreEventLogger] + lateinit var mockFirestoreEventLogger: FirestoreEventLogger private lateinit var context: Context @@ -402,6 +411,95 @@ class LogUploadWorkerTest { assertThat(currentStatus).isEqualTo(NO_CONNECTIVITY) } + @Test + fun testWorker_logFirestoreEvent_withNetwork_enqueueRequest_verifySuccess() { + setUpTestApplicationComponent() + networkConnectionUtil.setCurrentConnectionStatus(NONE) + dataController.logEvent( + createOptionalSurveyResponseContext(), + profileId = null, + 1556094120000 + ) + networkConnectionUtil.setCurrentConnectionStatus(LOCAL) + testCoroutineDispatchers.runCurrent() + + val workManager = WorkManager.getInstance(ApplicationProvider.getApplicationContext()) + + val inputData = Data.Builder().putString( + LogUploadWorker.WORKER_CASE_KEY, + LogUploadWorker.FIRESTORE_WORKER + ).build() + + val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder() + .setInputData(inputData) + .build() + + workManager.enqueue(request) + testCoroutineDispatchers.runCurrent() + val workInfo = workManager.getWorkInfoById(request.id) + + assertThat(workInfo.get().state).isEqualTo(WorkInfo.State.SUCCEEDED) + assertThat(fakeFirestoreEventLogger.getMostRecentEvent()).isEqualTo( + optionalSurveyResponseEventLog + ) + } + + @Test + fun testWorker_logFirestoreEvent_withoutNetwork_enqueueRequest_writeFails_verifyFailure() { + setUpTestApplicationComponent() + networkConnectionUtil.setCurrentConnectionStatus(NONE) + dataController.logEvent( + createOptionalSurveyResponseContext(), + profileId = null, + 1556094120000 + ) + testCoroutineDispatchers.runCurrent() + + val workManager = WorkManager.getInstance(ApplicationProvider.getApplicationContext()) + + val inputData = Data.Builder().putString( + LogUploadWorker.WORKER_CASE_KEY, + LogUploadWorker.FIRESTORE_WORKER + ).build() + + val request: OneTimeWorkRequest = OneTimeWorkRequestBuilder() + .setInputData(inputData) + .build() + + setUpFirestoreEventLoggerToFail() + workManager.enqueue(request) + testCoroutineDispatchers.runCurrent() + val workInfo = workManager.getWorkInfoById(request.id) + + assertThat(workInfo.get().state).isEqualTo(WorkInfo.State.FAILED) + assertThat(fakeFirestoreEventLogger.noEventsPresent()).isTrue() + } + + private val optionalSurveyResponseEventLog = EventLog.newBuilder().apply { + this.context = createOptionalSurveyResponseContext() + this.timestamp = TEST_TIMESTAMP + this.priority = EventLog.Priority.ESSENTIAL + } + .build() + + private fun createOptionalSurveyResponseContext(): EventLog.Context { + return EventLog.Context.newBuilder() + .setOptionalResponse( + EventLog.OptionalSurveyResponseContext.newBuilder() + .setFeedbackAnswer("answer") + .setSurveyDetails( + createSurveyResponseContext() + ) + ) + .build() + } + + private fun createSurveyResponseContext(): EventLog.SurveyResponseContext { + return EventLog.SurveyResponseContext.newBuilder() + .setSurveyId("test_survey_id") + .build() + } + private fun setUpEventLoggerToFail() { // Simulate the log attempt itself failing during the job. Note that the reset is necessary here // to remove the default stubbing for the mock so that it can properly trigger a failure. @@ -410,6 +508,14 @@ class LogUploadWorkerTest { .thenThrow(IllegalStateException("Failure.")) } + private fun setUpFirestoreEventLoggerToFail() { + // Simulate the log attempt itself failing during the job. Note that the reset is necessary here + // to remove the default stubbing for the mock so that it can properly trigger a failure. + reset(mockFirestoreEventLogger) + `when`(mockFirestoreEventLogger.uploadEvent(anyOrNull())) + .thenThrow(IllegalStateException("Failure.")) + } + /** * Returns a list of lists of each relevant element of a [StackTraceElement] to be used for * comparison in a way that's consistent across JDK versions. @@ -431,6 +537,9 @@ class LogUploadWorkerTest { @Qualifier annotation class MockEventLogger + @Qualifier + annotation class MockFirestoreEventLogger + // TODO(#89): Move this to a common test application component. @Module class TestModule { @@ -451,6 +560,21 @@ class LogUploadWorkerTest { } } + @Provides + @Singleton + @MockFirestoreEventLogger + fun bindMockFirestoreEventLogger(fakeFirestoreLogger: FakeFirestoreEventLogger): + FirestoreEventLogger { + return mock(FirestoreEventLogger::class.java).also { + `when`(it.uploadEvent(anyOrNull())).then { answer -> + fakeFirestoreLogger.uploadEvent( + answer.getArgument(/* index= */ 0, /* clazz= */ EventLog::class.java) + ) + return@then null + } + } + } + @Provides fun bindFakeEventLogger(@MockEventLogger delegate: AnalyticsEventLogger): AnalyticsEventLogger = delegate @@ -462,6 +586,11 @@ class LogUploadWorkerTest { fun bindFakePerformanceMetricsLogger( fakePerformanceMetricsEventLogger: FakePerformanceMetricsEventLogger ): PerformanceMetricsEventLogger = fakePerformanceMetricsEventLogger + + @Provides + fun bindFakeFirestoreEventLogger( + @MockFirestoreEventLogger delegate: FirestoreEventLogger + ): FirestoreEventLogger = delegate } @Module @@ -478,6 +607,10 @@ class LogUploadWorkerTest { @Provides @PerformanceMetricsLogStorageCacheSize fun providePerformanceMetricsLogStorageCacheSize(): Int = 2 + + @Provides + @FirestoreLogStorageCacheSize + fun provideFirestoreLogStorageCacheSize(): Int = 2 } @Module @@ -498,7 +631,8 @@ class LogUploadWorkerTest { AssetModule::class, TestPlatformParameterModule::class, PlatformParameterSingletonModule::class, LoggingIdentifierModule::class, SyncStatusTestModule::class, PerformanceMetricsAssessorModule::class, - ApplicationLifecycleModule::class, PerformanceMetricsConfigurationsModule::class + ApplicationLifecycleModule::class, PerformanceMetricsConfigurationsModule::class, + TestAuthenticationModule::class, ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt index eb9e43ab83a..4517b0b6504 100644 --- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyControllerTest.kt @@ -19,6 +19,7 @@ import org.oppia.android.domain.oppialogger.ApplicationIdSeed import org.oppia.android.domain.oppialogger.LogStorageModule import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.robolectric.RobolectricModule @@ -211,7 +212,7 @@ class SurveyControllerTest { ApplicationLifecycleModule::class, TestDispatcherModule::class, LocaleProdModule::class, ExplorationProgressModule::class, TestLogReportingModule::class, AssetModule::class, NetworkConnectionUtilDebugModule::class, SyncStatusModule::class, LogStorageModule::class, - TestLoggingIdentifierModule::class, + TestLoggingIdentifierModule::class, TestAuthenticationModule::class, ] ) interface TestApplicationComponent : DataProvidersInjector { diff --git a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt index 865120fb089..e0e8e1deade 100644 --- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt +++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyProgressControllerTest.kt @@ -24,6 +24,8 @@ import org.oppia.android.domain.oppialogger.LogStorageModule import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule import org.oppia.android.testing.FakeAnalyticsEventLogger import org.oppia.android.testing.FakeExceptionLogger +import org.oppia.android.testing.FakeFirestoreEventLogger +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.data.DataProviderTestMonitor import org.oppia.android.testing.logging.EventLogSubject @@ -72,6 +74,9 @@ class SurveyProgressControllerTest { @Inject lateinit var fakeAnalyticsEventLogger: FakeAnalyticsEventLogger + @Inject + lateinit var fakeFirestoreEventLogger: FakeFirestoreEventLogger + private val profileId = ProfileId.newBuilder().setInternalId(1).build() @Before @@ -397,7 +402,26 @@ class SurveyProgressControllerTest { } } - // TODO(#5001): Add tests for Optional responses logging to Firestore + @Test + fun testEndSurvey_afterCompletingAllQuestions_logsOptionalSurveyResponseEvent() { + startSuccessfulSurveySession() + waitForGetCurrentQuestionSuccessfulLoad() + submitUserTypeAnswer(UserTypeAnswer.PARENT) + submitMarketFitAnswer(MarketFitAnswer.VERY_DISAPPOINTED) + submitNpsAnswer(10) + submitTextInputAnswer(SurveyQuestionName.PROMOTER_FEEDBACK, TEXT_ANSWER) + stopSurveySession(surveyCompleted = true) + + val eventLog = fakeFirestoreEventLogger.getMostRecentEvent() + + EventLogSubject.assertThat(eventLog).hasOptionalSurveyResponseContextThat { + hasSurveyDetailsThat { + hasSurveyIdThat().isNotEmpty() + hasInternalProfileIdThat().isEqualTo("1") + } + hasFeedbackAnswerThat().isEqualTo(TEXT_ANSWER) + } + } private fun stopSurveySession(surveyCompleted: Boolean) { val stopProvider = surveyController.stopSurveySession(surveyCompleted) @@ -542,7 +566,7 @@ class SurveyProgressControllerTest { ApplicationLifecycleModule::class, TestDispatcherModule::class, LocaleProdModule::class, ExplorationProgressModule::class, TestLogReportingModule::class, AssetModule::class, NetworkConnectionUtilDebugModule::class, SyncStatusModule::class, LogStorageModule::class, - TestLoggingIdentifierModule::class + TestLoggingIdentifierModule::class, TestAuthenticationModule::class, ] ) diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel index 97be8252f41..5d9fe4ac612 100644 --- a/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel +++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/BUILD.bazel @@ -25,6 +25,7 @@ kt_android_library( "//app/src/main/java/org/oppia/android/app/application/testing:testing_build_flavor_module", "//data/src/main/java/org/oppia/android/data/backends/gae:network_config_annotations", "//domain", + "//testing", "//utility", "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module", diff --git a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt index 25f666f4029..fbf99ee8103 100644 --- a/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt +++ b/instrumentation/src/java/org/oppia/android/instrumentation/application/TestApplicationComponent.kt @@ -45,6 +45,7 @@ import org.oppia.android.domain.platformparameter.syncup.PlatformParameterSyncUp import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.util.accessibility.AccessibilityProdModule import org.oppia.android.util.caching.AssetModule import org.oppia.android.util.caching.CachingModule @@ -101,7 +102,8 @@ import javax.inject.Singleton MetricLogSchedulerModule::class, ActivityRouterModule::class, PerformanceMetricsAssessorModule::class, PerformanceMetricsConfigurationsModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, - ExplorationProgressModule::class, CpuPerformanceSnapshotterModule::class + ExplorationProgressModule::class, CpuPerformanceSnapshotterModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/scripts/assets/maven_dependencies.textproto b/scripts/assets/maven_dependencies.textproto index ddb692a40f3..7305bccdd78 100644 --- a/scripts/assets/maven_dependencies.textproto +++ b/scripts/assets/maven_dependencies.textproto @@ -514,6 +514,17 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "com.google.android:annotations:4.1.1.4" + artifact_version: "4.1.1.4" + license { + license_name: "Apache 2.0" + original_link: "https://www.apache.org/licenses/LICENSE-2.0" + extracted_copy_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} maven_dependency { artifact_name: "com.google.auto.service:auto-service-annotations:1.0-rc7" artifact_version: "1.0-rc7" @@ -529,6 +540,7 @@ maven_dependency { artifact_version: "1.8.1" license { license_name: "The Apache Software License, Version 2.0" + original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt" scrapable_link { url: "https://www.apache.org/licenses/LICENSE-2.0.txt" } @@ -545,6 +557,16 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "com.google.code.gson:gson:2.8.9" + artifact_version: "2.8.9" + license { + license_name: "Apache 2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} maven_dependency { artifact_name: "com.google.dagger:dagger:2.28.1" artifact_version: "2.28.1" @@ -557,8 +579,8 @@ maven_dependency { } } maven_dependency { - artifact_name: "com.google.errorprone:error_prone_annotations:2.7.1" - artifact_version: "2.7.1" + artifact_name: "com.google.errorprone:error_prone_annotations:2.9.0" + artifact_version: "2.9.0" license { license_name: "Apache 2.0" original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt" @@ -579,8 +601,19 @@ maven_dependency { } } maven_dependency { - artifact_name: "com.google.firebase:firebase-common:19.3.0" - artifact_version: "19.3.0" + artifact_name: "com.google.firebase:firebase-auth-ktx:19.3.1" + artifact_version: "19.3.1" + license { + license_name: "Android Software Development Kit License" + original_link: "https://developer.android.com/studio/terms.html" + direct_link_only { + url: "https://developer.android.com/studio/terms.html" + } + } +} +maven_dependency { + artifact_name: "com.google.firebase:firebase-common:20.1.1" + artifact_version: "20.1.1" license { license_name: "The Apache Software License, Version 2.0" original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt" @@ -600,6 +633,17 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "com.google.firebase:firebase-firestore-ktx:24.2.1" + artifact_version: "24.2.1" + license { + license_name: "The Apache Software License, Version 2.0" + original_link: "https://www.apache.org/licenses/LICENSE-2.0.txt" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} maven_dependency { artifact_name: "com.google.guava:failureaccess:1.0.1" artifact_version: "1.0.1" @@ -642,12 +686,12 @@ maven_dependency { } } maven_dependency { - artifact_name: "com.google.protobuf:protobuf-javalite:3.17.3" - artifact_version: "3.17.3" + artifact_name: "com.google.protobuf:protobuf-javalite:3.19.2" + artifact_version: "3.19.2" license { - license_name: "Simplified BSD License" + license_name: "BSD 3-clause" extracted_copy_link { - url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/simplified-bsd-license.txt" + url: "https://opensource.org/license/bsd-3-clause" } } } @@ -695,6 +739,16 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "com.squareup.okhttp:okhttp:2.7.5" + artifact_version: "2.7.5" + license { + license_name: "The Apache Software License, Version 2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} maven_dependency { artifact_name: "com.squareup.okio:okio:2.6.0" artifact_version: "2.6.0" @@ -768,6 +822,50 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "io.grpc:grpc-api:1.44.1" + artifact_version: "1.44.1" + license { + license_name: "Apache 2.0" + original_link: "https://opensource.org/licenses/Apache-2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} +maven_dependency { + artifact_name: "io.grpc:grpc-context:1.44.1" + artifact_version: "1.44.1" + license { + license_name: "Apache 2.0" + original_link: "https://opensource.org/licenses/Apache-2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} +maven_dependency { + artifact_name: "io.grpc:grpc-core:1.44.1" + artifact_version: "1.44.1" + license { + license_name: "Apache 2.0" + original_link: "https://opensource.org/licenses/Apache-2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} +maven_dependency { + artifact_name: "io.perfmark:perfmark-api:0.23.0" + artifact_version: "0.23.0" + license { + license_name: "Apache 2.0" + original_link: "https://opensource.org/licenses/Apache-2.0" + scrapable_link { + url: "https://www.apache.org/licenses/LICENSE-2.0.txt" + } + } +} maven_dependency { artifact_name: "javax.annotation:javax.annotation-api:1.3.2" artifact_version: "1.3.2" @@ -830,6 +928,28 @@ maven_dependency { } } } +maven_dependency { + artifact_name: "org.checkerframework:checker-qual:3.13.0" + artifact_version: "3.13.0" + license { + license_name: "The MIT License" + original_link: "https://opensource.org/licenses/MIT" + extracted_copy_link { + url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/mit-license.txt" + } + } +} +maven_dependency { + artifact_name: "org.codehaus.mojo:animal-sniffer-annotations:1.19" + artifact_version: "1.19" + license { + license_name: "The MIT License" + original_link: "https://opensource.org/licenses/MIT" + extracted_copy_link { + url: "https://raw.githubusercontent.com/oppia/oppia-android-licenses/develop/mit-license.txt" + } + } +} maven_dependency { artifact_name: "org.jetbrains.kotlin:kotlin-reflect:1.5.0" artifact_version: "1.5.0" diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto index dac453e5d9b..8a58df32b31 100644 --- a/scripts/assets/test_file_exemptions.textproto +++ b/scripts/assets/test_file_exemptions.textproto @@ -652,6 +652,11 @@ exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/mode exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeVoiceover.kt" exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeWrittenTranslation.kt" exempted_file_path: "data/src/main/java/org/oppia/android/data/backends/gae/model/GaeWrittenTranslations.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" @@ -754,6 +759,8 @@ exempted_file_path: "scripts/src/java/org/oppia/android/scripts/todo/model/Todo. 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" @@ -850,8 +857,13 @@ exempted_file_path: "utility/src/main/java/org/oppia/android/util/logging/fireba 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" diff --git a/testing/build.gradle b/testing/build.gradle index 3116f0df05c..834206b8704 100644 --- a/testing/build.gradle +++ b/testing/build.gradle @@ -75,6 +75,7 @@ dependencies { 'androidx.test:runner:1.2.0', 'com.google.android.material:material:1.3.0', 'com.google.dagger:dagger:2.24', + 'com.google.firebase:firebase-auth-ktx:19.3.1', 'com.google.protobuf:protobuf-javalite:3.17.3', 'com.google.truth:truth:1.1.3', 'com.google.truth.extensions:truth-liteproto-extension:1.1.3', diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt new file mode 100644 index 00000000000..ea5ada533eb --- /dev/null +++ b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthInstanceWrapperImpl.kt @@ -0,0 +1,11 @@ +package org.oppia.android.testing + +import org.oppia.android.domain.auth.FirebaseAuthInstance +import org.oppia.android.domain.auth.FirebaseAuthInstanceWrapper +import javax.inject.Inject + +/** Implementation of [FirebaseAuthInstanceWrapper]. */ +class FakeFirebaseAuthInstanceWrapperImpl @Inject constructor() : FirebaseAuthInstanceWrapper { + override val firebaseAuthInstance: FirebaseAuthInstance? + get() = null +} diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt new file mode 100644 index 00000000000..8f8a9d54b53 --- /dev/null +++ b/testing/src/main/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImpl.kt @@ -0,0 +1,49 @@ +package org.oppia.android.testing + +import org.oppia.android.domain.auth.FirebaseAuthWrapper +import org.oppia.android.domain.auth.FirebaseUserWrapper +import java.util.UUID +import javax.inject.Inject +import javax.inject.Singleton + +/** A test specific fake for the [FirebaseAuthWrapper]. */ +@Singleton +class FakeFirebaseAuthWrapperImpl @Inject constructor() : FirebaseAuthWrapper { + private var fakeAuthState: FakeAuthState = FakeAuthState.SUCCESS + + /** Fake a successful auth response. */ + fun simulateSignInSuccess() { + fakeAuthState = FakeAuthState.SUCCESS + } + + /** Fake a failed auth response. */ + fun simulateSignInFailure() { + fakeAuthState = FakeAuthState.FAILURE + } + + /** Returns the [fakeAuthState] of the controller. */ + fun getAuthState(): FakeAuthState = fakeAuthState + + override val currentUser: FirebaseUserWrapper? + get() = if (fakeAuthState == FakeAuthState.SUCCESS) + FirebaseUserWrapper(uid = UUID.randomUUID().toString()) + else + null + + override fun signInAnonymously(onSuccess: () -> Unit, onFailure: (Throwable) -> Unit) { + if (fakeAuthState == FakeAuthState.SUCCESS) { + onSuccess.invoke() + } else { + onFailure.invoke(Exception("Sign-in failure")) + } + } + + /** Represents a faked authentication state. */ + enum class FakeAuthState { + /** Represents a faked successful authentication state. */ + SUCCESS, + + /** Represents a faked failed authentication state. */ + FAILURE + } +} diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt new file mode 100644 index 00000000000..b2a16c85704 --- /dev/null +++ b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreEventLogger.kt @@ -0,0 +1,41 @@ +package org.oppia.android.testing + +import org.oppia.android.app.model.EventLog +import org.oppia.android.util.logging.firebase.FirestoreEventLogger +import java.util.concurrent.CopyOnWriteArrayList +import javax.inject.Inject +import javax.inject.Singleton + +/** A test specific fake for the FirestoreEventLogger. */ +@Singleton +class FakeFirestoreEventLogger @Inject constructor() : FirestoreEventLogger { + private val eventList = CopyOnWriteArrayList() + + override fun uploadEvent(eventLog: EventLog) { + eventList.add(eventLog) + } + + /** Returns the oldest event that's been logged. */ + fun getOldestEvent(): EventLog = eventList.first() + + /** Returns the most recently logged event. */ + fun getMostRecentEvent(): EventLog = getMostRecentEvents(count = 1).first() + + /** Returns the most recent [count] logged events. */ + fun getMostRecentEvents(count: Int): List = eventList.takeLast(count) + + /** Clears all the events that are currently logged. */ + fun clearAllEvents() = eventList.clear() + + /** Returns whether a certain event has been logged or not, based on the provided [predicate]. */ + fun hasEventLogged(predicate: (EventLog) -> Boolean): Boolean = eventList.find(predicate) != null + + /** Returns the number of logged events that match the provided [predicate]. */ + fun countEvents(predicate: (EventLog) -> Boolean): Int = eventList.count(predicate) + + /** Returns true if there are no events logged. */ + fun noEventsPresent(): Boolean = eventList.isEmpty() + + /** Returns the number of events logged to date (and not cleared by [clearAllEvents]). */ + fun getEventListCount(): Int = eventList.size +} diff --git a/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt new file mode 100644 index 00000000000..e5f62715c78 --- /dev/null +++ b/testing/src/main/java/org/oppia/android/testing/FakeFirestoreInstanceWrapperImpl.kt @@ -0,0 +1,16 @@ +package org.oppia.android.testing + +import org.oppia.android.util.logging.firebase.FirestoreInstance +import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper +import javax.inject.Inject + +/** + * A test specific fake for the [FirestoreInstanceWrapper]. [FirebaseFirestore] requires an instance + * of [FirebaseApp], which is difficult to mock or fake hence this implementation always returns + * null when an instance of [FirebaseFirestore] is requested. + */ +class FakeFirestoreInstanceWrapperImpl @Inject constructor() : FirestoreInstanceWrapper { + + override val firestoreInstance: FirestoreInstance? + get() = null +} diff --git a/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt b/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt new file mode 100644 index 00000000000..ed973730f5a --- /dev/null +++ b/testing/src/main/java/org/oppia/android/testing/TestAuthenticationModule.kt @@ -0,0 +1,15 @@ +package org.oppia.android.testing + +import dagger.Module +import dagger.Provides +import org.oppia.android.domain.auth.FirebaseAuthWrapper +import javax.inject.Singleton + +/** Provides test authentication dependencies. */ +@Module +class TestAuthenticationModule { + @Provides + @Singleton + fun provideFakeFirebaseAuthWrapper(fakeFirebaseWrapperImpl: FakeFirebaseAuthWrapperImpl): + FirebaseAuthWrapper = fakeFirebaseWrapperImpl +} diff --git a/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt b/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt index 9d27f8c3a51..f10c83dfa83 100644 --- a/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt +++ b/testing/src/main/java/org/oppia/android/testing/TestLogReportingModule.kt @@ -4,6 +4,8 @@ import dagger.Binds import dagger.Module import org.oppia.android.util.logging.AnalyticsEventLogger import org.oppia.android.util.logging.ExceptionLogger +import org.oppia.android.util.logging.firebase.FirestoreEventLogger +import org.oppia.android.util.logging.firebase.FirestoreInstanceWrapper import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsAssessor import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger @@ -26,4 +28,13 @@ interface TestLogReportingModule { fun bindFakePerformanceMetricsAssessor( fakePerformanceMetricAssessor: FakePerformanceMetricAssessor ): PerformanceMetricsAssessor + + @Binds + fun bindFakeFirestoreEventLogger( + fakeFirestoreEventLogger: FakeFirestoreEventLogger + ): FirestoreEventLogger + + @Binds + fun bindFirebaseFirestoreInstanceWrapper(wrapperImpl: FakeFirestoreInstanceWrapperImpl): + FirestoreInstanceWrapper } diff --git a/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt b/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt index cbd7163ce19..5f17e632be0 100644 --- a/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt +++ b/testing/src/main/java/org/oppia/android/testing/logging/EventLogSubject.kt @@ -40,6 +40,7 @@ import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_QUE import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_REVISION_CARD import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_REVISION_TAB import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPEN_STORY_ACTIVITY +import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.OPTIONAL_RESPONSE import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.PAUSE_VOICE_OVER_CONTEXT import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.PLAY_VOICE_OVER_CONTEXT import org.oppia.android.app.model.EventLog.Context.ActivityContextCase.REACH_INVESTED_ENGAGEMENT @@ -1046,6 +1047,34 @@ class EventLogSubject private constructor( hasBeginSurveyContextThat().block() } + /** + * Verifies that the [EventLog] under test has a context corresponding to + * [OPTIONAL_RESPONSE] (per [EventLog.Context.getActivityContextCase]). + */ + fun hasOptionalSurveyResponseContext() { + assertThat(actual.context.activityContextCase).isEqualTo(OPTIONAL_RESPONSE) + } + + /** + * Verifies the [EventLog]'s context per [hasOptionalSurveyResponseContext] and returns a + * [OptionalSurveyResponseContextSubject] to test the corresponding context. + */ + fun hasOptionalSurveyResponseContextThat(): OptionalSurveyResponseContextSubject { + hasOptionalSurveyResponseContext() + return OptionalSurveyResponseContextSubject.assertThat( + actual.context.optionalResponse + ) + } + + /** + * Verifies the [EventLog]'s context and executes [block]. + */ + fun hasOptionalSurveyResponseContextThat( + block: OptionalSurveyResponseContextSubject.() -> Unit + ) { + hasOptionalSurveyResponseContextThat().block() + } + /** * Truth subject for verifying properties of [AppLanguageSelection]s. * @@ -1754,6 +1783,54 @@ class EventLogSubject private constructor( } } + /** + * Truth subject for verifying properties of [EventLog.OptionalSurveyResponseContext]s. + * + * Note that this class is also a [LiteProtoSubject] so other aspects of the underlying + * [EventLog.OptionalSurveyResponseContext] proto can be verified through inherited methods. + * + * Call [OptionalSurveyResponseContextSubject.assertThat] to create the subject. + */ + class OptionalSurveyResponseContextSubject private constructor( + metadata: FailureMetadata, + private val actual: EventLog.OptionalSurveyResponseContext + ) : LiteProtoSubject(metadata, actual) { + /** + * Returns a [SurveyResponseContextSubject] to test + * [EventLog.OptionalSurveyResponseContext.getSurveyDetails]. + * + * This method never fails since the underlying property defaults to empty string if it's not + * defined in the context. + */ + fun hasSurveyDetailsThat(): SurveyResponseContextSubject = + SurveyResponseContextSubject.assertThat(actual.surveyDetails) + + /** Executes [block] in the context returned by [hasSurveyDetailsThat]. */ + fun hasSurveyDetailsThat(block: SurveyResponseContextSubject.() -> Unit) { + hasSurveyDetailsThat().block() + } + + /** + * Returns a [StringSubject] to test + * [EventLog.OptionalSurveyResponseContext.getFeedbackAnswer]. + * + * This method never fails since the underlying property defaults to empty object if it's not + * defined in the context. + */ + fun hasFeedbackAnswerThat(): StringSubject = + assertThat(actual.feedbackAnswer) + + companion object { + /** + * Returns a new [OptionalSurveyResponseContextSubject] to verify aspects of the specified + * [EventLog.OptionalSurveyResponseContext] value. + */ + fun assertThat(actual: EventLog.OptionalSurveyResponseContext): + OptionalSurveyResponseContextSubject = + assertAbout(::OptionalSurveyResponseContextSubject).that(actual) + } + } + /** * Truth subject for verifying properties of [EventLog.MandatorySurveyResponseContext]s. * @@ -1768,7 +1845,7 @@ class EventLogSubject private constructor( ) : LiteProtoSubject(metadata, actual) { /** * Returns a [SurveyResponseContextSubject] to test - * [EventLog.AbandonSurveyContext.getSurveyDetails]. + * [EventLog.MandatorySurveyResponseContext.getSurveyDetails]. * * This method never fails since the underlying property defaults to empty object if it's not * defined in the context. @@ -1802,8 +1879,8 @@ class EventLogSubject private constructor( assertThat(actual.marketFitAnswer) /** - * Returns a [ComparableSubject] to test - * [EventLog.MandatorySurveyResponseContext.getUserTypeAnswer]. + * Returns a [IntegerSubject] to test + * [EventLog.MandatorySurveyResponseContext.getNpsScoreAnswer]. * * This method never fails since the underlying property defaults to empty object if it's not * defined in the context. @@ -1813,8 +1890,8 @@ class EventLogSubject private constructor( companion object { /** - * Returns a new [AbandonSurveyContextSubject] to verify aspects of the specified - * [EventLog.AbandonSurveyContext] value. + * Returns a new [MandatorySurveyResponseContextSubject] to verify aspects of the specified + * [EventLog.MandatorySurveyResponseContext] value. */ fun assertThat(actual: EventLog.MandatorySurveyResponseContext): MandatorySurveyResponseContextSubject = diff --git a/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt b/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt new file mode 100644 index 00000000000..3da520b2da4 --- /dev/null +++ b/testing/src/test/java/org/oppia/android/testing/FakeFirebaseAuthWrapperImplTest.kt @@ -0,0 +1,122 @@ +package org.oppia.android.testing + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.domain.auth.FirebaseUserWrapper +import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule +import org.oppia.android.testing.FakeFirebaseAuthWrapperImpl.FakeAuthState +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.data.DataProvidersInjectorProvider +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [FakeFirebaseAuthWrapperImpl]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(application = FakeFirebaseAuthWrapperImplTest.TestApplication::class) +class FakeFirebaseAuthWrapperImplTest { + @Inject + lateinit var fakeFirebaseAuthWrapperImpl: FakeFirebaseAuthWrapperImpl + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testFakeAuthWrapper_getCurrentSignedInUser_userIsSignedIn_returnsFirebaseUserWrapper() { + fakeFirebaseAuthWrapperImpl.simulateSignInSuccess() + val user = fakeFirebaseAuthWrapperImpl.currentUser + + assertThat(user).isInstanceOf(FirebaseUserWrapper::class.java) + } + + @Test + fun testFakeAuthWrapper_getCurrentSignedInUser_userIsNotSignedIn_returnsNull() { + fakeFirebaseAuthWrapperImpl.simulateSignInFailure() + val user = fakeFirebaseAuthWrapperImpl.currentUser + + assertThat(user).isNull() + } + + @Test + fun testFakeAuthWrapper_simulateSignInSuccess_returnsFakeAuthStateSuccess() { + fakeFirebaseAuthWrapperImpl.simulateSignInSuccess() + + val authState = fakeFirebaseAuthWrapperImpl.getAuthState() + assertThat(authState).isInstanceOf(FakeAuthState.SUCCESS::class.java) + } + + @Test + fun testFakeAuthWrapper_simulateSignInFailure_returnsFakeAuthStateFailure() { + fakeFirebaseAuthWrapperImpl.simulateSignInFailure() + val authState = fakeFirebaseAuthWrapperImpl.getAuthState() + assertThat(authState).isInstanceOf(FakeAuthState.FAILURE::class.java) + } + + private fun setUpTestApplicationComponent() { + ApplicationProvider.getApplicationContext() + .inject(this) + } + + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, RobolectricModule::class, FakeOppiaClockModule::class, + ApplicationLifecycleModule::class, TestDispatcherModule::class, + TestAuthenticationModule::class, TestLogReportingModule::class, + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + + fun build(): TestApplicationComponent + } + + fun inject(test: FakeFirebaseAuthWrapperImplTest) + } + + class TestApplication : Application(), DataProvidersInjectorProvider { + private val component: TestApplicationComponent by lazy { + DaggerFakeFirebaseAuthWrapperImplTest_TestApplicationComponent.builder() + .setApplication(this) + .build() + } + + fun inject(test: FakeFirebaseAuthWrapperImplTest) { + component.inject(test) + } + + override fun getDataProvidersInjector(): DataProvidersInjector = component + } +} diff --git a/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt b/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt new file mode 100644 index 00000000000..41ce667b82f --- /dev/null +++ b/testing/src/test/java/org/oppia/android/testing/FakeFirestoreEventLoggerTest.kt @@ -0,0 +1,302 @@ +package org.oppia.android.testing + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.app.model.EventLog +import org.oppia.android.app.model.EventLog.Priority +import org.oppia.android.domain.oppialogger.LogStorageModule +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.logging.firebase.FirestoreEventLogger +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [fakeEventLogger]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(manifest = Config.NONE) +class FakeFirestoreEventLoggerTest { + + @Inject + lateinit var fakeEventLogger: FakeFirestoreEventLogger + + @Inject + lateinit var eventLogger: FirestoreEventLogger + + private val eventLog1 = EventLog.newBuilder().setPriority(Priority.ESSENTIAL).build() + private val eventLog2 = EventLog.newBuilder().setPriority(Priority.OPTIONAL).build() + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testfakeEventLogger_logEvent_returnsEvent() { + eventLogger.uploadEvent(eventLog1) + val event = fakeEventLogger.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog1) + assertThat(event.priority).isEqualTo(Priority.ESSENTIAL) + } + + @Test + fun testfakeEventLogger_logEventTwice_returnsLatestEvent() { + eventLogger.uploadEvent(eventLog1) + eventLogger.uploadEvent(eventLog2) + val event = fakeEventLogger.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog2) + assertThat(event.priority).isEqualTo(Priority.OPTIONAL) + } + + @Test + fun testfakeEventLogger_logEvent_clearAllEvents_logEventAgain_returnsLatestEvent() { + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + eventLogger.uploadEvent(eventLog2) + val event = fakeEventLogger.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog2) + assertThat(event.priority).isEqualTo(Priority.OPTIONAL) + } + + @Test + fun testfakeEventLogger_logNothing_getMostRecent_returnsFailure() { + assertThrows(NoSuchElementException::class) { fakeEventLogger.getMostRecentEvent() } + } + + @Test + fun testfakeEventLogger_logEvent_clearAllEvents_getMostRecent_returnsFailure() { + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + + val eventException = assertThrows(NoSuchElementException::class) { + fakeEventLogger.getMostRecentEvent() + } + + assertThat(eventException).isInstanceOf(NoSuchElementException::class.java) + } + + @Test + fun testfakeEventLogger_clearAllEvents_returnsEmptyList() { + fakeEventLogger.clearAllEvents() + val isListEmpty = fakeEventLogger.noEventsPresent() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testfakeEventLogger_logEvent_clearAllEvents_returnsEmptyList() { + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + val isListEmpty = fakeEventLogger.noEventsPresent() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testfakeEventLogger_logMultipleEvents_clearAllEvents_returnsEmptyList() { + eventLogger.uploadEvent(eventLog1) + eventLogger.uploadEvent(eventLog2) + fakeEventLogger.clearAllEvents() + val isListEmpty = fakeEventLogger.noEventsPresent() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testfakeEventLogger_logEvent_returnsNonEmptyList() { + eventLogger.uploadEvent(eventLog1) + val isListEmpty = fakeEventLogger.noEventsPresent() + + assertThat(isListEmpty).isFalse() + } + + @Test + fun testfakeEventLogger_logMultipleEvents_returnsNonEmptyList() { + eventLogger.uploadEvent(eventLog1) + eventLogger.uploadEvent(eventLog2) + + val eventLogStatus1 = fakeEventLogger.hasEventLogged { it == eventLog1 } + val eventLogStatus2 = fakeEventLogger.hasEventLogged { it == eventLog2 } + val eventListStatus = fakeEventLogger.noEventsPresent() + + assertThat(eventListStatus).isFalse() + assertThat(eventLogStatus1).isTrue() + assertThat(eventLogStatus2).isTrue() + } + + @Test + fun testGetOldestEvent_noEventsLogged_throwsException() { + assertThrows(NoSuchElementException::class) { fakeEventLogger.getOldestEvent() } + } + + @Test + fun testGetOldestEvent_oneEventLogged_returnsLoggedEvent() { + eventLogger.uploadEvent(eventLog1) + + val oldestEvent = fakeEventLogger.getOldestEvent() + + assertThat(oldestEvent).isEqualTo(eventLog1) + } + + @Test + fun testGetOldestEvent_twoEventsLogged_returnsFirstEventLogged() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + + val oldestEvent = fakeEventLogger.getOldestEvent() + + assertThat(oldestEvent).isEqualTo(eventLog2) + } + + @Test + fun testGetOldestEvent_twoEventsLogged_clearEvents_throwsException() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + + assertThrows(NoSuchElementException::class) { fakeEventLogger.getOldestEvent() } + } + + @Test + fun testGetOldestEvent_eventLogged_cleared_newEventLogged_returnsLatestEventLog() { + eventLogger.uploadEvent(eventLog2) + fakeEventLogger.clearAllEvents() + eventLogger.uploadEvent(eventLog1) + + val oldestEvent = fakeEventLogger.getOldestEvent() + + assertThat(oldestEvent).isEqualTo(eventLog1) + } + + @Test + fun testGetMostRecentEvents_twoEvents_noEventsLogged_returnsEmptyList() { + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2) + + assertThat(mostRecentEvents).isEmpty() + } + + @Test + fun testGetMostRecentEvents_twoEvents_oneEventLogged_returnsOneItemList() { + eventLogger.uploadEvent(eventLog1) + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2) + + assertThat(mostRecentEvents).containsExactly(eventLog1) + } + + @Test + fun testGetMostRecentEvents_twoEvents_twoEventsLogged_returnsEventsInOrder() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2) + + assertThat(mostRecentEvents).containsExactly(eventLog2, eventLog1).inOrder() + } + + @Test + fun testGetMostRecentEvents_oneEvent_twoEventsLogged_returnsSingleLatestEvent() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 1) + + assertThat(mostRecentEvents).containsExactly(eventLog1) + } + + @Test + fun testGetMostRecentEvents_zeroEvents_twoEventsLogged_returnsEmptyList() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 0) + + assertThat(mostRecentEvents).isEmpty() + } + + @Test + fun testGetMostRecentEvents_negativeEvents_twoEventsLogged_throwsException() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + + assertThrows(IllegalArgumentException::class) { + fakeEventLogger.getMostRecentEvents(count = -1) + } + } + + @Test + fun testGetMostRecentEvents_twoEventsLogged_eventsCleared_returnsEmptyList() { + eventLogger.uploadEvent(eventLog2) + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2) + + assertThat(mostRecentEvents).isEmpty() + } + + @Test + fun testGetMostRecentEvents_eventLogged_cleared_newEventLogged_returnsNewestEvent() { + eventLogger.uploadEvent(eventLog1) + fakeEventLogger.clearAllEvents() + eventLogger.uploadEvent(eventLog2) + + val mostRecentEvents = fakeEventLogger.getMostRecentEvents(count = 2) + + assertThat(mostRecentEvents).containsExactly(eventLog2) + } + + private fun setUpTestApplicationComponent() { + DaggerFakeFirestoreEventLoggerTest_TestApplicationComponent.builder() + .setApplication(ApplicationProvider.getApplicationContext()) + .build() + .inject(this) + } + + // TODO(#89): Move this to a common test application component. + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, TestLogReportingModule::class, RobolectricModule::class, + TestDispatcherModule::class, LogStorageModule::class, FakeOppiaClockModule::class + ] + ) + interface TestApplicationComponent { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + fun build(): TestApplicationComponent + } + + fun inject(fakeEventLoggerTest: FakeFirestoreEventLoggerTest) + } +} diff --git a/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt b/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt new file mode 100644 index 00000000000..e9a9a5f9b23 --- /dev/null +++ b/testing/src/test/java/org/oppia/android/testing/TestAuthenticationModuleTest.kt @@ -0,0 +1,81 @@ +package org.oppia.android.testing + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.domain.auth.FirebaseAuthWrapper +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.util.data.DataProvidersInjector +import org.oppia.android.util.logging.firebase.DebugLogReportingModule +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [TestAuthenticationModule]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(manifest = Config.NONE) +class TestAuthenticationModuleTest { + + @Inject + lateinit var firebaseAuthWrapper: FirebaseAuthWrapper + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testModule_injectsFakeInstanceOfFirebaseAuthWrapper() { + assertThat(firebaseAuthWrapper).isInstanceOf(FakeFirebaseAuthWrapperImpl::class.java) + } + + private fun setUpTestApplicationComponent() { + DaggerTestAuthenticationModuleTest_TestApplicationComponent.builder() + .setApplication(ApplicationProvider.getApplicationContext()) + .build() + .inject(this) + } + + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, TestDispatcherModule::class, RobolectricModule::class, + DebugLogReportingModule::class, TestAuthenticationModule::class + ] + ) + interface TestApplicationComponent : DataProvidersInjector { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + + fun build(): TestApplicationComponent + } + + fun inject(test: TestAuthenticationModuleTest) + } +} diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt index 0939de4682b..71f53946331 100644 --- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt +++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleCustomContextTest.kt @@ -60,6 +60,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.robolectric.RobolectricModule import org.oppia.android.testing.threading.TestDispatcherModule @@ -271,7 +272,8 @@ class InitializeDefaultLocaleRuleCustomContextTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt index f2f2b2c89f0..385742c3a2c 100644 --- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt +++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleOmissionTest.kt @@ -57,6 +57,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.assertThrows import org.oppia.android.testing.robolectric.RobolectricModule @@ -147,7 +148,8 @@ class InitializeDefaultLocaleRuleOmissionTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt index 89e80d0c6ef..896afc9b13e 100644 --- a/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt +++ b/testing/src/test/java/org/oppia/android/testing/junit/InitializeDefaultLocaleRuleTest.kt @@ -61,6 +61,7 @@ import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModu import org.oppia.android.domain.question.QuestionModule import org.oppia.android.domain.topic.PrimeTopicAssetsControllerModule import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule +import org.oppia.android.testing.TestAuthenticationModule import org.oppia.android.testing.TestLogReportingModule import org.oppia.android.testing.robolectric.RobolectricModule import org.oppia.android.testing.threading.TestDispatcherModule @@ -151,7 +152,8 @@ class InitializeDefaultLocaleRuleTest { LoggingIdentifierModule::class, ApplicationLifecycleModule::class, SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class, EventLoggingConfigurationModule::class, ActivityRouterModule::class, - CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class + CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class, + TestAuthenticationModule::class ] ) interface TestApplicationComponent : ApplicationComponent { diff --git a/third_party/maven_install.json b/third_party/maven_install.json index 6ac87f7eab6..24221d97d55 100644 --- a/third_party/maven_install.json +++ b/third_party/maven_install.json @@ -1,14 +1,16 @@ { "dependency_tree": { "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL", - "__INPUT_ARTIFACTS_HASH": 521507787, - "__RESOLVED_ARTIFACTS_HASH": -1467267841, + "__INPUT_ARTIFACTS_HASH": -1629412368, + "__RESOLVED_ARTIFACTS_HASH": 1784154617, "conflict_resolution": { "androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1", "androidx.core:core:1.0.1": "androidx.core:core:1.3.1", "androidx.recyclerview:recyclerview:1.0.0": "androidx.recyclerview:recyclerview:1.1.0", "androidx.test:core:1.0.0": "androidx.test:core:1.4.0", + "com.google.firebase:firebase-common:19.3.0": "com.google.firebase:firebase-common:20.1.1", "com.google.guava:guava:28.1-android": "com.google.guava:guava:30.1.1-android", + "com.google.protobuf:protobuf-javalite:3.17.3": "com.google.protobuf:protobuf-javalite:3.19.2", "com.google.truth:truth:0.43": "com.google.truth:truth:1.1.3", "junit:junit:4.12": "junit:junit:4.13.2", "org.jetbrains.kotlin:kotlin-reflect:1.3.41": "org.jetbrains.kotlin:kotlin-reflect:1.5.0", @@ -989,10 +991,10 @@ "commons-io:commons-io:2.4", "com.google.guava:guava:30.1.1-android", "com.googlecode.juniversalchardet:juniversalchardet:1.0.3", - "com.google.code.gson:gson:2.8.6", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", "com.squareup:javapoet:1.11.1", - "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "com.google.code.gson:gson:2.8.9" ], "directDependencies": [ "com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04", @@ -1003,9 +1005,9 @@ "commons-io:commons-io:2.4", "com.google.guava:guava:30.1.1-android", "com.googlecode.juniversalchardet:juniversalchardet:1.0.3", - "com.google.code.gson:gson:2.8.6", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", - "com.squareup:javapoet:1.11.1" + "com.squareup:javapoet:1.11.1", + "com.google.code.gson:gson:2.8.9" ], "file": "v1/https/maven.google.com/androidx/databinding/databinding-compiler-common/3.4.2/databinding-compiler-common-3.4.2.jar", "mirror_urls": [ @@ -1028,7 +1030,7 @@ "com.android.databinding:baseLibrary:jar:sources:3.4.2", "org.antlr:antlr4:jar:sources:4.5.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "androidx.databinding:databinding-common:jar:sources:3.4.2", "com.squareup:javapoet:jar:sources:1.11.1", "commons-io:commons-io:jar:sources:2.4", @@ -1041,7 +1043,7 @@ "com.android.databinding:baseLibrary:jar:sources:3.4.2", "org.antlr:antlr4:jar:sources:4.5.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "androidx.databinding:databinding-common:jar:sources:3.4.2", "com.squareup:javapoet:jar:sources:1.11.1", "commons-io:commons-io:jar:sources:2.4", @@ -1069,12 +1071,12 @@ "commons-io:commons-io:2.4", "com.google.guava:guava:30.1.1-android", "com.googlecode.juniversalchardet:juniversalchardet:1.0.3", - "com.google.code.gson:gson:2.8.6", "androidx.databinding:databinding-compiler-common:3.4.2", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", "com.squareup:javapoet:1.11.1", "commons-codec:commons-codec:1.10", - "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "com.google.code.gson:gson:2.8.9" ], "directDependencies": [ "androidx.databinding:databinding-common:3.4.2", @@ -1108,7 +1110,7 @@ "androidx.databinding:databinding-compiler-common:jar:sources:3.4.2", "org.antlr:antlr4:jar:sources:4.5.3", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "androidx.databinding:databinding-common:jar:sources:3.4.2", "com.squareup:javapoet:jar:sources:1.11.1", "commons-io:commons-io:jar:sources:2.4", @@ -4239,10 +4241,10 @@ "coord": "com.android.tools.build.jetifier:jetifier-core:1.0.0-beta04", "dependencies": [ "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", - "com.google.code.gson:gson:2.8.6" + "com.google.code.gson:gson:2.8.9" ], "directDependencies": [ - "com.google.code.gson:gson:2.8.6", + "com.google.code.gson:gson:2.8.9", "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" ], "file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04.jar", @@ -4259,11 +4261,11 @@ { "coord": "com.android.tools.build.jetifier:jetifier-core:jar:sources:1.0.0-beta04", "dependencies": [ - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "directDependencies": [ - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0" ], "file": "v1/https/maven.google.com/com/android/tools/build/jetifier/jetifier-core/1.0.0-beta04/jetifier-core-1.0.0-beta04-sources.jar", @@ -4670,7 +4672,6 @@ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", "com.github.bumptech.glide:annotations:4.11.0", "androidx.interpolator:interpolator:aar:1.0.0", - "org.codehaus.mojo:animal-sniffer-annotations:1.18", "androidx.annotation:annotation:1.1.0", "com.github.bumptech.glide:disklrucache:4.11.0", "com.google.j2objc:j2objc-annotations:1.3", @@ -4680,12 +4681,13 @@ "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "com.google.guava:guava:30.1.1-android", "androidx.slidingpanelayout:slidingpanelayout:aar:1.0.0", - "com.google.errorprone:error_prone_annotations:2.7.1", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.vectordrawable:vectordrawable:aar:1.1.0", "androidx.cursoradapter:cursoradapter:aar:1.0.0", "androidx.drawerlayout:drawerlayout:aar:1.1.0", "androidx.core:core:aar:1.3.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.github.bumptech.glide:gifdecoder:4.11.0", "androidx.coordinatorlayout:coordinatorlayout:aar:1.1.0", "androidx.print:print:aar:1.0.0", @@ -4724,7 +4726,6 @@ "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", "com.google.guava:guava:jar:sources:30.1.1-android", - "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.18", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "androidx.print:print:aar:sources:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", @@ -4754,8 +4755,9 @@ "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "androidx.customview:customview:aar:sources:1.1.0", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "androidx.loader:loader:aar:sources:1.0.0", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19", "androidx.vectordrawable:vectordrawable:aar:sources:1.1.0" ], "directDependencies": [ @@ -4917,13 +4919,13 @@ { "coord": "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.fragment:fragment:aar:1.2.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-basement:aar:18.0.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-ads-identifier/17.0.0/play-services-ads-identifier-17.0.0.aar", "mirror_urls": [ @@ -4937,34 +4939,34 @@ "url": "https://maven.google.com/com/google/android/gms/play-services-ads-identifier/17.0.0/play-services-ads-identifier-17.0.0.aar" }, { - "coord": "com.google.android.gms:play-services-base:aar:17.0.0", + "coord": "com.google.android.gms:play-services-base:aar:18.0.1", "dependencies": [ "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "directDependencies": [ "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], - "file": "v1/https/maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar", + "file": "v1/https/maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar", "mirror_urls": [ - "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar", - "https://maven.fabric.io/public/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar", - "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar" + "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar", + "https://maven.fabric.io/public/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar", + "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar" ], - "sha256": "dd0980edf729e0d346e2b58e70801dc237c1aed0c7ab274fa3f1c8c8efc64cc7", - "url": "https://maven.google.com/com/google/android/gms/play-services-base/17.0.0/play-services-base-17.0.0.aar" + "sha256": "2896d76f432be52167295bb9ce45ade25c310aeffc04d28cf8db6a15868e83de", + "url": "https://maven.google.com/com/google/android/gms/play-services-base/18.0.1/play-services-base-18.0.1.aar" }, { - "coord": "com.google.android.gms:play-services-basement:aar:17.0.0", + "coord": "com.google.android.gms:play-services-basement:aar:18.0.0", "dependencies": [ "androidx.collection:collection:jar:1.1.0", "androidx.core:core:aar:1.3.1", @@ -4975,57 +4977,56 @@ "androidx.core:core:aar:1.3.1", "androidx.fragment:fragment:aar:1.2.0" ], - "file": "v1/https/maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar", + "file": "v1/https/maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar", "mirror_urls": [ - "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar", - "https://maven.fabric.io/public/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar", - "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar" + "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar", + "https://maven.fabric.io/public/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar", + "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar" ], - "sha256": "d324a1785bbc48bfe3639fc847cfd3cf43d49e967b5caf2794240a854557a39c", - "url": "https://maven.google.com/com/google/android/gms/play-services-basement/17.0.0/play-services-basement-17.0.0.aar" + "sha256": "55c1777467901a2d399f3252384c4976284aa35fddfd5995466dbeacb49f9dd6", + "url": "https://maven.google.com/com/google/android/gms/play-services-basement/18.0.0/play-services-basement-18.0.0.aar" }, { "coord": "com.google.android.gms:play-services-measurement-api:aar:17.5.0", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", "androidx.annotation:annotation:1.1.0", - "com.google.firebase:firebase-common:aar:19.3.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "androidx.print:print:aar:1.0.0", - "androidx.annotation:annotation:jar:1.1.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.auto.value:auto-value-annotations:jar:1.8.1", "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", - "com.google.firebase:firebase-common:aar:19.3.0", "com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", "com.google.android.gms:play-services-measurement-base:aar:17.5.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-api/17.5.0/play-services-measurement-api-17.5.0.aar", @@ -5042,13 +5043,13 @@ { "coord": "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.fragment:fragment:aar:1.2.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-basement:aar:18.0.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-base/17.5.0/play-services-measurement-base-17.5.0.aar", "mirror_urls": [ @@ -5071,21 +5072,21 @@ "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-impl/17.5.0/play-services-measurement-impl-17.5.0.aar", @@ -5104,12 +5105,12 @@ "dependencies": [ "androidx.collection:collection:jar:1.1.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement-sdk-api/17.5.0/play-services-measurement-sdk-api-17.5.0.aar", @@ -5134,18 +5135,18 @@ "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "com.google.android.gms:play-services-measurement-impl:aar:17.5.0" ], @@ -5171,12 +5172,12 @@ "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "androidx.loader:loader:aar:1.0.0" ], @@ -5185,8 +5186,8 @@ "com.google.android.gms:play-services-stats:aar:17.0.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:17.5.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-measurement/17.5.0/play-services-measurement-17.5.0.aar", @@ -5209,16 +5210,16 @@ "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "androidx.print:print:aar:1.0.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ "androidx.legacy:legacy-support-core-utils:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-basement:aar:18.0.0" ], "file": "v1/https/maven.google.com/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar", "mirror_urls": [ @@ -5232,26 +5233,26 @@ "url": "https://maven.google.com/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.aar" }, { - "coord": "com.google.android.gms:play-services-tasks:aar:17.0.0", + "coord": "com.google.android.gms:play-services-tasks:aar:18.0.1", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.fragment:fragment:aar:1.2.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-basement:aar:18.0.0" ], - "file": "v1/https/maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar", + "file": "v1/https/maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar", "mirror_urls": [ - "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar", - "https://maven.fabric.io/public/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar", - "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar", - "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar" + "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar", + "https://maven.fabric.io/public/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar", + "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar" ], - "sha256": "2e6d1738b73647f3fe7a038b9780b97717b3746eae258009197e36e7bf3112a5", - "url": "https://maven.google.com/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.aar" + "sha256": "f106db48c6ccfa8e1315a7adc44aecd02ff7355eb3fa7dcdcba8c283a8eb1681", + "url": "https://maven.google.com/com/google/android/gms/play-services-tasks/18.0.1/play-services-tasks-18.0.1.aar" }, { "coord": "com.google.android.gms:strict-version-matcher-plugin:1.2.1", @@ -5420,6 +5421,36 @@ "sha256": "1d9fe3a4512512a311889be798e4a0f9cf9fbccddea50a7ca330b1b99ee92993", "url": "https://maven.google.com/com/google/android/material/material/1.3.0/material-1.3.0-sources.jar" }, + { + "coord": "com.google.android:annotations:4.1.1.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar", + "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar", + "https://maven.fabric.io/public/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar", + "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar", + "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar" + ], + "sha256": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15", + "url": "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4.jar" + }, + { + "coord": "com.google.android:annotations:jar:sources:4.1.1.4", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar", + "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar", + "https://maven.fabric.io/public/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar", + "https://maven.google.com/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar", + "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar" + ], + "sha256": "e9b667aa958df78ea1ad115f7bbac18a5869c3128b1d5043feb360b0cfce9d40", + "url": "https://repo1.maven.org/maven2/com/google/android/annotations/4.1.1.4/annotations-4.1.1.4-sources.jar" + }, { "coord": "com.google.auto.service:auto-service-annotations:1.0-rc7", "dependencies": [], @@ -5511,34 +5542,34 @@ "url": "https://repo1.maven.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2-sources.jar" }, { - "coord": "com.google.code.gson:gson:2.8.6", + "coord": "com.google.code.gson:gson:2.8.9", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar", "mirror_urls": [ - "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar", - "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar", - "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar", - "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar", - "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar" + "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar", + "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar", + "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar", + "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar", + "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar" ], - "sha256": "c8fb4839054d280b3033f800d1f5a97de2f028eb8ba2eb458ad287e536f3f25f", - "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.jar" + "sha256": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e", + "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9.jar" }, { - "coord": "com.google.code.gson:gson:jar:sources:2.8.6", + "coord": "com.google.code.gson:gson:jar:sources:2.8.9", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar", "mirror_urls": [ - "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar", - "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar", - "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar", - "https://maven.google.com/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar", - "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar" + "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar", + "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar", + "https://maven.fabric.io/public/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar", + "https://maven.google.com/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar", + "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar" ], - "sha256": "da4d787939dc8de214724a20d88614b70ef8c3a4931d9c694300b5d9098ed9bc", - "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6-sources.jar" + "sha256": "ba5bddb1a89eb721fcca39f3b34294532060f851e2407a82d82134a41eec4719", + "url": "https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.9/gson-2.8.9-sources.jar" }, { "coord": "com.google.dagger:dagger-compiler:2.28.1", @@ -5789,34 +5820,34 @@ "url": "https://repo1.maven.org/maven2/com/google/dagger/dagger/2.28.1/dagger-2.28.1-sources.jar" }, { - "coord": "com.google.errorprone:error_prone_annotations:2.7.1", + "coord": "com.google.errorprone:error_prone_annotations:2.9.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar", "mirror_urls": [ - "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar", - "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar", - "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar", - "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar", - "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" + "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar", + "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar", + "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar", + "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar", + "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar" ], - "sha256": "cd5257c08a246cf8628817ae71cb822be192ef91f6881ca4a3fcff4f1de1cff3", - "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.jar" + "sha256": "f947bdc33ae27a6b4aa44799e6c21e1944797bd0010ba43eb82d11446e163694", + "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0.jar" }, { - "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "coord": "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar", "mirror_urls": [ - "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar", - "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar", - "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar", - "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar", - "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar" + "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar", + "https://maven.fabric.io/public/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar", + "https://maven.google.com/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar" ], - "sha256": "e38921f918b8ad8eabd12bc61de426fa96c72de077054e9147d2f9fe7c648923", - "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1-sources.jar" + "sha256": "0e41e099f0d4c9be030c34a6991821e67a57e2846dba908f4e9bc9ec60732837", + "url": "https://repo1.maven.org/maven2/com/google/errorprone/error_prone_annotations/2.9.0/error_prone_annotations-2.9.0-sources.jar" }, { "coord": "com.google.errorprone:javac-shaded:9-dev-r4023-3", @@ -5851,32 +5882,31 @@ { "coord": "com.google.firebase:firebase-analytics:17.5.0", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", "androidx.annotation:annotation:1.1.0", - "com.google.firebase:firebase-common:aar:19.3.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", "com.google.android.gms:play-services-measurement-sdk-api:aar:17.5.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "com.google.android.gms:play-services-measurement-impl:aar:17.5.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "com.google.android.gms:play-services-measurement:aar:17.5.0", "androidx.core:core:aar:1.3.1", "com.google.android.gms:play-services-ads-identifier:aar:17.0.0", "com.google.android.gms:play-services-measurement-api:aar:17.5.0", "com.google.android.gms:play-services-measurement-sdk:aar:17.5.0", "androidx.print:print:aar:1.0.0", - "androidx.annotation:annotation:jar:1.1.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.auto.value:auto-value-annotations:jar:1.8.1", "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", "com.google.android.gms:play-services-measurement-base:aar:17.5.0", "androidx.loader:loader:aar:1.0.0" ], @@ -5897,147 +5927,376 @@ "url": "https://maven.google.com/com/google/firebase/firebase-analytics/17.5.0/firebase-analytics-17.5.0.aar" }, { - "coord": "com.google.firebase:firebase-common:19.3.0", + "coord": "com.google.firebase:firebase-annotations:jar:16.1.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar", + "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar" + ], + "sha256": "0393478cf124721c7502ea76a28129a420c462fc4d5c0a4274db9e309785bd7e", + "url": "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0.jar" + }, + { + "coord": "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar" + ], + "sha256": "8fd2e91c651391d9c2196eedc784f3ce39bde37dc4b6c8e41055de0656bbb2c9", + "url": "https://maven.google.com/com/google/firebase/firebase-annotations/16.1.0/firebase-annotations-16.1.0-sources.jar" + }, + { + "coord": "com.google.firebase:firebase-appcheck-interop:aar:16.0.0", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-base:aar:18.0.1", "androidx.annotation:annotation:jar:1.1.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", - "com.google.auto.value:auto-value-annotations:jar:1.8.1" + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.firebase:firebase-components:aar:17.0.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar", + "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar" + ], + "sha256": "44b9133286fe4c550391cf55057b2748323c4052b68412df0f8c83efd6044824", + "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0.aar" + }, + { + "coord": "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0", + "dependencies": [ + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "androidx.core:core:aar:sources:1.3.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar" + ], + "sha256": "401532d113dcbbafa32132da0d1afb6713726791bb15dc3e311455b4de0b35e6", + "url": "https://maven.google.com/com/google/firebase/firebase-appcheck-interop/16.0.0/firebase-appcheck-interop-16.0.0-sources.jar" + }, + { + "coord": "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "dependencies": [ + "androidx.collection:collection:jar:1.1.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-basement:aar:18.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0", + "com.google.firebase:firebase-common:aar:20.1.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar", + "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar" + ], + "sha256": "64dd9a5c20b64d0e367f4731d11e8fd6ea816a89a4e44e4193c72eafb54264d3", + "url": "https://maven.google.com/com/google/firebase/firebase-auth-interop/19.0.2/firebase-auth-interop-19.0.2.aar" + }, + { + "coord": "com.google.firebase:firebase-auth-ktx:19.3.1", + "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "androidx.collection:collection:jar:1.1.0", + "androidx.annotation:annotation:1.1.0", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.auto.value:auto-value-annotations:jar:1.8.1", + "com.google.firebase:firebase-common-ktx:aar:20.1.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-auth:aar:19.3.1" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", + "com.google.firebase:firebase-components:aar:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.firebase:firebase-common-ktx:aar:20.1.1", + "com.google.firebase:firebase-auth:aar:19.3.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar", + "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar" + ], + "sha256": "bd23f0077d8e85c8c57e06c06cdcccdc06a3de96facdd72fabd11159f01c4d4d", + "url": "https://maven.google.com/com/google/firebase/firebase-auth-ktx/19.3.1/firebase-auth-ktx-19.3.1.aar" + }, + { + "coord": "com.google.firebase:firebase-auth:aar:19.3.1", + "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "androidx.collection:collection:jar:1.1.0", + "androidx.annotation:annotation:1.1.0", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.auto.value:auto-value-annotations:jar:1.8.1", - "com.google.firebase:firebase-components:aar:16.0.0" + "com.google.android.gms:play-services-tasks:aar:18.0.1" + ], + "directDependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "androidx.collection:collection:jar:1.1.0", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar", + "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar" + ], + "sha256": "0523401e4028729d1a882d2f787cd180bdf91bd12cb1d362453a770e6a2f72c1", + "url": "https://maven.google.com/com/google/firebase/firebase-auth/19.3.1/firebase-auth-19.3.1.aar" + }, + { + "coord": "com.google.firebase:firebase-common-ktx:aar:20.1.1", + "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "androidx.collection:collection:jar:1.1.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-common:aar:20.1.1", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0" + ], + "directDependencies": [ + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.firebase:firebase-components:aar:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar", + "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar" + ], + "sha256": "32ef394eea17445d3460a11f7128ef412f9aa093cd00106e9cfbec363b17a2c1", + "url": "https://maven.google.com/com/google/firebase/firebase-common-ktx/20.1.1/firebase-common-ktx-20.1.1.aar" + }, + { + "coord": "com.google.firebase:firebase-common:20.1.1", + "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "androidx.collection:collection:jar:1.1.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0" ], - "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar", + "directDependencies": [ + "com.google.android.gms:play-services-basement:aar:18.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-components:aar:17.0.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar", "mirror_urls": [ - "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar", - "https://maven.fabric.io/public/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar", - "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar" + "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar", + "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar" ], - "sha256": "7bd7971470ff943e3c3abb1d7809ef5cb4b81f1996be0867714372b3efa7405a", - "url": "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0.aar" + "sha256": "1ab1a5054cb82395487fe0645dcfec6acc94efb9f4972fe717a8bff6905b8ecf", + "url": "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1.aar" }, { - "coord": "com.google.firebase:firebase-common:aar:sources:19.3.0", + "coord": "com.google.firebase:firebase-common:aar:sources:20.1.1", "dependencies": [ - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "androidx.collection:collection:jar:sources:1.1.0", "androidx.annotation:annotation:jar:sources:1.1.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", - "com.google.firebase:firebase-components:aar:sources:16.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0" ], - "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar", + "file": "v1/https/maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar", "mirror_urls": [ - "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar", - "https://maven.fabric.io/public/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar", - "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar" + "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar" ], - "sha256": "1a3f326b3992552200c91db1132c81ec5f6143bc6dd9af8f6f3b66388707c62b", - "url": "https://maven.google.com/com/google/firebase/firebase-common/19.3.0/firebase-common-19.3.0-sources.jar" + "sha256": "1cfd1e4aa6a4bb4379ead8eb44cac80e0a3f3a9414a3e2535a67b4e9a2209ff8", + "url": "https://maven.google.com/com/google/firebase/firebase-common/20.1.1/firebase-common-20.1.1-sources.jar" }, { - "coord": "com.google.firebase:firebase-components:aar:16.0.0", + "coord": "com.google.firebase:firebase-components:aar:17.0.0", "dependencies": [ - "androidx.annotation:annotation:jar:1.1.0" + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-annotations:jar:16.1.0" ], "directDependencies": [ - "androidx.annotation:annotation:jar:1.1.0" + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-annotations:jar:16.1.0" ], - "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar", + "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar", "mirror_urls": [ - "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar", - "https://maven.fabric.io/public/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar", - "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar" + "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar", + "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar" ], - "sha256": "8ef43b412de4ec3e36a87c66d8a0a14a3de0a2e8566946da6a0e799b7fdd8ec9", - "url": "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0.aar" + "sha256": "dd678b2e24dd9b3f570196c618b6ffba9ea59b232ae6dce1356b0629ecb6fbf7", + "url": "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0.aar" }, { - "coord": "com.google.firebase:firebase-components:aar:sources:16.0.0", + "coord": "com.google.firebase:firebase-components:aar:sources:17.0.0", "dependencies": [ + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", "androidx.annotation:annotation:jar:sources:1.1.0" ], "directDependencies": [ - "androidx.annotation:annotation:jar:sources:1.1.0" + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0" ], - "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar", + "file": "v1/https/maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar", "mirror_urls": [ - "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar", - "https://maven.fabric.io/public/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar", - "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar", - "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar" + "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar" ], - "sha256": "8c541d1b27245aff00937b08131cb41c99b4a6dcb5b5a7440283018d13fe9747", - "url": "https://maven.google.com/com/google/firebase/firebase-components/16.0.0/firebase-components-16.0.0-sources.jar" + "sha256": "8910a66c0ed4f81e894da879fd45cc647346a37a75eba0b9184e48d6654f8fcb", + "url": "https://maven.google.com/com/google/firebase/firebase-components/17.0.0/firebase-components-17.0.0-sources.jar" }, { "coord": "com.google.firebase:firebase-crashlytics:17.1.1", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", "androidx.annotation:annotation:1.1.0", - "com.google.android.gms:play-services-base:aar:17.0.0", "com.google.firebase:firebase-iid:aar:20.1.5", - "com.google.firebase:firebase-common:aar:19.3.0", "com.google.android.datatransport:transport-backend-cct:aar:2.3.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "com.google.android.datatransport:transport-api:aar:2.2.0", - "com.google.firebase:firebase-components:aar:16.0.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", "com.google.dagger:dagger:jar:2.28.1", "com.google.firebase:firebase-encoders-json:aar:16.1.0", + "com.google.android.gms:play-services-base:aar:18.0.1", "com.squareup.okhttp3:okhttp:jar:4.7.2", "androidx.print:print:aar:1.0.0", "androidx.annotation:annotation:jar:1.1.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.firebase:firebase-iid-interop:aar:17.0.0", "com.google.android.datatransport:transport-runtime:aar:2.2.3", "com.google.auto.value:auto-value-annotations:jar:1.8.1", "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "com.google.firebase:firebase-iid:aar:20.1.5", - "com.google.firebase:firebase-common:aar:19.3.0", "com.google.android.datatransport:transport-backend-cct:aar:2.3.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "com.google.android.datatransport:transport-api:aar:2.2.0", - "com.google.firebase:firebase-components:aar:16.0.0", "com.google.firebase:firebase-encoders-json:aar:16.1.0", "com.squareup.okhttp3:okhttp:jar:4.7.2", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.firebase:firebase-iid-interop:aar:17.0.0", - "com.google.android.datatransport:transport-runtime:aar:2.2.3" + "com.google.android.datatransport:transport-runtime:aar:2.2.3", + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-crashlytics/17.1.1/firebase-crashlytics-17.1.1.aar", "mirror_urls": [ @@ -6050,6 +6309,54 @@ "sha256": "635953640e1bbb277affadbc3e59b43f1c4dd07de79c8973b6341a756ad8b74b", "url": "https://maven.google.com/com/google/firebase/firebase-crashlytics/17.1.1/firebase-crashlytics-17.1.1.aar" }, + { + "coord": "com.google.firebase:firebase-database-collection:aar:18.0.1", + "dependencies": [ + "androidx.collection:collection:jar:1.1.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1" + ], + "directDependencies": [ + "com.google.android.gms:play-services-base:aar:18.0.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar", + "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar" + ], + "sha256": "fb92604df35bf819e706432ff6e3ca9d4794cc85348d94c887622ba93b5450e0", + "url": "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1.aar" + }, + { + "coord": "com.google.firebase:firebase-database-collection:aar:sources:18.0.1", + "dependencies": [ + "androidx.core:core:aar:sources:1.3.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "androidx.collection:collection:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-base:aar:sources:18.0.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar" + ], + "sha256": "e010851f4524833f72df62d594ff92f1af34026453721c387f522365d1d68cd5", + "url": "https://maven.google.com/com/google/firebase/firebase-database-collection/18.0.1/firebase-database-collection-18.0.1-sources.jar" + }, { "coord": "com.google.firebase:firebase-encoders-json:aar:16.1.0", "dependencies": [ @@ -6088,19 +6395,282 @@ "sha256": "791b1521a8f5eda7ded50ccdf3afa7632a1198964e3c60e93e7ae602d54ca314", "url": "https://maven.google.com/com/google/firebase/firebase-encoders-json/16.1.0/firebase-encoders-json-16.1.0-sources.jar" }, + { + "coord": "com.google.firebase:firebase-firestore-ktx:24.2.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-protobuf-lite:jar:1.44.1", + "com.google.firebase:firebase-database-collection:aar:18.0.1", + "com.google.firebase:firebase-components:aar:17.0.0", + "io.grpc:grpc-core:1.44.1", + "androidx.collection:collection:jar:1.1.0", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "com.google.code.findbugs:jsr305:3.0.2", + "io.grpc:grpc-android:aar:1.44.1", + "com.squareup.okhttp:okhttp:jar:2.7.5", + "com.google.protobuf:protobuf-javalite:3.19.2", + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10", + "io.grpc:grpc-stub:jar:1.44.1", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.firebase:protolite-well-known-types:aar:18.0.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.firebase:firebase-appcheck-interop:aar:16.0.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.android.gms:play-services-base:aar:18.0.1", + "io.grpc:grpc-context:1.44.1", + "com.squareup.okhttp:okhttp:2.7.5", + "com.squareup.okio:okio:2.6.0", + "io.grpc:grpc-okhttp:jar:1.44.1", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.guava:failureaccess:1.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "com.google.protobuf:protobuf-javalite:jar:3.19.2", + "io.grpc:grpc-api:1.44.1", + "com.google.firebase:firebase-common-ktx:aar:20.1.1", + "com.google.firebase:firebase-firestore:aar:24.2.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0", + "com.google.code.gson:gson:2.8.9", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:1.4.10", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.firebase:firebase-common-ktx:aar:20.1.1", + "com.google.firebase:firebase-firestore:aar:24.2.1" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar", + "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar" + ], + "sha256": "5c3ebeadfc1feed2fb20c3a974c9f108e2068833af1b9e532cda6a85cb37011f", + "url": "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1.aar" + }, + { + "coord": "com.google.firebase:firebase-firestore-ktx:jar:sources:24.2.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0", + "com.google.guava:guava:jar:sources:30.1.1-android", + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "androidx.core:core:aar:sources:1.3.1", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "com.google.firebase:firebase-firestore:aar:sources:24.2.1", + "io.grpc:grpc-okhttp:jar:sources:1.44.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "com.google.code.gson:gson:jar:sources:2.8.9", + "com.squareup.okhttp:okhttp:jar:sources:2.7.5", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", + "io.grpc:grpc-android:aar:sources:1.44.1", + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2", + "io.grpc:grpc-stub:jar:sources:1.44.1", + "androidx.annotation:annotation:jar:sources:1.1.0", + "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:jar:sources:1.44.1", + "com.squareup.okio:okio:jar:sources:2.6.0", + "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.firebase:firebase-database-collection:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "directDependencies": [ + "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-firestore:aar:sources:24.2.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", + "androidx.annotation:annotation:jar:sources:1.1.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar" + ], + "sha256": "b537e0077bcd144f2591e1bf505e9e28bbc0cecef81beefdd16170ac93b7631d", + "url": "https://maven.google.com/com/google/firebase/firebase-firestore-ktx/24.2.1/firebase-firestore-ktx-24.2.1-sources.jar" + }, + { + "coord": "com.google.firebase:firebase-firestore:aar:24.2.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-protobuf-lite:jar:1.44.1", + "com.google.firebase:firebase-database-collection:aar:18.0.1", + "com.google.firebase:firebase-components:aar:17.0.0", + "io.grpc:grpc-core:1.44.1", + "androidx.collection:collection:jar:1.1.0", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "com.google.code.findbugs:jsr305:3.0.2", + "io.grpc:grpc-android:aar:1.44.1", + "com.squareup.okhttp:okhttp:jar:2.7.5", + "com.google.protobuf:protobuf-javalite:3.19.2", + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "io.grpc:grpc-stub:jar:1.44.1", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.firebase:protolite-well-known-types:aar:18.0.0", + "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "androidx.core:core:aar:1.3.1", + "com.google.firebase:firebase-appcheck-interop:aar:16.0.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.android.gms:play-services-base:aar:18.0.1", + "io.grpc:grpc-context:1.44.1", + "com.squareup.okhttp:okhttp:2.7.5", + "com.squareup.okio:okio:2.6.0", + "io.grpc:grpc-okhttp:jar:1.44.1", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.guava:failureaccess:1.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.protobuf:protobuf-javalite:jar:3.19.2", + "io.grpc:grpc-api:1.44.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0", + "com.google.code.gson:gson:2.8.9", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "io.grpc:grpc-protobuf-lite:jar:1.44.1", + "com.google.firebase:firebase-database-collection:aar:18.0.1", + "com.google.firebase:firebase-components:aar:17.0.0", + "com.google.firebase:firebase-auth-interop:aar:19.0.2", + "io.grpc:grpc-android:aar:1.44.1", + "com.squareup.okhttp:okhttp:jar:2.7.5", + "io.grpc:grpc-stub:jar:1.44.1", + "com.google.firebase:protolite-well-known-types:aar:18.0.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", + "com.google.firebase:firebase-appcheck-interop:aar:16.0.0", + "com.google.android.gms:play-services-base:aar:18.0.1", + "io.grpc:grpc-okhttp:jar:1.44.1", + "androidx.annotation:annotation:jar:1.1.0", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-annotations:jar:16.1.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar", + "https://maven.fabric.io/public/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar", + "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar" + ], + "sha256": "e0f2b11b93e779f13e7fcc6a91724aeb071114959c55d19e7e0028c0a01003aa", + "url": "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1.aar" + }, + { + "coord": "com.google.firebase:firebase-firestore:aar:sources:24.2.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "androidx.core:core:aar:sources:1.3.1", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "io.grpc:grpc-okhttp:jar:sources:1.44.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "com.google.code.gson:gson:jar:sources:2.8.9", + "com.squareup.okhttp:okhttp:jar:sources:2.7.5", + "io.grpc:grpc-android:aar:sources:1.44.1", + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2", + "io.grpc:grpc-stub:jar:sources:1.44.1", + "androidx.annotation:annotation:jar:sources:1.1.0", + "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:jar:sources:1.44.1", + "com.squareup.okio:okio:jar:sources:2.6.0", + "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.firebase:firebase-database-collection:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "directDependencies": [ + "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "io.grpc:grpc-okhttp:jar:sources:1.44.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "com.squareup.okhttp:okhttp:jar:sources:2.7.5", + "io.grpc:grpc-android:aar:sources:1.44.1", + "io.grpc:grpc-stub:jar:sources:1.44.1", + "androidx.annotation:annotation:jar:sources:1.1.0", + "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-appcheck-interop:aar:sources:16.0.0", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.firebase:firebase-database-collection:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "file": "v1/https/maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar", + "https://maven.fabric.io/public/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar", + "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar", + "https://repo1.maven.org/maven2/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar" + ], + "sha256": "10f45bc182859afbe8da94f9b0b7b2f778dc30ccb903d6a8099a05393d88ce9f", + "url": "https://maven.google.com/com/google/firebase/firebase-firestore/24.2.1/firebase-firestore-24.2.1-sources.jar" + }, { "coord": "com.google.firebase:firebase-iid-interop:aar:17.0.0", "dependencies": [ "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-base:aar:17.0.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-base:aar:18.0.1" ], "directDependencies": [ - "com.google.android.gms:play-services-base:aar:17.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-base:aar:18.0.1", + "com.google.android.gms:play-services-basement:aar:18.0.0" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar", "mirror_urls": [ @@ -6116,41 +6686,40 @@ { "coord": "com.google.firebase:firebase-iid:aar:20.1.5", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", "androidx.annotation:annotation:1.1.0", - "com.google.android.gms:play-services-base:aar:17.0.0", - "com.google.firebase:firebase-common:aar:19.3.0", "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "androidx.lifecycle:lifecycle-livedata:aar:2.2.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-base:aar:18.0.1", "androidx.print:print:aar:1.0.0", - "androidx.annotation:annotation:jar:1.1.0", "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0", "androidx.documentfile:documentfile:aar:1.0.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.firebase:firebase-iid-interop:aar:17.0.0", "com.google.auto.value:auto-value-annotations:jar:1.8.1", "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", "androidx.loader:loader:aar:1.0.0" ], "directDependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-installations:aar:16.3.2", "androidx.collection:collection:jar:1.1.0", "com.google.android.gms:play-services-stats:aar:17.0.0", - "com.google.firebase:firebase-common:aar:19.3.0", "androidx.legacy:legacy-support-core-utils:aar:1.0.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.firebase:firebase-iid-interop:aar:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-iid/20.1.5/firebase-iid-20.1.5.aar", "mirror_urls": [ @@ -6167,13 +6736,13 @@ "coord": "com.google.firebase:firebase-installations-interop:aar:16.0.0", "dependencies": [ "androidx.collection:collection:jar:1.1.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "directDependencies": [ - "com.google.android.gms:play-services-tasks:aar:17.0.0" + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-installations-interop/16.0.0/firebase-installations-interop-16.0.0.aar", "mirror_urls": [ @@ -6189,21 +6758,20 @@ { "coord": "com.google.firebase:firebase-installations:aar:16.3.2", "dependencies": [ + "com.google.firebase:firebase-components:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", - "com.google.firebase:firebase-common:aar:19.3.0", - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-components:aar:16.0.0", "androidx.fragment:fragment:aar:1.2.0", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.core:core:aar:1.3.1", - "androidx.annotation:annotation:jar:1.1.0", - "com.google.android.gms:play-services-basement:aar:17.0.0", + "com.google.firebase:firebase-common:aar:20.1.1", "com.google.auto.value:auto-value-annotations:jar:1.8.1", - "com.google.firebase:firebase-installations-interop:aar:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1" ], "directDependencies": [ - "com.google.android.gms:play-services-tasks:aar:17.0.0", - "com.google.firebase:firebase-common:aar:19.3.0", - "com.google.firebase:firebase-components:aar:16.0.0", + "com.google.android.gms:play-services-tasks:aar:18.0.1", + "com.google.firebase:firebase-common:aar:20.1.1", + "com.google.firebase:firebase-components:aar:17.0.0", "com.google.firebase:firebase-installations-interop:aar:16.0.0" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-installations/16.3.2/firebase-installations-16.3.2.aar", @@ -6220,13 +6788,13 @@ { "coord": "com.google.firebase:firebase-measurement-connector:aar:18.0.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0", "androidx.collection:collection:jar:1.1.0", "androidx.core:core:aar:1.3.1", + "com.google.android.gms:play-services-basement:aar:18.0.0", "androidx.fragment:fragment:aar:1.2.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:17.0.0" + "com.google.android.gms:play-services-basement:aar:18.0.0" ], "file": "v1/https/maven.google.com/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar", "mirror_urls": [ @@ -6239,18 +6807,37 @@ "sha256": "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c", "url": "https://maven.google.com/com/google/firebase/firebase-measurement-connector/18.0.0/firebase-measurement-connector-18.0.0.aar" }, + { + "coord": "com.google.firebase:protolite-well-known-types:aar:18.0.0", + "dependencies": [ + "com.google.protobuf:protobuf-javalite:jar:3.19.2" + ], + "directDependencies": [ + "com.google.protobuf:protobuf-javalite:jar:3.19.2" + ], + "file": "v1/https/maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar", + "mirror_urls": [ + "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar", + "https://maven.fabric.io/public/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar", + "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar", + "https://repo1.maven.org/maven2/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar" + ], + "sha256": "9ac16b795b44c4ba87937ba0a850260d393f9dc25ff469d52a7bad528daac986", + "url": "https://maven.google.com/com/google/firebase/protolite-well-known-types/18.0.0/protolite-well-known-types-18.0.0.aar" + }, { "coord": "com.google.gms:google-services:4.3.3", "dependencies": [ "com.google.code.findbugs:jsr305:3.0.2", "com.google.guava:guava:30.1.1-android", - "com.google.code.gson:gson:2.8.6", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10", - "com.google.android.gms:strict-version-matcher-plugin:1.2.1" + "com.google.android.gms:strict-version-matcher-plugin:1.2.1", + "com.google.code.gson:gson:2.8.9" ], "directDependencies": [ "com.google.android.gms:strict-version-matcher-plugin:1.2.1", - "com.google.code.gson:gson:2.8.6", + "com.google.code.gson:gson:2.8.9", "com.google.guava:guava:30.1.1-android" ], "file": "v1/https/maven.google.com/com/google/gms/google-services/4.3.3/google-services-4.3.3.jar", @@ -6270,12 +6857,12 @@ "com.google.guava:guava:jar:sources:30.1.1-android", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar:sources:1.4.10", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "com.google.android.gms:strict-version-matcher-plugin:jar:sources:1.2.1" ], "directDependencies": [ "com.google.android.gms:strict-version-matcher-plugin:jar:sources:1.2.1", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "com.google.guava:guava:jar:sources:30.1.1-android" ], "file": "v1/https/maven.google.com/com/google/gms/google-services/4.3.3/google-services-4.3.3-sources.jar", @@ -6367,7 +6954,7 @@ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", - "com.google.errorprone:error_prone_annotations:2.7.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.guava:failureaccess:1.0.1", "org.checkerframework:checker-compat-qual:2.5.5" ], @@ -6375,7 +6962,7 @@ "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", - "com.google.errorprone:error_prone_annotations:2.7.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.guava:failureaccess:1.0.1", "org.checkerframework:checker-compat-qual:2.5.5" ], @@ -6398,7 +6985,7 @@ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1" + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0" ], "directDependencies": [ "com.google.code.findbugs:jsr305:jar:sources:3.0.2", @@ -6406,7 +6993,7 @@ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1" + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0" ], "file": "v1/https/repo1.maven.org/maven2/com/google/guava/guava/30.1.1-android/guava-30.1.1-android-sources.jar", "mirror_urls": [ @@ -6471,15 +7058,15 @@ "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.guava:guava:30.1.1-android", - "com.google.errorprone:error_prone_annotations:2.7.1", - "com.google.code.gson:gson:2.8.6", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.protobuf:protobuf-java:3.17.3", "com.google.guava:failureaccess:1.0.1", + "com.google.code.gson:gson:2.8.9", "org.checkerframework:checker-compat-qual:2.5.5" ], "directDependencies": [ - "com.google.code.gson:gson:2.8.6", - "com.google.errorprone:error_prone_annotations:2.7.1", + "com.google.code.gson:gson:2.8.9", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.guava:guava:30.1.1-android", "com.google.protobuf:protobuf-java:3.17.3" ], @@ -6501,15 +7088,15 @@ "com.google.protobuf:protobuf-java:jar:sources:3.17.3", "com.google.code.findbugs:jsr305:jar:sources:3.0.2", "com.google.j2objc:j2objc-annotations:jar:sources:1.3", - "com.google.code.gson:gson:jar:sources:2.8.6", + "com.google.code.gson:gson:jar:sources:2.8.9", "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1" + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0" ], "directDependencies": [ - "com.google.code.gson:gson:jar:sources:2.8.6", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.code.gson:gson:jar:sources:2.8.9", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "com.google.guava:guava:jar:sources:30.1.1-android", "com.google.protobuf:protobuf-java:jar:sources:3.17.3" ], @@ -6555,34 +7142,34 @@ "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-java/3.17.3/protobuf-java-3.17.3-sources.jar" }, { - "coord": "com.google.protobuf:protobuf-javalite:3.17.3", + "coord": "com.google.protobuf:protobuf-javalite:3.19.2", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar", "mirror_urls": [ - "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar", - "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar", - "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar", - "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar", - "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar" + "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar", + "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar", + "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar", + "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar", + "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar" ], - "sha256": "dc643901cc9d95998a1e45ab11e75d4237a7e1947bcbca0b7eca569aaf5e714d", - "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3.jar" + "sha256": "bfc598474392a015c050d34be38bb84eb3986809374eac437420d51680150e94", + "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2.jar" }, { - "coord": "com.google.protobuf:protobuf-javalite:jar:sources:3.17.3", + "coord": "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2", "dependencies": [], "directDependencies": [], - "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar", + "file": "v1/https/repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar", "mirror_urls": [ - "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar", - "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar", - "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar", - "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar", - "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar" + "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar", + "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar", + "https://maven.fabric.io/public/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar", + "https://maven.google.com/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar", + "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar" ], - "sha256": "b7bc7b41c266f59c921bf094b4325fb9bcdd0a8d95d742db8cca3a1c76503f9b", - "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.17.3/protobuf-javalite-3.17.3-sources.jar" + "sha256": "0154a27b8b6e4753013922fc8e50c59ebd7108af95f11fa9bc6b72ef14db0dc9", + "url": "https://repo1.maven.org/maven2/com/google/protobuf/protobuf-javalite/3.19.2/protobuf-javalite-3.19.2-sources.jar" }, { "coord": "com.google.truth.extensions:truth-liteproto-extension:1.1.3", @@ -6592,10 +7179,10 @@ "com.google.truth:truth:1.1.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.guava:guava:30.1.1-android", - "com.google.errorprone:error_prone_annotations:2.7.1", "org.hamcrest:hamcrest-core:1.3", "org.checkerframework:checker-qual:3.13.0", "com.google.auto.value:auto-value-annotations:1.8.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.guava:failureaccess:1.0.1", "org.ow2.asm:asm:9.1", "junit:junit:4.13.2", @@ -6604,9 +7191,9 @@ "directDependencies": [ "com.google.truth:truth:1.1.3", "com.google.guava:guava:30.1.1-android", - "com.google.errorprone:error_prone_annotations:2.7.1", "org.checkerframework:checker-qual:3.13.0", - "com.google.auto.value:auto-value-annotations:1.8.1" + "com.google.auto.value:auto-value-annotations:1.8.1", + "com.google.errorprone:error_prone_annotations:2.9.0" ], "file": "v1/https/repo1.maven.org/maven2/com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3.jar", "mirror_urls": [ @@ -6633,14 +7220,14 @@ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1" ], "directDependencies": [ "com.google.guava:guava:jar:sources:30.1.1-android", "org.checkerframework:checker-qual:jar:sources:3.13.0", "com.google.truth:truth:jar:sources:1.1.3", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1" ], "file": "v1/https/repo1.maven.org/maven2/com/google/truth/extensions/truth-liteproto-extension/1.1.3/truth-liteproto-extension-1.1.3-sources.jar", @@ -6661,10 +7248,10 @@ "com.google.j2objc:j2objc-annotations:1.3", "com.google.code.findbugs:jsr305:3.0.2", "com.google.guava:guava:30.1.1-android", - "com.google.errorprone:error_prone_annotations:2.7.1", "org.hamcrest:hamcrest-core:1.3", "org.checkerframework:checker-qual:3.13.0", "com.google.auto.value:auto-value-annotations:1.8.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "com.google.guava:failureaccess:1.0.1", "org.ow2.asm:asm:9.1", "junit:junit:4.13.2", @@ -6672,9 +7259,9 @@ ], "directDependencies": [ "com.google.guava:guava:30.1.1-android", - "com.google.errorprone:error_prone_annotations:2.7.1", "org.checkerframework:checker-qual:3.13.0", "com.google.auto.value:auto-value-annotations:1.8.1", + "com.google.errorprone:error_prone_annotations:2.9.0", "org.ow2.asm:asm:9.1", "junit:junit:4.13.2" ], @@ -6702,7 +7289,7 @@ "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", "com.google.guava:failureaccess:jar:sources:1.0.1", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1" ], "directDependencies": [ @@ -6710,7 +7297,7 @@ "org.ow2.asm:asm:jar:sources:9.1", "org.checkerframework:checker-qual:jar:sources:3.13.0", "junit:junit:jar:sources:4.13.2", - "com.google.errorprone:error_prone_annotations:jar:sources:2.7.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1" ], "file": "v1/https/repo1.maven.org/maven2/com/google/truth/truth/1.1.3/truth-1.1.3-sources.jar", @@ -7033,31 +7620,69 @@ "url": "https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.7.2/okhttp-4.7.2-sources.jar" }, { - "coord": "com.squareup.okio:okio:2.6.0", + "coord": "com.squareup.okhttp:okhttp:2.7.5", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", - "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + "com.squareup.okio:okio:2.6.0" ], "directDependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" + "com.squareup.okio:okio:2.6.0" ], - "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar", "mirror_urls": [ - "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", - "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", - "https://maven.fabric.io/public/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", - "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", - "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar" + "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar", + "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar", + "https://maven.fabric.io/public/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar", + "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar", + "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar" ], - "sha256": "4d84ef686277b58eb05691ac19cd3befa3429a27274982ee65ea0f07044bcc00", - "url": "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar" + "sha256": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa", + "url": "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar" }, { - "coord": "com.squareup.okio:okio:jar:sources:2.6.0", + "coord": "com.squareup.okhttp:okhttp:jar:sources:2.7.5", "dependencies": [ - "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", - "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" + "com.squareup.okio:okio:jar:sources:2.6.0" + ], + "directDependencies": [ + "com.squareup.okio:okio:jar:sources:2.6.0" + ], + "file": "v1/https/repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar", + "mirror_urls": [ + "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar", + "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar", + "https://maven.fabric.io/public/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar", + "https://maven.google.com/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar", + "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar" + ], + "sha256": "edfafce3b9abb0fc31b5c72cc5f533516a08f7b86754138f36595a6837746ddf", + "url": "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5-sources.jar" + }, + { + "coord": "com.squareup.okio:okio:2.6.0", + "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0" + ], + "directDependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:1.5.0" + ], + "file": "v1/https/repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "mirror_urls": [ + "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "https://maven.fabric.io/public/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "https://maven.google.com/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar", + "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar" + ], + "sha256": "4d84ef686277b58eb05691ac19cd3befa3429a27274982ee65ea0f07044bcc00", + "url": "https://repo1.maven.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.jar" + }, + { + "coord": "com.squareup.okio:okio:jar:sources:2.6.0", + "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "org.jetbrains.kotlin:kotlin-stdlib-common:jar:sources:1.5.0" ], "directDependencies": [ "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", @@ -7403,6 +8028,454 @@ "sha256": "36df4b321ec95e31226ff5abaae73e66f3a99dedddbc2d03054c4e141c8aaa5c", "url": "https://maven.google.com/io/fabric/sdk/android/fabric/1.4.7/fabric-1.4.7.aar" }, + { + "coord": "io.grpc:grpc-android:aar:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:1.44.1", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.guava:failureaccess:1.0.1", + "io.grpc:grpc-api:1.44.1", + "com.google.code.gson:gson:2.8.9", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.guava:guava:30.1.1-android", + "io.grpc:grpc-core:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar", + "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar", + "https://maven.fabric.io/public/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar", + "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar", + "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar" + ], + "sha256": "5a2d9a295c6e77cb4e615ed4519edcae2432b7828cac2cc1a8ee798cffb43c9a", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1.aar" + }, + { + "coord": "io.grpc:grpc-android:aar:sources:1.44.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "com.google.code.gson:gson:jar:sources:2.8.9", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:jar:sources:1.44.1", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19" + ], + "directDependencies": [ + "com.google.guava:guava:jar:sources:30.1.1-android", + "io.grpc:grpc-core:jar:sources:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar" + ], + "sha256": "5239c86a9b850883859275886416c2c8b36eed070201058c538e1e4bdd016f5a", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-android/1.44.1/grpc-android-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-api:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.guava:guava:30.1.1-android", + "com.google.errorprone:error_prone_annotations:2.9.0", + "io.grpc:grpc-context:1.44.1", + "com.google.guava:failureaccess:1.0.1", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.guava:guava:30.1.1-android", + "io.grpc:grpc-context:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar" + ], + "sha256": "5d2bd58e4003e6b8440b3596c0809ef5c651594d62943edb459d5fa82273bd2f", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-api:jar:sources:1.44.1", + "dependencies": [ + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "com.google.guava:guava:jar:sources:30.1.1-android", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar" + ], + "sha256": "4439a930dd79c5218fa39aa3fdfd570a8bef99de2aaa4437b3b787d4da1ae6f0", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-api/1.44.1/grpc-api-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-context:1.44.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar" + ], + "sha256": "97059fef9e325ecfcc30429921916ebaccd436cf5601af4d706ef1f613f5ea85", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-context:jar:sources:1.44.1", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar" + ], + "sha256": "6b30014c6be890bd7c1ea08aefde722deb29a6b48b404315d4d58f6bff5d85a0", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-context/1.44.1/grpc-context-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-core:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.guava:failureaccess:1.0.1", + "io.grpc:grpc-api:1.44.1", + "com.google.code.gson:gson:2.8.9", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "io.grpc:grpc-api:1.44.1", + "com.google.code.gson:gson:2.8.9" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar" + ], + "sha256": "907dd75d9684dcd1e5664856e45aa05e072870af91796e635405f963f82431da", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-core:jar:sources:1.44.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "com.google.code.gson:gson:jar:sources:2.8.9", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19" + ], + "directDependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.code.gson:gson:jar:sources:2.8.9", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar" + ], + "sha256": "9e468a2ef2fe437c6964fed4bf2fa5566829c2dc47b0e2017af7c4f9997e553c", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-core/1.44.1/grpc-core-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-okhttp:jar:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:1.44.1", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.android:annotations:4.1.1.4", + "com.google.guava:guava:30.1.1-android", + "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "io.perfmark:perfmark-api:0.23.0", + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.squareup.okhttp:okhttp:2.7.5", + "com.squareup.okio:okio:2.6.0", + "com.google.guava:failureaccess:1.0.1", + "io.grpc:grpc-api:1.44.1", + "com.google.code.gson:gson:2.8.9", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "io.grpc:grpc-core:1.44.1", + "com.google.guava:guava:30.1.1-android", + "io.perfmark:perfmark-api:0.23.0", + "com.squareup.okhttp:okhttp:2.7.5", + "com.squareup.okio:okio:2.6.0" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar" + ], + "sha256": "ecd538b47b44b4638fa12b792ae2ac18c9b28c5d5a96595b1d3b75d1af424ac2", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-okhttp:jar:sources:1.44.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.android:annotations:jar:sources:4.1.1.4", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "com.google.code.gson:gson:jar:sources:2.8.9", + "com.squareup.okhttp:okhttp:jar:sources:2.7.5", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "io.grpc:grpc-core:jar:sources:1.44.1", + "com.squareup.okio:okio:jar:sources:2.6.0", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0", + "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19" + ], + "directDependencies": [ + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.squareup.okhttp:okhttp:jar:sources:2.7.5", + "io.grpc:grpc-core:jar:sources:1.44.1", + "com.squareup.okio:okio:jar:sources:2.6.0", + "io.perfmark:perfmark-api:jar:sources:0.23.0" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar" + ], + "sha256": "715ad53ba3cf878d7de921a59dae09a296761b35ace4ce3316041a8f5329679b", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-okhttp/1.44.1/grpc-okhttp-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-protobuf-lite:jar:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.protobuf:protobuf-javalite:3.19.2", + "com.google.guava:guava:30.1.1-android", + "com.google.errorprone:error_prone_annotations:2.9.0", + "io.grpc:grpc-context:1.44.1", + "com.google.guava:failureaccess:1.0.1", + "io.grpc:grpc-api:1.44.1", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.guava:guava:30.1.1-android", + "com.google.protobuf:protobuf-javalite:3.19.2", + "io.grpc:grpc-api:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar" + ], + "sha256": "1e53b2f3d856ee83fe58f7b89a36180e00c79141fbc9752682d1fdb36bcb93be", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-protobuf-lite:jar:sources:1.44.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "directDependencies": [ + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2", + "io.grpc:grpc-api:jar:sources:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar" + ], + "sha256": "7bc340a0a69b2bf204d9fb00048d8c6b517f2f8670cf4f27d0fd53c09fc6fe47", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-protobuf-lite/1.44.1/grpc-protobuf-lite-1.44.1-sources.jar" + }, + { + "coord": "io.grpc:grpc-stub:jar:1.44.1", + "dependencies": [ + "com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.j2objc:j2objc-annotations:1.3", + "com.google.code.findbugs:jsr305:3.0.2", + "com.google.guava:guava:30.1.1-android", + "com.google.errorprone:error_prone_annotations:2.9.0", + "io.grpc:grpc-context:1.44.1", + "com.google.guava:failureaccess:1.0.1", + "io.grpc:grpc-api:1.44.1", + "org.checkerframework:checker-compat-qual:2.5.5" + ], + "directDependencies": [ + "com.google.errorprone:error_prone_annotations:2.9.0", + "com.google.guava:guava:30.1.1-android", + "io.grpc:grpc-api:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar", + "https://maven.fabric.io/public/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar", + "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar" + ], + "sha256": "c34e16c085568df0ca8b22d7fe1326999d5be192deb2ae057238ec0f7707a107", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1.jar" + }, + { + "coord": "io.grpc:grpc-stub:jar:sources:1.44.1", + "dependencies": [ + "io.grpc:grpc-api:jar:sources:1.44.1", + "com.google.guava:guava:jar:sources:30.1.1-android", + "com.google.code.findbugs:jsr305:jar:sources:3.0.2", + "com.google.j2objc:j2objc-annotations:jar:sources:1.3", + "org.checkerframework:checker-compat-qual:jar:sources:2.5.5", + "com.google.guava:listenablefuture:jar:sources:9999.0-empty-to-avoid-conflict-with-guava", + "com.google.guava:failureaccess:jar:sources:1.0.1", + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "io.grpc:grpc-context:jar:sources:1.44.1" + ], + "directDependencies": [ + "com.google.errorprone:error_prone_annotations:jar:sources:2.9.0", + "com.google.guava:guava:jar:sources:30.1.1-android", + "io.grpc:grpc-api:jar:sources:1.44.1" + ], + "file": "v1/https/repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar", + "https://maven.fabric.io/public/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar", + "https://maven.google.com/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar", + "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar" + ], + "sha256": "8f5c0bd190963ca36413a1c34b45cbb45249540913311ff028f7e5cebafcf0df", + "url": "https://repo1.maven.org/maven2/io/grpc/grpc-stub/1.44.1/grpc-stub-1.44.1-sources.jar" + }, + { + "coord": "io.perfmark:perfmark-api:0.23.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar", + "mirror_urls": [ + "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar", + "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar", + "https://maven.fabric.io/public/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar", + "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar", + "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar" + ], + "sha256": "c705b5c10c18ff3032b9e81742bc2f6b0e5607f6a6dfc0c8ad0cff75d4913042", + "url": "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0.jar" + }, + { + "coord": "io.perfmark:perfmark-api:jar:sources:0.23.0", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar", + "mirror_urls": [ + "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar", + "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar", + "https://maven.fabric.io/public/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar", + "https://maven.google.com/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar", + "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar" + ], + "sha256": "8b75ae9cac9c14c8b697501adf74584130a307f2851d135e0ada4667cdf3b7b5", + "url": "https://repo1.maven.org/maven2/io/perfmark/perfmark-api/0.23.0/perfmark-api-0.23.0-sources.jar" + }, { "coord": "io.xlate:yaml-json:0.1.0", "dependencies": [], @@ -7869,6 +8942,36 @@ "sha256": "52fd5b908ed38b2c543fac371c2192ff2896fec0f3ddea29f23b5db117a7ea6e", "url": "https://repo1.maven.org/maven2/org/checkerframework/checker-qual/3.13.0/checker-qual-3.13.0-sources.jar" }, + { + "coord": "org.codehaus.mojo:animal-sniffer-annotations:1.19", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar", + "mirror_urls": [ + "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar", + "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar", + "https://maven.fabric.io/public/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar", + "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar", + "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar" + ], + "sha256": "e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d", + "url": "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19.jar" + }, + { + "coord": "org.codehaus.mojo:animal-sniffer-annotations:jar:sources:1.19", + "dependencies": [], + "directDependencies": [], + "file": "v1/https/repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar", + "mirror_urls": [ + "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar", + "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar", + "https://maven.fabric.io/public/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar", + "https://maven.google.com/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar", + "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar" + ], + "sha256": "da2e67cba66639197d23c1976e6c27d0967ad4dc69e6228b934e05a0d39e2991", + "url": "https://repo1.maven.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.19/animal-sniffer-annotations-1.19-sources.jar" + }, { "coord": "org.eclipse.parsson:parsson:1.1.2", "dependencies": [ @@ -9932,36 +11035,36 @@ { "coord": "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", - "androidx.fragment:fragment:aar:sources:1.2.0" + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, { - "coord": "com.google.android.gms:play-services-base:aar:sources:17.0.0", + "coord": "com.google.android.gms:play-services-base:aar:sources:18.0.1", "dependencies": [ "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", "androidx.collection:collection:jar:sources:1.1.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", "androidx.collection:collection:jar:sources:1.1.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, { - "coord": "com.google.android.gms:play-services-basement:aar:sources:17.0.0", + "coord": "com.google.android.gms:play-services-basement:aar:sources:18.0.0", "dependencies": [ "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", @@ -9978,13 +11081,14 @@ "coord": "com.google.android.gms:play-services-measurement-api:aar:sources:17.5.0", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", - "com.google.firebase:firebase-components:aar:sources:16.0.0", "androidx.print:print:aar:sources:1.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.core:core:aar:sources:1.3.1", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "androidx.collection:collection:jar:sources:1.1.0", "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", @@ -9993,40 +11097,39 @@ "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "androidx.annotation:annotation:jar:sources:1.1.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "com.google.android.gms:play-services-stats:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", "com.google.android.gms:play-services-measurement-sdk-api:aar:sources:17.5.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, { "coord": "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", - "androidx.fragment:fragment:aar:sources:1.2.0" + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10046,16 +11149,16 @@ "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "androidx.annotation:annotation:jar:sources:1.1.0", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-stats:aar:sources:17.0.0" + "com.google.android.gms:play-services-stats:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-stats:aar:sources:17.0.0" + "com.google.android.gms:play-services-stats:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10066,10 +11169,10 @@ "androidx.fragment:fragment:aar:sources:1.2.0", "androidx.collection:collection:jar:sources:1.1.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0" ], "file": null @@ -10091,12 +11194,12 @@ "androidx.annotation:annotation:jar:sources:1.1.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-stats:aar:sources:17.0.0" + "com.google.android.gms:play-services-stats:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "androidx.collection:collection:jar:sources:1.1.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0" ], @@ -10119,8 +11222,8 @@ "androidx.annotation:annotation:jar:sources:1.1.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-stats:aar:sources:17.0.0" + "com.google.android.gms:play-services-stats:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", @@ -10128,8 +11231,8 @@ "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", "com.google.android.gms:play-services-measurement-base:aar:sources:17.5.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.android.gms:play-services-stats:aar:sources:17.0.0" + "com.google.android.gms:play-services-stats:aar:sources:17.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10147,24 +11250,24 @@ "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", "androidx.annotation:annotation:jar:sources:1.1.0", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, { - "coord": "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "coord": "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", - "androidx.fragment:fragment:aar:sources:1.2.0" + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10186,13 +11289,14 @@ "coord": "com.google.firebase:firebase-analytics:jar:sources:17.5.0", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", - "com.google.firebase:firebase-components:aar:sources:16.0.0", "androidx.print:print:aar:sources:1.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.core:core:aar:sources:1.3.1", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "androidx.collection:collection:jar:sources:1.1.0", "com.google.android.gms:play-services-ads-identifier:aar:sources:17.0.0", @@ -10204,14 +11308,13 @@ "androidx.annotation:annotation:jar:sources:1.1.0", "com.google.android.gms:play-services-measurement-impl:aar:sources:17.5.0", "com.google.android.gms:play-services-measurement:aar:sources:17.5.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", "androidx.loader:loader:aar:sources:1.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "com.google.android.gms:play-services-stats:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "com.google.android.gms:play-services-measurement:aar:sources:17.5.0", @@ -10220,21 +11323,120 @@ ], "file": null }, + { + "coord": "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "dependencies": [ + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "androidx.core:core:aar:sources:1.3.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "androidx.collection:collection:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-basement:aar:sources:18.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1" + ], + "file": null + }, + { + "coord": "com.google.firebase:firebase-auth-ktx:jar:sources:19.3.1", + "dependencies": [ + "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "androidx.core:core:aar:sources:1.3.1", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-auth:aar:sources:19.3.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-auth:aar:sources:19.3.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10" + ], + "file": null + }, + { + "coord": "com.google.firebase:firebase-auth:aar:sources:19.3.1", + "dependencies": [ + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "androidx.core:core:aar:sources:1.3.1", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-auth-interop:aar:sources:19.0.2", + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "file": null + }, + { + "coord": "com.google.firebase:firebase-common-ktx:aar:sources:20.1.1", + "dependencies": [ + "org.jetbrains.kotlin:kotlin-stdlib:jar:sources:1.5.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-annotations:jar:sources:16.1.0", + "androidx.core:core:aar:sources:1.3.1", + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "androidx.collection:collection:jar:sources:1.1.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10", + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "androidx.annotation:annotation:jar:sources:1.1.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", + "org.jetbrains.kotlin:kotlin-stdlib-jdk7:jar:sources:1.4.10" + ], + "file": null + }, { "coord": "com.google.firebase:firebase-crashlytics:jar:sources:17.1.1", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", "com.google.android.datatransport:transport-runtime:aar:sources:2.2.3", "com.squareup.okhttp3:okhttp:jar:sources:4.7.2", - "com.google.firebase:firebase-components:aar:sources:16.0.0", "androidx.print:print:aar:sources:1.0.0", - "com.google.android.gms:play-services-base:aar:sources:17.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.core:core:aar:sources:1.3.1", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "com.google.firebase:firebase-iid:aar:sources:20.1.5", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "androidx.collection:collection:jar:sources:1.1.0", "com.google.dagger:dagger:jar:sources:2.28.1", @@ -10243,27 +11445,27 @@ "com.google.android.datatransport:transport-backend-cct:aar:sources:2.3.0", "com.google.firebase:firebase-encoders-json:aar:sources:16.1.0", "androidx.annotation:annotation:jar:sources:1.1.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", "androidx.loader:loader:aar:sources:1.0.0", "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "com.google.android.gms:play-services-stats:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ "com.google.android.datatransport:transport-runtime:aar:sources:2.2.3", "com.squareup.okhttp3:okhttp:jar:sources:4.7.2", - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "com.google.firebase:firebase-iid:aar:sources:20.1.5", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "com.google.android.datatransport:transport-api:aar:sources:2.2.0", "com.google.android.datatransport:transport-backend-cct:aar:sources:2.3.0", "com.google.firebase:firebase-encoders-json:aar:sources:16.1.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0" ], "file": null @@ -10271,16 +11473,15 @@ { "coord": "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0", "dependencies": [ - "com.google.android.gms:play-services-base:aar:sources:17.0.0", "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", "androidx.collection:collection:jar:sources:1.1.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-base:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10288,39 +11489,39 @@ "coord": "com.google.firebase:firebase-iid:aar:sources:20.1.5", "dependencies": [ "androidx.documentfile:documentfile:aar:sources:1.0.0", - "com.google.firebase:firebase-components:aar:sources:16.0.0", "androidx.print:print:aar:sources:1.0.0", - "com.google.android.gms:play-services-base:aar:sources:17.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0", "androidx.core:core:aar:sources:1.3.1", "androidx.localbroadcastmanager:localbroadcastmanager:aar:sources:1.0.0", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "androidx.collection:collection:jar:sources:1.1.0", "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0", "androidx.annotation:annotation:jar:sources:1.1.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", "androidx.loader:loader:aar:sources:1.0.0", "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "com.google.android.gms:play-services-stats:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.android.gms:play-services-base:aar:sources:18.0.1", + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.core:core:aar:sources:1.3.1", "androidx.legacy:legacy-support-core-utils:aar:sources:1.0.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "androidx.collection:collection:jar:sources:1.1.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.firebase:firebase-installations:aar:sources:16.3.2", "com.google.firebase:firebase-iid-interop:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "com.google.android.gms:play-services-stats:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "file": null }, @@ -10330,32 +11531,31 @@ "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", "androidx.collection:collection:jar:sources:1.1.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0" + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1" ], "file": null }, { "coord": "com.google.firebase:firebase-installations:aar:sources:16.3.2", "dependencies": [ - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.firebase:firebase-common:aar:sources:20.1.1", "androidx.core:core:aar:sources:1.3.1", "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "androidx.collection:collection:jar:sources:1.1.0", - "androidx.annotation:annotation:jar:sources:1.1.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", "com.google.auto.value:auto-value-annotations:jar:sources:1.8.1", - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", - "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" + "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" ], "directDependencies": [ - "com.google.android.gms:play-services-tasks:aar:sources:17.0.0", - "com.google.firebase:firebase-common:aar:sources:19.3.0", - "com.google.firebase:firebase-components:aar:sources:16.0.0", + "com.google.android.gms:play-services-tasks:aar:sources:18.0.1", + "com.google.firebase:firebase-common:aar:sources:20.1.1", + "com.google.firebase:firebase-components:aar:sources:17.0.0", "com.google.firebase:firebase-installations-interop:aar:sources:16.0.0" ], "file": null @@ -10363,13 +11563,23 @@ { "coord": "com.google.firebase:firebase-measurement-connector:aar:sources:18.0.0", "dependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0", "androidx.core:core:aar:sources:1.3.1", "androidx.collection:collection:jar:sources:1.1.0", - "androidx.fragment:fragment:aar:sources:1.2.0" + "androidx.fragment:fragment:aar:sources:1.2.0", + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "directDependencies": [ + "com.google.android.gms:play-services-basement:aar:sources:18.0.0" + ], + "file": null + }, + { + "coord": "com.google.firebase:protolite-well-known-types:aar:sources:18.0.0", + "dependencies": [ + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2" ], "directDependencies": [ - "com.google.android.gms:play-services-basement:aar:sources:17.0.0" + "com.google.protobuf:protobuf-javalite:jar:sources:3.19.2" ], "file": null }, diff --git a/third_party/versions.bzl b/third_party/versions.bzl index b51f0c4b457..24195afce9e 100644 --- a/third_party/versions.bzl +++ b/third_party/versions.bzl @@ -54,9 +54,12 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = { "com.github.bumptech.glide:glide": "4.11.0", "com.google.android.flexbox:flexbox": "3.0.0", "com.google.android.material:material": "1.3.0", + "com.google.auto.value:auto-value-annotations": "1.8.1", "com.google.firebase:firebase-analytics": "17.5.0", + "com.google.firebase:firebase-auth-ktx": "19.3.1", "com.google.firebase:firebase-common": "19.3.0", "com.google.firebase:firebase-crashlytics": "17.1.1", + "com.google.firebase:firebase-firestore-ktx": "24.2.1", "com.google.gms:google-services": "4.3.3", "com.google.guava:guava": "28.1-android", "com.google.protobuf:protobuf-javalite": "3.17.3", @@ -70,6 +73,7 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = { "javax.annotation:javax.annotation-api:jar": "1.3.2", "javax.inject:javax.inject": "1", "nl.dionsegijn:konfetti": "1.2.5", + "org.checkerframework:checker-qual": "3.13.0", "org.jetbrains.kotlin:kotlin-stdlib-jdk8:jar": "1.3.72", "org.jetbrains.kotlinx:kotlinx-coroutines-android": "1.4.1", "org.jetbrains.kotlinx:kotlinx-coroutines-core": "1.4.1", diff --git a/utility/BUILD.bazel b/utility/BUILD.bazel index aff05e104d5..b69cab715d7 100644 --- a/utility/BUILD.bazel +++ b/utility/BUILD.bazel @@ -69,6 +69,7 @@ kt_android_library( ":resources", "//app:crashlytics", "//app:crashlytics_deps", + "//app:firestore_deps", "//model/src/main/proto:event_logger_java_proto_lite", "//model/src/main/proto:platform_parameter_java_proto_lite", "//third_party:androidx_appcompat_appcompat", @@ -107,6 +108,7 @@ TEST_DEPS = [ ":utility", "//app:crashlytics", "//app:crashlytics_deps", + "//app:firestore_deps", "//model/src/main/proto:test_models", "//testing", "//testing/src/main/java/org/oppia/android/testing/data:data_provider_test_monitor", diff --git a/utility/build.gradle b/utility/build.gradle index 39589a8692b..be880396432 100644 --- a/utility/build.gradle +++ b/utility/build.gradle @@ -89,6 +89,8 @@ dependencies { 'com.google.firebase:firebase-analytics-ktx:17.5.0', 'com.google.firebase:firebase-core:17.5.0', 'com.google.firebase:firebase-crashlytics:17.0.0', + 'com.google.firebase:firebase-firestore-ktx:24.2.1', + 'com.google.firebase:firebase-auth-ktx:19.3.1', 'com.google.protobuf:protobuf-javalite:3.17.3', "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1', diff --git a/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt b/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt index 9104e66a24f..0c337ca71a6 100644 --- a/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt +++ b/utility/src/main/java/org/oppia/android/util/logging/LogUploader.kt @@ -17,4 +17,10 @@ interface LogUploader { workManager: WorkManager, workRequest: PeriodicWorkRequest ) + + /** Enqueues a [workRequest] using the [workManager] for uploading event logs that are meant for Firestore. */ + fun enqueueWorkRequestForFirestore( + workManager: WorkManager, + workRequest: PeriodicWorkRequest + ) } diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel b/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel index be07e37c2d8..91e936b66a8 100644 --- a/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/BUILD.bazel @@ -47,7 +47,9 @@ kt_android_library( visibility = ["//:oppia_prod_module_visibility"], deps = [ ":dagger", + ":debug_module", ":firebase_exception_logger", + ":firestore_logger_impl", ":prod_impl", "//third_party:com_google_firebase_firebase-analytics", "//third_party:com_google_firebase_firebase-crashlytics", @@ -82,8 +84,75 @@ kt_android_library( deps = [ ":dagger", ":debug_event_logger", + ":debug_firestore_logger_impl", ":firebase_exception_logger", ], ) +kt_android_library( + name = "firestore_logger_impl", + srcs = [ + "FirestoreEventLoggerProdImpl.kt", + ], + deps = [ + ":firestore_logger", + ":firestore_wrapper_impl", + "//third_party:androidx_work_work-runtime", + "//third_party:androidx_work_work-runtime-ktx", + "//third_party:com_google_firebase_firebase-firestore-ktx", + "//utility/src/main/java/org/oppia/android/util/logging:console_logger", + ], +) + +kt_android_library( + name = "firestore_logger", + srcs = [ + "FirestoreEventLogger.kt", + ], + visibility = ["//:oppia_api_visibility"], + deps = [ + "//model/src/main/proto:event_logger_java_proto_lite", + ], +) + +kt_android_library( + name = "debug_firestore_logger_impl", + srcs = [ + "DebugFirestoreEventLoggerImpl.kt", + ], + visibility = [ + "//app:__pkg__", + ], + deps = [ + ":firestore_logger_impl", + ":firestore_wrapper_impl", + "//third_party:javax_inject_javax_inject", + ], +) + +kt_android_library( + name = "firestore_wrapper", + srcs = [ + "FirestoreInstance.kt", + "FirestoreInstanceWrapper.kt", + ], + deps = [ + "//third_party:com_google_firebase_firebase-firestore-ktx", + "//third_party:org_jetbrains_kotlinx_kotlinx-coroutines-core", + "//utility/src/main/java/org/oppia/android/util/data:async_result", + ], +) + +kt_android_library( + name = "firestore_wrapper_impl", + srcs = [ + "FirestoreInstanceWrapperImpl.kt", + ], + visibility = ["//:oppia_prod_module_visibility"], + deps = [ + ":dagger", + ":firestore_wrapper", + ], +) + dagger_rules() diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt new file mode 100644 index 00000000000..f5d39f998cd --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImpl.kt @@ -0,0 +1,33 @@ +package org.oppia.android.util.logging.firebase + +import org.oppia.android.app.model.EventLog +import java.util.concurrent.CopyOnWriteArrayList +import javax.inject.Inject +import javax.inject.Singleton + +/** + * A debug implementation of [FirestoreEventLogger] used in developer-only builds of the app. + * + * It forwards events to a production [FirestoreEventLogger] for real logging, but it also records logged + * events for later retrieval (e.g. via [getEventList]). + */ +@Singleton +class DebugFirestoreEventLoggerImpl @Inject constructor( + private val realEventLogger: FirestoreEventLoggerProdImpl +) : FirestoreEventLogger { + private val eventList = CopyOnWriteArrayList() + + override fun uploadEvent(eventLog: EventLog) { + eventList.add(eventLog) + realEventLogger.uploadEvent(eventLog) + } + + /** Returns the list of all [EventLog]s logged for Firestore. */ + fun getEventList(): List = eventList + + /** Returns the most recently logged event. */ + fun getMostRecentEvent(): EventLog = getEventList().last() + + /** Clears all the events that are currently logged. */ + fun clearAllEvents() = eventList.clear() +} diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt index 1f897833e89..cfcaf2b8b30 100644 --- a/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/DebugLogReportingModule.kt @@ -27,4 +27,14 @@ class DebugLogReportingModule { factory: FirebaseAnalyticsEventLogger.Factory ): PerformanceMetricsEventLogger = factory.createPerformanceMetricEventLogger() + + @Provides + @Singleton + fun provideDebugFirestoreLogger(debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl): + FirestoreEventLogger = debugFirestoreEventLogger + + @Provides + @Singleton + fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FirestoreInstanceWrapperImpl): + FirestoreInstanceWrapper = wrapperImpl } diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt index 067c7c4c815..40316ac0397 100644 --- a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirebaseLogUploader.kt @@ -9,6 +9,7 @@ import javax.inject.Inject private const val OPPIA_EVENT_WORK = "OPPIA_EVENT_WORK_REQUEST" private const val OPPIA_EXCEPTION_WORK = "OPPIA_EXCEPTION_WORK_REQUEST" private const val OPPIA_PERFORMANCE_METRICS_WORK = "OPPIA_PERFORMANCE_METRICS_WORK" +private const val OPPIA_FIRESTORE_WORK = "OPPIA_FIRESTORE_WORK_REQUEST" /** Enqueues work requests for uploading stored event/exception logs to the remote service. */ class FirebaseLogUploader @Inject constructor() : @@ -46,4 +47,15 @@ class FirebaseLogUploader @Inject constructor() : workRequest ) } + + override fun enqueueWorkRequestForFirestore( + workManager: WorkManager, + workRequest: PeriodicWorkRequest + ) { + workManager.enqueueUniquePeriodicWork( + OPPIA_FIRESTORE_WORK, + ExistingPeriodicWorkPolicy.KEEP, + workRequest + ) + } } diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt new file mode 100644 index 00000000000..304557108ca --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLogger.kt @@ -0,0 +1,13 @@ +package org.oppia.android.util.logging.firebase + +import org.oppia.android.app.model.EventLog + +/** Logger for uploading data bundles to Firestore. */ +interface FirestoreEventLogger { + /** + * Converts eventLogs to Firestore documents and uploads or save them on disk. + * + * @param eventLog which contains all the relevant data to be reported + */ + fun uploadEvent(eventLog: EventLog) +} diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt new file mode 100644 index 00000000000..5e6f133b928 --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreEventLoggerProdImpl.kt @@ -0,0 +1,31 @@ +package org.oppia.android.util.logging.firebase + +import org.oppia.android.app.model.EventLog +import org.oppia.android.util.logging.ConsoleLogger +import javax.inject.Inject + +/** Logger for uploading to Firestore. */ +class FirestoreEventLoggerProdImpl @Inject constructor( + private val consoleLogger: ConsoleLogger, + private val firestoreInstanceWrapper: FirestoreInstanceWrapper +) : FirestoreEventLogger { + /** Converts an event to a document and uploads it to Firebase Firestore. */ + override fun uploadEvent(eventLog: EventLog) { + val eventContext = eventLog.context.optionalResponse + val document = hashMapOf( + "survey_id" to eventContext.surveyDetails.surveyId, + "open_feedback_answer" to eventContext.feedbackAnswer, + "time_submitted" to eventLog.timestamp + ) + + firestoreInstanceWrapper.firestoreInstance?.firebaseFirestore + ?.collection("nps_survey_open_feedback") + ?.add(document) + ?.addOnSuccessListener { + consoleLogger.i("FirestoreEventLoggerProdImpl", "Upload to Firestore was successful") + } + ?.addOnFailureListener { e -> + consoleLogger.e("FirestoreEventLoggerProdImpl", e.toString(), e) + } + } +} diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt new file mode 100644 index 00000000000..a2894cee29d --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstance.kt @@ -0,0 +1,8 @@ +package org.oppia.android.util.logging.firebase + +import com.google.firebase.firestore.FirebaseFirestore + +/** Wrapper for [FirebaseFirestore], used to pass an instance of [FirebaseFirestore]. */ +data class FirestoreInstance( + val firebaseFirestore: FirebaseFirestore +) diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt new file mode 100644 index 00000000000..246bb505ad4 --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapper.kt @@ -0,0 +1,7 @@ +package org.oppia.android.util.logging.firebase + +/** Interface for providing an implementation of [FirestoreInstance]. */ +interface FirestoreInstanceWrapper { + /** Returns a wrapped instance of FirebaseFirestore. */ + val firestoreInstance: FirestoreInstance? +} diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt new file mode 100644 index 00000000000..039c1545509 --- /dev/null +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/FirestoreInstanceWrapperImpl.kt @@ -0,0 +1,13 @@ +package org.oppia.android.util.logging.firebase + +import com.google.firebase.firestore.ktx.firestore +import com.google.firebase.ktx.Firebase +import javax.inject.Inject + +/** Implementation of [FirestoreInstanceWrapper]. */ +class FirestoreInstanceWrapperImpl @Inject constructor() : + FirestoreInstanceWrapper { + + override val firestoreInstance: FirestoreInstance + get() = FirestoreInstance(Firebase.firestore) +} diff --git a/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt b/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt index c822eb02f2d..9ab74a2cbd3 100644 --- a/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt +++ b/utility/src/main/java/org/oppia/android/util/logging/firebase/LogReportingModule.kt @@ -27,4 +27,14 @@ class LogReportingModule { factory: FirebaseAnalyticsEventLogger.Factory ): PerformanceMetricsEventLogger = factory.createPerformanceMetricEventLogger() + + @Provides + @Singleton + fun provideFirestoreLogger(factory: FirestoreEventLoggerProdImpl): + FirestoreEventLogger = factory + + @Provides + @Singleton + fun provideFirebaseFirestoreInstanceWrapper(wrapperImpl: FirestoreInstanceWrapperImpl): + FirestoreInstanceWrapper = wrapperImpl } diff --git a/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel b/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel index 7d96eebedab..3ae5970b336 100644 --- a/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel +++ b/utility/src/test/java/org/oppia/android/util/logging/firebase/BUILD.bazel @@ -29,4 +29,29 @@ oppia_android_test( ], ) +oppia_android_test( + name = "DebugFirestoreEventLoggerImplTest", + srcs = ["DebugFirestoreEventLoggerImplTest.kt"], + custom_package = "org.oppia.android.util.logging.firebase", + test_class = "org.oppia.android.util.logging.firebase.DebugFirestoreEventLoggerImplTest", + test_manifest = "//utility:test_manifest", + deps = [ + ":dagger", + "//testing", + "//testing/src/main/java/org/oppia/android/testing/robolectric:test_module", + "//testing/src/main/java/org/oppia/android/testing/threading:test_module", + "//testing/src/main/java/org/oppia/android/testing/time:test_module", + "//third_party:androidx_test_ext_junit", + "//third_party:androidx_test_ext_truth", + "//third_party:com_google_truth_truth", + "//third_party:org_robolectric_robolectric", + "//third_party:robolectric_android-all", + "//utility/src/main/java/org/oppia/android/util/locale/testing:test_module", + "//utility/src/main/java/org/oppia/android/util/logging:standard_event_logging_configuration_module", + "//utility/src/main/java/org/oppia/android/util/logging/firebase:debug_module", + "//utility/src/main/java/org/oppia/android/util/logging/firebase:prod_module", + "//utility/src/main/java/org/oppia/android/util/networking:debug_module", + ], +) + dagger_rules() diff --git a/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt b/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt new file mode 100644 index 00000000000..011eb532a09 --- /dev/null +++ b/utility/src/test/java/org/oppia/android/util/logging/firebase/DebugFirestoreEventLoggerImplTest.kt @@ -0,0 +1,193 @@ +package org.oppia.android.util.logging.firebase + +import android.app.Application +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import dagger.BindsInstance +import dagger.Component +import dagger.Module +import dagger.Provides +import org.junit.Before +import org.junit.Test +import org.junit.runner.RunWith +import org.oppia.android.app.model.EventLog +import org.oppia.android.testing.FakeFirestoreInstanceWrapperImpl +import org.oppia.android.testing.assertThrows +import org.oppia.android.testing.robolectric.RobolectricModule +import org.oppia.android.testing.threading.TestDispatcherModule +import org.oppia.android.testing.time.FakeOppiaClockModule +import org.oppia.android.util.locale.testing.LocaleTestModule +import org.oppia.android.util.logging.EnableConsoleLog +import org.oppia.android.util.logging.EnableFileLog +import org.oppia.android.util.logging.GlobalLogLevel +import org.oppia.android.util.logging.LogLevel +import org.robolectric.annotation.Config +import org.robolectric.annotation.LooperMode +import javax.inject.Inject +import javax.inject.Singleton + +/** Tests for [DebugFirestoreEventLoggerImpl]. */ +// FunctionName: test names are conventionally named with underscores. +@Suppress("FunctionName") +@RunWith(AndroidJUnit4::class) +@LooperMode(LooperMode.Mode.PAUSED) +@Config(manifest = Config.NONE) +class DebugFirestoreEventLoggerImplTest { + @Inject + lateinit var debugFirestoreLoggerImpl: DebugFirestoreEventLoggerImpl + + @Inject + lateinit var eventLogger: FirestoreEventLogger + + private val eventLog1 = EventLog.newBuilder().setPriority(EventLog.Priority.ESSENTIAL).build() + private val eventLog2 = EventLog.newBuilder().setPriority(EventLog.Priority.ESSENTIAL).build() + + @Before + fun setUp() { + setUpTestApplicationComponent() + } + + @Test + fun testDebugFirestoreEventLogger_logEvent_returnsEvent() { + eventLogger.uploadEvent(eventLog1) + val event = debugFirestoreLoggerImpl.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog1) + assertThat(event.priority).isEqualTo(EventLog.Priority.ESSENTIAL) + } + + @Test + fun testDebugFirestoreEventLogger_logEventTwice_returnsLatestEvent() { + eventLogger.uploadEvent(eventLog1) + eventLogger.uploadEvent(eventLog2) + val event = debugFirestoreLoggerImpl.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog2) + } + + @Test + fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_logEventAgain_returnsLatestEvent() { + eventLogger.uploadEvent(eventLog1) + debugFirestoreLoggerImpl.clearAllEvents() + debugFirestoreLoggerImpl.uploadEvent(eventLog2) + val event = debugFirestoreLoggerImpl.getMostRecentEvent() + + assertThat(event).isEqualTo(eventLog2) + } + + @Test + fun testDebugFirestoreEventLogger_logNothing_getMostRecent_returnsFailure() { + assertThrows(NoSuchElementException::class) { debugFirestoreLoggerImpl.getMostRecentEvent() } + } + + @Test + fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_getMostRecent_returnsFailure() { + eventLogger.uploadEvent(eventLog1) + debugFirestoreLoggerImpl.clearAllEvents() + + val eventException = assertThrows(NoSuchElementException::class) { + debugFirestoreLoggerImpl.getMostRecentEvent() + } + + assertThat(eventException).isInstanceOf(NoSuchElementException::class.java) + } + + @Test + fun testDebugFirestoreEventLogger_clearAllEvents_returnsEmptyList() { + debugFirestoreLoggerImpl.clearAllEvents() + val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testDebugFirestoreEventLogger_logEvent_clearAllEvents_returnsEmptyList() { + eventLogger.uploadEvent(eventLog1) + debugFirestoreLoggerImpl.clearAllEvents() + val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testDebugFirestoreEventLogger_logMultipleEvents_clearAllEvents_returnsEmptyList() { + eventLogger.uploadEvent(eventLog1) + eventLogger.uploadEvent(eventLog2) + debugFirestoreLoggerImpl.clearAllEvents() + val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty() + + assertThat(isListEmpty).isTrue() + } + + @Test + fun testDebugFirestoreEventLogger_logEvent_returnsNonEmptyList() { + eventLogger.uploadEvent(eventLog1) + val isListEmpty = debugFirestoreLoggerImpl.getEventList().isEmpty() + + assertThat(isListEmpty).isFalse() + } + + private fun setUpTestApplicationComponent() { + DaggerDebugFirestoreEventLoggerImplTest_TestApplicationComponent.builder() + .setApplication(ApplicationProvider.getApplicationContext()) + .build() + .inject(this) + } + + // TODO(#89): Move this to a common test application component. + @Module + class TestModule { + @Provides + @Singleton + fun provideContext(application: Application): Context { + return application + } + + // TODO(#59): Either isolate these to their own shared test module, or use the real logging + // module in tests to avoid needing to specify these settings for tests. + @EnableConsoleLog + @Provides + fun provideEnableConsoleLog(): Boolean = true + + @EnableFileLog + @Provides + fun provideEnableFileLog(): Boolean = false + + @GlobalLogLevel + @Provides + fun provideGlobalLogLevel(): LogLevel = LogLevel.VERBOSE + + @Provides + @Singleton + fun provideDebugFirestoreLogger(debugFirestoreEventLogger: DebugFirestoreEventLoggerImpl): + FirestoreEventLogger = debugFirestoreEventLogger + + @Provides + @Singleton + fun provideFirebaseFirestoreInstanceWrapper( + debugWrapperImpl: FakeFirestoreInstanceWrapperImpl + ): FirestoreInstanceWrapper = debugWrapperImpl + } + + // TODO(#89): Move this to a common test application component. + @Singleton + @Component( + modules = [ + TestModule::class, RobolectricModule::class, + TestDispatcherModule::class, FakeOppiaClockModule::class, LocaleTestModule::class + ] + ) + + interface TestApplicationComponent { + @Component.Builder + interface Builder { + @BindsInstance + fun setApplication(application: Application): Builder + fun build(): TestApplicationComponent + } + + fun inject(debugEventLoggerTest: DebugFirestoreEventLoggerImplTest) + } +}