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 08a318089e9..4030f93b7d2 100644
--- a/app/BUILD.bazel
+++ b/app/BUILD.bazel
@@ -660,7 +660,6 @@ kt_android_library(
"//third_party:androidx_core_core-ktx",
"//third_party:androidx_databinding_databinding-common",
"//third_party:androidx_databinding_databinding-runtime",
- "//third_party:androidx_fragment_fragment",
"//third_party:circularimageview_circular_image_view",
"//utility/src/main/java/org/oppia/android/util/accessibility",
"//utility/src/main/java/org/oppia/android/util/parser/html:html_parser",
@@ -714,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",
@@ -1019,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/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 36ec869f7f1..00eecd1848f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -217,6 +217,7 @@
+
@@ -224,6 +225,7 @@
+
diff --git a/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt b/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
index 4902ed63107..966d4937627 100644
--- a/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
+++ b/app/src/main/java/org/oppia/android/app/activity/ActivityComponentImpl.kt
@@ -65,6 +65,7 @@ import org.oppia.android.app.testing.DragDropTestActivity
import org.oppia.android.app.testing.DrawableBindingAdaptersTestActivity
import org.oppia.android.app.testing.ExplorationInjectionActivity
import org.oppia.android.app.testing.ExplorationTestActivity
+import org.oppia.android.app.testing.FractionInputInteractionViewTestActivity
import org.oppia.android.app.testing.HomeFragmentTestActivity
import org.oppia.android.app.testing.HomeTestActivity
import org.oppia.android.app.testing.HtmlParserTestActivity
@@ -77,6 +78,7 @@ import org.oppia.android.app.testing.NavigationDrawerTestActivity
import org.oppia.android.app.testing.PoliciesFragmentTestActivity
import org.oppia.android.app.testing.ProfileChooserFragmentTestActivity
import org.oppia.android.app.testing.ProfileEditFragmentTestActivity
+import org.oppia.android.app.testing.RatioInputInteractionViewTestActivity
import org.oppia.android.app.testing.SplashTestActivity
import org.oppia.android.app.testing.SpotlightFragmentTestActivity
import org.oppia.android.app.testing.StateAssemblerMarginBindingAdaptersTestActivity
@@ -140,6 +142,7 @@ interface ActivityComponentImpl :
fun inject(faqSingleActivity: FAQSingleActivity)
fun inject(forceNetworkTypeActivity: ForceNetworkTypeActivity)
fun inject(forceNetworkTypeTestActivity: ForceNetworkTypeTestActivity)
+ fun inject(fractionInputInteractionViewTestActivity: FractionInputInteractionViewTestActivity)
fun inject(helpActivity: HelpActivity)
fun inject(homeActivity: HomeActivity)
fun inject(homeFragmentTestActivity: HomeFragmentTestActivity)
@@ -148,6 +151,7 @@ interface ActivityComponentImpl :
fun inject(imageRegionSelectionTestActivity: ImageRegionSelectionTestActivity)
fun inject(imageViewBindingAdaptersTestActivity: ImageViewBindingAdaptersTestActivity)
fun inject(inputInteractionViewTestActivity: InputInteractionViewTestActivity)
+ fun inject(ratioInputInteractionViewTestActivity: RatioInputInteractionViewTestActivity)
fun inject(licenseListActivity: LicenseListActivity)
fun inject(licenseTextViewerActivity: LicenseTextViewerActivity)
fun inject(listItemLeadingMarginSpanTestActivity: ListItemLeadingMarginSpanTestActivity)
diff --git a/app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt
index 0c9e3fe7749..0dfe9b50b9c 100644
--- a/app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/administratorcontrols/AdministratorControlsActivityPresenter.kt
@@ -96,7 +96,7 @@ class AdministratorControlsActivityPresenter @Inject constructor(
.findFragmentById(
R.id.administrator_controls_activity_fragment_navigation_drawer
) as NavigationDrawerFragment
- navigationDrawerFragment.initializeDrawer(
+ navigationDrawerFragment.setUpDrawer(
binding.administratorControlsActivityDrawerLayout,
toolbar, /* menuItemId= */ 0
)
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/customview/interaction/FractionInputInteractionView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
index 665cacde18d..eec5f745241 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/FractionInputInteractionView.kt
@@ -8,7 +8,7 @@ import android.view.KeyEvent.ACTION_UP
import android.view.KeyEvent.KEYCODE_BACK
import android.view.View
import android.view.inputmethod.EditorInfo
-import androidx.appcompat.widget.AppCompatEditText
+import android.widget.EditText
import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
import org.oppia.android.app.utility.KeyboardHelper.Companion.hideSoftKeyboard
import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
@@ -20,14 +20,12 @@ import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
// background="@drawable/edit_text_background"
// maxLength="200".
-// TODO(#4135): Add a dedicated test suite for this class.
-
-/** The custom [AppCompatEditText] class for fraction input interaction view. */
+/** The custom EditText class for fraction input interaction view. */
class FractionInputInteractionView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.editTextStyle
-) : AppCompatEditText(context, attrs, defStyle), View.OnFocusChangeListener {
+) : EditText(context, attrs, defStyle), View.OnFocusChangeListener {
private var hintText: CharSequence = ""
private val stateKeyboardButtonListener: StateKeyboardButtonListener
@@ -71,7 +69,7 @@ class FractionInputInteractionView @JvmOverloads constructor(
private fun restoreHint() {
hint = hintText
- if (text?.isEmpty() == true) setTypeface(typeface, Typeface.ITALIC)
+ if (text.isEmpty()) setTypeface(typeface, Typeface.ITALIC)
setSingleLine(false)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
index 34aedfc406c..00de2602d42 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/MathExpressionInteractionsView.kt
@@ -6,7 +6,7 @@ import android.util.AttributeSet
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
-import androidx.appcompat.widget.AppCompatEditText
+import android.widget.EditText
import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
import org.oppia.android.app.utility.KeyboardHelper.Companion.hideSoftKeyboard
import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
@@ -19,7 +19,7 @@ import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
// maxLength="200".
/**
- * The custom [AppCompatEditText] class for math expression interactions interaction view.
+ * The custom [EditText] class for math expression interactions interaction view.
*
* Note that the hint should be set via [setPlaceholder] to ensure that it's properly initialized if
* using databinding, otherwise setting the hint through android:hint should work fine.
@@ -28,7 +28,7 @@ class MathExpressionInteractionsView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.editTextStyle
-) : AppCompatEditText(context, attrs, defStyle), View.OnFocusChangeListener {
+) : EditText(context, attrs, defStyle), View.OnFocusChangeListener {
private var hintText: CharSequence = ""
private val stateKeyboardButtonListener: StateKeyboardButtonListener
@@ -84,7 +84,7 @@ class MathExpressionInteractionsView @JvmOverloads constructor(
private fun restoreHint() {
hint = hintText
- if (text?.isEmpty() == true) setTypeface(typeface, Typeface.ITALIC)
+ if (text.isEmpty()) setTypeface(typeface, Typeface.ITALIC)
setSingleLine(false)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt
index 247da8ba165..b6745cad7d9 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/NumericInputInteractionView.kt
@@ -8,7 +8,7 @@ import android.view.KeyEvent.ACTION_UP
import android.view.KeyEvent.KEYCODE_BACK
import android.view.View
import android.view.inputmethod.EditorInfo
-import androidx.appcompat.widget.AppCompatEditText
+import android.widget.EditText
import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
import org.oppia.android.app.utility.KeyboardHelper.Companion.hideSoftKeyboard
import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
@@ -20,12 +20,12 @@ import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
// background="@drawable/edit_text_background"
// maxLength="200".
-/** The custom [AppCompatEditText] class for numeric input interaction view. */
+/** The custom EditText class for numeric input interaction view. */
class NumericInputInteractionView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.editTextStyle
-) : AppCompatEditText(context, attrs, defStyle), View.OnFocusChangeListener {
+) : EditText(context, attrs, defStyle), View.OnFocusChangeListener {
private val stateKeyboardButtonListener: StateKeyboardButtonListener
private var hintText: CharSequence = ""
@@ -69,7 +69,7 @@ class NumericInputInteractionView @JvmOverloads constructor(
private fun restoreHint() {
hint = hintText
- if (text?.isEmpty() == true) setTypeface(typeface, Typeface.ITALIC)
+ if (text.isEmpty()) setTypeface(typeface, Typeface.ITALIC)
setSingleLine(false)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt
index 6b775b469af..fd29579a1fd 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/RatioInputInteractionView.kt
@@ -6,16 +6,16 @@ import android.util.AttributeSet
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
-import androidx.appcompat.widget.AppCompatEditText
+import android.widget.EditText
import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
import org.oppia.android.app.utility.KeyboardHelper
-/** The custom [AppCompatEditText] class for ratio input interaction view. */
+/** The custom EditText class for ratio input interaction view. */
class RatioInputInteractionView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.editTextStyle
-) : AppCompatEditText(context, attrs, defStyle), View.OnFocusChangeListener {
+) : EditText(context, attrs, defStyle), View.OnFocusChangeListener {
private var hintText: CharSequence = ""
private val stateKeyboardButtonListener: StateKeyboardButtonListener
@@ -59,7 +59,7 @@ class RatioInputInteractionView @JvmOverloads constructor(
private fun restoreHint() {
hint = hintText
- if (text?.isEmpty() == true) setTypeface(typeface, Typeface.ITALIC)
+ if (text.isEmpty()) setTypeface(typeface, Typeface.ITALIC)
setSingleLine(false)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt b/app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt
index 21d278bbdde..10001acd258 100644
--- a/app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt
+++ b/app/src/main/java/org/oppia/android/app/customview/interaction/TextInputInteractionView.kt
@@ -6,7 +6,7 @@ import android.util.AttributeSet
import android.view.KeyEvent
import android.view.View
import android.view.inputmethod.EditorInfo
-import androidx.appcompat.widget.AppCompatEditText
+import android.widget.EditText
import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
import org.oppia.android.app.utility.KeyboardHelper.Companion.hideSoftKeyboard
import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
@@ -17,12 +17,12 @@ import org.oppia.android.app.utility.KeyboardHelper.Companion.showSoftKeyboard
// background="@drawable/edit_text_background"
// maxLength="200".
-/** The custom [AppCompatEditText] class for text input interaction view. */
+/** The custom EditText class for text input interaction view. */
class TextInputInteractionView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = android.R.attr.editTextStyle
-) : AppCompatEditText(context, attrs, defStyle), View.OnFocusChangeListener {
+) : EditText(context, attrs, defStyle), View.OnFocusChangeListener {
private var hintText: CharSequence = ""
private val stateKeyboardButtonListener: StateKeyboardButtonListener
@@ -66,7 +66,7 @@ class TextInputInteractionView @JvmOverloads constructor(
private fun restoreHint() {
hint = hintText
- if (text?.isEmpty() == true) setTypeface(typeface, Typeface.ITALIC)
- isSingleLine = false
+ if (text.isEmpty()) setTypeface(typeface, Typeface.ITALIC)
+ setSingleLine(false)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt
index 8107813bd76..edd4e952711 100644
--- a/app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/devoptions/DeveloperOptionsActivityPresenter.kt
@@ -41,7 +41,7 @@ class DeveloperOptionsActivityPresenter @Inject constructor(
.findFragmentById(
R.id.developer_options_activity_fragment_navigation_drawer
) as NavigationDrawerFragment
- navigationDrawerFragment.initializeDrawer(
+ navigationDrawerFragment.setUpDrawer(
binding.developerOptionsActivityDrawerLayout,
toolbar, menuItemId = -1
)
diff --git a/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt b/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
index e808c6fdb68..95fb16f7a05 100644
--- a/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/devoptions/mathexpressionparser/MathExpressionParserViewModel.kt
@@ -31,12 +31,7 @@ class MathExpressionParserViewModel @Inject constructor(
private val htmlParserFactory: HtmlParser.Factory
) : ObservableViewModel() {
private val htmlParser by lazy {
- // TODO(#4206): Replace this with the variant that doesn't require GCS properties.
htmlParserFactory.create(
- gcsResourceName = "",
- entityType = "",
- entityId = "",
- imageCenterAlign = false,
displayLocale = appLanguageResourceHandler.getDisplayLocale()
)
}
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/drawer/NavigationDrawerFragment.kt b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt
index 734554fceb4..ee307e47738 100644
--- a/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt
+++ b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragment.kt
@@ -33,8 +33,8 @@ class NavigationDrawerFragment :
return navigationDrawerFragmentPresenter.handleCreateView(inflater, container)
}
- fun initializeDrawer(drawerLayout: DrawerLayout, toolbar: Toolbar, menuItemId: Int) {
- navigationDrawerFragmentPresenter.initializeDrawer(drawerLayout, toolbar, menuItemId)
+ fun setUpDrawer(drawerLayout: DrawerLayout, toolbar: Toolbar, menuItemId: Int) {
+ navigationDrawerFragmentPresenter.setUpDrawer(drawerLayout, toolbar, menuItemId)
}
override fun routeToProfileProgress(profileId: Int) {
diff --git a/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
index ecfa05f3782..44fb2ec9945 100644
--- a/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/drawer/NavigationDrawerFragmentPresenter.kt
@@ -62,17 +62,13 @@ class NavigationDrawerFragmentPresenter @Inject constructor(
private lateinit var drawerLayout: DrawerLayout
private lateinit var binding: DrawerFragmentBinding
private lateinit var profileId: ProfileId
- private lateinit var toolbar: Toolbar
private var previousMenuItemId: Int? = null
private var internalProfileId: Int = -1
- private var menuItemId: Int = 0
fun handleCreateView(inflater: LayoutInflater, container: ViewGroup?): View? {
binding = DrawerFragmentBinding.inflate(inflater, container, /* attachToRoot= */ false)
binding.fragmentDrawerNavView.setNavigationItemSelectedListener(this)
- setUpDrawer(drawerLayout, toolbar, menuItemId)
-
fragment.setHasOptionsMenu(true)
internalProfileId = activity.intent.getIntExtra(NAVIGATION_PROFILE_ID_ARGUMENT_KEY, -1)
@@ -370,17 +366,11 @@ class NavigationDrawerFragmentPresenter @Inject constructor(
}
}
- fun initializeDrawer(drawerLayout: DrawerLayout, toolbar: Toolbar, menuItemId: Int) {
- this.drawerLayout = drawerLayout
- this.toolbar = toolbar
- this.menuItemId = menuItemId
- }
-
/**
* Initializes the navigation drawer for the specified [DrawerLayout] and [Toolbar], which the host activity is
* expected to provide. The [menuItemId] corresponds to the menu ID of the current activity, for navigation purposes.
*/
- private fun setUpDrawer(drawerLayout: DrawerLayout, toolbar: Toolbar, menuItemId: Int) {
+ fun setUpDrawer(drawerLayout: DrawerLayout, toolbar: Toolbar, menuItemId: Int) {
previousMenuItemId = if (activity is TopicActivity) null else menuItemId
if (menuItemId != 0 && menuItemId != -1) {
getFooterViewModel().isAdministratorControlsSelected.set(false)
@@ -417,6 +407,7 @@ class NavigationDrawerFragmentPresenter @Inject constructor(
true
}
}
+ this.drawerLayout = drawerLayout
drawerToggle = object : ActionBarDrawerToggle(
fragment.activity,
drawerLayout,
@@ -455,6 +446,7 @@ class NavigationDrawerFragmentPresenter @Inject constructor(
// For showing navigation drawer in DeveloperOptionsActivity
else if (menuItemId == -1) getFooterViewModel().isDeveloperOptionsSelected.set(true)
uncheckAllMenuItemsWhenAdministratorControlsOrDeveloperOptionsIsSelected()
+ this.drawerLayout = drawerLayout
drawerToggle = object : ActionBarDrawerToggle(
fragment.activity,
drawerLayout,
diff --git a/app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt
index c2aefe143bd..29f2aa8123b 100644
--- a/app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/help/HelpActivityPresenter.kt
@@ -192,7 +192,7 @@ class HelpActivityPresenter @Inject constructor(
.findFragmentById(
R.id.help_activity_fragment_navigation_drawer
) as NavigationDrawerFragment
- navigationDrawerFragment.initializeDrawer(
+ navigationDrawerFragment.setUpDrawer(
activity.findViewById(R.id.help_activity_drawer_layout) as DrawerLayout,
toolbar, R.id.nav_help
)
diff --git a/app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt
index 3cfb9401217..83e65950b7f 100644
--- a/app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/home/HomeActivityPresenter.kt
@@ -49,7 +49,7 @@ class HomeActivityPresenter @Inject constructor(private val activity: AppCompatA
navigationDrawerFragment = activity
.supportFragmentManager
.findFragmentById(R.id.home_activity_fragment_navigation_drawer) as NavigationDrawerFragment
- navigationDrawerFragment!!.initializeDrawer(
+ navigationDrawerFragment!!.setUpDrawer(
activity.findViewById(R.id.home_activity_drawer_layout) as DrawerLayout,
toolbar, R.id.nav_home
)
diff --git a/app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt b/app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt
index 50f489ff326..cd03b74450a 100644
--- a/app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/options/OptionControlsViewModel.kt
@@ -18,8 +18,6 @@ import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProvider
import org.oppia.android.util.data.DataProviders.Companion.combineWith
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
-import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject
/** [ViewModel] for [OptionsFragment]. */
@@ -32,7 +30,6 @@ class OptionControlsViewModel @Inject constructor(
activity: AppCompatActivity,
private val profileManagementController: ProfileManagementController,
private val oppiaLogger: OppiaLogger,
- @EnableLanguageSelectionUi private val enableLanguageSelectionUi: PlatformParameterValue,
private val resourceHandler: AppLanguageResourceHandler,
private val translationController: TranslationController
) : OptionsItemViewModel() {
@@ -112,13 +109,12 @@ class OptionControlsViewModel @Inject constructor(
}
private fun createAppLanguageViewModel(language: OppiaLanguage): OptionsAppLanguageViewModel? {
- return if (enableLanguageSelectionUi.value) {
- OptionsAppLanguageViewModel(
- routeToAppLanguageListListener,
- loadAppLanguageListListener, language,
- resourceHandler.computeLocalizedDisplayName(language)
- )
- } else null
+ return OptionsAppLanguageViewModel(
+ routeToAppLanguageListListener,
+ loadAppLanguageListListener,
+ language,
+ resourceHandler.computeLocalizedDisplayName(language)
+ )
}
private fun createAudioLanguageViewModel(profile: Profile): OptionsAudioLanguageViewModel {
diff --git a/app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt
index 220a054502b..6193d3a337e 100644
--- a/app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/options/OptionsActivityPresenter.kt
@@ -72,7 +72,7 @@ class OptionsActivityPresenter @Inject constructor(
.findFragmentById(
R.id.options_activity_fragment_navigation_drawer
) as NavigationDrawerFragment
- navigationDrawerFragment!!.initializeDrawer(
+ navigationDrawerFragment!!.setUpDrawer(
activity.findViewById(R.id.options_activity_drawer_layout) as DrawerLayout,
toolbar, R.id.nav_options
)
diff --git a/app/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt b/app/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt
index 731d26e0590..81cd9e14035 100644
--- a/app/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt
+++ b/app/src/main/java/org/oppia/android/app/parser/FractionParsingUiError.kt
@@ -20,7 +20,10 @@ enum class FractionParsingUiError(@StringRes private var error: Int?) {
DIVISION_BY_ZERO(error = R.string.fraction_error_divide_by_zero),
/** Corresponds to [FractionParsingError.NUMBER_TOO_LONG]. */
- NUMBER_TOO_LONG(error = R.string.fraction_error_larger_than_seven_digits);
+ NUMBER_TOO_LONG(error = R.string.fraction_error_larger_than_seven_digits),
+
+ /** Corresponds to [FractionParsingError.EMPTY_INPUT]. */
+ EMPTY_INPUT(error = R.string.fraction_error_empty_input);
/**
* Returns the string corresponding to this error's string resources, or null if there is none.
@@ -39,6 +42,7 @@ enum class FractionParsingUiError(@StringRes private var error: Int?) {
FractionParsingError.INVALID_FORMAT -> INVALID_FORMAT
FractionParsingError.DIVISION_BY_ZERO -> DIVISION_BY_ZERO
FractionParsingError.NUMBER_TOO_LONG -> NUMBER_TOO_LONG
+ FractionParsingError.EMPTY_INPUT -> EMPTY_INPUT
}
}
}
diff --git a/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt b/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
index 5b625623ad2..ae0c3771b46 100644
--- a/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
+++ b/app/src/main/java/org/oppia/android/app/parser/StringToNumberParser.kt
@@ -41,6 +41,9 @@ class StringToNumberParser {
* detection should be done using [getRealTimeAnswerError], instead.
*/
fun getSubmitTimeError(text: String): NumericInputParsingError {
+ if (text.isBlank()) {
+ return NumericInputParsingError.EMPTY_INPUT
+ }
if (text.length > 15) {
return NumericInputParsingError.NUMBER_TOO_LONG
}
@@ -57,7 +60,8 @@ class StringToNumberParser {
VALID(error = null),
INVALID_FORMAT(error = R.string.number_error_invalid_format),
STARTING_WITH_FLOATING_POINT(error = R.string.number_error_starting_with_floating_point),
- NUMBER_TOO_LONG(error = R.string.number_error_larger_than_fifteen_characters);
+ NUMBER_TOO_LONG(error = R.string.number_error_larger_than_fifteen_characters),
+ EMPTY_INPUT(error = R.string.number_error_empty_input);
/**
* Returns the string corresponding to this error's string resources, or null if there is none.
diff --git a/app/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt b/app/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt
index 31895402263..ebb62121372 100644
--- a/app/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt
+++ b/app/src/main/java/org/oppia/android/app/parser/StringToRatioParser.kt
@@ -29,6 +29,7 @@ class StringToRatioParser {
val normalized = text.normalizeWhitespace()
val ratio = parseRatioOrNull(normalized)
return when {
+ normalized.isBlank() -> RatioParsingError.EMPTY_INPUT
!normalized.matches(invalidRatioRegex) || ratio == null -> RatioParsingError.INVALID_FORMAT
numberOfTerms != 0 && ratio.ratioComponentCount != numberOfTerms -> {
RatioParsingError.INVALID_SIZE
@@ -77,7 +78,8 @@ class StringToRatioParser {
INVALID_FORMAT(error = R.string.ratio_error_invalid_format),
INVALID_COLONS(error = R.string.ratio_error_invalid_colons),
INVALID_SIZE(error = R.string.ratio_error_invalid_size),
- INCLUDES_ZERO(error = R.string.ratio_error_includes_zero);
+ INCLUDES_ZERO(error = R.string.ratio_error_includes_zero),
+ EMPTY_INPUT(error = R.string.ratio_error_empty_input);
/**
* Returns the string corresponding to this error's string resources, or null if there is none.
diff --git a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt
index 22d42a74744..193248effe7 100644
--- a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/FractionInteractionViewModel.kt
@@ -43,12 +43,17 @@ class FractionInteractionViewModel private constructor(
override fun onPropertyChanged(sender: Observable, propertyId: Int) {
errorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
pendingAnswerError,
- answerText.isNotEmpty()
+ true // Allow submit on empty answer.
)
}
}
errorMessage.addOnPropertyChangedCallback(callback)
isAnswerAvailable.addOnPropertyChangedCallback(callback)
+ // Force-update the UI to reflect the state of the errorMessage and isAnswerAvailable property:
+ errorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
+ /* pendingAnswerError= */null,
+ /* inputAnswerAvailable= */true
+ )
}
override fun getPendingAnswer(): UserAnswer = UserAnswer.newBuilder().apply {
@@ -64,23 +69,25 @@ class FractionInteractionViewModel private constructor(
/** It checks the pending error for the current fraction input, and correspondingly updates the error string based on the specified error category. */
override fun checkPendingAnswerError(category: AnswerErrorCategory): String? {
- if (answerText.isNotEmpty()) {
- when (category) {
- AnswerErrorCategory.REAL_TIME -> {
+ when (category) {
+ AnswerErrorCategory.REAL_TIME -> {
+ if (answerText.isNotEmpty()) {
pendingAnswerError =
FractionParsingUiError.createFromParsingError(
fractionParser.getRealTimeAnswerError(answerText.toString())
).getErrorMessageFromStringRes(resourceHandler)
+ } else {
+ pendingAnswerError = null
}
- AnswerErrorCategory.SUBMIT_TIME -> {
- pendingAnswerError =
- FractionParsingUiError.createFromParsingError(
- fractionParser.getSubmitTimeError(answerText.toString())
- ).getErrorMessageFromStringRes(resourceHandler)
- }
}
- errorMessage.set(pendingAnswerError)
+ AnswerErrorCategory.SUBMIT_TIME -> {
+ pendingAnswerError =
+ FractionParsingUiError.createFromParsingError(
+ fractionParser.getSubmitTimeError(answerText.toString())
+ ).getErrorMessageFromStringRes(resourceHandler)
+ }
}
+ errorMessage.set(pendingAnswerError)
return pendingAnswerError
}
diff --git a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt
index 5d0822fae6c..132c988774b 100644
--- a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/MathExpressionInteractionsViewModel.kt
@@ -73,6 +73,12 @@ class MathExpressionInteractionsViewModel private constructor(
* bound to the corresponding edit text.
*/
var answerText: CharSequence = ""
+ // The value of ths field is set from the Binding and from the TextWatcher. Any
+ // programmatic modification needs to be done here, so that the Binding and the TextWatcher
+ // do not step on each other.
+ set(value) {
+ field = value.toString().trim()
+ }
/**
* Defines whether an answer is currently available to parse. This is expected to be directly
@@ -166,7 +172,7 @@ class MathExpressionInteractionsViewModel private constructor(
}
override fun onTextChanged(answer: CharSequence, start: Int, before: Int, count: Int) {
- answerText = answer.toString().trim()
+ answerText = answer
val isAnswerTextAvailable = answerText.isNotEmpty()
if (isAnswerTextAvailable != isAnswerAvailable.get()) {
isAnswerAvailable.set(isAnswerTextAvailable)
diff --git a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
index 93bdddde6f0..04174714b4f 100644
--- a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/NumericInputViewModel.kt
@@ -36,25 +36,34 @@ class NumericInputViewModel private constructor(
override fun onPropertyChanged(sender: Observable, propertyId: Int) {
interactionAnswerErrorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
pendingAnswerError,
- answerText.isNotEmpty()
+ inputAnswerAvailable = true // Allow blank answer submission.
)
}
}
errorMessage.addOnPropertyChangedCallback(callback)
isAnswerAvailable.addOnPropertyChangedCallback(callback)
+
+ // Initializing with default values so that submit button is enabled by default.
+ interactionAnswerErrorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
+ pendingAnswerError = null,
+ inputAnswerAvailable = true
+ )
}
- /** It checks the pending error for the current numeric input, and correspondingly updates the error string based on the specified error category. */
+ /**
+ * It checks the pending error for the current numeric input, and correspondingly updates the
+ * error string based on the specified error category.
+ */
override fun checkPendingAnswerError(category: AnswerErrorCategory): String? {
- if (answerText.isNotEmpty()) {
- pendingAnswerError = when (category) {
- AnswerErrorCategory.REAL_TIME ->
+ pendingAnswerError = when (category) {
+ AnswerErrorCategory.REAL_TIME ->
+ if (answerText.isNotEmpty())
stringToNumberParser.getRealTimeAnswerError(answerText.toString())
.getErrorMessageFromStringRes(resourceHandler)
- AnswerErrorCategory.SUBMIT_TIME ->
- stringToNumberParser.getSubmitTimeError(answerText.toString())
- .getErrorMessageFromStringRes(resourceHandler)
- }
+ else null
+ AnswerErrorCategory.SUBMIT_TIME ->
+ stringToNumberParser.getSubmitTimeError(answerText.toString())
+ .getErrorMessageFromStringRes(resourceHandler)
}
errorMessage.set(pendingAnswerError)
return pendingAnswerError
diff --git a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt
index 49f64619702..f5c0f323bec 100644
--- a/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/player/state/itemviewmodel/RatioExpressionInputInteractionViewModel.kt
@@ -46,12 +46,18 @@ class RatioExpressionInputInteractionViewModel private constructor(
override fun onPropertyChanged(sender: Observable, propertyId: Int) {
errorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
pendingAnswerError,
- answerText.isNotEmpty()
+ inputAnswerAvailable = true // Allow blank answer submission.
)
}
}
errorMessage.addOnPropertyChangedCallback(callback)
isAnswerAvailable.addOnPropertyChangedCallback(callback)
+
+ // Initializing with default values so that submit button is enabled by default.
+ errorOrAvailabilityCheckReceiver.onPendingAnswerErrorOrAvailabilityCheck(
+ pendingAnswerError = null,
+ inputAnswerAvailable = true
+ )
}
override fun getPendingAnswer(): UserAnswer = UserAnswer.newBuilder().apply {
@@ -67,23 +73,24 @@ class RatioExpressionInputInteractionViewModel private constructor(
}
}.build()
- /** It checks the pending error for the current ratio input, and correspondingly updates the error string based on the specified error category. */
+ /**
+ * It checks the pending error for the current ratio input, and correspondingly
+ * updates the error string based on the specified error category.
+ */
override fun checkPendingAnswerError(category: AnswerErrorCategory): String? {
- if (answerText.isNotEmpty()) {
- when (category) {
- AnswerErrorCategory.REAL_TIME ->
- pendingAnswerError =
- stringToRatioParser.getRealTimeAnswerError(answerText.toString())
- .getErrorMessageFromStringRes(resourceHandler)
- AnswerErrorCategory.SUBMIT_TIME ->
- pendingAnswerError =
- stringToRatioParser.getSubmitTimeError(
- answerText.toString(),
- numberOfTerms = numberOfTerms
- ).getErrorMessageFromStringRes(resourceHandler)
- }
- errorMessage.set(pendingAnswerError)
+ pendingAnswerError = when (category) {
+ AnswerErrorCategory.REAL_TIME ->
+ if (answerText.isNotEmpty())
+ stringToRatioParser.getRealTimeAnswerError(answerText.toString())
+ .getErrorMessageFromStringRes(resourceHandler)
+ else null
+ AnswerErrorCategory.SUBMIT_TIME ->
+ stringToRatioParser.getSubmitTimeError(
+ answerText.toString(),
+ numberOfTerms = numberOfTerms
+ ).getErrorMessageFromStringRes(resourceHandler)
}
+ errorMessage.set(pendingAnswerError)
return pendingAnswerError
}
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/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt
new file mode 100644
index 00000000000..bb812a550a9
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity.kt
@@ -0,0 +1,112 @@
+package org.oppia.android.app.testing
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.databinding.DataBindingUtil
+import org.oppia.android.R
+import org.oppia.android.app.activity.ActivityComponentImpl
+import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
+import org.oppia.android.app.customview.interaction.FractionInputInteractionView
+import org.oppia.android.app.model.InputInteractionViewTestActivityParams
+import org.oppia.android.app.model.Interaction
+import org.oppia.android.app.model.UserAnswer
+import org.oppia.android.app.model.WrittenTranslationContext
+import org.oppia.android.app.player.state.answerhandling.AnswerErrorCategory
+import org.oppia.android.app.player.state.answerhandling.InteractionAnswerErrorOrAvailabilityCheckReceiver
+import org.oppia.android.app.player.state.answerhandling.InteractionAnswerReceiver
+import org.oppia.android.app.player.state.itemviewmodel.FractionInteractionViewModel
+import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel
+import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.InteractionItemFactory
+import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
+import org.oppia.android.databinding.ActivityFractionInputInteractionViewTestBinding
+import org.oppia.android.util.extensions.getProtoExtra
+import org.oppia.android.util.extensions.putProtoExtra
+import javax.inject.Inject
+
+/**
+ * This is a dummy activity to test [FractionInputInteractionView].
+ */
+class FractionInputInteractionViewTestActivity :
+ InjectableAutoLocalizedAppCompatActivity(),
+ StateKeyboardButtonListener,
+ InteractionAnswerErrorOrAvailabilityCheckReceiver,
+ InteractionAnswerReceiver {
+ private lateinit var binding: ActivityFractionInputInteractionViewTestBinding
+
+ @Inject
+ lateinit var fractionInteractionViewModelFactory: FractionInteractionViewModel.FactoryImpl
+
+ /** Gives access to the [FractionInteractionViewModel]. */
+ val fractionInteractionViewModel by lazy {
+ fractionInteractionViewModelFactory.create()
+ }
+
+ /** Gives access to the translation context. */
+ lateinit var writtenTranslationContext: WrittenTranslationContext
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ (activityComponent as ActivityComponentImpl).inject(this)
+ binding = DataBindingUtil.setContentView(
+ this, R.layout.activity_fraction_input_interaction_view_test
+ )
+
+ val params =
+ intent.getProtoExtra(
+ TEST_ACTIVITY_PARAMS_ARGUMENT_KEY,
+ InputInteractionViewTestActivityParams.getDefaultInstance()
+ )
+ writtenTranslationContext = params.writtenTranslationContext
+ binding.fractionInteractionViewModel = fractionInteractionViewModel
+ }
+
+ /** Checks submit-time errors. */
+ fun getPendingAnswerErrorOnSubmitClick(v: View) {
+ fractionInteractionViewModel.checkPendingAnswerError(AnswerErrorCategory.SUBMIT_TIME)
+ }
+
+ override fun onPendingAnswerErrorOrAvailabilityCheck(
+ pendingAnswerError: String?,
+ inputAnswerAvailable: Boolean
+ ) {
+ }
+
+ override fun onAnswerReadyForSubmission(answer: UserAnswer) {
+ }
+
+ override fun onEditorAction(actionCode: Int) {
+ }
+
+ private inline fun InteractionItemFactory.create(
+ interaction: Interaction = Interaction.getDefaultInstance()
+ ): T {
+ return create(
+ entityId = "fake_entity_id",
+ hasConversationView = false,
+ interaction = interaction,
+ interactionAnswerReceiver = this@FractionInputInteractionViewTestActivity,
+ answerErrorReceiver = this@FractionInputInteractionViewTestActivity,
+ hasPreviousButton = false,
+ isSplitView = false,
+ writtenTranslationContext,
+ timeToStartNoticeAnimationMs = null
+ ) as T
+ }
+
+ companion object {
+ private const val TEST_ACTIVITY_PARAMS_ARGUMENT_KEY =
+ "FractionInputInteractionViewTestActivity.params"
+
+ /** Creates an intent to open this activity. */
+ fun createIntent(
+ context: Context,
+ extras: InputInteractionViewTestActivityParams
+ ): Intent {
+ return Intent(context, FractionInputInteractionViewTestActivity::class.java).also {
+ it.putProtoExtra(TEST_ACTIVITY_PARAMS_ARGUMENT_KEY, extras)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
index 7190382efa0..f033c023d61 100644
--- a/app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity.kt
@@ -8,7 +8,6 @@ import androidx.databinding.DataBindingUtil
import org.oppia.android.R
import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
-import org.oppia.android.app.customview.interaction.FractionInputInteractionView
import org.oppia.android.app.customview.interaction.NumericInputInteractionView
import org.oppia.android.app.customview.interaction.TextInputInteractionView
import org.oppia.android.app.model.InputInteractionViewTestActivityParams
@@ -18,16 +17,13 @@ import org.oppia.android.app.model.InputInteractionViewTestActivityParams.MathIn
import org.oppia.android.app.model.InputInteractionViewTestActivityParams.MathInteractionType.NUMERIC_EXPRESSION
import org.oppia.android.app.model.InputInteractionViewTestActivityParams.MathInteractionType.UNRECOGNIZED
import org.oppia.android.app.model.Interaction
-import org.oppia.android.app.model.SchemaObject
import org.oppia.android.app.model.UserAnswer
import org.oppia.android.app.model.WrittenTranslationContext
import org.oppia.android.app.player.state.answerhandling.AnswerErrorCategory
import org.oppia.android.app.player.state.answerhandling.InteractionAnswerErrorOrAvailabilityCheckReceiver
import org.oppia.android.app.player.state.answerhandling.InteractionAnswerReceiver
-import org.oppia.android.app.player.state.itemviewmodel.FractionInteractionViewModel
import org.oppia.android.app.player.state.itemviewmodel.MathExpressionInteractionsViewModel
import org.oppia.android.app.player.state.itemviewmodel.NumericInputViewModel
-import org.oppia.android.app.player.state.itemviewmodel.RatioExpressionInputInteractionViewModel
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel
import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.InteractionItemFactory
import org.oppia.android.app.player.state.itemviewmodel.TextInputViewModel
@@ -40,7 +36,7 @@ import org.oppia.android.app.player.state.itemviewmodel.MathExpressionInteractio
/**
* This is a dummy activity to test input interaction views.
- * It contains [FractionInputInteractionView], [NumericInputInteractionView],and [TextInputInteractionView].
+ * It contains [NumericInputInteractionView],and [TextInputInteractionView].
*/
class InputInteractionViewTestActivity :
InjectableAutoLocalizedAppCompatActivity(),
@@ -55,12 +51,6 @@ class InputInteractionViewTestActivity :
@Inject
lateinit var textInputViewModelFactory: TextInputViewModel.FactoryImpl
- @Inject
- lateinit var fractionInteractionViewModelFactory: FractionInteractionViewModel.FactoryImpl
-
- @Inject
- lateinit var ratioViewModelFactory: RatioExpressionInputInteractionViewModel.FactoryImpl
-
@Inject
lateinit var mathExpViewModelFactoryFactory: MathExpViewModelFactoryFactoryImpl
@@ -68,19 +58,6 @@ class InputInteractionViewTestActivity :
val textInputViewModel by lazy { textInputViewModelFactory.create() }
- val fractionInteractionViewModel by lazy {
- fractionInteractionViewModelFactory.create()
- }
-
- val ratioExpressionInputInteractionViewModel by lazy {
- ratioViewModelFactory.create(
- interaction = Interaction.newBuilder().putCustomizationArgs(
- "numberOfTerms",
- SchemaObject.newBuilder().setSignedInt(3).build()
- ).build()
- )
- }
-
lateinit var mathExpressionViewModel: MathExpressionInteractionsViewModel
lateinit var writtenTranslationContext: WrittenTranslationContext
@@ -127,16 +104,11 @@ class InputInteractionViewTestActivity :
binding.numericInputViewModel = numericInputViewModel
binding.textInputViewModel = textInputViewModel
- binding.fractionInteractionViewModel = fractionInteractionViewModel
- binding.ratioInteractionInputViewModel = ratioExpressionInputInteractionViewModel
binding.mathExpressionInteractionsViewModel = mathExpressionViewModel
}
fun getPendingAnswerErrorOnSubmitClick(v: View) {
- fractionInteractionViewModel.checkPendingAnswerError(AnswerErrorCategory.SUBMIT_TIME)
numericInputViewModel.checkPendingAnswerError(AnswerErrorCategory.SUBMIT_TIME)
- ratioExpressionInputInteractionViewModel
- .checkPendingAnswerError(AnswerErrorCategory.SUBMIT_TIME)
}
override fun onPendingAnswerErrorOrAvailabilityCheck(
diff --git a/app/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt b/app/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt
new file mode 100644
index 00000000000..a16d8e7c12c
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity.kt
@@ -0,0 +1,120 @@
+package org.oppia.android.app.testing
+
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.view.View
+import androidx.databinding.DataBindingUtil
+import org.oppia.android.R
+import org.oppia.android.app.activity.ActivityComponentImpl
+import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
+import org.oppia.android.app.customview.interaction.RatioInputInteractionView
+import org.oppia.android.app.model.InputInteractionViewTestActivityParams
+import org.oppia.android.app.model.Interaction
+import org.oppia.android.app.model.SchemaObject
+import org.oppia.android.app.model.UserAnswer
+import org.oppia.android.app.model.WrittenTranslationContext
+import org.oppia.android.app.player.state.answerhandling.AnswerErrorCategory
+import org.oppia.android.app.player.state.answerhandling.InteractionAnswerErrorOrAvailabilityCheckReceiver
+import org.oppia.android.app.player.state.answerhandling.InteractionAnswerReceiver
+import org.oppia.android.app.player.state.itemviewmodel.RatioExpressionInputInteractionViewModel
+import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel
+import org.oppia.android.app.player.state.itemviewmodel.StateItemViewModel.InteractionItemFactory
+import org.oppia.android.app.player.state.listener.StateKeyboardButtonListener
+import org.oppia.android.databinding.ActivityRatioInputInteractionViewTestBinding
+import org.oppia.android.util.extensions.getProtoExtra
+import org.oppia.android.util.extensions.putProtoExtra
+import javax.inject.Inject
+
+/**
+ * This is a dummy activity to test [RatioInputInteractionView].
+ */
+class RatioInputInteractionViewTestActivity :
+ InjectableAutoLocalizedAppCompatActivity(),
+ StateKeyboardButtonListener,
+ InteractionAnswerErrorOrAvailabilityCheckReceiver,
+ InteractionAnswerReceiver {
+ private lateinit var binding: ActivityRatioInputInteractionViewTestBinding
+
+ @Inject
+ lateinit var ratioViewModelFactory: RatioExpressionInputInteractionViewModel.FactoryImpl
+
+ /**
+ * Gives access to the [RatioExpressionInputInteractionViewModel].
+ */
+ val ratioExpressionInputInteractionViewModel by lazy {
+ ratioViewModelFactory.create(
+ interaction = Interaction.newBuilder().putCustomizationArgs(
+ "numberOfTerms",
+ SchemaObject.newBuilder().setSignedInt(3).build()
+ ).build()
+ )
+ }
+
+ /**
+ * Gives access to the translation context.
+ */
+ lateinit var writtenTranslationContext: WrittenTranslationContext
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ (activityComponent as ActivityComponentImpl).inject(this)
+ binding = DataBindingUtil.setContentView(
+ this, R.layout.activity_ratio_input_interaction_view_test
+ )
+
+ val params =
+ intent.getProtoExtra(
+ TEST_ACTIVITY_PARAMS_ARGUMENT_KEY,
+ InputInteractionViewTestActivityParams.getDefaultInstance()
+ )
+ writtenTranslationContext = params.writtenTranslationContext
+
+ binding.ratioInteractionInputViewModel = ratioExpressionInputInteractionViewModel
+ }
+
+ /**
+ * Checks for submit time errors.
+ */
+ fun getPendingAnswerErrorOnSubmitClick(v: View) {
+ ratioExpressionInputInteractionViewModel
+ .checkPendingAnswerError(AnswerErrorCategory.SUBMIT_TIME)
+ }
+
+ override fun onAnswerReadyForSubmission(answer: UserAnswer) { }
+
+ override fun onEditorAction(actionCode: Int) { }
+
+ private inline fun InteractionItemFactory.create(
+ interaction: Interaction = Interaction.getDefaultInstance()
+ ): T {
+ return create(
+ entityId = "fake_entity_id",
+ hasConversationView = false,
+ interaction = interaction,
+ interactionAnswerReceiver = this@RatioInputInteractionViewTestActivity,
+ answerErrorReceiver = this@RatioInputInteractionViewTestActivity,
+ hasPreviousButton = false,
+ isSplitView = false,
+ writtenTranslationContext,
+ timeToStartNoticeAnimationMs = null
+ ) as T
+ }
+
+ companion object {
+ private const val TEST_ACTIVITY_PARAMS_ARGUMENT_KEY =
+ "RatioInputInteractionViewTestActivity.params"
+
+ /**
+ * Creates an intent to open [RatioInputInteractionViewTestActivity].
+ */
+ fun createIntent(
+ context: Context,
+ extras: InputInteractionViewTestActivityParams
+ ): Intent {
+ return Intent(context, RatioInputInteractionViewTestActivity::class.java).also {
+ it.putProtoExtra(TEST_ACTIVITY_PARAMS_ARGUMENT_KEY, extras)
+ }
+ }
+ }
+}
diff --git a/app/src/main/res/drawable/review_placeholder.png b/app/src/main/res/drawable-nodpi/review_placeholder.png
similarity index 100%
rename from app/src/main/res/drawable/review_placeholder.png
rename to app/src/main/res/drawable-nodpi/review_placeholder.png
diff --git a/app/src/main/res/drawable/testing_fraction.png b/app/src/main/res/drawable-nodpi/testing_fraction.png
similarity index 100%
rename from app/src/main/res/drawable/testing_fraction.png
rename to app/src/main/res/drawable-nodpi/testing_fraction.png
diff --git a/app/src/main/res/drawable/topic_fractions_01.png b/app/src/main/res/drawable-nodpi/topic_fractions_01.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_01.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_01.png
diff --git a/app/src/main/res/drawable/topic_fractions_02.png b/app/src/main/res/drawable-nodpi/topic_fractions_02.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_02.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_02.png
diff --git a/app/src/main/res/drawable/topic_fractions_03.png b/app/src/main/res/drawable-nodpi/topic_fractions_03.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_03.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_03.png
diff --git a/app/src/main/res/drawable/topic_fractions_04.png b/app/src/main/res/drawable-nodpi/topic_fractions_04.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_04.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_04.png
diff --git a/app/src/main/res/drawable/topic_fractions_05.png b/app/src/main/res/drawable-nodpi/topic_fractions_05.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_05.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_05.png
diff --git a/app/src/main/res/drawable/topic_fractions_06.png b/app/src/main/res/drawable-nodpi/topic_fractions_06.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_06.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_06.png
diff --git a/app/src/main/res/drawable/topic_fractions_07.png b/app/src/main/res/drawable-nodpi/topic_fractions_07.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_07.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_07.png
diff --git a/app/src/main/res/drawable/topic_fractions_08.png b/app/src/main/res/drawable-nodpi/topic_fractions_08.png
similarity index 100%
rename from app/src/main/res/drawable/topic_fractions_08.png
rename to app/src/main/res/drawable-nodpi/topic_fractions_08.png
diff --git a/app/src/main/res/drawable/topic_ratios_01.png b/app/src/main/res/drawable-nodpi/topic_ratios_01.png
similarity index 100%
rename from app/src/main/res/drawable/topic_ratios_01.png
rename to app/src/main/res/drawable-nodpi/topic_ratios_01.png
diff --git a/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml b/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml
index cd483e4b25e..9da30566990 100644
--- a/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml
+++ b/app/src/main/res/layout-sw600dp-land/topic_lessons_story_summary.xml
@@ -86,7 +86,7 @@
android:fontFamily="sans-serif"
android:text="@{viewModel.storyPercentage != 100? @string/status_in_progress : @string/status_completed}"
android:textColor="@color/component_color_shared_primary_text_color"
- android:textSize="10sp"
+ android:textSize="12sp"
android:visibility="@{viewModel.storyPercentage != 0 ? View.VISIBLE : View.GONE}" />
diff --git a/app/src/main/res/layout-sw600dp/administrator_controls_activity.xml b/app/src/main/res/layout-sw600dp/administrator_controls_activity.xml
index e853bff7469..9b778df86f3 100644
--- a/app/src/main/res/layout-sw600dp/administrator_controls_activity.xml
+++ b/app/src/main/res/layout-sw600dp/administrator_controls_activity.xml
@@ -98,7 +98,7 @@
app:layout_constraintTop_toBottomOf="@id/administrator_controls_activity_toolbar" />
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/activity_input_interaction_view_test.xml b/app/src/main/res/layout/activity_input_interaction_view_test.xml
index dba00bfb1e8..780294fa6b4 100644
--- a/app/src/main/res/layout/activity_input_interaction_view_test.xml
+++ b/app/src/main/res/layout/activity_input_interaction_view_test.xml
@@ -7,10 +7,6 @@
-
-
@@ -19,10 +15,6 @@
name="textInputViewModel"
type="org.oppia.android.app.player.state.itemviewmodel.TextInputViewModel" />
-
-
@@ -40,80 +32,6 @@
android:orientation="vertical"
tools:context=".testing.InputInteractionViewTestActivity">
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/administrator_controls_activity.xml b/app/src/main/res/layout/administrator_controls_activity.xml
index 8affc595201..b241ed07167 100644
--- a/app/src/main/res/layout/administrator_controls_activity.xml
+++ b/app/src/main/res/layout/administrator_controls_activity.xml
@@ -28,7 +28,7 @@
android:layout_height="match_parent" />
-
@@ -14,6 +15,7 @@
android:id="@+id/open_dialog_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ style="?android:attr/buttonBarButtonStyle"
android:text="@string/concept_card_two_button_text"
android:textAllCaps="false" />
diff --git a/app/src/main/res/layout/developer_options_activity.xml b/app/src/main/res/layout/developer_options_activity.xml
index bf1bc5c3e06..2f29c0b600c 100644
--- a/app/src/main/res/layout/developer_options_activity.xml
+++ b/app/src/main/res/layout/developer_options_activity.xml
@@ -39,7 +39,7 @@
-
-
-
-
+ app:textChangedListener="@{viewModel.answerTextWatcher}"
+ android:autofillHints="@string/survey_free_form_text_hint" />
diff --git a/app/src/main/res/layout/view_event_logs_event_log_item_view.xml b/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
index 37a985146e1..b080bc27bc9 100644
--- a/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
+++ b/app/src/main/res/layout/view_event_logs_event_log_item_view.xml
@@ -31,6 +31,7 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 0f4af6a8622..4d3f7e4b8de 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -7,7 +7,7 @@
* Sarah zoubida
* Seanlip
-->
-
+
أعلى قائمة التنقل
خيارات
التنزيلات
@@ -167,7 +167,7 @@
لا يجب أن يحتوي أي رقم في الكسر العشري على أكثر من 7 أرقام.
من فضلك إبدأ إجابتك برقم (0 او 0.5 على سبيل المثال)
من فضلك قم بإدخال رقم صالح.
- يمكن أن تحتوي الإجابة على 15 رقمًا (0-9) على الأكثر أو الرموز (. أو -)
+ (–يمكن أن تحتوي الإجابة على 15 رقمًا (0-9) على الأكثر أو الرموز (. أو
من فضلك قم بكتابة نسبة تتكون من أرقام مفصولة بنقطتين رأسيتين (1:2 أو 1:2:3 على سبيل المثال).
من فضلك أدخل نسبة صحيحة (1:2 أو 1:2:3 على سبيل المثال)
إجابتك تحتوي على نقطتين رأسيتين (:) متتاليتين.
@@ -411,7 +411,7 @@
عظيم
هيّا نبدأ.
نعم
- لا...
+ …لا
اختر موضوعًا\nآخرًا.
هل أنت مهتم بـ:\n%s
ملاحظة جديدة متاحة
@@ -498,21 +498,29 @@
شروط الخدمة
باستخدام %s ، فإنك توافق على<br><oppia-noninteractive-policy link=\"tos\"> شروط الخدمة</oppia-noninteractive-policy> و<oppia-noninteractive-policy link=\"privacy\"> سياسة الخصوصية</oppia-noninteractive-policy> .
يرجى زيارة <a href=\"https://www.oppia.org/terms\">هذه الصفحة</a> للحصول على أحدث نسخة من هذه الشروط.
- كيف يمكنني إنشاء ملف تعريف(حساب) جديد؟
- كيف يمكنني حذف ملف التعريف(حساب)؟
- كيف يمكنني تغيير بريدي الإلكتروني / رقم هاتفي؟
ما هي %s؟
من هو المشرف؟
+ كيف يمكنني إنشاء ملف تعريف(حساب) جديد؟
+ ما هي %s؟
+ من هو المشرف؟
+ لماذا لا يتم تحميل مشغل الاستكشاف؟
+ لماذا لا يتم تشغيل الصوت الخاص بي؟
لماذا لا يتم تحميل مشغل الاستكشاف؟
لماذا لا يتم تشغيل الصوت الخاص بي؟
+ كيف يمكنني حذف ملف التعريف(حساب)؟
+ كيف يمكنني تغيير بريدي الإلكتروني / رقم هاتفي؟
لا أجد سؤالي هنا. ماذا الان؟
- <p>إذا كانت هذه هي المرة الأولى التي تنشئ فيها ملفًا شخصيًا وليس لديك رقم تعريف شخصي: <ol><li> من منتقي الملف الشخصي ، اضغط على<strong> قم بإعداد ملفات تعريف متعددة</strong></li><li> قم بإنشاء رقم تعريف شخصي و<strong>احفظ</strong></li><li> املأ جميع البيانات للملف الشخصي.<ol><li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام.</li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><p> إذا قمت بإنشاء ملف تعريف من قبل ولديك رقم تعريف شخصي:<ol><li> من منتقي الملف الشخصي ، اضغط على<strong>إضافة الملف الشخصي</strong></li> <li> أدخل رقم التعريف الشخصي الخاص بك وانقر فوق<strong>إرسال</strong></li><li> املأ جميع الحقول للملف الشخصي. <ol> <li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام. </li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><br><p> ملاحظة: فقط ال<u>مدير</u> قادر على إدارة الملفات الشخصية.</p>
- <p>بمجرد حذف ملف التعريف:</p><ol><li>لا يمكن استعادة ملف التعريف.</li><li>سيتم حذف معلومات الملف الشخصي مثل الاسم والصور والتقدم بشكل دائم.</li></ol><p>لحذف ملف تعريف (باستثناء<u>المسؤول</u>):</p><ol><li> من الصفحة الرئيسية للمسؤول ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على<strong>ضوابط المسؤول</strong>. </li><li> اضغط على<strong>تحرير ملفات التعريف</strong>.</li><li> اضغط على الملف الشخصي الذي ترغب في حذفه.</li><li> في الجزء السفلي من الشاشة ، انقر فوق<strong>حذف الملف الشخصي</strong>. </li><li> اضغط<strong>حذف</strong>لتأكيد الحذف. </li></ol><p><br></p><p> ملاحظة:<u>المسؤول</u>فقط هو القادر على إدارة الملفات الشخصية.</p>
- <p>لتغيير بريدك الإلكتروني / رقم هاتفك:</p><ol><li> من الصفحة الرئيسية للمشرف ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على <strong> عناصر تحكم المسؤول </strong>.</li><li> اضغط على <strong> تعديل الحساب </strong>.</li></ol><p><br></p> <p>إذا كنت تريد تغيير بريدك الإلكتروني:</p><ol><li>أدخل بريدك الإلكتروني الجديد وانقر على <strong> حفظ </strong>.</li><li> يتم إرسال رابط التأكيد لتأكيد بريدك الإلكتروني الجديد. ستنتهي صلاحية الرابط بعد 24 ساعة ويجب النقر عليه لربطه بحسابك.</li></ol><p><br></p> <p>في حالة تغيير رقم هاتفك: </p><ol><li> أدخل رقم هاتفك الجديد وانقر على <strong> تحقق </strong>.</li><li> يتم إرسال رمز لتأكيد رقمك الجديد. ستنتهي صلاحية الرمز بعد 5 دقائق ويجب إدخاله في الشاشة الجديدة لربطه بحسابك.</li></ol>
<p>%1$s <i>\"أو-بي-يا\"</i>(فنلندية) - \"للتعلم\"</p><p><br></p><p>%1$sمهمتنا هي مساعدة أي شخص على تعلم أي شيء يريده بطريقة فعالة وممتعة.</p><p><br></p><p>من خلال إنشاء مجموعة من الدروس المجانية عالية الجودة والفعالة بشكل واضح بمساعدة معلمين من جميع أنحاء العالم ، تهدف %1$s إلى تزويد الطلاب بتعليم جيد - بغض النظر عن مكان وجودهم أو الموارد التقليدية التي يمكنهم الوصول إليها.</p><p><br></p><p>كطالب ، يمكنك أن تبدأ مغامرتك التعليمية من خلال تصفح الموضوعات المدرجة في الصفحة الرئيسية!</p>
<p>المشرف هو المستخدم الرئيسي الذي يدير ملفات التعريف والإعدادات لكل ملف تعريف على حسابه. هم على الأرجح والدك أو معلمك أو وصي عليك الذي أنشأ هذا الملف الشخصي لك.</p><p><br></p><p>يمكن للمسؤولين إدارة الملفات الشخصية وتعيين أرقام التعريف الشخصية وتغيير الإعدادات الأخرى ضمن حساباتهم. بناءً على ملف التعريف الخاص بك ، قد تكون أذونات المسؤول مطلوبة لبعض الميزات مثل تنزيل الموضوعات وتغيير رقم التعريف الشخصي وغير ذلك.</p><p><br></p><p>لمعرفة من هو المسؤول لديك ، انتقل إلى منتقي الملف الشخصي. الملف الشخصي الأول المدرج ولديه \"المسؤول\" مكتوب باسمه هو المسؤول.</p>
+ <p>إذا كانت هذه هي المرة الأولى التي تنشئ فيها ملفًا شخصيًا وليس لديك رقم تعريف شخصي: <ol><li> من منتقي الملف الشخصي ، اضغط على<strong> قم بإعداد ملفات تعريف متعددة</strong></li><li> قم بإنشاء رقم تعريف شخصي و<strong>احفظ</strong></li><li> املأ جميع البيانات للملف الشخصي.<ol><li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام.</li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><p> إذا قمت بإنشاء ملف تعريف من قبل ولديك رقم تعريف شخصي:<ol><li> من منتقي الملف الشخصي ، اضغط على<strong>إضافة الملف الشخصي</strong></li> <li> أدخل رقم التعريف الشخصي الخاص بك وانقر فوق<strong>إرسال</strong></li><li> املأ جميع الحقول للملف الشخصي. <ol> <li>(اختياري) قم بتحميل صورة.</li> <li>إدخال اسم.</li> <li>(اختياري) قم بتعيين رقم تعريف شخصي مكون من 3 أرقام. </li></ol></li><li> اضغط<strong>إنشاء</strong> . تمت إضافة هذا الملف الشخصي إلى منتقي ملف التعريف الخاص بك!</li></ol></p><br><p> ملاحظة: فقط ال<u>مدير</u> قادر على إدارة الملفات الشخصية.</p>
+ <p>%1$s <i>\"أو-بي-يا\"</i>(فنلندية) - \"للتعلم\"</p><p><br></p><p>%1$sمهمتنا هي مساعدة أي شخص على تعلم أي شيء يريده بطريقة فعالة وممتعة.</p><p><br></p><p>من خلال إنشاء مجموعة من الدروس المجانية عالية الجودة والفعالة بشكل واضح بمساعدة معلمين من جميع أنحاء العالم ، تهدف %1$s إلى تزويد الطلاب بتعليم جيد - بغض النظر عن مكان وجودهم أو الموارد التقليدية التي يمكنهم الوصول إليها.</p><p><br></p><p>كطالب ، يمكنك أن تبدأ مغامرتك التعليمية من خلال تصفح الموضوعات المدرجة في الصفحة الرئيسية!</p>
+ <p>المشرف هو المستخدم الرئيسي الذي يدير ملفات التعريف والإعدادات لكل ملف تعريف على حسابه. هم على الأرجح والدك أو معلمك أو وصي عليك الذي أنشأ هذا الملف الشخصي لك.</p><p><br></p><p>يمكن للمسؤولين إدارة الملفات الشخصية وتعيين أرقام التعريف الشخصية وتغيير الإعدادات الأخرى ضمن حساباتهم. بناءً على ملف التعريف الخاص بك ، قد تكون أذونات المسؤول مطلوبة لبعض الميزات مثل تنزيل الموضوعات وتغيير رقم التعريف الشخصي وغير ذلك.</p><p><br></p><p>لمعرفة من هو المسؤول لديك ، انتقل إلى منتقي الملف الشخصي. الملف الشخصي الأول المدرج ولديه \"المسؤول\" مكتوب باسمه هو المسؤول.</p>
+ <p>إذا لم يتم تحميل مشغل الاستكشاف</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><p> <ul> <li> انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار </li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li> إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. </li></ul><p>اطلب من المشرف التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li> اطلب من المشرف استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه </li></ul><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li> أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org. </li></ul>
+ <p>إذا لم يتم تشغيل الصوت الخاص بك</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><ul><li>انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار</li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li>إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. قد يتسبب الإنترنت البطيء في تحميل الصوت بشكل غير منتظم ، مما يجعل من الصعب تشغيله.</li></ul><p><br></p><p>اطلب من المسؤول التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li>اطلب من المسؤول استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه</li></ul><p><br></p><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li>أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org.</li></ul>
<p>إذا لم يتم تحميل مشغل الاستكشاف</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><p> <ul> <li> انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار </li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li> إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. </li></ul><p>اطلب من المشرف التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li> اطلب من المشرف استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه </li></ul><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li> أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org. </li></ul>
<p>إذا لم يتم تشغيل الصوت الخاص بك</p><p><br></p><p>تحقق لمعرفة ما إذا كان التطبيق محدثًا أم لا:</p><ul><li>انتقل إلى متجر Play وتأكد من تحديث التطبيق إلى أحدث إصدار</li></ul><p><br></p><p>تحقق من اتصالك بالإنترنت:</p><ul><li>إذا كان اتصالك بالإنترنت بطيئًا ، فحاول إعادة الاتصال بشبكة Wi-Fi أو الاتصال بشبكة أخرى. قد يتسبب الإنترنت البطيء في تحميل الصوت بشكل غير منتظم ، مما يجعل من الصعب تشغيله.</li></ul><p><br></p><p>اطلب من المسؤول التحقق من أجهزتهم واتصال الإنترنت:</p><ul><li>اطلب من المسؤول استكشاف الأخطاء وإصلاحها باستخدام الخطوات المذكورة أعلاه</li></ul><p><br></p><p>أخبرنا إذا كنت لا تزال تواجه مشكلات في التحميل:</p><ul><li>أبلغ عن مشكلة عن طريق الاتصال بنا على admin@oppia.org.</li></ul>
+ <p>بمجرد حذف ملف التعريف:</p><ol><li>لا يمكن استعادة ملف التعريف.</li><li>سيتم حذف معلومات الملف الشخصي مثل الاسم والصور والتقدم بشكل دائم.</li></ol><p>لحذف ملف تعريف (باستثناء<u>المسؤول</u>):</p><ol><li> من الصفحة الرئيسية للمسؤول ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على<strong>ضوابط المسؤول</strong>. </li><li> اضغط على<strong>تحرير ملفات التعريف</strong>.</li><li> اضغط على الملف الشخصي الذي ترغب في حذفه.</li><li> في الجزء السفلي من الشاشة ، انقر فوق<strong>حذف الملف الشخصي</strong>. </li><li> اضغط<strong>حذف</strong>لتأكيد الحذف. </li></ol><p><br></p><p> ملاحظة:<u>المسؤول</u>فقط هو القادر على إدارة الملفات الشخصية.</p>
+ <p>لتغيير بريدك الإلكتروني / رقم هاتفك:</p><ol><li> من الصفحة الرئيسية للمشرف ، اضغط على زر القائمة أعلى اليسار.</li><li> اضغط على <strong> عناصر تحكم المسؤول </strong>.</li><li> اضغط على <strong> تعديل الحساب </strong>.</li></ol><p><br></p> <p>إذا كنت تريد تغيير بريدك الإلكتروني:</p><ol><li>أدخل بريدك الإلكتروني الجديد وانقر على <strong> حفظ </strong>.</li><li> يتم إرسال رابط التأكيد لتأكيد بريدك الإلكتروني الجديد. ستنتهي صلاحية الرابط بعد 24 ساعة ويجب النقر عليه لربطه بحسابك.</li></ol><p><br></p> <p>في حالة تغيير رقم هاتفك: </p><ol><li> أدخل رقم هاتفك الجديد وانقر على <strong> تحقق </strong>.</li><li> يتم إرسال رمز لتأكيد رقمك الجديد. ستنتهي صلاحية الرمز بعد 5 دقائق ويجب إدخاله في الشاشة الجديدة لربطه بحسابك.</li></ol>
<p> إذا لم تتمكن من العثور على سؤالك أو كنت ترغب في الإبلاغ عن خطأ ، فاتصل بنا على admin@oppia.org. </p>
نشاط اختبار جزء تحرير ملف التعريف
يتحكم المسؤول في نشاط اختبار التجزئة
diff --git a/app/src/main/res/values-pcm-rNG/strings.xml b/app/src/main/res/values-pcm-rNG/strings.xml
index e5c5defae96..9dcc4a8953c 100644
--- a/app/src/main/res/values-pcm-rNG/strings.xml
+++ b/app/src/main/res/values-pcm-rNG/strings.xml
@@ -200,12 +200,12 @@
- 1 Lesson
- %s Lessons
-
+
- 1 Story Completed
- %s Stories Completed
- %s Stories Completed
-
+
- 1 Topic in Progress
- %s Topics in Progress
- %s Topics in Progress
@@ -427,7 +427,7 @@
Up
Down
%s %s
-
+
- 0 minutes ago
- a minute ago
- %s minutes ago
@@ -507,21 +507,29 @@
Terms of Service
By using %s, you dey agree to our <br> <oppia-noninteractive-policy link=\"tos\">Terms of Service</oppia-noninteractive-policy> and <oppia-noninteractive-policy link=\"privacy\">Privacy Policy</oppia-noninteractive-policy>.
Abeg visit <a href=\"https://www.oppia.org/terms\">dis page</a> for di latest version of dese terms.
- How I go fit create a new profile?
- How I go delete a profile?
- How I go take change my email/phone nomba?
Wetin be %s?
Who be Administrator?
+ How I go fit create a new profile?
+ Wetin be %s?
+ Who be Administrator?
+ Why di Exploration player no dey load?
+ Why my audio no dey play?
Why di Exploration player no dey load?
Why my audio no dey play?
+ How I go delete a profile?
+ How I go take change my email/phone nomba?
I no dey find my question here. What now?
- <p>If na your first time creating a profile and not have a PIN:<ol><li>From di Profile Chooser, tap on <strong>Set up Multiple Profiles</strong>.</li><li>Create a PIN and <strong>Save</strong>.</li><li>Fill in all boxes for di profile.<ol><li>(Optional) Upload a photo.</li><li>Enter a name.</li><li>(Optional) Assign a 3-digit PIN.</li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><p> If you don create a profile before and you get a PIN:<ol><li>From di Profile Chooser, tap on <strong>Add Profile</strong>. </li><li>Enter your PIN and tap <strong>Submit</strong>. </li><li>Fill in all boxes for di profile.<ol><li> (Optional) Upload a photo. </li><li> Enter a name. </li><li> (Optional) Assign a 3-digit PIN. </li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><br><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
- <p>Once profile don delete:</p><ol><li>Di profile no fit dey recovered. </li><li> Profile information such as name, photos, and progress go permanently delete. </li></ol><p>To delete a profile (excluding the <u>Administrator\'s</u>):</p><ol><li> From di Administrator\'s Home Page, tap on di menu button on di top left. </li><li>Tap on <strong>Administrator Controls</strong>. </li><li>Tap on <strong>Edit Profiles</strong>. </li><li>Tap on di Profile wey you wan delete. </li><li>For di bottom of di screen, tap <strong>Profile Deletion</strong>. </li><li>Tap <strong>Delete</strong> to confirm deletion. </li></ol><p><br></p><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
- <p>To change your email/phone nomba:</p><ol><li>From di Administrator\'s Home Page, tap on di menu button for di top left.</li><li>Tap on <strong>Administrator Controls</strong>.</li><li>Tap on <strong>Edit Account</strong>.</li></ol><p><br></p> <p>If you wan change your email:</p><ol><li>Enter your new email and tap <strong>Save</strong>.</li><li>A confirmation link go send to confirm your new email. Di link go expire after 24 hours and you must click on am to be associated with your account.</li></ol><p><br></p> <p>If you dey change your phone nomba:</p><ol><li> Enter your new phone nomba and tap <strong>Verify</strong>.</li><li> A code go send to confirm your new nomba. Di code go expire after 5 minutes and you must be enter am in for di new screen to be associated with your account.</li></ol>
<p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"to learn\"</p><p><br></p><p>%1$s\'s mission na to help anyone learn anything dey want in an effective and enjoyable way.</p><p><br></p><p>By creating a set of free, high-quality, demonstrably effective lessons with di help of educators from around di world, %1$s dey aim to provide students with quality education — regardless of where dem dey or di traditional resources wey dem get access to.</p><p><br></p><p>As a student, you fit start your learning adventure by browsing di topics listed on di Home Page!</p>
<p>An Administrator na di main user wey dey manage profiles and settings for every profile on top their account. They fit be your parent, teacher, or guardian wey don create dis profile for you. </p><p><br></p><p>Administrators get di ability to manage profiles, assign PINs, and change other settings under their account. Depending on your profile, Administrator permissions fit dey required for some features such as changing your PIN, and more. </p><p><br></p><p>To see who your Administrator be, go di Profile Chooser. Di first profile fot di list and get \"Administrator\" written under their name na di Administrator. </p>
+ <p>If na your first time creating a profile and not have a PIN:<ol><li>From di Profile Chooser, tap on <strong>Set up Multiple Profiles</strong>.</li><li>Create a PIN and <strong>Save</strong>.</li><li>Fill in all boxes for di profile.<ol><li>(Optional) Upload a photo.</li><li>Enter a name.</li><li>(Optional) Assign a 3-digit PIN.</li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><p> If you don create a profile before and you get a PIN:<ol><li>From di Profile Chooser, tap on <strong>Add Profile</strong>. </li><li>Enter your PIN and tap <strong>Submit</strong>. </li><li>Fill in all boxes for di profile.<ol><li> (Optional) Upload a photo. </li><li> Enter a name. </li><li> (Optional) Assign a 3-digit PIN. </li></ol></li><li>Tap <strong>Create</strong>. Dis profile go add to your Profile Chooser!</li></ol></p><br><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
+ <p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"to learn\"</p><p><br></p><p>%1$s\'s mission na to help anyone learn anything dey want in an effective and enjoyable way.</p><p><br></p><p>By creating a set of free, high-quality, demonstrably effective lessons with di help of educators from around di world, %1$s dey aim to provide students with quality education — regardless of where dem dey or di traditional resources wey dem get access to.</p><p><br></p><p>As a student, you fit start your learning adventure by browsing di topics listed on di Home Page!</p>
+ <p>An Administrator na di main user wey dey manage profiles and settings for every profile on top their account. They fit be your parent, teacher, or guardian wey don create dis profile for you. </p><p><br></p><p>Administrators get di ability to manage profiles, assign PINs, and change other settings under their account. Depending on your profile, Administrator permissions fit dey required for some features such as changing your PIN, and more. </p><p><br></p><p>To see who your Administrator be, go di Profile Chooser. Di first profile fot di list and get \"Administrator\" written under their name na di Administrator. </p>
+ <p>If di Exploration Player no dey load</p><p><br></p><p>Check to see if di app dey up to date:</p><p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. </li></ul><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps above </li></ul><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
+ <p>If your audio no dey play</p><p><br></p><p>Check to see if di app dey up to date:</p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. Slow internet fit cause di audio to load irregularly, and go make am difficult to play. </li></ul><p><br></p><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps for up</li></ul><p><br></p><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
<p>If di Exploration Player no dey load</p><p><br></p><p>Check to see if di app dey up to date:</p><p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. </li></ul><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps above </li></ul><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
<p>If your audio no dey play</p><p><br></p><p>Check to see if di app dey up to date:</p><ul><li> Go to di Play Store and make sure sey di app dey updated to di latest version </li></ul><p><br></p><p>Check your internet connection:</p><ul><li> If your internet connection dey slow, try re-connecting to your Wi-Fi network or connecting to a different network. Slow internet fit cause di audio to load irregularly, and go make am difficult to play. </li></ul><p><br></p><p>Ask di Administrator to check their device and internet connection:</p><ul><li> Get di Administrator to troubleshoot using di steps for up</li></ul><p><br></p><p>Let us know if you still dey get issues with loading:</p><ul><li> Report a problem by contacting us at admin@oppia.org. </li></ul>
+ <p>Once profile don delete:</p><ol><li>Di profile no fit dey recovered. </li><li> Profile information such as name, photos, and progress go permanently delete. </li></ol><p>To delete a profile (excluding the <u>Administrator\'s</u>):</p><ol><li> From di Administrator\'s Home Page, tap on di menu button on di top left. </li><li>Tap on <strong>Administrator Controls</strong>. </li><li>Tap on <strong>Edit Profiles</strong>. </li><li>Tap on di Profile wey you wan delete. </li><li>For di bottom of di screen, tap <strong>Profile Deletion</strong>. </li><li>Tap <strong>Delete</strong> to confirm deletion. </li></ol><p><br></p><p>Note: Only di <u>Administrator</u> go dey able to manage profiles.</p>
+ <p>To change your email/phone nomba:</p><ol><li>From di Administrator\'s Home Page, tap on di menu button for di top left.</li><li>Tap on <strong>Administrator Controls</strong>.</li><li>Tap on <strong>Edit Account</strong>.</li></ol><p><br></p> <p>If you wan change your email:</p><ol><li>Enter your new email and tap <strong>Save</strong>.</li><li>A confirmation link go send to confirm your new email. Di link go expire after 24 hours and you must click on am to be associated with your account.</li></ol><p><br></p> <p>If you dey change your phone nomba:</p><ol><li> Enter your new phone nomba and tap <strong>Verify</strong>.</li><li> A code go send to confirm your new nomba. Di code go expire after 5 minutes and you must be enter am in for di new screen to be associated with your account.</li></ol>
<p>If you no fit find your question or you go like to report a bug, contact us for admin@oppia.org.</p>
Profile Edit Fragment Test Activity
Administrator Controls Fragment Test Activity
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 8827a8e5a7d..ef9a84e60c5 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -202,12 +202,10 @@
- %s história concluída
- - %s Histórias concluídas
- %s Histórias concluídas
- %s Tópico em andamento
- - %s Tópicos em andamento
- %s Tópicos em andamento
Página de seleção de perfil
@@ -393,7 +391,7 @@
Ótimo
Vamos começar.
Sim
- Não...
+ Não…
Escolha um\ntópico diferente.
Você está interessado em:\n%s?
Nova dica disponível
@@ -480,21 +478,29 @@
Termos de Serviço
Ao usar %s, você concorda com nossos <br> <oppia-noninteractive-policy link=\"tos\">Termos de Serviço</oppia-noninteractive-policy> e <oppia-noninteractive-policy link=\"privacy\">Política de Privacidade</oppia-noninteractive-policy>.
Por favor visite <a href=\"https://www.oppia.org/terms\">esta página</a> para acessar a última versão destes termos.
- Como posso criar um novo perfil?
- Como posso deletar um perfil?
- Como posso alterar meu e-mail/número de telefone?
O que é %s?
Quem é um administrador?
+ Como posso criar um novo perfil?
+ O que é %s?
+ Quem é um administrador?
+ Por que a exploração não está carregando?
+ Por que meu áudio não está tocando?
Por que a exploração não está carregando?
Por que meu áudio não está tocando?
+ Como posso deletar um perfil?
+ Como posso alterar meu e-mail/número de telefone?
Não consigo encontrar minha pergunta aqui. E agora?
- <p>Se é a sua primeira vez criando um perfil e você não tem um PIN:<ol> <li> No Seletor de Perfil, toque em <strong>Configurar Múltiplos Perfis</strong>. </li> <li> Crie um PIN e <strong>Salvar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li></ol></li><li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><p> Se você já criou um perfil antes e tem um PIN: <ol> <li>No Seletor de Perfil, toque em <strong>Adicionar Perfil</strong>. </li> <li> 2. Digite seu PIN e toque em <strong>Enviar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li> </ol> </li> <li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><br><p> Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
- <p>Depois que um perfil é deletado:</p> <ol><li>O perfil não pode ser recuperado. </li> <li> As informações do perfil, como nome, fotos e progresso, serão excluídas permanentemente. </li></ol><p>Para deletar um perfil(excluindo o do <u>Administrador</u>):</p> <ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li> <li>Toque em <strong>Controles do Administrador</strong>.</li> <li>3. Toque em <strong>Editar Perfis</strong>.</li> <li>4. Toque no perfil que deseja excluir.</li> <li>5. Na parte inferior da tela, toque em <strong>Exclusão de Perfil</strong>.</li> <li>6. Toque em <strong>Deletar</strong> para confirmar a exclusão.</li></ol><p><br></p><p>Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
- <p>Para alterar seu e-mail/número de telefone:</p><ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li><li>Toque em <strong>Controles do Administrador</strong>.</li><li>Toque em <strong>Editar Conta</strong>.</li></ol><p><br></p> <p>Se você deseja alterar seu e-mail:</p><ol><li>Digite seu novo e-mail e toque em <strong>Salvar</strong>.</li><li>Um link de confirmação será enviado para confirmar seu novo e-mail. O link irá expirar após 24 horas e deve ser clicado para ser associado à sua conta. </li></ol><p><br></p> <p>Se mudar seu número de telefone:</p><ol><li>Digite seu novo número de telefone e toque em <strong>Verificar</strong>.</li><li>Um código será enviado para confirmar seu novo número. O código expira após 5 minutos e deve ser inserido na nova tela para ser associado à sua conta.</li></ol>
<p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"aprender\"</p><p><br></p><p>%1$s tem a missão de ajudar qualquer pessoa a aprender o que quiser de uma forma eficaz e agradável.</p><p><br></p><p>Ao criar um conjunto de aulas gratuitas, de alta qualidade e comprovadamente eficazes com a ajuda de educadores de todo o mundo, %1$s visa proporcionar aos alunos uma educação de qualidade - independentemente de onde estejam ou a quais recursos tradicionais tenham acesso.</p><p><br></p><p>Como estudante, você pode começar sua aventura de aprendizado navegando pelos tópicos listados na página inicial!</p>
<p>Um administrador é o usuário principal que gerencia perfis e configurações para cada perfil em sua conta. Provavelmente, eles são seus pais, professores ou responsáveis que criaram este perfil para você.</p><p><br></p><p>Os administradores podem gerenciar perfis, atribuir PINs e alterar outras configurações em suas contas. Dependendo do seu perfil, as permissões de administrador podem ser necessárias para determinados recursos, como download de tópicos, alteração do PIN e mais. </p><p><br></p><p>Para ver quem é o seu administrador, vá para o Seletor de perfil. O primeiro perfil listado e com \"Administrador\" escrito em seu nome é o Administrador. </p>
+ <p>Se é a sua primeira vez criando um perfil e você não tem um PIN:<ol> <li> No Seletor de Perfil, toque em <strong>Configurar Múltiplos Perfis</strong>. </li> <li> Crie um PIN e <strong>Salvar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li></ol></li><li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><p> Se você já criou um perfil antes e tem um PIN: <ol> <li>No Seletor de Perfil, toque em <strong>Adicionar Perfil</strong>. </li> <li> 2. Digite seu PIN e toque em <strong>Enviar</strong>. </li> <li> Preencha todos os campos do perfil. <ol> <li> (Opcional) Carregue uma foto. </li> <li> Insira um nome. </li> <li> (Opcional) Atribua um PIN de 3 dígitos. </li> </ol> </li> <li> 4. Toque em <strong>Criar</strong>. Este perfil está adicionado ao seu Seletor de Perfil! </li></ol></p><br><p> Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
+ <p>%1$s <i>\"O-pee-yah\"</i> (Finnish) - \"aprender\"</p><p><br></p><p>%1$s tem a missão de ajudar qualquer pessoa a aprender o que quiser de uma forma eficaz e agradável.</p><p><br></p><p>Ao criar um conjunto de aulas gratuitas, de alta qualidade e comprovadamente eficazes com a ajuda de educadores de todo o mundo, %1$s visa proporcionar aos alunos uma educação de qualidade - independentemente de onde estejam ou a quais recursos tradicionais tenham acesso.</p><p><br></p><p>Como estudante, você pode começar sua aventura de aprendizado navegando pelos tópicos listados na página inicial!</p>
+ <p>Um administrador é o usuário principal que gerencia perfis e configurações para cada perfil em sua conta. Provavelmente, eles são seus pais, professores ou responsáveis que criaram este perfil para você.</p><p><br></p><p>Os administradores podem gerenciar perfis, atribuir PINs e alterar outras configurações em suas contas. Dependendo do seu perfil, as permissões de administrador podem ser necessárias para determinados recursos, como download de tópicos, alteração do PIN e mais. </p><p><br></p><p>Para ver quem é o seu administrador, vá para o Seletor de perfil. O primeiro perfil listado e com \"Administrador\" escrito em seu nome é o Administrador. </p>
+ <p>Se a exploração não estiver carregando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><p> <ul> <li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. </li></ul><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima </li></ul><p>Informe-nos se você ainda tiver problemas com o carregamento::</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li> </ul>
+ <p>Se o seu áudio não estiver tocando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><ul><li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. A Internet lenta pode fazer com que o áudio carregue irregularmente, dificultando a reprodução. </li></ul><p><br></p><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima</li></ul><p><br></p><p>Informe-nos se você ainda tiver problemas com o carregamento:</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li></ul>
<p>Se a exploração não estiver carregando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><p> <ul> <li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. </li></ul><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima </li></ul><p>Informe-nos se você ainda tiver problemas com o carregamento::</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li> </ul>
<p>Se o seu áudio não estiver tocando</p><p><br></p><p>Verifique se o aplicativo está atualizado:</p><ul><li> Acesse a Play Store e certifique-se de que o aplicativo esteja atualizado com a versão mais recente </li></ul><p><br></p><p>Verifique sua conexão com a internet:</p><ul><li> Se sua conexão com a Internet estiver lenta, tente se reconectar à rede Wi-Fi ou conectar-se a uma rede diferente. A Internet lenta pode fazer com que o áudio carregue irregularmente, dificultando a reprodução. </li></ul><p><br></p><p>Peça ao administrador para verificar o dispositivo e a conexão com a Internet:</p><ul><li> Peça ao administrador para solucionar o problema usando as etapas acima</li></ul><p><br></p><p>Informe-nos se você ainda tiver problemas com o carregamento:</p><ul><li> Relate um problema entrando em contato conosco em admin@oppia.org. </li></ul>
+ <p>Depois que um perfil é deletado:</p> <ol><li>O perfil não pode ser recuperado. </li> <li> As informações do perfil, como nome, fotos e progresso, serão excluídas permanentemente. </li></ol><p>Para deletar um perfil(excluindo o do <u>Administrador</u>):</p> <ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li> <li>Toque em <strong>Controles do Administrador</strong>.</li> <li>3. Toque em <strong>Editar Perfis</strong>.</li> <li>4. Toque no perfil que deseja excluir.</li> <li>5. Na parte inferior da tela, toque em <strong>Exclusão de Perfil</strong>.</li> <li>6. Toque em <strong>Deletar</strong> para confirmar a exclusão.</li></ol><p><br></p><p>Nota: Apenas o <u>Administrador</u> pode gerenciar perfis.</p>
+ <p>Para alterar seu e-mail/número de telefone:</p><ol><li>Na página inicial do administrador, toque no botão de menu no canto superior esquerdo.</li><li>Toque em <strong>Controles do Administrador</strong>.</li><li>Toque em <strong>Editar Conta</strong>.</li></ol><p><br></p> <p>Se você deseja alterar seu e-mail:</p><ol><li>Digite seu novo e-mail e toque em <strong>Salvar</strong>.</li><li>Um link de confirmação será enviado para confirmar seu novo e-mail. O link irá expirar após 24 horas e deve ser clicado para ser associado à sua conta. </li></ol><p><br></p> <p>Se mudar seu número de telefone:</p><ol><li>Digite seu novo número de telefone e toque em <strong>Verificar</strong>.</li><li>Um código será enviado para confirmar seu novo número. O código expira após 5 minutos e deve ser inserido na nova tela para ser associado à sua conta.</li></ol>
<p>Se você não consegue encontrar sua pergunta ou gostaria de relatar um problema, entre em contato conosco em admin@oppia.org.</p>
Atividade de Teste de Fragmento de Edição de Perfil
Controle Administrativo da Atividade de Teste de Fragmento
diff --git a/app/src/main/res/values-sw/strings.xml b/app/src/main/res/values-sw/strings.xml
index 75740434b12..3a25ec5b46a 100644
--- a/app/src/main/res/values-sw/strings.xml
+++ b/app/src/main/res/values-sw/strings.xml
@@ -411,20 +411,28 @@
Habari ya asubuhi,
Habari ya mchana,
Habari ya jioni,
- Ninawezaje kuunda wasifu mpya?
- Ninawezaje kufuta wasifu?
- Nitabadilisha aje barua pepe/nambari yangu ya simu?
%s ni nini?
Msimamizi ni nani?
+ Ninawezaje kuunda wasifu mpya?
+ %s ni nini?
+ Msimamizi ni nani?
+ Kwa nini kicheza Uchunguzi hakipakii?
+ Kwa nini sauti yangu haichezwi?
Kwa nini kicheza Uchunguzi hakipakii?
Kwa nini sauti yangu haichezwi?
+ Ninawezaje kufuta wasifu?
+ Nitabadilisha aje barua pepe/nambari yangu ya simu?
Sijapata swali langu hapa. Nini sasa?
- <p>Ikiwa ni mara yako ya kwanza kuunda wasifu na huna Nambari ya Siri: <ol> <li> Kutoka kwa Kichagua Wasifu, gusa <strong>Weka Wasifu Nyingi</strong>. </li> <li> Unda Nambari ya Siri na <strong>Hifadhi</strong>. </li> <li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3.</li></ol></li><li>Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><p> Ikiwa umeunda wasifu hapo awali na una Nambari ya Siri: <ol><li> Kutoka kwa Kichagua Wasifu, gusa <strong>Ongeza Wasifu</strong>. </li><li>Weka Nambari yako ya Siri na uguse <strong>Wasilisha</strong>. </li><li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3. </li></ol></li><li> Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><br><p> Kumbuka: <u>Msimamizi pekee</u> ndiye anayeweza kudhibiti wasifu.</p>
- <p>Wasifu unapofutwa:</p><ol><li> Wasifu hauwezi kurejeshwa. </li><li> Taarifa ya wasifu kama vile jina, picha na maendeleo yatafutwa kabisa. </li></ol><p>Ili kufuta wasifu (bila kujumuisha <u>Msimamizi</u>):</p> <ol><li> Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto. </li><li> Gusa <strong>Vidhibiti vya Msimamizi</strong>. </li><li> Gusa <strong>Hariri Wasifu</strong>. </li><li> Gonga Wasifu ambao ungependa kufuta. </li><li> Katika sehemu ya chini ya skrini, gusa <strong>Ufutaji wa Wasifu</strong>. </li><li> Gusa <strong>Futa</strong> ili kuthibitisha kufuta.</li></ol><p><br></p><p>Kumbuka: <u>Msimamizi</u> pekee ndiye anayeweza kudhibiti wasifu.</p>
- <p>Ili kubadilisha barua pepe/nambari yako ya simu:</p> <ol><li>Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto.</li> <li>Gusa <strong>Vidhibiti vya Msimamizi</strong>.</li><li> Gusa <strong>Hariri Akaunti</strong>.</li></ol><p><br></p> <p>Ikiwa ungependa kubadilisha barua pepe yako:</p><ol><li> Weka barua pepe yako mpya na uguse <strong>Hifadhi</strong>.</li><li> Kiungo cha uthibitishaji kinatumwa ili kuthibitisha barua pepe yako mpya. Muda wa kiungo utaisha baada ya saa 24 na lazima ubofye ili kuhusishwa na akaunti yako. </li></ol><p><br></p> <p>Ikiwa unabadilisha nambari yako ya simu:</p><ol><li> Weka nambari yako mpya ya simu na uguse <strong>Thibitisha</strong>.</li><li> Nambari ya kuthibitisha inatumwa ili kuthibitisha nambari yako mpya. Nambari ya kuthibitisha itaisha baada ya dakika 5 na lazima iwekwe kwenye skrini mpya ili kuhusishwa na akaunti yako.</li></ol>
<p>%1$s <i>\"O-pee-yah\"</i> (Kifini) - \"kujifunza\"</p><p><br></p><p>%1$s\'s dhamira ni kumsaidia mtu yeyote kujifunza chochote anachotaka kwa njia bora na ya kufurahisha.</p><p><br></p><p>Kwa kuunda seti ya masomo yasiyolipishwa, ya ubora wa juu, na yenye matokeo kwa usaidizi. ya waelimishaji kutoka duniani kote, %1$s inalenga kuwapa wanafunzi elimu bora — bila kujali walipo au ni nyenzo gani za jadi wanazoweza kufikia.</p><p><br></p><p> Kama mwanafunzi, unaweza kuanza safari yako ya kujifunza kwa kuvinjari mada zilizoorodheshwa kwenye Ukurasa wa Mwanzo!</p>
<p>Msimamizi ndiye mtumiaji mkuu anayedhibiti wasifu na mipangilio ya kila wasifu kwenye akaunti yake.Uwezekano mkubwa ni mzazi, mwalimu au mlezi wako aliyekuundia wasifu huu. </p><p><br></p><p>Wasimamizi wana uwezo wa kudhibiti wasifu, kugawa Nambari ya Siri, na kubadilisha mipangilio mingine chini ya akaunti yao. Kulingana na wasifu wako, ruhusa za Msimamizi zinaweza kuhitajika kwa vipengele fulani kama vile kupakua Mada, kubadilisha Nambari yako ya Siri na zaidi. </p><p><br></p><p>Ili kujua Msimamizi wako ni nani, nenda kwa Kichagua Wasifu. Wasifu wa kwanza ulioorodheshwa na una \"Msimamizi\" iliyoandikwa chini ya jina lake ni Msimamizi. </p>
+ <p>Ikiwa ni mara yako ya kwanza kuunda wasifu na huna Nambari ya Siri: <ol> <li> Kutoka kwa Kichagua Wasifu, gusa <strong>Weka Wasifu Nyingi</strong>. </li> <li> Unda Nambari ya Siri na <strong>Hifadhi</strong>. </li> <li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3.</li></ol></li><li>Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><p> Ikiwa umeunda wasifu hapo awali na una Nambari ya Siri: <ol><li> Kutoka kwa Kichagua Wasifu, gusa <strong>Ongeza Wasifu</strong>. </li><li>Weka Nambari yako ya Siri na uguse <strong>Wasilisha</strong>. </li><li> Jaza sehemu zote za wasifu. <ol><li> (Si lazima) Pakia picha. </li> <li> Weka jina. </li> <li> (Si lazima) Weka Nambari ya Siri yenye tarakimu 3. </li></ol></li><li> Gusa <strong>Unda</strong>. Wasifu huu umeongezwa kwa Kichagua Wasifu wako! </li></ol></p><br><p> Kumbuka: <u>Msimamizi pekee</u> ndiye anayeweza kudhibiti wasifu.</p>
+ <p>%1$s <i>\"O-pee-yah\"</i> (Kifini) - \"kujifunza\"</p><p><br></p><p>%1$s\'s dhamira ni kumsaidia mtu yeyote kujifunza chochote anachotaka kwa njia bora na ya kufurahisha.</p><p><br></p><p>Kwa kuunda seti ya masomo yasiyolipishwa, ya ubora wa juu, na yenye matokeo kwa usaidizi. ya waelimishaji kutoka duniani kote, %1$s inalenga kuwapa wanafunzi elimu bora — bila kujali walipo au ni nyenzo gani za jadi wanazoweza kufikia.</p><p><br></p><p> Kama mwanafunzi, unaweza kuanza safari yako ya kujifunza kwa kuvinjari mada zilizoorodheshwa kwenye Ukurasa wa Mwanzo!</p>
+ <p>Msimamizi ndiye mtumiaji mkuu anayedhibiti wasifu na mipangilio ya kila wasifu kwenye akaunti yake.Uwezekano mkubwa ni mzazi, mwalimu au mlezi wako aliyekuundia wasifu huu. </p><p><br></p><p>Wasimamizi wana uwezo wa kudhibiti wasifu, kugawa Nambari ya Siri, na kubadilisha mipangilio mingine chini ya akaunti yao. Kulingana na wasifu wako, ruhusa za Msimamizi zinaweza kuhitajika kwa vipengele fulani kama vile kupakua Mada, kubadilisha Nambari yako ya Siri na zaidi. </p><p><br></p><p>Ili kujua Msimamizi wako ni nani, nenda kwa Kichagua Wasifu. Wasifu wa kwanza ulioorodheshwa na una \"Msimamizi\" iliyoandikwa chini ya jina lake ni Msimamizi. </p>
+ <p>Ikiwa Kicheza Ugunduzi hakipakii</p><p><br></p><p>Angalia kama programu imesasishwa:</p><p> <ul> <li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li> </ul> <p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Ikiwa muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. </li></ul><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Pata Msimamizi kusuluhisha kwa kutumia hatua hapo juu </li></ul><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
+ <p>Ikiwa sauti yako haichezi</p><p><br></p><p>Angalia ili kuona kama programu imesasishwa:</p><ul><li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li></ul><p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Iwapo muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. Mtandao wa polepole unaweza kusababisha sauti kupakia kwa njia isiyo ya kawaida, na kuifanya iwe vigumu kucheza. </li></ul><p><br></p><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Wasiliana na Msimamizi ili asuluhishe kwa kutumia hatua hapo juu</li></ul><p><br></p><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
<p>Ikiwa Kicheza Ugunduzi hakipakii</p><p><br></p><p>Angalia kama programu imesasishwa:</p><p> <ul> <li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li> </ul> <p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Ikiwa muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. </li></ul><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Pata Msimamizi kusuluhisha kwa kutumia hatua hapo juu </li></ul><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
<p>Ikiwa sauti yako haichezi</p><p><br></p><p>Angalia ili kuona kama programu imesasishwa:</p><ul><li> Nenda kwenye Hifadhi ya Michezo na uhakikishe kuwa programu imesasishwa hadi toleo lake jipya zaidi </li></ul><p><br></p><p>Angalia muunganisho wako wa mtandao:</p><ul><li> Iwapo muunganisho wako wa mtandao ni wa polepole, jaribu kuunganisha tena kwenye mtandao wako wa Wi-Fi au unganisha kwenye mtandao tofauti. Mtandao wa polepole unaweza kusababisha sauti kupakia kwa njia isiyo ya kawaida, na kuifanya iwe vigumu kucheza. </li></ul><p><br></p><p>Uliza Msimamizi aangalie kifaa chake na muunganisho wa mtandao:</p><ul><li> Wasiliana na Msimamizi ili asuluhishe kwa kutumia hatua hapo juu</li></ul><p><br></p><p>Tujulishe ikiwa bado una matatizo ya upakiaji:</p><ul><li> Ripoti tatizo kwa kuwasiliana nasi kwa admin@oppia.org. </li></ul>
+ <p>Wasifu unapofutwa:</p><ol><li> Wasifu hauwezi kurejeshwa. </li><li> Taarifa ya wasifu kama vile jina, picha na maendeleo yatafutwa kabisa. </li></ol><p>Ili kufuta wasifu (bila kujumuisha <u>Msimamizi</u>):</p> <ol><li> Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto. </li><li> Gusa <strong>Vidhibiti vya Msimamizi</strong>. </li><li> Gusa <strong>Hariri Wasifu</strong>. </li><li> Gonga Wasifu ambao ungependa kufuta. </li><li> Katika sehemu ya chini ya skrini, gusa <strong>Ufutaji wa Wasifu</strong>. </li><li> Gusa <strong>Futa</strong> ili kuthibitisha kufuta.</li></ol><p><br></p><p>Kumbuka: <u>Msimamizi</u> pekee ndiye anayeweza kudhibiti wasifu.</p>
+ <p>Ili kubadilisha barua pepe/nambari yako ya simu:</p> <ol><li>Kutoka kwa Ukurasa wa Mwanzo wa Msimamizi, gusa kitufe cha menyu kilicho upande wa juu kushoto.</li> <li>Gusa <strong>Vidhibiti vya Msimamizi</strong>.</li><li> Gusa <strong>Hariri Akaunti</strong>.</li></ol><p><br></p> <p>Ikiwa ungependa kubadilisha barua pepe yako:</p><ol><li> Weka barua pepe yako mpya na uguse <strong>Hifadhi</strong>.</li><li> Kiungo cha uthibitishaji kinatumwa ili kuthibitisha barua pepe yako mpya. Muda wa kiungo utaisha baada ya saa 24 na lazima ubofye ili kuhusishwa na akaunti yako. </li></ol><p><br></p> <p>Ikiwa unabadilisha nambari yako ya simu:</p><ol><li> Weka nambari yako mpya ya simu na uguse <strong>Thibitisha</strong>.</li><li> Nambari ya kuthibitisha inatumwa ili kuthibitisha nambari yako mpya. Nambari ya kuthibitisha itaisha baada ya dakika 5 na lazima iwekwe kwenye skrini mpya ili kuhusishwa na akaunti yako.</li></ol>
<p>Ikiwa huwezi kupata swali lako au ungependa kuripoti hitilafu, wasiliana nasi kwa admin@oppia.org.</p>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3c71b3390f5..e16b34eee52 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
-
+
Navigation header
Options
My Downloads
@@ -16,13 +16,13 @@
Play audio
Pause audio
%s audio is unavailable.
- Ok
+ Ok
Cancel
Audio Language
Currently Offline
Make sure Wi-Fi or cellular data is turned on, then try again.
- Ok
- Ok
+ Ok
+ Ok
Cancel
Currently on Cellular Data
Streaming audio may use a lot of cellular data.
@@ -166,14 +166,17 @@
Please enter a valid fraction (e.g., 5/3 or 1 2/3)
Please do not put 0 in the denominator
None of the numbers in the fraction should have more than 7 digits.
+ Enter a fraction to continue.
Please begin your answer with a number (e.g.,”0” in 0.5).
Please enter a valid number.
The answer can contain at most 15 digits (0–9) or symbols (. or -).
+ Enter a number to continue.
Please write a ratio that consists of digits separated by colons (e.g. 1:2 or 1:2:3).
Please enter a valid ratio (e.g. 1:2 or 1:2:3).
Your answer has two colons (:) next to each other.
Number of terms is not equal to the required terms.
Ratios cannot have 0 as an element.
+ Enter a ratio to continue.
Unknown size
%s Bytes
%s KB
@@ -376,7 +379,7 @@
Account Actions
Log Out
Cancel
- Ok
+ Ok
Are you sure you want to log out of your profile?
App Version %s
@@ -489,11 +492,11 @@
Beta Notice
Hello! Your app is now being updated to the Beta version. If you experience problems while using the app, or have questions, please contact us at android-feedback@oppia.org.
Don\'t show this message again
- OK
+ Ok
General Availability Notice
Hello! Your app is now being updated to the General Availability version. If you experience problems while using the app, or have questions, please contact us at android-feedback@oppia.org.
Don\'t show this message again
- OK
+ Ok
\u0020to\u0020
Enter a ratio in the form x:y.
Tap here to enter text.
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 2d3ecf8c7be..7e49c73e759 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
@@ -744,7 +745,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 3210327edae..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
@@ -15,9 +15,7 @@ import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
-import androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra
import androidx.test.espresso.matcher.ViewMatchers.isCompletelyDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.espresso.matcher.ViewMatchers.withContentDescription
import androidx.test.espresso.matcher.ViewMatchers.withId
@@ -92,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
@@ -146,7 +145,6 @@ class OptionsFragmentTest {
@Before
fun setUp() {
- TestPlatformParameterModule.forceEnableLanguageSelectionUi(true)
Intents.init()
setUpTestApplicationComponent()
testCoroutineDispatchers.registerIdlingResource()
@@ -355,34 +353,6 @@ class OptionsFragmentTest {
}
}
- @Test
- fun testOptionsFragment_featureEnabled_appLanguageOptionIsDisplayed() {
- launch(
- createOptionActivityIntent(
- internalProfileId = 0,
- isFromNavigationDrawer = true
- )
- ).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.app_language_text_view)).check(matches(isDisplayed()))
- }
- }
-
- @Test
- fun testOptionsFragment_featureDisabled_appLanguageOptionIsNotDisplayed() {
- TestPlatformParameterModule.forceEnableLanguageSelectionUi(false)
-
- launch(
- createOptionActivityIntent(
- internalProfileId = 0,
- isFromNavigationDrawer = true
- )
- ).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.app_language_text_view)).check(doesNotExist())
- }
- }
-
@Test
fun testOptionsFragment_defaultAudioLanguageIsDisplayed() {
launch(
@@ -675,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 24ac673be8d..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
@@ -306,7 +307,7 @@ class StateFragmentTest {
clickContinueInteractionButton()
- verifySubmitAnswerButtonIsDisabled()
+ verifySubmitAnswerButtonIsEnabled()
onView(withId(R.id.submit_answer_button)).check(
matches(withText(R.string.state_submit_button))
)
@@ -4702,6 +4703,11 @@ class StateFragmentTest {
onView(withId(R.id.submit_answer_button)).check(matches(not(isEnabled())))
}
+ private fun verifySubmitAnswerButtonIsEnabled() {
+ scrollToViewType(SUBMIT_ANSWER_BUTTON)
+ onView(withId(R.id.submit_answer_button)).check(matches(isEnabled()))
+ }
+
private fun verifyViewTypeIsPresent(viewType: StateItemViewModel.ViewType) {
// Attempting to scroll to the specified view type is sufficient to verify that it's present.
scrollToViewType(viewType)
@@ -4957,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
new file mode 100644
index 00000000000..7f5c52581a6
--- /dev/null
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivityTest.kt
@@ -0,0 +1,610 @@
+package org.oppia.android.app.testing
+
+import android.app.Application
+import android.content.res.Configuration
+import androidx.appcompat.app.AppCompatActivity
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.Espresso.closeSoftKeyboard
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.scrollTo
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.Component
+import org.junit.After
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.R
+import org.oppia.android.app.activity.ActivityComponent
+import org.oppia.android.app.activity.ActivityComponentFactory
+import org.oppia.android.app.activity.route.ActivityRouterModule
+import org.oppia.android.app.application.ApplicationComponent
+import org.oppia.android.app.application.ApplicationInjector
+import org.oppia.android.app.application.ApplicationInjectorProvider
+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.DeveloperOptionsModule
+import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
+import org.oppia.android.app.model.InteractionObject
+import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
+import org.oppia.android.app.shim.ViewBindingShimModule
+import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
+import org.oppia.android.data.backends.gae.NetworkConfigProdModule
+import org.oppia.android.data.backends.gae.NetworkModule
+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
+import org.oppia.android.domain.classify.rules.dragAndDropSortInput.DragDropSortInputModule
+import org.oppia.android.domain.classify.rules.fractioninput.FractionInputModule
+import org.oppia.android.domain.classify.rules.imageClickInput.ImageClickInputModule
+import org.oppia.android.domain.classify.rules.itemselectioninput.ItemSelectionInputModule
+import org.oppia.android.domain.classify.rules.mathequationinput.MathEquationInputModule
+import org.oppia.android.domain.classify.rules.multiplechoiceinput.MultipleChoiceInputModule
+import org.oppia.android.domain.classify.rules.numberwithunits.NumberWithUnitsRuleModule
+import org.oppia.android.domain.classify.rules.numericexpressioninput.NumericExpressionInputModule
+import org.oppia.android.domain.classify.rules.numericinput.NumericInputRuleModule
+import org.oppia.android.domain.classify.rules.ratioinput.RatioInputModule
+import org.oppia.android.domain.classify.rules.textinput.TextInputRuleModule
+import org.oppia.android.domain.exploration.ExplorationProgressModule
+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.LoggingIdentifierModule
+import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.domain.oppialogger.analytics.CpuPerformanceSnapshotterModule
+import org.oppia.android.domain.oppialogger.logscheduler.MetricLogSchedulerModule
+import org.oppia.android.domain.oppialogger.loguploader.LogReportWorkerModule
+import org.oppia.android.domain.platformparameter.PlatformParameterModule
+import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
+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.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
+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.FakeOppiaClockModule
+import org.oppia.android.util.accessibility.AccessibilityTestModule
+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.EventLoggingConfigurationModule
+import org.oppia.android.util.logging.LoggerModule
+import org.oppia.android.util.logging.SyncStatusModule
+import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule
+import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule
+import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
+import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule
+import org.oppia.android.util.parser.image.GlideImageLoaderModule
+import org.oppia.android.util.parser.image.ImageParsingModule
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [FractionInputInteractionViewTestActivity]. */
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(
+ application = FractionInputInteractionViewTestActivityTest.TestApplication::class,
+ qualifiers = "port-xxhdpi"
+)
+class FractionInputInteractionViewTestActivityTest {
+ @get:Rule
+ val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
+ @get:Rule
+ val oppiaTestRule = OppiaTestRule()
+
+ @Inject
+ lateinit var editTextInputAction: EditTextInputAction
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ testCoroutineDispatchers.registerIdlingResource()
+ }
+
+ @After
+ fun tearDown() {
+ testCoroutineDispatchers.unregisterIdlingResource()
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ @Test
+ fun testFractionInput_withNoInput_hasCorrectPendingAnswerType() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0)
+ assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0)
+ assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withNegativeNumber_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(editTextInputAction.appendText("-9"))
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
+ assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withWholeNumber_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(editTextInputAction.appendText("9"))
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
+ assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withFraction_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "9/10"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
+ assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
+ assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withNegativeFraction_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "-9/10"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
+ assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
+ assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withMixedNumber_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "5 9/10"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
+ assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5)
+ assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
+ assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withNegativeMixedNumber_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "-55 59/9"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.FRACTION
+ )
+ assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
+ assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55)
+ assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59)
+ assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9)
+ }
+ }
+
+ @Test
+ @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported.
+ fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ FractionInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "9/5"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE
+ }
+ onView(withId(R.id.test_fraction_input_interaction_view)).check(matches(isDisplayed()))
+ .check(matches(withText("9/5")))
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and will not be used by user
+ fun testFractionInput_withNegativeSignOtherThanAt0_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "55-"
+ )
+ )
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_format
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withNegativeSignAt0MoreThan1_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "--55"
+ )
+ )
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_format
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withDividerMoreThanOnce_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "5/5/"
+ )
+ )
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_format
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withDividerAtStart_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "/5"
+ )
+ )
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_format
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withPartialMixedNumber_numberFormatErrorIsNotDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "5 5/"
+ )
+ )
+ onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withPartialMixedNumberSubmit_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "5 5/"
+ )
+ )
+ closeSoftKeyboard()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_format
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withMixedNumber_submit_noErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "3 1/2"
+ )
+ )
+ closeSoftKeyboard()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withDivideByZero_errorIsNotDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "1/0"
+ )
+ )
+ onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withDivideByZero_submit_divideByZeroErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java)
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "1/0"
+ )
+ )
+ closeSoftKeyboard()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_divide_by_zero
+ )
+ )
+ )
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withInvalidCharacter_invalidCharacterErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java).use {
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "."
+ )
+ )
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_invalid_chars
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_withLong_submit_numberTooLongErrorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java).use {
+ onView(withId(R.id.test_fraction_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "12345678"
+ )
+ )
+ closeSoftKeyboard()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_larger_than_seven_digits
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as FractionInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testFractionInput_emptyInput_submit_errorIsDisplayed() {
+ ActivityScenario.launch(FractionInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.fraction_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.fraction_error_empty_input
+ )
+ )
+ )
+ }
+ }
+
+ private fun scrollToSubmitButton() {
+ onView(withId(R.id.submit_button)).perform(scrollTo())
+ testCoroutineDispatchers.runCurrent()
+ }
+
+ // TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
+ @Singleton
+ @Component(
+ modules = [
+ RobolectricModule::class,
+ PlatformParameterModule::class, PlatformParameterSingletonModule::class,
+ TestDispatcherModule::class, ApplicationModule::class,
+ LoggerModule::class, ContinueModule::class, FractionInputModule::class,
+ ItemSelectionInputModule::class, MultipleChoiceInputModule::class,
+ NumberWithUnitsRuleModule::class, NumericInputRuleModule::class, TextInputRuleModule::class,
+ DragDropSortInputModule::class, ImageClickInputModule::class, InteractionsModule::class,
+ GcsResourceModule::class, GlideImageLoaderModule::class, ImageParsingModule::class,
+ HtmlParserEntityTypeModule::class, QuestionModule::class, TestLogReportingModule::class,
+ AccessibilityTestModule::class, LogStorageModule::class, CachingTestModule::class,
+ PrimeTopicAssetsControllerModule::class, ExpirationMetaDataRetrieverModule::class,
+ ViewBindingShimModule::class, RatioInputModule::class, WorkManagerConfigurationModule::class,
+ ApplicationStartupListenerModule::class, LogReportWorkerModule::class,
+ HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class,
+ FirebaseLogUploaderModule::class, FakeOppiaClockModule::class,
+ DeveloperOptionsStarterModule::class, DeveloperOptionsModule::class,
+ ExplorationStorageModule::class, NetworkModule::class, NetworkConfigProdModule::class,
+ NetworkConnectionUtilDebugModule::class, NetworkConnectionDebugUtilModule::class,
+ AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class,
+ NumericExpressionInputModule::class, AlgebraicExpressionInputModule::class,
+ MathEquationInputModule::class, SplitScreenInteractionModule::class,
+ LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
+ SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
+ EventLoggingConfigurationModule::class, ActivityRouterModule::class,
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
+ ]
+ )
+ interface TestApplicationComponent : ApplicationComponent {
+ @Component.Builder
+ interface Builder : ApplicationComponent.Builder
+
+ fun inject(inputInteractionViewTestActivityTest: FractionInputInteractionViewTestActivityTest)
+ }
+
+ class TestApplication : Application(), ActivityComponentFactory, ApplicationInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerFractionInputInteractionViewTestActivityTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build() as TestApplicationComponent
+ }
+
+ fun inject(inputInteractionViewTestActivityTest: FractionInputInteractionViewTestActivityTest) {
+ component.inject(inputInteractionViewTestActivityTest)
+ }
+
+ override fun createActivityComponent(activity: AppCompatActivity): ActivityComponent {
+ return component.getActivityComponentBuilderProvider().get().setActivity(activity).build()
+ }
+
+ override fun getApplicationInjector(): ApplicationInjector = component
+ }
+}
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 8ed1123cc41..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
@@ -2,26 +2,20 @@ package org.oppia.android.app.testing
import android.app.Application
import android.content.res.Configuration
-import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.closeSoftKeyboard
import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.UiController
-import androidx.test.espresso.ViewAction
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.scrollTo
import androidx.test.espresso.assertion.ViewAssertions.matches
-import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.espresso.matcher.ViewMatchers.withText
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import dagger.Component
-import org.hamcrest.CoreMatchers.allOf
-import org.hamcrest.Matcher
import org.junit.After
import org.junit.Before
import org.junit.Ignore
@@ -38,7 +32,6 @@ import org.oppia.android.app.application.ApplicationInjectorProvider
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.customview.interaction.RatioInputInteractionView
import org.oppia.android.app.devoptions.DeveloperOptionsModule
import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
import org.oppia.android.app.model.InteractionObject
@@ -79,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
@@ -140,400 +134,6 @@ class InputInteractionViewTestActivityTest {
ApplicationProvider.getApplicationContext().inject(this)
}
- // TODO(#4135): Move fraction input tests to a dedicated test suite.
-
- @Test
- fun testFractionInput_withNoInput_hasCorrectPendingAnswerType() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(0)
- assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(0)
- assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(0)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withNegativeNumber_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(editTextInputAction.appendText("-9"))
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
- assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withWholeNumber_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(editTextInputAction.appendText("9"))
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
- assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(9)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withFraction_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "9/10"
- )
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
- assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
- assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withNegativeFraction_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "-9/10"
- )
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
- assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
- assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withMixedNumber_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "5 9/10"
- )
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(false)
- assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(5)
- assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(9)
- assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(10)
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withNegativeMixedNumber_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "-55 59/9"
- )
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.fractionInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.FRACTION
- )
- assertThat(pendingAnswer.answer.fraction.isNegative).isEqualTo(true)
- assertThat(pendingAnswer.answer.fraction.wholeNumber).isEqualTo(55)
- assertThat(pendingAnswer.answer.fraction.numerator).isEqualTo(59)
- assertThat(pendingAnswer.answer.fraction.denominator).isEqualTo(9)
- }
- }
-
- @Test
- @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported.
- fun testFractionInput_withFraction_configChange_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "9/5"
- )
- )
- activityScenario.onActivity { activity ->
- activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE
- }
- onView(withId(R.id.test_fraction_input_interaction_view)).check(matches(isDisplayed()))
- .check(matches(withText("9/5")))
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and will not be used by user
- fun testFractionInput_withNegativeSignOtherThanAt0_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "55-"
- )
- )
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_format
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withNegativeSignAt0MoreThan1_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "--55"
- )
- )
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_format
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withDividerMoreThanOnce_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "5/5/"
- )
- )
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_format
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withDividerAtStart_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "/5"
- )
- )
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_format
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withPartialMixedNumber_numberFormatErrorIsNotDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "5 5/"
- )
- )
- onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withPartialMixedNumberSubmit_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "5 5/"
- )
- )
- closeSoftKeyboard()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_format
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withMixedNumber_submit_noErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "3 1/2"
- )
- )
- closeSoftKeyboard()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withDivideByZero_errorIsNotDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "1/0"
- )
- )
- onView(withId(R.id.fraction_input_error)).check(matches(withText("")))
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withDivideByZero_submit_divideByZeroErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java)
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "1/0"
- )
- )
- closeSoftKeyboard()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_divide_by_zero
- )
- )
- )
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withInvalidCharacter_invalidCharacterErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "."
- )
- )
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_invalid_chars
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testFractionInput_withLong_submit_numberTooLongErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- onView(withId(R.id.test_fraction_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "12345678"
- )
- )
- closeSoftKeyboard()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.fraction_input_error))
- .check(
- matches(
- withText(
- R.string.fraction_error_larger_than_seven_digits
- )
- )
- )
- }
- }
-
@Test
fun testNumericInput_withNoInput_hasCorrectPendingAnswerType() {
val activityScenario = ActivityScenario.launch(
@@ -651,6 +251,24 @@ class InputInteractionViewTestActivityTest {
}
}
+ @Test
+ @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testNumericInput_withBlankInput_submit_emptyInputErrorIsDisplayed() {
+ ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.number_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.number_error_empty_input
+ )
+ )
+ )
+ }
+ }
+
@Test
@DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
// will not be used by user
@@ -856,254 +474,11 @@ class InputInteractionViewTestActivityTest {
.check(matches(withText("abc")))
}
- @Test
- fun testRatioInput_withNoInput_hasCorrectPendingAnswerType() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.ratioExpressionInputInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.ratioExpression.ratioComponentCount).isEqualTo(0)
- }
- }
-
- @Test
- fun testRatioInput_withRatioOfNumber_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1:2:3"
- )
- )
- activityScenario.onActivity { activity ->
- val pendingAnswer = activity.ratioExpressionInputInteractionViewModel.getPendingAnswer()
- assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
- assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
- InteractionObject.ObjectTypeCase.RATIO_EXPRESSION
- )
- assertThat(pendingAnswer.answer.ratioExpression.ratioComponentList)
- .isEqualTo(listOf(1, 2, 3))
- }
- }
-
- @Test
- @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported.
- fun testRatioInput_withRatio_configChange_hasCorrectPendingAnswer() {
- val activityScenario = ActivityScenario.launch(
- InputInteractionViewTestActivity::class.java
- )
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- editTextInputAction.appendText(
- "1:2"
- )
- )
- activityScenario.onActivity { activity ->
- activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE
- }
- onView(withId(R.id.test_ratio_input_interaction_view)).check(matches(isDisplayed()))
- .check(matches(withText("1:2")))
- }
-
- @Test
- fun testRatioInput_withTwoColonsTogether_colonsTogetherFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1::2"
- )
- )
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_invalid_colons
- )
- )
- )
- }
- }
-
- @Test
- fun testRatioInput_withNegativeRatioOfNumber_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "-1:2:3:4"
- )
- )
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_invalid_chars
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testRatioInput_withZeroRatio_submit_numberWithZerosErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1:0:4"
- )
- )
- testCoroutineDispatchers.runCurrent()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_includes_zero
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testRatioInput_withInvalidRatio_submit_numberFormatErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1: 1 2 :4"
- )
- )
- closeSoftKeyboard()
- testCoroutineDispatchers.runCurrent()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_invalid_format
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testRatioInput_withRatioHaving4Terms_submit_invalidSizeErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1:2:3:4"
- )
- )
- closeSoftKeyboard()
- testCoroutineDispatchers.runCurrent()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_invalid_size
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testRatioInput_withRatioHaving2Terms_submit_invalidSizeErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1:2"
- )
- )
- closeSoftKeyboard()
- testCoroutineDispatchers.runCurrent()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.ratio_input_error))
- .check(
- matches(
- withText(
- R.string.ratio_error_invalid_size
- )
- )
- )
- }
- }
-
- @Test
- @DisableAccessibilityChecks // Disabled, as InputInteractionViewTestActivity is a test file and
- // will not be used by user
- fun testRatioInput_withRatioHaving3Terms_submit_noErrorIsDisplayed() {
- ActivityScenario.launch(InputInteractionViewTestActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(withId(R.id.test_ratio_input_interaction_view))
- .perform(
- setTextToRatioInputInteractionView(
- "1:2:3"
- )
- )
- closeSoftKeyboard()
- scrollToSubmitButton()
- onView(withId(R.id.submit_button)).check(matches(isDisplayed())).perform(click())
- onView(withId(R.id.ratio_input_error)).check(matches(withText("")))
- }
- }
-
private fun scrollToSubmitButton() {
onView(withId(R.id.submit_button)).perform(scrollTo())
testCoroutineDispatchers.runCurrent()
}
- private fun setTextToRatioInputInteractionView(
- newText: String?
- ): ViewAction? {
- return object : ViewAction {
- override fun getConstraints(): Matcher {
- return allOf(isDisplayed(), isAssignableFrom(RatioInputInteractionView::class.java))
- }
-
- override fun getDescription(): String {
- return "Update the text from the custom EditText"
- }
-
- override fun perform(uiController: UiController?, view: View) {
- (view as RatioInputInteractionView).setText(newText)
- uiController?.loopMainThreadUntilIdle()
- }
- }
- }
-
// TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
@Singleton
@Component(
@@ -1132,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
new file mode 100644
index 00000000000..57b3c1b0604
--- /dev/null
+++ b/app/src/sharedTest/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivityTest.kt
@@ -0,0 +1,478 @@
+package org.oppia.android.app.testing
+
+import android.app.Application
+import android.content.res.Configuration
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.Espresso.closeSoftKeyboard
+import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.UiController
+import androidx.test.espresso.ViewAction
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.scrollTo
+import androidx.test.espresso.assertion.ViewAssertions.matches
+import androidx.test.espresso.matcher.ViewMatchers.isAssignableFrom
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
+import androidx.test.espresso.matcher.ViewMatchers.withId
+import androidx.test.espresso.matcher.ViewMatchers.withText
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import com.google.common.truth.Truth.assertThat
+import dagger.Component
+import org.hamcrest.CoreMatchers
+import org.hamcrest.Matcher
+import org.junit.After
+import org.junit.Before
+import org.junit.Ignore
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.oppia.android.R
+import org.oppia.android.app.activity.ActivityComponent
+import org.oppia.android.app.activity.ActivityComponentFactory
+import org.oppia.android.app.activity.route.ActivityRouterModule
+import org.oppia.android.app.application.ApplicationComponent
+import org.oppia.android.app.application.ApplicationInjector
+import org.oppia.android.app.application.ApplicationInjectorProvider
+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.customview.interaction.RatioInputInteractionView
+import org.oppia.android.app.devoptions.DeveloperOptionsModule
+import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
+import org.oppia.android.app.model.InteractionObject
+import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
+import org.oppia.android.app.shim.ViewBindingShimModule
+import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
+import org.oppia.android.data.backends.gae.NetworkConfigProdModule
+import org.oppia.android.data.backends.gae.NetworkModule
+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
+import org.oppia.android.domain.classify.rules.dragAndDropSortInput.DragDropSortInputModule
+import org.oppia.android.domain.classify.rules.fractioninput.FractionInputModule
+import org.oppia.android.domain.classify.rules.imageClickInput.ImageClickInputModule
+import org.oppia.android.domain.classify.rules.itemselectioninput.ItemSelectionInputModule
+import org.oppia.android.domain.classify.rules.mathequationinput.MathEquationInputModule
+import org.oppia.android.domain.classify.rules.multiplechoiceinput.MultipleChoiceInputModule
+import org.oppia.android.domain.classify.rules.numberwithunits.NumberWithUnitsRuleModule
+import org.oppia.android.domain.classify.rules.numericexpressioninput.NumericExpressionInputModule
+import org.oppia.android.domain.classify.rules.numericinput.NumericInputRuleModule
+import org.oppia.android.domain.classify.rules.ratioinput.RatioInputModule
+import org.oppia.android.domain.classify.rules.textinput.TextInputRuleModule
+import org.oppia.android.domain.exploration.ExplorationProgressModule
+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.LoggingIdentifierModule
+import org.oppia.android.domain.oppialogger.analytics.ApplicationLifecycleModule
+import org.oppia.android.domain.oppialogger.analytics.CpuPerformanceSnapshotterModule
+import org.oppia.android.domain.oppialogger.logscheduler.MetricLogSchedulerModule
+import org.oppia.android.domain.oppialogger.loguploader.LogReportWorkerModule
+import org.oppia.android.domain.platformparameter.PlatformParameterModule
+import org.oppia.android.domain.platformparameter.PlatformParameterSingletonModule
+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.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
+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.FakeOppiaClockModule
+import org.oppia.android.util.accessibility.AccessibilityTestModule
+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.EventLoggingConfigurationModule
+import org.oppia.android.util.logging.LoggerModule
+import org.oppia.android.util.logging.SyncStatusModule
+import org.oppia.android.util.logging.firebase.FirebaseLogUploaderModule
+import org.oppia.android.util.networking.NetworkConnectionDebugUtilModule
+import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
+import org.oppia.android.util.parser.html.HtmlParserEntityTypeModule
+import org.oppia.android.util.parser.image.GlideImageLoaderModule
+import org.oppia.android.util.parser.image.ImageParsingModule
+import org.robolectric.annotation.Config
+import org.robolectric.annotation.LooperMode
+import javax.inject.Inject
+import javax.inject.Singleton
+
+/** Tests for [RatioInputInteractionViewTestActivity]. */
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(
+ application = RatioInputInteractionViewTestActivityTest.TestApplication::class,
+ qualifiers = "port-xxhdpi"
+)
+class RatioInputInteractionViewTestActivityTest {
+ @get:Rule
+ val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
+ @get:Rule
+ val oppiaTestRule = OppiaTestRule()
+
+ @Inject
+ lateinit var editTextInputAction: EditTextInputAction
+
+ @Before
+ fun setUp() {
+ setUpTestApplicationComponent()
+ testCoroutineDispatchers.registerIdlingResource()
+ }
+
+ @After
+ fun tearDown() {
+ testCoroutineDispatchers.unregisterIdlingResource()
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ @Test
+ fun testRatioInput_withNoInput_hasCorrectPendingAnswerType() {
+ val activityScenario = ActivityScenario.launch(
+ RatioInputInteractionViewTestActivity::class.java
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.ratioExpressionInputInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.ratioExpression.ratioComponentCount).isEqualTo(0)
+ }
+ }
+
+ @Test
+ fun testRatioInput_withRatioOfNumber_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ RatioInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1:2:3"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ val pendingAnswer = activity.ratioExpressionInputInteractionViewModel.getPendingAnswer()
+ assertThat(pendingAnswer.answer).isInstanceOf(InteractionObject::class.java)
+ assertThat(pendingAnswer.answer.objectTypeCase).isEqualTo(
+ InteractionObject.ObjectTypeCase.RATIO_EXPRESSION
+ )
+ assertThat(pendingAnswer.answer.ratioExpression.ratioComponentList)
+ .isEqualTo(listOf(1, 2, 3))
+ }
+ }
+
+ @Test
+ @Ignore("Landscape not properly supported") // TODO(#56): Reenable once landscape is supported.
+ fun testRatioInput_withRatio_configChange_hasCorrectPendingAnswer() {
+ val activityScenario = ActivityScenario.launch(
+ RatioInputInteractionViewTestActivity::class.java
+ )
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ editTextInputAction.appendText(
+ "1:2"
+ )
+ )
+ activityScenario.onActivity { activity ->
+ activity.requestedOrientation = Configuration.ORIENTATION_LANDSCAPE
+ }
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .check(matches(isDisplayed()))
+ .check(matches(withText("1:2")))
+ }
+
+ @Test
+ fun testRatioInput_withTwoColonsTogether_colonsTogetherFormatErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1::2"
+ )
+ )
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_invalid_colons
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ fun testRatioInput_withNegativeRatioOfNumber_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "-1:2:3:4"
+ )
+ )
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_invalid_chars
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withBlankInput_submit_numberWithZerosErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_empty_input
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withZeroRatio_submit_numberWithZerosErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1:0:4"
+ )
+ )
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_includes_zero
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withInvalidRatio_submit_numberFormatErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1: 1 2 :4"
+ )
+ )
+ closeSoftKeyboard()
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_invalid_format
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withRatioHaving4Terms_submit_invalidSizeErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1:2:3:4"
+ )
+ )
+ closeSoftKeyboard()
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_invalid_size
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withRatioHaving2Terms_submit_invalidSizeErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1:2"
+ )
+ )
+ closeSoftKeyboard()
+ testCoroutineDispatchers.runCurrent()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.ratio_input_error))
+ .check(
+ matches(
+ withText(
+ R.string.ratio_error_invalid_size
+ )
+ )
+ )
+ }
+ }
+
+ @Test
+ @DisableAccessibilityChecks // Disabled, as RatioInputInteractionViewTestActivity is a test file and
+ // will not be used by user
+ fun testRatioInput_withRatioHaving3Terms_submit_noErrorIsDisplayed() {
+ ActivityScenario.launch(RatioInputInteractionViewTestActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.test_ratio_input_interaction_view))
+ .perform(
+ setTextToRatioInputInteractionView(
+ "1:2:3"
+ )
+ )
+ closeSoftKeyboard()
+ scrollToSubmitButton()
+ onView(withId(R.id.submit_button))
+ .check(matches(isDisplayed())).perform(click())
+ onView(withId(R.id.ratio_input_error))
+ .check(matches(withText("")))
+ }
+ }
+
+ private fun scrollToSubmitButton() {
+ onView(withId(R.id.submit_button)).perform(scrollTo())
+ testCoroutineDispatchers.runCurrent()
+ }
+
+ private fun setTextToRatioInputInteractionView(
+ newText: String?
+ ): ViewAction? {
+ return object : ViewAction {
+ override fun getConstraints(): Matcher {
+ return CoreMatchers.allOf(
+ isDisplayed(),
+ isAssignableFrom(RatioInputInteractionView::class.java)
+ )
+ }
+
+ override fun getDescription(): String {
+ return "Update the text from the custom EditText"
+ }
+
+ override fun perform(uiController: UiController?, view: View) {
+ (view as RatioInputInteractionView).setText(newText)
+ uiController?.loopMainThreadUntilIdle()
+ }
+ }
+ }
+
+ // TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
+ @Singleton
+ @Component(
+ modules = [
+ RobolectricModule::class,
+ PlatformParameterModule::class, PlatformParameterSingletonModule::class,
+ TestDispatcherModule::class, ApplicationModule::class,
+ LoggerModule::class, ContinueModule::class, FractionInputModule::class,
+ ItemSelectionInputModule::class, MultipleChoiceInputModule::class,
+ NumberWithUnitsRuleModule::class, NumericInputRuleModule::class, TextInputRuleModule::class,
+ DragDropSortInputModule::class, ImageClickInputModule::class, InteractionsModule::class,
+ GcsResourceModule::class, GlideImageLoaderModule::class, ImageParsingModule::class,
+ HtmlParserEntityTypeModule::class, QuestionModule::class, TestLogReportingModule::class,
+ AccessibilityTestModule::class, LogStorageModule::class, CachingTestModule::class,
+ PrimeTopicAssetsControllerModule::class, ExpirationMetaDataRetrieverModule::class,
+ ViewBindingShimModule::class, RatioInputModule::class, WorkManagerConfigurationModule::class,
+ ApplicationStartupListenerModule::class, LogReportWorkerModule::class,
+ HintsAndSolutionConfigModule::class, HintsAndSolutionProdModule::class,
+ FirebaseLogUploaderModule::class, FakeOppiaClockModule::class,
+ DeveloperOptionsStarterModule::class, DeveloperOptionsModule::class,
+ ExplorationStorageModule::class, NetworkModule::class, NetworkConfigProdModule::class,
+ NetworkConnectionUtilDebugModule::class, NetworkConnectionDebugUtilModule::class,
+ AssetModule::class, LocaleProdModule::class, ActivityRecreatorTestModule::class,
+ NumericExpressionInputModule::class, AlgebraicExpressionInputModule::class,
+ MathEquationInputModule::class, SplitScreenInteractionModule::class,
+ LoggingIdentifierModule::class, ApplicationLifecycleModule::class,
+ SyncStatusModule::class, MetricLogSchedulerModule::class, TestingBuildFlavorModule::class,
+ EventLoggingConfigurationModule::class, ActivityRouterModule::class,
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
+ ]
+ )
+ interface TestApplicationComponent : ApplicationComponent {
+ @Component.Builder
+ interface Builder : ApplicationComponent.Builder
+
+ fun inject(ratioInputInteractionViewTestActivityTest: RatioInputInteractionViewTestActivityTest)
+ }
+
+ class TestApplication : Application(), ActivityComponentFactory, ApplicationInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerRatioInputInteractionViewTestActivityTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build() as TestApplicationComponent
+ }
+
+ fun inject(inputInteractionViewTestActivityTest: RatioInputInteractionViewTestActivityTest) {
+ component.inject(inputInteractionViewTestActivityTest)
+ }
+
+ override fun createActivityComponent(activity: AppCompatActivity): ActivityComponent {
+ return component.getActivityComponentBuilderProvider().get().setActivity(activity).build()
+ }
+
+ override fun getApplicationInjector(): ApplicationInjector = component
+ }
+}
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 6016d1d4894..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
@@ -165,7 +166,7 @@ class FractionParsingUiErrorTest {
.toUiError()
.getErrorMessageFromStringRes(activity.appLanguageResourceHandler)
assertThat(errorMessage)
- .isEqualTo("Please enter a valid fraction (e.g., 5/3 or 1 2/3)")
+ .isEqualTo("Enter a fraction to continue.")
}
}
@@ -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 6334a3cb199..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
@@ -7,10 +7,6 @@ import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.action.ViewActions.click
-import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
-import androidx.test.espresso.assertion.ViewAssertions.matches
-import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
-import androidx.test.espresso.matcher.ViewMatchers.withId
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import dagger.Component
@@ -70,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
@@ -113,7 +110,6 @@ class OptionsFragmentTest {
@Before
fun setUp() {
- TestPlatformParameterModule.forceEnableLanguageSelectionUi(true)
TestPlatformParameterModule.forceEnableEditAccountsOptionsUi(
ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
)
@@ -160,25 +156,6 @@ class OptionsFragmentTest {
}
}
- @Test
- fun testOptionsFragment_featureEnabled_appLanguageItemIsDisplayed() {
- launch(createOptionActivityIntent(0, true)).use {
- testCoroutineDispatchers.runCurrent()
-
- onView(withId(R.id.app_language_item_layout)).check(matches(isDisplayed()))
- }
- }
-
- @Test
- fun testOptionsFragment_featureDisabled_appLanguageItemIsNotDisplayed() {
- TestPlatformParameterModule.forceEnableLanguageSelectionUi(false)
- launch(createOptionActivityIntent(0, true)).use {
- testCoroutineDispatchers.runCurrent()
-
- onView(withId(R.id.app_language_item_layout)).check(doesNotExist())
- }
- }
-
@Test
fun testOptionsFragment_clickAppLanguage_checkLoadingTheCorrectFragment() {
launch(createOptionActivityIntent(0, true)).use {
@@ -263,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/exploration/ExplorationActiveTimeController.kt b/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
index 7354fb2af8f..9d5e59636b8 100644
--- a/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
+++ b/domain/src/main/java/org/oppia/android/domain/exploration/ExplorationActiveTimeController.kt
@@ -19,6 +19,8 @@ import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProvider
import org.oppia.android.util.data.DataProviders
import org.oppia.android.util.data.DataProviders.Companion.transform
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
+import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.system.OppiaClock
import org.oppia.android.util.threading.BackgroundDispatcher
import java.util.UUID
@@ -57,7 +59,8 @@ class ExplorationActiveTimeController @Inject constructor(
private val dataProviders: DataProviders,
private val oppiaLogger: OppiaLogger,
private val exceptionsController: ExceptionsController,
- @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher
+ @BackgroundDispatcher private val backgroundCoroutineDispatcher: CoroutineDispatcher,
+ @EnableNpsSurvey private val enableNpsSurvey: PlatformParameterValue
) : ExplorationProgressListener, ApplicationLifecycleListener {
private var isAppInForeground: Boolean = false
private var explorationStarted: Boolean = false
@@ -82,27 +85,35 @@ class ExplorationActiveTimeController @Inject constructor(
override fun onExplorationStarted(profileId: ProfileId, topicId: String) {
this.explorationStarted = true
- startSessionTimer(
- profileId = profileId,
- topicId = topicId,
- isAppInForeground = getIsAppInForeground(),
- explorationStarted = true
- )
+ if (enableNpsSurvey.value) {
+ startSessionTimer(
+ profileId = profileId,
+ topicId = topicId,
+ isAppInForeground = getIsAppInForeground(),
+ explorationStarted = true
+ )
+ }
}
override fun onExplorationEnded() {
this.explorationStarted = false
- stopSessionTimerAsync(getIsExplorationStarted())
+ if (enableNpsSurvey.value) {
+ stopSessionTimerAsync(getIsExplorationStarted())
+ }
}
override fun onAppInForeground() {
this.isAppInForeground = true
- resumeSessionTimer(getIsExplorationStarted())
+ if (enableNpsSurvey.value) {
+ resumeSessionTimer(getIsExplorationStarted())
+ }
}
override fun onAppInBackground() {
this.isAppInForeground = false
- pauseSessionTimerAsync()
+ if (enableNpsSurvey.value) {
+ pauseSessionTimerAsync()
+ }
}
private fun getIsAppInForeground() = this.isAppInForeground
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/platformparameter/PlatformParameterAlphaKenyaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
index a7e0dffba81..9213fcc5a7f 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaKenyaModule.kt
@@ -15,7 +15,9 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
@@ -27,9 +29,9 @@ import org.oppia.android.util.platformparameter.EnableEditAccountsOptionsUi
import org.oppia.android.util.platformparameter.EnableExtraTopicTabsUi
import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLesson
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
@@ -106,14 +108,6 @@ class PlatformParameterAlphaKenyaModule {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableEditAccountsOptionsUi
fun provideEnableEditAccountsOptionsUi(
@@ -320,11 +314,25 @@ class PlatformParameterAlphaKenyaModule {
)
}
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
+
@Provides
@EnableOnboardingFlowV2
- fun provideEnableNewOnboardingUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
- )
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
}
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
index 2158db6adf6..e453cf5d94e 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterAlphaModule.kt
@@ -15,7 +15,9 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
@@ -26,9 +28,9 @@ import org.oppia.android.util.platformparameter.EnableEditAccountsOptionsUi
import org.oppia.android.util.platformparameter.EnableExtraTopicTabsUi
import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLesson
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
@@ -103,14 +105,6 @@ class PlatformParameterAlphaModule {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableEditAccountsOptionsUi
fun provideEnableEditAccountsOptionsUi(
@@ -315,11 +309,25 @@ class PlatformParameterAlphaModule {
)
}
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
+
@Provides
@EnableOnboardingFlowV2
- fun provideEnableNewOnboardingUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
- )
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
}
}
diff --git a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
index 770f9168d75..6bf45843564 100644
--- a/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
+++ b/domain/src/main/java/org/oppia/android/domain/platformparameter/PlatformParameterModule.kt
@@ -15,7 +15,9 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2
import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
@@ -27,9 +29,9 @@ import org.oppia.android.util.platformparameter.EnableEditAccountsOptionsUi
import org.oppia.android.util.platformparameter.EnableExtraTopicTabsUi
import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLesson
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
@@ -105,14 +107,6 @@ class PlatformParameterModule {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableEditAccountsOptionsUi
fun provideEnableEditAccountsOptionsUi(
@@ -317,11 +311,25 @@ class PlatformParameterModule {
)
}
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_NPS_SURVEY)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_NPS_SURVEY_DEFAULT_VALUE
+ )
+ }
+
@Provides
@EnableOnboardingFlowV2
- fun provideEnableNewOnboardingUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
- )
+ fun provideEnableOnboardingFlowV2(
+ platformParameterSingleton: PlatformParameterSingleton
+ ): PlatformParameterValue {
+ return platformParameterSingleton.getBooleanPlatformParameter(ENABLE_ONBOARDING_FLOW_V2)
+ ?: PlatformParameterValue.createDefaultParameter(
+ ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
+ )
}
}
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 1854ec26330..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
@@ -73,6 +74,7 @@ import org.oppia.android.util.logging.SyncStatusModule
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.robolectric.Shadows
import org.robolectric.annotation.Config
@@ -856,6 +858,12 @@ class AudioPlayerControllerTest {
defaultValue = enableFeature
)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(defaultValue = true)
+ }
}
// TODO(#89): Move this to a common test application component.
@@ -874,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/ExplorationActiveTimeControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
index 39414c42791..d012e057068 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationActiveTimeControllerTest.kt
@@ -9,6 +9,7 @@ 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.ProfileId
@@ -96,6 +97,11 @@ class ExplorationActiveTimeControllerTest {
private val firstTestProfile = ProfileId.newBuilder().setInternalId(0).build()
private val secondTestProfile = ProfileId.newBuilder().setInternalId(1).build()
+ @Before
+ fun setUp() {
+ TestPlatformParameterModule.forceEnableNpsSurvey(true)
+ }
+
@Test
fun testSessionTimer_explorationStartedCallbackReceived_startsSessionTimer() {
setUpTestApplicationComponent()
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 ed37c3bc9b8..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
@@ -109,6 +110,7 @@ import org.oppia.android.util.logging.SyncStatusModule
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
@@ -3189,6 +3191,12 @@ class ExplorationProgressControllerTest {
// Enable study IDs by default in tests.
return PlatformParameterValue.createDefaultParameter(defaultValue = true)
}
+
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(defaultValue = true)
+ }
}
// TODO(#89): Move this to a common test application component.
@@ -3207,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/ExplorationProgressModuleTest.kt b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
index d97bb864d99..cf7eef40556 100644
--- a/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/exploration/ExplorationProgressModuleTest.kt
@@ -17,6 +17,7 @@ import org.junit.runner.RunWith
import org.oppia.android.domain.exploration.testing.ExplorationStorageTestModule
import org.oppia.android.domain.oppialogger.LogStorageModule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestDispatcherModule
import org.oppia.android.testing.time.FakeOppiaClockModule
@@ -92,7 +93,8 @@ class ExplorationProgressModuleTest {
TestModule::class, TestLogModule::class, RobolectricModule::class,
FakeOppiaClockModule::class, ExplorationProgressModule::class, TestDispatcherModule::class,
LocaleProdModule::class, TestLogReportingModule::class, LogStorageModule::class,
- NetworkConnectionUtilDebugModule::class, ExplorationStorageTestModule::class
+ NetworkConnectionUtilDebugModule::class, ExplorationStorageTestModule::class,
+ TestPlatformParameterModule::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/LoggingIdentifierControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
index 6c30c8200d5..303d6f466ac 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/LoggingIdentifierControllerTest.kt
@@ -40,8 +40,6 @@ 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.NetworkConnectionUtilDebugModule
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.platformparameter.SPLASH_SCREEN_WELCOME_MSG_DEFAULT_VALUE
@@ -370,14 +368,6 @@ class LoggingIdentifierControllerTest {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableLearnerStudyAnalytics
fun provideLearnerStudyAnalytics(): PlatformParameterValue {
diff --git a/domain/src/test/java/org/oppia/android/domain/oppialogger/OppiaLoggerTest.kt b/domain/src/test/java/org/oppia/android/domain/oppialogger/OppiaLoggerTest.kt
index bf940cfe8e1..c852f30d6b4 100644
--- a/domain/src/test/java/org/oppia/android/domain/oppialogger/OppiaLoggerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/oppialogger/OppiaLoggerTest.kt
@@ -42,8 +42,6 @@ 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.NetworkConnectionUtilDebugModule
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.platformparameter.SPLASH_SCREEN_WELCOME_MSG_DEFAULT_VALUE
@@ -391,14 +389,6 @@ class OppiaLoggerTest {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableLearnerStudyAnalytics
fun provideLearnerStudyAnalytics(): PlatformParameterValue {
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/SurveyGatingControllerTest.kt b/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
index 07655569168..df46b018821 100644
--- a/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
+++ b/domain/src/test/java/org/oppia/android/domain/survey/SurveyGatingControllerTest.kt
@@ -81,6 +81,7 @@ class SurveyGatingControllerTest {
@Before
fun setUp() {
+ TestPlatformParameterModule.forceEnableNpsSurvey(true)
setUpTestApplicationComponent()
profileTestHelper.initializeProfiles()
}
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/accessibility_label_exemptions.textproto b/scripts/assets/accessibility_label_exemptions.textproto
index 5e2c693ed1d..4f2d9616133 100644
--- a/scripts/assets/accessibility_label_exemptions.textproto
+++ b/scripts/assets/accessibility_label_exemptions.textproto
@@ -15,12 +15,14 @@ exempted_activity: "app/src/main/java/org/oppia/android/app/testing/DragDropTest
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/DrawableBindingAdaptersTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/ExplorationInjectionActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/ExplorationTestActivity"
+exempted_activity: "app/src/main/java/org/oppia/android/app/testing/FractionInputInteractionViewTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/HomeFragmentTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/HomeTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/HtmlParserTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/ImageRegionSelectionTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/ImageViewBindingAdaptersTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/InputInteractionViewTestActivity"
+exempted_activity: "app/src/main/java/org/oppia/android/app/testing/RatioInputInteractionViewTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/LessonThumbnailImageViewTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/ListItemLeadingMarginSpanTestActivity"
exempted_activity: "app/src/main/java/org/oppia/android/app/testing/MarginBindingAdaptersTestActivity"
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.bazel b/testing/BUILD.bazel
index 781295d32dc..9bed8754f08 100644
--- a/testing/BUILD.bazel
+++ b/testing/BUILD.bazel
@@ -43,7 +43,6 @@ kt_android_library(
"//testing/src/main/java/org/oppia/android/testing/threading:test_coroutine_dispatchers",
"//testing/src/main/java/org/oppia/android/testing/time:fake_oppia_clock",
"//third_party:androidx_core_core-ktx",
- "//third_party:androidx_fragment_fragment",
"//third_party:androidx_lifecycle_lifecycle-livedata-ktx",
"//third_party:androidx_test_espresso_espresso-accessibility",
"//third_party:androidx_test_espresso_espresso-contrib",
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/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
index b3b24d9cd05..604eaf727e4 100644
--- a/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
+++ b/testing/src/main/java/org/oppia/android/testing/platformparameter/TestPlatformParameterModule.kt
@@ -13,7 +13,7 @@ import org.oppia.android.util.platformparameter.ENABLE_DOWNLOADS_SUPPORT_DEFAULT
import org.oppia.android.util.platformparameter.ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_EXTRA_TOPIC_TABS_UI_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_INTERACTION_CONFIG_CHANGE_STATE_RETENTION_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
+import org.oppia.android.util.platformparameter.ENABLE_NPS_SURVEY_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.ENABLE_PERFORMANCE_METRICS_COLLECTION_DEFAULT_VALUE
import org.oppia.android.util.platformparameter.EnableAppAndOsDeprecation
@@ -22,9 +22,9 @@ import org.oppia.android.util.platformparameter.EnableEditAccountsOptionsUi
import org.oppia.android.util.platformparameter.EnableExtraTopicTabsUi
import org.oppia.android.util.platformparameter.EnableFastLanguageSwitchingInLesson
import org.oppia.android.util.platformparameter.EnableInteractionConfigChangeStateRetention
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
+import org.oppia.android.util.platformparameter.EnableNpsSurvey
import org.oppia.android.util.platformparameter.EnableOnboardingFlowV2
import org.oppia.android.util.platformparameter.EnablePerformanceMetricsCollection
import org.oppia.android.util.platformparameter.EnableSpotlightUi
@@ -120,11 +120,6 @@ class TestPlatformParameterModule {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue =
- PlatformParameterValue.createDefaultParameter(enableLanguageSelectionUi)
-
@Provides
@EnableEditAccountsOptionsUi
fun provideEnableEditAccountsOptionsUi(): PlatformParameterValue =
@@ -272,15 +267,20 @@ class TestPlatformParameterModule {
return PlatformParameterValue.createDefaultParameter(minimumLearningTime)
}
+ @Provides
+ @EnableNpsSurvey
+ fun provideEnableNpsSurvey(): PlatformParameterValue {
+ return PlatformParameterValue.createDefaultParameter(enableNpsSurvey)
+ }
+
@Provides
@EnableOnboardingFlowV2
- fun provideEnableNewOnboardingUi(): PlatformParameterValue {
+ fun provideEnableOnboardingFlowV2(): PlatformParameterValue {
return PlatformParameterValue.createDefaultParameter(enableOnboardingFlowV2)
}
companion object {
private var enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
- private var enableLanguageSelectionUi = ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
private var enableEditAccountsOptionsUi = ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
private var enableLearnerStudyAnalytics = LEARNER_STUDY_ANALYTICS_DEFAULT_VALUE
private var enableFastLanguageSwitchingInLesson =
@@ -296,20 +296,14 @@ class TestPlatformParameterModule {
private var minimumLearningTime =
NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE
private var gracePeriodInDays = NPS_SURVEY_GRACE_PERIOD_IN_DAYS_DEFAULT_VALUE
+ private var enableNpsSurvey = ENABLE_NPS_SURVEY_DEFAULT_VALUE
private var enableOnboardingFlowV2 = ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE
- /** Enables forcing [EnableLanguageSelectionUi] platform parameter flag from tests. */
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun forceEnableDownloadsSupport(value: Boolean) {
enableDownloadsSupport = value
}
- /** Enables forcing [EnableLanguageSelectionUi] platform parameter flag from tests. */
- @VisibleForTesting(otherwise = VisibleForTesting.NONE)
- fun forceEnableLanguageSelectionUi(value: Boolean) {
- enableLanguageSelectionUi = value
- }
-
/** Enables forcing [EnableEditAccountsOptionsUI] platform parameter flag from tests. */
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun forceEnableEditAccountsOptionsUi(value: Boolean) {
@@ -358,6 +352,12 @@ class TestPlatformParameterModule {
enableSpotlightUi = value
}
+ /** Enables forcing [EnableNpsSurvey] feature flag from tests. */
+ @VisibleForTesting(otherwise = VisibleForTesting.NONE)
+ fun forceEnableNpsSurvey(value: Boolean) {
+ enableNpsSurvey = value
+ }
+
/** Enables forcing [EnableOnboardingFlowV2] platform parameter flag from tests. */
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun forceEnableOnboardingFlowV2(value: Boolean) {
@@ -367,7 +367,6 @@ class TestPlatformParameterModule {
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
fun reset() {
enableDownloadsSupport = ENABLE_DOWNLOADS_SUPPORT_DEFAULT_VALUE
- enableLanguageSelectionUi = ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
enableEditAccountsOptionsUi = ENABLE_EDIT_ACCOUNTS_OPTIONS_UI_DEFAULT_VALUE
enableLearnerStudyAnalytics = LEARNER_STUDY_ANALYTICS_DEFAULT_VALUE
enableFastLanguageSwitchingInLesson = FAST_LANGUAGE_SWITCHING_IN_LESSON_DEFAULT_VALUE
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 9a16539c7e4..24221d97d55 100644
--- a/third_party/maven_install.json
+++ b/third_party/maven_install.json
@@ -1,15 +1,16 @@
{
"dependency_tree": {
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": -191893468,
- "__RESOLVED_ARTIFACTS_HASH": 529067511,
+ "__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.fragment:fragment:1.1.0": "androidx.fragment:fragment:1.2.0",
"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",
@@ -341,26 +342,17 @@
"coord": "androidx.appcompat:appcompat:1.2.0",
"dependencies": [
"androidx.interpolator:interpolator:aar:1.0.0",
- "androidx.lifecycle:lifecycle-common:2.2.0",
"androidx.annotation:annotation:1.1.0",
- "androidx.savedstate:savedstate:aar:1.0.0",
"androidx.collection:collection:1.1.0",
- "androidx.activity:activity:aar:1.1.0",
- "androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.vectordrawable:vectordrawable:aar:1.1.0",
"androidx.cursoradapter:cursoradapter:aar:1.0.0",
"androidx.fragment:fragment:aar:1.2.0",
"androidx.drawerlayout:drawerlayout:aar:1.1.0",
"androidx.appcompat:appcompat-resources:aar:1.2.0",
"androidx.core:core:aar:1.3.1",
- "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
- "androidx.arch.core:core-common:2.1.0",
"androidx.lifecycle:lifecycle-runtime:aar:2.2.0",
"androidx.vectordrawable:vectordrawable-animated:aar:1.1.0",
- "androidx.versionedparcelable:versionedparcelable:aar:1.1.0",
- "androidx.viewpager:viewpager:aar:1.0.0",
- "androidx.loader:loader:aar:1.0.0",
- "androidx.customview:customview:aar:1.1.0"
+ "androidx.versionedparcelable:versionedparcelable:aar:1.1.0"
],
"directDependencies": [
"androidx.annotation:annotation:1.1.0",
@@ -387,24 +379,15 @@
"dependencies": [
"androidx.versionedparcelable:versionedparcelable:aar:sources:1.1.0",
"androidx.vectordrawable:vectordrawable-animated:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.lifecycle:lifecycle-runtime:aar:sources:2.2.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.drawerlayout:drawerlayout:aar:sources:1.1.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.viewpager:viewpager:aar:sources:1.0.0",
- "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0",
"androidx.interpolator:interpolator:aar:sources:1.0.0",
"androidx.cursoradapter:cursoradapter:aar:sources:1.0.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "androidx.savedstate:savedstate:aar:sources:1.0.0",
- "androidx.activity:activity:aar:sources:1.1.0",
- "androidx.arch.core:core-common:jar:sources:2.1.0",
"androidx.appcompat:appcompat-resources:aar:sources:1.2.0",
- "androidx.customview:customview:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-common:jar:sources:2.2.0",
- "androidx.loader:loader:aar:sources:1.0.0",
"androidx.vectordrawable:vectordrawable:aar:sources:1.1.0"
],
"directDependencies": [
@@ -657,12 +640,8 @@
"dependencies": [
"androidx.constraintlayout:constraintlayout-solver:2.0.1",
"androidx.interpolator:interpolator:aar:1.0.0",
- "androidx.lifecycle:lifecycle-common:2.2.0",
"androidx.annotation:annotation:1.1.0",
- "androidx.savedstate:savedstate:aar:1.0.0",
"androidx.collection:collection:1.1.0",
- "androidx.activity:activity:aar:1.1.0",
- "androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.vectordrawable:vectordrawable:aar:1.1.0",
"androidx.cursoradapter:cursoradapter:aar:1.0.0",
"androidx.fragment:fragment:aar:1.2.0",
@@ -670,15 +649,10 @@
"androidx.appcompat:appcompat-resources:aar:1.2.0",
"androidx.core:core:aar:1.3.1",
"androidx.core:core:1.3.1",
- "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
- "androidx.arch.core:core-common:2.1.0",
"androidx.lifecycle:lifecycle-runtime:aar:2.2.0",
"androidx.vectordrawable:vectordrawable-animated:aar:1.1.0",
"androidx.versionedparcelable:versionedparcelable:aar:1.1.0",
- "androidx.viewpager:viewpager:aar:1.0.0",
- "androidx.appcompat:appcompat:1.2.0",
- "androidx.loader:loader:aar:1.0.0",
- "androidx.customview:customview:aar:1.1.0"
+ "androidx.appcompat:appcompat:1.2.0"
],
"directDependencies": [
"androidx.appcompat:appcompat:1.2.0",
@@ -1017,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",
@@ -1031,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": [
@@ -1056,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",
@@ -1069,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",
@@ -1097,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",
@@ -1136,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",
@@ -3919,20 +3893,11 @@
{
"coord": "androidx.viewpager2:viewpager2:1.0.0",
"dependencies": [
- "androidx.lifecycle:lifecycle-common:2.2.0",
"androidx.annotation:annotation:1.1.0",
- "androidx.savedstate:savedstate:aar:1.0.0",
"androidx.collection:collection:1.1.0",
- "androidx.activity:activity:aar:1.1.0",
- "androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.recyclerview:recyclerview:aar:1.1.0",
"androidx.fragment:fragment:aar:1.2.0",
"androidx.core:core:aar:1.3.1",
- "androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
- "androidx.arch.core:core-common:2.1.0",
- "androidx.lifecycle:lifecycle-runtime:aar:2.2.0",
- "androidx.viewpager:viewpager:aar:1.0.0",
- "androidx.loader:loader:aar:1.0.0",
"androidx.customview:customview:aar:1.1.0"
],
"directDependencies": [
@@ -3956,21 +3921,12 @@
{
"coord": "androidx.viewpager2:viewpager2:jar:sources:1.0.0",
"dependencies": [
- "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
- "androidx.lifecycle:lifecycle-runtime:aar:sources:2.2.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.viewpager:viewpager:aar:sources:1.0.0",
"androidx.recyclerview:recyclerview:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "androidx.savedstate:savedstate:aar:sources:1.0.0",
- "androidx.activity:activity:aar:sources:1.1.0",
- "androidx.arch.core:core-common:jar:sources:2.1.0",
- "androidx.customview:customview:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-common:jar:sources:2.2.0",
- "androidx.loader:loader:aar:sources:1.0.0"
+ "androidx.customview:customview:aar:sources:1.1.0"
],
"directDependencies": [
"androidx.core:core:aar:sources:1.3.1",
@@ -4285,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",
@@ -4305,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",
@@ -4716,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",
@@ -4726,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",
@@ -4770,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",
@@ -4800,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": [
@@ -4963,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": [
@@ -4983,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",
@@ -5021,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",
@@ -5088,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": [
@@ -5117,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",
@@ -5150,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",
@@ -5180,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"
],
@@ -5217,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"
],
@@ -5231,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",
@@ -5255,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": [
@@ -5278,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",
@@ -5329,15 +5284,12 @@
"androidx.constraintlayout:constraintlayout-solver:2.0.1",
"androidx.dynamicanimation:dynamicanimation:1.0.0",
"androidx.interpolator:interpolator:aar:1.0.0",
- "androidx.lifecycle:lifecycle-common:2.2.0",
"androidx.annotation:annotation:1.1.0",
- "androidx.savedstate:savedstate:aar:1.0.0",
"androidx.vectordrawable:vectordrawable:1.1.0",
"androidx.collection:collection:1.1.0",
"androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
"androidx.legacy:legacy-support-core-utils:aar:1.0.0",
"androidx.slidingpanelayout:slidingpanelayout:aar:1.0.0",
- "androidx.activity:activity:aar:1.1.0",
"androidx.cardview:cardview:1.0.0",
"androidx.lifecycle:lifecycle-livedata:aar:2.2.0",
"androidx.vectordrawable:vectordrawable:aar:1.1.0",
@@ -5355,7 +5307,6 @@
"androidx.coordinatorlayout:coordinatorlayout:1.1.0",
"androidx.print:print:aar:1.0.0",
"androidx.lifecycle:lifecycle-viewmodel:aar:2.2.0",
- "androidx.arch.core:core-common:2.1.0",
"androidx.lifecycle:lifecycle-runtime:aar:2.2.0",
"androidx.vectordrawable:vectordrawable-animated:aar:1.1.0",
"androidx.versionedparcelable:versionedparcelable:aar:1.1.0",
@@ -5431,15 +5382,11 @@
"androidx.interpolator:interpolator:aar:sources:1.0.0",
"androidx.cursoradapter:cursoradapter:aar:sources:1.0.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "androidx.savedstate:savedstate:aar:sources:1.0.0",
"androidx.slidingpanelayout:slidingpanelayout:aar:sources:1.0.0",
- "androidx.activity:activity:aar:sources:1.1.0",
- "androidx.arch.core:core-common:jar:sources:2.1.0",
"androidx.appcompat:appcompat-resources:aar:sources:1.2.0",
"androidx.customview:customview:aar:sources:1.1.0",
"androidx.constraintlayout:constraintlayout:jar:sources:2.0.1",
"androidx.lifecycle:lifecycle-runtime:jar:sources:2.2.0",
- "androidx.lifecycle:lifecycle-common:jar:sources:2.2.0",
"androidx.loader:loader:aar:sources:1.0.0",
"androidx.viewpager2:viewpager2:jar:sources:1.0.0",
"androidx.appcompat:appcompat:jar:sources:1.2.0",
@@ -5474,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": [],
@@ -5565,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",
@@ -5843,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",
@@ -5905,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"
],
@@ -5951,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:17.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.0",
+ "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.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"
+ ],
+ "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/19.3.0/firebase-common-19.3.0.aar",
+ "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": [
@@ -6104,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": [
@@ -6143,68 +6396,330 @@
"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-iid-interop:aar:17.0.0",
+ "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.android.gms:play-services-base:aar:17.0.0",
- "com.google.android.gms:play-services-tasks:aar:17.0.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.android.gms:play-services-basement:aar:17.0.0"
+ "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.android.gms:play-services-base:aar:17.0.0",
- "com.google.android.gms:play-services-basement:aar:17.0.0"
+ "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-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
+ "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-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
- "https://maven.fabric.io/public/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
- "https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
- "https://repo1.maven.org/maven2/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.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",
+ "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": "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c",
- "url": "https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.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-iid:aar:20.1.5",
+ "coord": "com.google.firebase:firebase-firestore-ktx:jar:sources:24.2.1",
"dependencies": [
- "com.google.firebase:firebase-installations:aar:16.3.2",
+ "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.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",
+ "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",
- "androidx.print:print:aar:1.0.0",
+ "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",
- "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-iid-interop:aar:17.0.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",
+ "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"
+ ],
+ "directDependencies": [
+ "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": [
+ "https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
+ "https://maven.fabric.io/public/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
+ "https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar",
+ "https://repo1.maven.org/maven2/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar"
+ ],
+ "sha256": "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c",
+ "url": "https://maven.google.com/com/google/firebase/firebase-iid-interop/17.0.0/firebase-iid-interop-17.0.0.aar"
+ },
+ {
+ "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",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar:1.0.0",
+ "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-base:aar:18.0.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.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": [
@@ -6221,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": [
@@ -6243,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",
@@ -6274,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": [
@@ -6293,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",
@@ -6324,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",
@@ -6421,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"
],
@@ -6429,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"
],
@@ -6452,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",
@@ -6460,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": [
@@ -6525,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"
],
@@ -6555,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"
],
@@ -6609,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",
@@ -6646,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",
@@ -6658,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": [
@@ -6687,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",
@@ -6715,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",
@@ -6726,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"
],
@@ -6756,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": [
@@ -6764,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",
@@ -7086,6 +7619,44 @@
"sha256": "88348cf944f841a7a8f5f38960474592e0c1ed8a53349cabe05b22d255479772",
"url": "https://repo1.maven.org/maven2/com/squareup/okhttp3/okhttp/4.7.2/okhttp-4.7.2-sources.jar"
},
+ {
+ "coord": "com.squareup.okhttp:okhttp:2.7.5",
+ "dependencies": [
+ "com.squareup.okio:okio:2.6.0"
+ ],
+ "directDependencies": [
+ "com.squareup.okio:okio:2.6.0"
+ ],
+ "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/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": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa",
+ "url": "https://repo1.maven.org/maven2/com/squareup/okhttp/okhttp/2.7.5/okhttp-2.7.5.jar"
+ },
+ {
+ "coord": "com.squareup.okhttp:okhttp:jar:sources:2.7.5",
+ "dependencies": [
+ "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": [
@@ -7457,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": [],
@@ -7923,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": [
@@ -9860,25 +10909,16 @@
"dependencies": [
"androidx.versionedparcelable:versionedparcelable:aar:sources:1.1.0",
"androidx.vectordrawable:vectordrawable-animated:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-viewmodel:aar:sources:2.2.0",
"androidx.core:core:aar:sources:1.3.1",
"androidx.lifecycle:lifecycle-runtime:aar:sources:2.2.0",
"androidx.fragment:fragment:aar:sources:1.2.0",
"androidx.core:core:jar:sources:1.3.1",
"androidx.drawerlayout:drawerlayout:aar:sources:1.1.0",
"androidx.collection:collection:jar:sources:1.1.0",
- "androidx.viewpager:viewpager:aar:sources:1.0.0",
- "androidx.lifecycle:lifecycle-livedata:aar:sources:2.2.0",
"androidx.interpolator:interpolator:aar:sources:1.0.0",
"androidx.cursoradapter:cursoradapter:aar:sources:1.0.0",
"androidx.annotation:annotation:jar:sources:1.1.0",
- "androidx.savedstate:savedstate:aar:sources:1.0.0",
- "androidx.activity:activity:aar:sources:1.1.0",
- "androidx.arch.core:core-common:jar:sources:2.1.0",
"androidx.appcompat:appcompat-resources:aar:sources:1.2.0",
- "androidx.customview:customview:aar:sources:1.1.0",
- "androidx.lifecycle:lifecycle-common:jar:sources:2.2.0",
- "androidx.loader:loader:aar:sources:1.0.0",
"androidx.appcompat:appcompat:jar:sources:1.2.0",
"androidx.constraintlayout:constraintlayout-solver:jar:sources:2.0.1",
"androidx.vectordrawable:vectordrawable:aar:sources:1.1.0"
@@ -9995,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",
@@ -10041,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",
@@ -10056,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
},
@@ -10109,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
},
@@ -10129,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
@@ -10154,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"
],
@@ -10182,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",
@@ -10191,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
},
@@ -10210,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
},
@@ -10249,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",
@@ -10267,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",
@@ -10283,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",
@@ -10306,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
@@ -10334,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
},
@@ -10351,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
},
@@ -10393,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
@@ -10426,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 c641a520f8a..24195afce9e 100644
--- a/third_party/versions.bzl
+++ b/third_party/versions.bzl
@@ -30,7 +30,6 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = {
"androidx.databinding:databinding-compiler": "3.4.2",
"androidx.databinding:databinding-runtime": "3.4.2",
"androidx.drawerlayout:drawerlayout": "1.1.0",
- "androidx.fragment:fragment": "1.1.0",
"androidx.lifecycle:lifecycle-extensions": "2.2.0",
"androidx.lifecycle:lifecycle-livedata-core": "2.2.0",
"androidx.lifecycle:lifecycle-livedata-ktx": "2.2.0",
@@ -55,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",
@@ -71,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/EventBundleCreator.kt b/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
index 5f19bc99fcc..79d7cc2f789 100644
--- a/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
+++ b/utility/src/main/java/org/oppia/android/util/logging/EventBundleCreator.kt
@@ -1,6 +1,7 @@
package org.oppia.android.util.logging
import android.content.Context
+import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import org.oppia.android.app.model.AppLanguageSelection
@@ -129,6 +130,9 @@ class EventBundleCreator @Inject constructor(
private val appVersionCode by lazy { context.getVersionCode() }
private val appVersionName by lazy { context.getVersionName() }
private val eventCount by lazy { AtomicInteger() }
+ private val screenDensity by lazy {
+ Configuration().densityDpi
+ }
/**
* Fills the specified [bundle] with a logging-ready representation of [eventLog] and returns a
@@ -150,6 +154,9 @@ class EventBundleCreator @Inject constructor(
bundle.putString(
"oppia_audio_lang", eventLog.audioTranslationLanguageSelection.toAnalyticsText()
)
+ bundle.putInt(
+ "screen_density", screenDensity
+ )
return eventLog.context.convertToActivityContext().also { eventContext ->
// Only allow user IDs to be logged when the learner study feature is enabled.
eventContext.storeValue(
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/main/java/org/oppia/android/util/math/FractionParser.kt b/utility/src/main/java/org/oppia/android/util/math/FractionParser.kt
index 7e2288cda95..354f354487d 100644
--- a/utility/src/main/java/org/oppia/android/util/math/FractionParser.kt
+++ b/utility/src/main/java/org/oppia/android/util/math/FractionParser.kt
@@ -24,6 +24,9 @@ class FractionParser {
* detection should be done using [getRealTimeAnswerError], instead.
*/
fun getSubmitTimeError(text: String): FractionParsingError {
+ if (text.isNullOrBlank()) {
+ return FractionParsingError.EMPTY_INPUT
+ }
if (invalidCharsLengthRegex.find(text) != null) {
return FractionParsingError.NUMBER_TOO_LONG
}
@@ -130,6 +133,9 @@ class FractionParser {
* Indicates that at least one of the numbers present in the string is too long to be
* precisely represented in a fraction.
*/
- NUMBER_TOO_LONG
+ NUMBER_TOO_LONG,
+
+ /** Indicates that the input text was empty. */
+ EMPTY_INPUT
}
}
diff --git a/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt b/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
index 97db2dce9db..f08fcfe807a 100755
--- a/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
+++ b/utility/src/main/java/org/oppia/android/util/parser/html/HtmlParser.kt
@@ -78,7 +78,6 @@ class HtmlParser private constructor(
supportsLinks: Boolean = false,
supportsConceptCards: Boolean = false
): Spannable {
-
var htmlContent = rawString
// Canvas does not support RTL, it always starts from left to right in RTL due to which compound drawables are
@@ -124,11 +123,17 @@ class HtmlParser private constructor(
}
val imageGetter = urlImageParserFactory?.create(
- htmlContentTextView, gcsResourceName, entityType, entityId, imageCenterAlign
+ htmlContentTextView,
+ gcsResourceName,
+ entityType,
+ entityId,
+ imageCenterAlign
)
val htmlSpannable = CustomHtmlContentHandler.fromHtml(
- htmlContent, imageGetter, computeCustomTagHandlers(supportsConceptCards, htmlContentTextView)
+ htmlContent,
+ imageGetter,
+ computeCustomTagHandlers(supportsConceptCards, htmlContentTextView)
)
val urlPattern = Patterns.WEB_URL
@@ -226,17 +231,40 @@ class HtmlParser private constructor(
displayLocale: OppiaLocale.DisplayLocale
): HtmlParser {
return HtmlParser(
- context,
- urlImageParserFactory,
- gcsResourceName,
- entityType,
- entityId,
- imageCenterAlign,
- consoleLogger,
+ context = context,
+ urlImageParserFactory = urlImageParserFactory,
+ gcsResourceName = gcsResourceName,
+ entityType = entityType,
+ entityId = entityId,
+ imageCenterAlign = imageCenterAlign,
+ consoleLogger = consoleLogger,
cacheLatexRendering = enableCacheLatexRendering.value,
- customOppiaTagActionListener,
- null,
- displayLocale
+ customOppiaTagActionListener = customOppiaTagActionListener,
+ policyOppiaTagActionListener = null,
+ displayLocale = displayLocale
+ )
+ }
+
+ /**
+ * Returns a new [HtmlParser] with the empty entity type and ID for loading images,
+ * doesn't require GCS properties and imageCenterAlign set to false
+ * optionally specified [CustomOppiaTagActionListener] for handling custom Oppia tag events.
+ */
+ fun create(
+ displayLocale: OppiaLocale.DisplayLocale
+ ): HtmlParser {
+ return HtmlParser(
+ context = context,
+ urlImageParserFactory = urlImageParserFactory,
+ gcsResourceName = "",
+ entityType = "",
+ entityId = "",
+ imageCenterAlign = false,
+ consoleLogger = consoleLogger,
+ cacheLatexRendering = enableCacheLatexRendering.value,
+ customOppiaTagActionListener = null,
+ policyOppiaTagActionListener = null,
+ displayLocale = displayLocale
)
}
diff --git a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
index bf366a43954..ba9dafdb620 100644
--- a/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
+++ b/utility/src/main/java/org/oppia/android/util/platformparameter/FeatureFlagConstants.kt
@@ -156,3 +156,23 @@ const val APP_AND_OS_DEPRECATION = "android_enable_app_and_os_deprecation"
* Default value for the feature flag corresponding to [EnableAppAndOsDeprecation].
*/
const val ENABLE_APP_AND_OS_DEPRECATION_DEFAULT_VALUE = false
+
+/** Qualifier for the feature flag that toggles the the NPS Survey. */
+@Qualifier
+annotation class EnableNpsSurvey
+
+/** Name of the feature flag that toggles the NPS Survey. */
+const val ENABLE_NPS_SURVEY = "enable_nps_survey"
+
+/** Default value of the feature flag corresponding to [EnableNpsSurvey]. */
+const val ENABLE_NPS_SURVEY_DEFAULT_VALUE = false
+
+/** Qualifier for the feature flag that toggles the new onboarding flow. */
+@Qualifier
+annotation class EnableOnboardingFlowV2
+
+/** Name of the feature flag that toggles the new onboarding flow. */
+const val ENABLE_ONBOARDING_FLOW_V2 = "enable_onboarding_flow_v2"
+
+/** Default value of the feature flag corresponding to [EnableOnboardingFlowV2]. */
+const val ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE = false
diff --git a/utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt b/utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt
index c518d398dcd..4648120ab79 100644
--- a/utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt
+++ b/utility/src/main/java/org/oppia/android/util/platformparameter/PlatformParameterConstants.kt
@@ -65,7 +65,6 @@ const val SYNC_UP_WORKER_TIME_PERIOD_IN_HOURS = "sync_up_worker_time_period"
* [PlatformParameterSyncUpWorker] will run again.
*/
const val SYNC_UP_WORKER_TIME_PERIOD_IN_HOURS_DEFAULT_VALUE = 12
-
/**
* Qualifier for the platform parameter that controls whether to cache LaTeX rendering using Glide.
*/
@@ -225,13 +224,3 @@ const val NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES =
* experience with the app.
*/
const val NPS_SURVEY_MINIMUM_AGGREGATE_LEARNING_TIME_IN_A_TOPIC_IN_MINUTES_DEFAULT_VALUE = 5
-
-/** Qualifier for the platform parameter that toggles the new onboarding flow. */
-@Qualifier
-annotation class EnableOnboardingFlowV2
-
-/** Name of the platform parameter that toggles the new onboarding flow. */
-const val ENABLE_ONBOARDING_FLOW_V2 = "enable_onboarding_flow_v2"
-
-/** Default value of the platform parameter corresponding to [EnableOnboardingFlowV2]. */
-const val ENABLE_ONBOARDING_FLOW_V2_DEFAULT_VALUE = false
diff --git a/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt b/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
index db424118e1f..7cb8ef98c35 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/EventBundleCreatorTest.kt
@@ -176,7 +176,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(EventLog.getDefaultInstance(), bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(0)
assertThat(bundle).string("priority").isEqualTo("unspecified_priority")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -222,7 +222,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -570,7 +570,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_player_screen")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -594,7 +594,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_player_screen")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -620,7 +620,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_info_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_INFO_TAB.number)
@@ -639,7 +639,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_lessons_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_LESSONS_TAB.number)
@@ -821,7 +821,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_practice_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PRACTICE_TAB.number)
@@ -840,7 +840,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("select_topic_revision_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_TAB.number)
@@ -859,7 +859,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_question_player_screen")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_QUESTION_PLAYER.number)
@@ -879,7 +879,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_story_chapter_list_screen")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_STORY_ACTIVITY.number)
@@ -899,7 +899,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_concept_card")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_CONCEPT_CARD.number)
@@ -918,7 +918,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_CARD.number)
@@ -938,7 +938,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("close_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(CLOSE_REVISION_CARD.number)
@@ -958,7 +958,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_exploration_card")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -983,7 +983,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_exploration_card")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -1010,7 +1010,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_exploration_card")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -1035,7 +1035,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_exploration_card")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -1062,7 +1062,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_hint")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -1087,7 +1087,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_hint")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -1114,7 +1114,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_hint")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -1139,7 +1139,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_hint")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -1166,7 +1166,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_solution")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -1190,7 +1190,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unlock_solution")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -1216,7 +1216,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_solution")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -1240,7 +1240,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reveal_solution")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -1266,7 +1266,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -1292,7 +1292,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -1320,7 +1320,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_play_voiceover_button")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -1346,7 +1346,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_play_voiceover_button")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -1374,7 +1374,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_pause_voiceover_button")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -1400,7 +1400,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_pause_voiceover_button")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -1428,7 +1428,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("send_app_to_background")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -1446,7 +1446,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("send_app_to_background")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -1466,7 +1466,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("bring_app_to_foreground")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -1484,7 +1484,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("bring_app_to_foreground")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -1504,7 +1504,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("leave_exploration")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1528,7 +1528,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("leave_exploration")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1554,7 +1554,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("complete_exploration")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1578,7 +1578,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("complete_exploration")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1604,7 +1604,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_in_progress_exploration")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1622,7 +1622,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_in_progress_exploration")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1642,7 +1642,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("restart_in_progress_exploration")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1660,7 +1660,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("restart_in_progress_exploration")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1680,7 +1680,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1698,7 +1698,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1718,7 +1718,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_home_screen")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_HOME.number)
@@ -1736,7 +1736,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_profile_chooser_screen")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PROFILE_CHOOSER.number)
@@ -1754,7 +1754,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reach_invested_engagement")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(REACH_INVESTED_ENGAGEMENT.number)
@@ -1778,7 +1778,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("reach_invested_engagement")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(REACH_INVESTED_ENGAGEMENT.number)
@@ -1804,7 +1804,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_switch_language_in_lesson")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1830,7 +1830,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("click_switch_language_in_lesson")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1858,7 +1858,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
@@ -1876,7 +1876,7 @@ class EventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("ERROR_internal_logging_failure")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
diff --git a/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt b/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
index 3ec4c2f5169..ccc9f65bf3f 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/KenyaAlphaEventBundleCreatorTest.kt
@@ -132,7 +132,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(EventLog.getDefaultInstance(), bundle)
assertThat(typeName).isEqualTo("unknown_activity_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(0)
assertThat(bundle).string("priority").isEqualTo("unspecified_priority")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -150,7 +150,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("unknown_activity_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACTIVITYCONTEXT_NOT_SET.number)
@@ -190,7 +190,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_activity")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -214,7 +214,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_exploration_activity")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_EXPLORATION_ACTIVITY.number)
@@ -240,7 +240,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_info_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_INFO_TAB.number)
@@ -259,7 +259,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_lessons_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_LESSONS_TAB.number)
@@ -278,7 +278,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_practice_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PRACTICE_TAB.number)
@@ -297,7 +297,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_tab")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_TAB.number)
@@ -316,7 +316,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_question_player")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_QUESTION_PLAYER.number)
@@ -336,7 +336,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_story_activity")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_STORY_ACTIVITY.number)
@@ -356,7 +356,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_concept_card")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_CONCEPT_CARD.number)
@@ -375,7 +375,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_REVISION_CARD.number)
@@ -395,7 +395,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("close_revision_card")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(CLOSE_REVISION_CARD.number)
@@ -415,7 +415,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_card_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -440,7 +440,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_card_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_CARD_CONTEXT.number)
@@ -467,7 +467,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_card_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -492,7 +492,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("end_card_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(END_CARD_CONTEXT.number)
@@ -519,7 +519,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("hint_offered_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -544,7 +544,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("hint_offered_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(HINT_UNLOCKED_CONTEXT.number)
@@ -571,7 +571,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_hint_context")
- assertThat(bundle).hasSize(17)
+ assertThat(bundle).hasSize(18)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -596,7 +596,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_hint_context")
- assertThat(bundle).hasSize(19)
+ assertThat(bundle).hasSize(20)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_HINT_CONTEXT.number)
@@ -623,7 +623,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("solution_offered_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -647,7 +647,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("solution_offered_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SOLUTION_UNLOCKED_CONTEXT.number)
@@ -673,7 +673,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_solution_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -697,7 +697,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("access_solution_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(ACCESS_SOLUTION_CONTEXT.number)
@@ -723,7 +723,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -749,7 +749,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("submit_answer_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SUBMIT_ANSWER_CONTEXT.number)
@@ -777,7 +777,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("play_voice_over_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -803,7 +803,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("play_voice_over_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PLAY_VOICE_OVER_CONTEXT.number)
@@ -831,7 +831,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("pause_voice_over_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -857,7 +857,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("pause_voice_over_context")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(PAUSE_VOICE_OVER_CONTEXT.number)
@@ -885,7 +885,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_background_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -903,7 +903,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_background_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_BACKGROUND_CONTEXT.number)
@@ -923,7 +923,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_foreground_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -941,7 +941,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("app_in_foreground_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(APP_IN_FOREGROUND_CONTEXT.number)
@@ -961,7 +961,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("exit_exploration_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -985,7 +985,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("exit_exploration_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(EXIT_EXPLORATION_CONTEXT.number)
@@ -1011,7 +1011,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("finish_exploration_context")
- assertThat(bundle).hasSize(16)
+ assertThat(bundle).hasSize(17)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1035,7 +1035,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("finish_exploration_context")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(FINISH_EXPLORATION_CONTEXT.number)
@@ -1061,7 +1061,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_exploration_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1079,7 +1079,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("resume_exploration_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(RESUME_EXPLORATION_CONTEXT.number)
@@ -1099,7 +1099,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_over_exploration_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1117,7 +1117,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("start_over_exploration_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(START_OVER_EXPLORATION_CONTEXT.number)
@@ -1137,7 +1137,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile_context")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1155,7 +1155,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("delete_profile_context")
- assertThat(bundle).hasSize(12)
+ assertThat(bundle).hasSize(13)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(DELETE_PROFILE_CONTEXT.number)
@@ -1175,7 +1175,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_home")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_HOME.number)
@@ -1193,7 +1193,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("open_profile_chooser")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(OPEN_PROFILE_CHOOSER.number)
@@ -1211,7 +1211,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("switch_in_lesson_language")
- assertThat(bundle).hasSize(18)
+ assertThat(bundle).hasSize(19)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1237,7 +1237,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("switch_in_lesson_language")
- assertThat(bundle).hasSize(20)
+ assertThat(bundle).hasSize(21)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(SWITCH_IN_LESSON_LANGUAGE.number)
@@ -1265,7 +1265,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("failed_analytics_log")
- assertThat(bundle).hasSize(10)
+ assertThat(bundle).hasSize(11)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
@@ -1283,7 +1283,7 @@ class KenyaAlphaEventBundleCreatorTest {
val typeName = eventBundleCreator.fillEventBundle(eventLog, bundle)
assertThat(typeName).isEqualTo("failed_analytics_log")
- assertThat(bundle).hasSize(11)
+ assertThat(bundle).hasSize(12)
assertThat(bundle).longInt("timestamp").isEqualTo(TEST_TIMESTAMP_1)
assertThat(bundle).string("priority").isEqualTo("essential")
assertThat(bundle).integer("event_type").isEqualTo(INSTALL_ID_FOR_FAILED_ANALYTICS_LOG.number)
diff --git a/utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerImplTest.kt b/utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerImplTest.kt
index 52d32d11f2b..aaf4eff062c 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerImplTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/SyncStatusManagerImplTest.kt
@@ -23,8 +23,6 @@ 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.networking.NetworkConnectionUtilDebugModule
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLearnerStudyAnalytics
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.platformparameter.SPLASH_SCREEN_WELCOME_MSG_DEFAULT_VALUE
@@ -109,14 +107,6 @@ class SyncStatusManagerImplTest : SyncStatusManagerTestBase() {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableLearnerStudyAnalytics
fun provideLearnerStudyAnalytics(): PlatformParameterValue {
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)
+ }
+}
diff --git a/utility/src/test/java/org/oppia/android/util/logging/firebase/LogReportingModuleTest.kt b/utility/src/test/java/org/oppia/android/util/logging/firebase/LogReportingModuleTest.kt
index dcac9f91ee9..30992f7132c 100644
--- a/utility/src/test/java/org/oppia/android/util/logging/firebase/LogReportingModuleTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/logging/firebase/LogReportingModuleTest.kt
@@ -25,8 +25,6 @@ import org.oppia.android.util.logging.LoggerModule
import org.oppia.android.util.logging.SyncStatusModule
import org.oppia.android.util.logging.performancemetrics.PerformanceMetricsEventLogger
import org.oppia.android.util.networking.NetworkConnectionUtilDebugModule
-import org.oppia.android.util.platformparameter.ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
-import org.oppia.android.util.platformparameter.EnableLanguageSelectionUi
import org.oppia.android.util.platformparameter.EnableLoggingLearnerStudyIds
import org.oppia.android.util.platformparameter.PlatformParameterValue
import org.oppia.android.util.platformparameter.SPLASH_SCREEN_WELCOME_MSG_DEFAULT_VALUE
@@ -99,14 +97,6 @@ class LogReportingModuleTest {
)
}
- @Provides
- @EnableLanguageSelectionUi
- fun provideEnableLanguageSelectionUi(): PlatformParameterValue {
- return PlatformParameterValue.createDefaultParameter(
- ENABLE_LANGUAGE_SELECTION_UI_DEFAULT_VALUE
- )
- }
-
@Provides
@EnableLoggingLearnerStudyIds
fun provideLoggingLearnerStudyIds(): PlatformParameterValue {
diff --git a/utility/src/test/java/org/oppia/android/util/math/FractionParserTest.kt b/utility/src/test/java/org/oppia/android/util/math/FractionParserTest.kt
index 864a429f753..6079f7ec92c 100644
--- a/utility/src/test/java/org/oppia/android/util/math/FractionParserTest.kt
+++ b/utility/src/test/java/org/oppia/android/util/math/FractionParserTest.kt
@@ -85,9 +85,9 @@ class FractionParserTest {
}
@Test
- fun testSubmitTimeError_emptyString_returnsInvalidFormat() {
+ fun testSubmitTimeError_emptyString_returnsEmptyInput() {
val error = fractionParser.getSubmitTimeError("")
- assertThat(error).isEqualTo(FractionParser.FractionParsingError.INVALID_FORMAT)
+ assertThat(error).isEqualTo(FractionParser.FractionParsingError.EMPTY_INPUT)
}
@Test
diff --git a/version.bzl b/version.bzl
index 001bda851aa..9916c223a62 100644
--- a/version.bzl
+++ b/version.bzl
@@ -13,10 +13,10 @@ MAJOR_VERSION = 0
MINOR_VERSION = 11
# TODO(#4419): Remove the Kenya-specific alpha version code.
-OPPIA_DEV_VERSION_CODE = 103
-OPPIA_DEV_KITKAT_VERSION_CODE = 102
-OPPIA_ALPHA_KENYA_VERSION_CODE = 101
-OPPIA_ALPHA_VERSION_CODE = 100
-OPPIA_ALPHA_KITKAT_VERSION_CODE = 99
-OPPIA_BETA_VERSION_CODE = 98
-OPPIA_GA_VERSION_CODE = 97
+OPPIA_DEV_VERSION_CODE = 110
+OPPIA_DEV_KITKAT_VERSION_CODE = 109
+OPPIA_ALPHA_KENYA_VERSION_CODE = 108
+OPPIA_ALPHA_VERSION_CODE = 107
+OPPIA_ALPHA_KITKAT_VERSION_CODE = 106
+OPPIA_BETA_VERSION_CODE = 105
+OPPIA_GA_VERSION_CODE = 104
diff --git a/wiki/RTL-Guidelines.md b/wiki/RTL-Guidelines.md
index cd16760ecd4..090fd31798b 100644
--- a/wiki/RTL-Guidelines.md
+++ b/wiki/RTL-Guidelines.md
@@ -1,6 +1,7 @@
## Table of Contents
- [What is RTL?](#what-is-rtl)
+- [How to enable RTL](#how-to-enable-rtl)
- [What changes in RTL?](#what-changes-in-rtl)
- [Testing app for RTL Layouts](#testing-app-for-rtl-layouts)
- [Reference Documentation](#reference-documentation)
@@ -19,6 +20,23 @@ In general, the passage of time is depicted as left to right for LTR languages,
When a UI is changed from LTR to RTL (or vice-versa), it’s often called mirroring. An RTL layout is the mirror image of an LTR layout, and it affects layout, text, and graphics.
+# How to enable RTL?
+
+#### Option 1:
+
+- **Unlock Developer Options:** Go to your phone's Settings, scroll down to "About Phone," and tap on it. Find the "Build Number" and tap on it 7 times. You'll see a message saying "You are now a developer!"
+- **Access Developer Options:** Go back to the main Settings menu, scroll down, and you should now see "Developer Options" above "About Phone."
+- **Enable Developer Options:** Tap on "Developer Options" and scroll down until you find "Force RTL layout direction."
+- **Enable RTL Mode:** Toggle the switch next to "Force RTL layout direction" to turn it on. Your phone's interface will switch to Right-to-Left mode.
+
+
+
+#### Option 2:
+
+- Enable the "**Arabic**" language on your Android device or emulator.
+
+
+
# What changes in RTL?
When a UI is mirrored, these changes occur:
diff --git a/wiki/Terminology-in-Oppia.md b/wiki/Terminology-in-Oppia.md
index d458333dcc7..6ad759808c3 100644
--- a/wiki/Terminology-in-Oppia.md
+++ b/wiki/Terminology-in-Oppia.md
@@ -2,6 +2,11 @@
- [Overview of entities](#overview-of-entities)
- [Key terms](#key-terms)
+- [How to visit?](#how-to-visit)
+ - [Concept Card](#concept-card)
+ - [Hints & Solution](#hints--solution)
+ - [Completed Stories](#completed-stories)
+ - [Ongoing Topics](#ongoing-topics)
## Overview of entities
@@ -38,4 +43,28 @@ C4 --> c6("Card-6")
4. **Skill**: This is a concrete learning outcome that describes something that a learner should be able to do. It is usually stated in the form “Given X, compute/calculate/draw/etc. Y.” For example: “Given a fraction, identify its numerator.”
5. **Exploration/Chapter**: This is a structured learning experience that is part of a story, and provides the learner with an active way to learn new concepts, as well as targeted feedback. It is the core unit of learning in Oppia. The flow/screen that appears when any story is started is known as the Exploration/Chapter.
6. **Concept Card**: This is a non-story-based explanation of how to perform a particular skill. It serves as a reference/reminder for students who may have encountered the skill before but forgotten how to carry it out. These can be accessed from the "Revision" tab or are linked within the chapter you are playing.
-7. **Question/QuestionPlayer**: This is a standalone question that may be used by students as part of a practice session.
\ No newline at end of file
+7. **Question/QuestionPlayer**: This is a standalone question that may be used by students as part of a practice session.
+
+## How to visit?
+
+### Concept Card
+
+`Home` --> `Choose Topic` --> `Revision Tab` --> `Select revision card` --> `Goto hyperlink present in description text`
+
+
+
+### Hints & Solution
+
+`Home` --> `Choose Topic` --> `Start any lesson` --> `Wait for sometime to blue Hints bar popup`
+
+After all hints are opened, Solution will show up.
+
+
+
+### Completed Stories
+
+
+
+### Ongoing Topics
+
+
\ No newline at end of file