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) + } +}