Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions app/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,7 @@ kt_android_library(
"//:dagger",
"//app/src/main/java/org/oppia/android/app/activity:activity_intent_factories_shim",
"//app/src/main/java/org/oppia/android/app/activity:injectable_auto_localized_app_compat_activity",
"//app/src/main/java/org/oppia/android/app/activity:injectable_english_only_app_compat_activity",
"//app/src/main/java/org/oppia/android/app/activity:injectable_system_localized_app_compat_activity",
"//app/src/main/java/org/oppia/android/app/activity/route:activity_router",
"//app/src/main/java/org/oppia/android/app/fragment:injectable_bottom_sheet_dialog_fragment",
Expand Down
20 changes: 18 additions & 2 deletions app/src/main/java/org/oppia/android/app/activity/BUILD.bazel
Original file line number Diff line number Diff line change
Expand Up @@ -49,14 +49,30 @@ kt_android_library(
name = "injectable_auto_localized_app_compat_activity",
srcs = ["InjectableAutoLocalizedAppCompatActivity.kt"],
visibility = ["//app:app_visibility"],
deps = [":injectable_app_compat_activity"],
deps = [
":injectable_app_compat_activity",
"//model/src/main/proto:languages_java_proto_lite",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Remove this line.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the forced_activity_language_mode dependency because the enum now lives in the translation package.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks, also remove the proto.

],
)

kt_android_library(
name = "injectable_system_localized_app_compat_activity",
srcs = ["InjectableSystemLocalizedAppCompatActivity.kt"],
visibility = ["//app:app_visibility"],
deps = [":injectable_app_compat_activity"],
deps = [
":injectable_app_compat_activity",
"//model/src/main/proto:languages_java_proto_lite",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Remove.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the extra forced_activity_language_mode dependency here as well after relocating the enum.

],
)

kt_android_library(
name = "injectable_english_only_app_compat_activity",
srcs = ["InjectableEnglishOnlyAppCompatActivity.kt"],
visibility = ["//app:app_visibility"],
deps = [
":injectable_app_compat_activity",
"//model/src/main/proto:languages_java_proto_lite",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Remove.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the remaining forced_activity_language_mode dependency for the same reason, since the enum is now part of translation

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Remove the proto also.

],
)

kt_android_library(
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.oppia.android.app.activity

import androidx.appcompat.app.AppCompatActivity
import org.oppia.android.app.model.ForcedActivityLanguageMode
import org.oppia.android.app.translation.AppLanguageWatcherMixin

/**
Expand All @@ -13,6 +14,6 @@ import org.oppia.android.app.translation.AppLanguageWatcherMixin
abstract class InjectableAutoLocalizedAppCompatActivity : InjectableAppCompatActivity() {

override fun initializeMixin(appLanguageWatcherMixin: AppLanguageWatcherMixin) {
appLanguageWatcherMixin.initialize(shouldOnlyUseSystemLanguage = false)
appLanguageWatcherMixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.oppia.android.app.activity

import androidx.appcompat.app.AppCompatActivity
import org.oppia.android.app.model.ForcedActivityLanguageMode
import org.oppia.android.app.translation.AppLanguageWatcherMixin

/**
* An [AppCompatActivity] that facilitates field injection to child activities and constituent
* fragments that extend [org.oppia.android.app.fragment.InjectableFragment].
*
* This should be extended by activities which should always display in English regardless of the
* user's selected app or system language (e.g. policies pages which show canonical English
* content).
*/
abstract class InjectableEnglishOnlyAppCompatActivity : InjectableAppCompatActivity() {

override fun initializeMixin(appLanguageWatcherMixin: AppLanguageWatcherMixin) {
appLanguageWatcherMixin.initialize(ForcedActivityLanguageMode.USE_ENGLISH)
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.oppia.android.app.activity

import androidx.appcompat.app.AppCompatActivity
import org.oppia.android.app.model.ForcedActivityLanguageMode
import org.oppia.android.app.translation.AppLanguageWatcherMixin

/**
Expand All @@ -13,6 +14,6 @@ import org.oppia.android.app.translation.AppLanguageWatcherMixin
abstract class InjectableSystemLocalizedAppCompatActivity : InjectableAppCompatActivity() {

override fun initializeMixin(appLanguageWatcherMixin: AppLanguageWatcherMixin) {
appLanguageWatcherMixin.initialize(shouldOnlyUseSystemLanguage = true)
appLanguageWatcherMixin.initialize(ForcedActivityLanguageMode.USE_SYSTEM_LANGUAGE)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import android.content.Context
import android.content.Intent
import android.os.Bundle
import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
import org.oppia.android.app.activity.InjectableEnglishOnlyAppCompatActivity
import org.oppia.android.app.model.PoliciesActivityParams
import org.oppia.android.app.model.PolicyPage
import org.oppia.android.app.model.ScreenName.POLICIES_ACTIVITY
Expand All @@ -15,7 +15,7 @@ import javax.inject.Inject

/** Activity for displaying the app policies. */
class PoliciesActivity :
InjectableAutoLocalizedAppCompatActivity(),
InjectableEnglishOnlyAppCompatActivity(),
RouteToPoliciesListener {

@Inject
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.oppia.android.app.policies

import android.os.Bundle
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
Expand Down Expand Up @@ -44,6 +45,15 @@ class PoliciesFragmentPresenter @Inject constructor(
scrollPosition = it.getInt(KEY_SCROLL_Y, 0)
}

// Policy content is always in English, so force LTR layout direction and left gravity
// to ensure proper alignment of all content including list items (<li> tags) even when
// the app is set to an RTL language.
binding.policyDescriptionTextView.apply {
layoutDirection = View.LAYOUT_DIRECTION_LTR
textDirection = View.TEXT_DIRECTION_LTR
gravity = Gravity.START
}

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Do we need to declare explicitly layout direction for all English only activities?
I am not sure about whether this function in InjectableAppCompatActivity handles layout direction for all activities or not.
@adhiamboperes What's you thought on this ?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the explicit layoutDirection override since InjectableAppCompatActivity already handles layout direction; kept textDirection and gravity to preserve the English-only policy formatting

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Thanks. I am not sure whether we still need to add these two. Could you please check and test on device after removing these?

setUpContentForTextViews(policiesFragmentArguments.policyPage, binding)

(binding.root as ScrollView).viewTreeObserver.addOnGlobalLayoutListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.oppia.android.app.translation

import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.Observer
import org.oppia.android.app.model.ForcedActivityLanguageMode
import org.oppia.android.domain.locale.LocaleController
import org.oppia.android.domain.oppialogger.OppiaLogger
import org.oppia.android.domain.profile.ProfileManagementController
Expand Down Expand Up @@ -37,9 +38,10 @@ class AppLanguageWatcherMixin @Inject constructor(
* called before interacting with the locale handler to avoid inadvertent crashes in such
* situations.
*
* @param shouldOnlyUseSystemLanguage whether only the system language should be used
* @param forcedActivityLanguageMode the [ForcedActivityLanguageMode] indicating how the locale
Comment thread
subhajitxyz marked this conversation as resolved.
Outdated
* should be resolved for this activity
Comment thread
subhajitxyz marked this conversation as resolved.
Outdated
*/
fun initialize(shouldOnlyUseSystemLanguage: Boolean) {
fun initialize(forcedActivityLanguageMode: ForcedActivityLanguageMode) {
if (!appLanguageLocaleHandler.isInitialized()) {
/* The handler might have been de-initialized since bootstrapping. This can generally happen
* in two cases:
Expand Down Expand Up @@ -68,10 +70,27 @@ class AppLanguageWatcherMixin @Inject constructor(

val currentUserProfileId = profileManagementController.getCurrentProfileId()

val activityLanguageLocaleDataProvider = when {
shouldOnlyUseSystemLanguage -> translationController.getSystemLanguageLocale()
currentUserProfileId == null -> translationController.getSystemLanguageLocale()
else -> translationController.getAppLanguageLocale(currentUserProfileId)
val activityLanguageLocaleDataProvider = when (forcedActivityLanguageMode) {
ForcedActivityLanguageMode.USE_SYSTEM_LANGUAGE ->
translationController.getSystemLanguageLocale()
ForcedActivityLanguageMode.USE_ENGLISH ->
translationController.getEnglishLocale()
ForcedActivityLanguageMode.USE_APP_LANGUAGE -> {
if (currentUserProfileId == null) {
translationController.getSystemLanguageLocale()
} else {
translationController.getAppLanguageLocale(currentUserProfileId)
}
}
ForcedActivityLanguageMode.FORCED_ACTIVITY_LANGUAGE_MODE_UNSPECIFIED,
ForcedActivityLanguageMode.UNRECOGNIZED -> {
oppiaLogger.w(
"AppLanguageWatcherMixin",
"Unexpected ForcedActivityLanguageMode: $forcedActivityLanguageMode. " +
"Falling back to system language."
)
translationController.getSystemLanguageLocale()
}
}
Comment on lines +84 to 96
Copy link

Copilot AI Apr 2, 2026

Choose a reason for hiding this comment

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

The new USE_ENGLISH branch changes locale-resolution behavior, but the test suite updates only cover the enum migration. Please add a unit test that initializes the mixin with ForcedActivityLanguageMode.USE_ENGLISH and verifies the mixin selects the English locale (and does not switch when the app language changes).

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Implemented. Added coverage that initializes AppLanguageWatcherMixin with ForcedActivityLanguageMode.USE_ENGLISH and verifies English remains selected even after app-language updates. This is now in the branch.


val liveData = activityLanguageLocaleDataProvider.toLiveData()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ kt_android_library(
":app_language_locale_handler",
"//domain/src/main/java/org/oppia/android/domain/profile:profile_management_controller",
"//domain/src/main/java/org/oppia/android/domain/translation:translation_controller",
"//model/src/main/proto:languages_java_proto_lite",
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Remove this line.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Removed the now-unneeded forced_activity_language_mode dependency after moving the enum into the translation package.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Also remove proto.

],
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ 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.AppLanguageSelection
import org.oppia.android.app.model.ForcedActivityLanguageMode
import org.oppia.android.app.model.LegacyProfileId
import org.oppia.android.app.model.OppiaLanguage
import org.oppia.android.app.model.OppiaLanguage.BRAZILIAN_PORTUGUESE
Expand Down Expand Up @@ -146,7 +147,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_noAppLanguageChange_doesNothing() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = false)
mixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
testCoroutineDispatchers.runCurrent()

// Initializing without anything changing should result in no changes to the locale or activity.
Expand All @@ -160,7 +161,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_withAppLanguageChange_sameLanguage_localeIsUnchanged() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = false)
mixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(ENGLISH)
Expand All @@ -175,7 +176,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_withAppLanguageChange_newLanguage_updatesLocale() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = false)
mixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)
Expand All @@ -190,7 +191,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_withAppLanguageChange_sameLanguage_doesNotRecreateActivity() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = false)
mixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(ENGLISH)
Expand All @@ -204,7 +205,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_withAppLanguageChange_newLanguage_recreatesActivity() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = false)
mixin.initialize(ForcedActivityLanguageMode.USE_APP_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)
Expand All @@ -218,7 +219,7 @@ class AppLanguageWatcherMixinTest {
fun testMixin_initialized_withShouldUseSystemLanguage_initializesSystemLanguage() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = true)
mixin.initialize(ForcedActivityLanguageMode.USE_SYSTEM_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)
Expand All @@ -230,10 +231,41 @@ class AppLanguageWatcherMixinTest {
}
}

@Test
fun testMixin_initialized_withShouldUseEnglish_initializesEnglishAndIgnoresAppLanguageChanges() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(ForcedActivityLanguageMode.USE_ENGLISH)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)

// English should remain the selected locale even when app language is changed.
val localeContext = appLanguageLocaleHandler.getDisplayLocale().localeContext
assertThat(localeContext.languageDefinition.language).isEqualTo(ENGLISH)
assertThat(testActivityRecreator.getRecreateCount()).isEqualTo(0)
}
}

@Test
fun testMixin_initialized_withUnspecifiedMode_fallsBackToSystemLanguage() {
profileTestHelper.initializeProfiles()
runAlongsideTestActivity { mixin ->
mixin.initialize(ForcedActivityLanguageMode.FORCED_ACTIVITY_LANGUAGE_MODE_UNSPECIFIED)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)

// Unspecified mode should deterministically fall back to system language.
val localeContext = appLanguageLocaleHandler.getDisplayLocale().localeContext
assertThat(localeContext.languageDefinition.language).isEqualTo(ENGLISH)
}
}

@Test
fun testMixin_initialized_noProfileLoggedIn_initializesSystemLanguage() {
runAlongsideTestActivity { mixin ->
mixin.initialize(shouldOnlyUseSystemLanguage = true)
mixin.initialize(ForcedActivityLanguageMode.USE_SYSTEM_LANGUAGE)
testCoroutineDispatchers.runCurrent()

updateAppLanguageTo(BRAZILIAN_PORTUGUESE)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,17 @@ class TranslationController @Inject constructor(
}
}

/**
* Returns a data provider for an app string [OppiaLocale.DisplayLocale] corresponding to the
* English language.
*
* This is used for activities that should always display in English regardless of the user's
* selected app language (e.g. the policies pages which show canonical English content).
*/
fun getEnglishLocale(): DataProvider<OppiaLocale.DisplayLocale> {
return localeController.retrieveAppStringDisplayLocale(OppiaLanguage.ENGLISH)
}

/**
* Returns a data provider for the current [OppiaLanguage] selected for app strings for the
* specified user (per their [profileId]).
Expand Down
19 changes: 19 additions & 0 deletions model/src/main/proto/languages.proto
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,25 @@ enum OppiaLanguage {
NIGERIAN_PIDGIN = 8;
}

// Defines the forced language mode for an activity, determining how its locale is resolved.
// This is used to specify whether an activity should follow the user's app language, the system
// language, or always use English (e.g. for policies pages whose content is canonical English).
enum ForcedActivityLanguageMode {
Comment thread
subhajitxyz marked this conversation as resolved.
Outdated
// Default value; unspecified mode. This should not be used in practice.
FORCED_ACTIVITY_LANGUAGE_MODE_UNSPECIFIED = 0;
Comment thread
subhajitxyz marked this conversation as resolved.
Outdated

// Use the user's selected app language (or system default if none is selected).
USE_APP_LANGUAGE = 1;

// Use the system's default language, ignoring the user's app language selection.
USE_SYSTEM_LANGUAGE = 2;

// Force English locale, regardless of system or app language settings.
// Used for activities displaying canonical English content such as Terms of Service
// and Privacy Policy.
USE_ENGLISH = 3;
}

// The list of regions explicitly supported natively by the Android app. Note that the app is not
// automatically unsupported in countries not on this list. Countries absent from this list may
// default to default system behavior for certain localization situations (such as date & time
Expand Down
4 changes: 3 additions & 1 deletion scripts/assets/file_content_validation_checks.textproto
Original file line number Diff line number Diff line change
Expand Up @@ -206,9 +206,10 @@ file_content_checks {
file_content_checks {
file_path_regex: ".+?\\.kt"
prohibited_content_regex: "\\sInjectableAppCompatActivity\\("
failure_message: "Never subclass InjectableAppCompatActivity directly. Instead, use InjectableSystemLocalizedAppCompatActivity or InjectableAutoLocalizedAppCompatActivity."
failure_message: "Never subclass InjectableAppCompatActivity directly. Instead, use InjectableSystemLocalizedAppCompatActivity, InjectableAutoLocalizedAppCompatActivity, or InjectableEnglishOnlyAppCompatActivity."
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt"
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt"
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableEnglishOnlyAppCompatActivity.kt"
exempted_file_name: "scripts/src/javatests/org/oppia/android/scripts/regex/RegexPatternValidationCheckTest.kt"
}
file_content_checks {
Expand Down Expand Up @@ -435,6 +436,7 @@ file_content_checks {
exempted_file_name:"app/src/main/java/org/oppia/android/app/activity/InjectableAppCompatActivity.kt"
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt"
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt"
exempted_file_name: "app/src/main/java/org/oppia/android/app/activity/InjectableEnglishOnlyAppCompatActivity.kt"
exempted_file_patterns: "app/src/main/java/org/oppia/android/app/testing.+?\\.kt"
exempted_file_patterns: "app/src/main/java/org/oppia/android/app/devoptions/testing.+?\\.kt"
exempted_file_patterns: "app/src/main/java/org/oppia/android/app/devoptions/vieweventlogs/testing.+?\\.kt"
Expand Down
4 changes: 4 additions & 0 deletions scripts/assets/test_file_exemptions.textproto
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableAutoLocalizedAppCompatActivity.kt"
test_file_not_required: true
}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableEnglishOnlyAppCompatActivity.kt"
test_file_not_required: true
}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/activity/InjectableSystemLocalizedAppCompatActivity.kt"
test_file_not_required: true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ class RegexPatternValidationCheckTest {
"Never subclass AppCompatActivity directly. Instead, use InjectableAppCompatActivity."
private val subclassedInjectableAppCompatActivityErrorMessage =
"Never subclass InjectableAppCompatActivity directly. Instead, use " +
"InjectableSystemLocalizedAppCompatActivity or InjectableAutoLocalizedAppCompatActivity."
"InjectableSystemLocalizedAppCompatActivity, InjectableAutoLocalizedAppCompatActivity, " +
"or InjectableEnglishOnlyAppCompatActivity."
private val subclassedDialogFragmentErrorMessage =
"DialogFragment should never be subclassed. Use InjectableDialogFragment, instead."
private val androidActivityConfigChangesErrorMessage =
Expand Down
Loading