From f3e8961386143b2484306f0d33cb582b347f3047 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Wed, 19 Mar 2025 02:13:57 +0300
Subject: [PATCH 01/43] New layout for auth
---
.../pin_edit_text_background_border.xml | 9 +++
.../res/layout/profile_login_activity.xml | 62 +++++++++++++++++++
app/src/main/res/values/styles.xml | 33 ++++++++++
3 files changed, 104 insertions(+)
create mode 100644 app/src/main/res/drawable/pin_edit_text_background_border.xml
create mode 100644 app/src/main/res/layout/profile_login_activity.xml
diff --git a/app/src/main/res/drawable/pin_edit_text_background_border.xml b/app/src/main/res/drawable/pin_edit_text_background_border.xml
new file mode 100644
index 00000000000..ce865903304
--- /dev/null
+++ b/app/src/main/res/drawable/pin_edit_text_background_border.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
diff --git a/app/src/main/res/layout/profile_login_activity.xml b/app/src/main/res/layout/profile_login_activity.xml
new file mode 100644
index 00000000000..c968ce5a232
--- /dev/null
+++ b/app/src/main/res/layout/profile_login_activity.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 1cc8f1ea810..3ada96722dc 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -826,4 +826,37 @@
- @drawable/ic_arrow_drop_down_black_24dp
- @color/component_color_shared_black_background_color
+
+
+
+
+
+
+
+
From 14296af2a9686f32fe96a81413c26b26a272c952 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 01:49:28 +0300
Subject: [PATCH 02/43] Add compose livedata dependency
---
app/BUILD.bazel | 1 +
scripts/assets/maven_dependencies.textproto | 11 +++++++++++
third_party/maven_install.json | 20 ++++++++++++++++++--
third_party/versions.bzl | 1 +
4 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/app/BUILD.bazel b/app/BUILD.bazel
index 27f268e4877..868bffb9460 100644
--- a/app/BUILD.bazel
+++ b/app/BUILD.bazel
@@ -641,6 +641,7 @@ kt_android_library(
"//third_party:androidx_compose_foundation_foundation-layout",
"//third_party:androidx_compose_material_material",
"//third_party:androidx_compose_runtime_runtime",
+ "//third_party:androidx_compose_runtime_runtime-livedata",
"//third_party:androidx_compose_ui_ui",
"//third_party:androidx_core_core-ktx",
"//third_party:androidx_databinding_databinding-adapters",
diff --git a/scripts/assets/maven_dependencies.textproto b/scripts/assets/maven_dependencies.textproto
index 7464ba96470..22f7704fdb8 100644
--- a/scripts/assets/maven_dependencies.textproto
+++ b/scripts/assets/maven_dependencies.textproto
@@ -218,6 +218,17 @@ maven_dependency {
}
}
}
+maven_dependency {
+ artifact_name: "androidx.compose.runtime:runtime-livedata:1.1.1"
+ artifact_version: "1.1.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: "androidx.compose.runtime:runtime-saveable:1.1.1"
artifact_version: "1.1.1"
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
index b033d30df3c..bc6b5b26d6a 100644
--- a/third_party/maven_install.json
+++ b/third_party/maven_install.json
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": 1952776840,
- "__RESOLVED_ARTIFACTS_HASH": -1450223812,
+ "__INPUT_ARTIFACTS_HASH": -1231161001,
+ "__RESOLVED_ARTIFACTS_HASH": -191090718,
"conflict_resolution": {
"androidx.annotation:annotation:1.1.0": "androidx.annotation:annotation:1.2.0",
"androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
@@ -149,6 +149,12 @@
},
"version": "1.1.1"
},
+ "androidx.compose.runtime:runtime-livedata:aar": {
+ "shasums": {
+ "jar": "6495ebfc18e96261196d098e13b05b954feb6b223f20761797f1ffa3fb83da48"
+ },
+ "version": "1.1.1"
+ },
"androidx.compose.runtime:runtime-saveable:aar": {
"shasums": {
"jar": "15b542e07bea14065336da0b255650433da46e250a160feaf39b90f2edc8b230"
@@ -2085,6 +2091,12 @@
"androidx.savedstate:savedstate:aar",
"org.jetbrains.kotlin:kotlin-stdlib-common"
],
+ "androidx.compose.runtime:runtime-livedata:aar": [
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
"androidx.compose.runtime:runtime-saveable:aar": [
"androidx.annotation:annotation",
"androidx.compose.runtime:runtime:aar",
@@ -6858,6 +6870,7 @@
"androidx.compose.material:material-icons-core:aar",
"androidx.compose.material:material-ripple:aar",
"androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
"androidx.compose.runtime:runtime-saveable:aar",
"androidx.compose.runtime:runtime:aar",
"androidx.compose.ui:ui-geometry:aar",
@@ -7181,6 +7194,7 @@
"androidx.compose.material:material-icons-core:aar",
"androidx.compose.material:material-ripple:aar",
"androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
"androidx.compose.runtime:runtime-saveable:aar",
"androidx.compose.runtime:runtime:aar",
"androidx.compose.ui:ui-geometry:aar",
@@ -7504,6 +7518,7 @@
"androidx.compose.material:material-icons-core:aar",
"androidx.compose.material:material-ripple:aar",
"androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
"androidx.compose.runtime:runtime-saveable:aar",
"androidx.compose.runtime:runtime:aar",
"androidx.compose.ui:ui-geometry:aar",
@@ -7827,6 +7842,7 @@
"androidx.compose.material:material-icons-core:aar",
"androidx.compose.material:material-ripple:aar",
"androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
"androidx.compose.runtime:runtime-saveable:aar",
"androidx.compose.runtime:runtime:aar",
"androidx.compose.ui:ui-geometry:aar",
diff --git a/third_party/versions.bzl b/third_party/versions.bzl
index c2a8fa71e89..c82b71b1db2 100644
--- a/third_party/versions.bzl
+++ b/third_party/versions.bzl
@@ -28,6 +28,7 @@ MAVEN_PRODUCTION_DEPENDENCY_VERSIONS = {
"androidx.compose.foundation:foundation-layout": "1.1.1",
"androidx.compose.material:material": "1.1.1",
"androidx.compose.runtime:runtime": "1.1.1",
+ "androidx.compose.runtime:runtime-livedata": "1.1.1",
"androidx.compose.ui:ui": "1.1.1",
"androidx.constraintlayout:constraintlayout": "1.1.3",
"androidx.core:core": "1.0.1",
From cb7936f29e4a418817be58667fa072ffbedf001e Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 01:51:46 +0300
Subject: [PATCH 03/43] Create color and string resources
---
app/src/main/res/values-night/color_palette.xml | 4 ++++
app/src/main/res/values/color_defs.xml | 1 +
app/src/main/res/values/color_palette.xml | 4 ++++
app/src/main/res/values/component_colors.xml | 9 +++++++++
app/src/main/res/values/strings.xml | 8 +++++++-
5 files changed, 25 insertions(+), 1 deletion(-)
diff --git a/app/src/main/res/values-night/color_palette.xml b/app/src/main/res/values-night/color_palette.xml
index 36cbe2ed20f..49f490f6e0c 100644
--- a/app/src/main/res/values-night/color_palette.xml
+++ b/app/src/main/res/values-night/color_palette.xml
@@ -252,4 +252,8 @@
@color/color_def_greenish_black_3
@color/color_def_persian_blue_2
@color/color_def_greenish_black_2
+
+
+ @color/color_def_highlight_blue_darker
+ @color/color_def_white
diff --git a/app/src/main/res/values/color_defs.xml b/app/src/main/res/values/color_defs.xml
index 5c65cd2fff3..1b618a449b5 100644
--- a/app/src/main/res/values/color_defs.xml
+++ b/app/src/main/res/values/color_defs.xml
@@ -153,6 +153,7 @@
#1D3532
#8EBBB6
#64817E
+ #F4FDFC
#F8BF74
#B3D8F1
#B8FFFFFF
diff --git a/app/src/main/res/values/color_palette.xml b/app/src/main/res/values/color_palette.xml
index d0cc7371583..3a2978b83a3 100644
--- a/app/src/main/res/values/color_palette.xml
+++ b/app/src/main/res/values/color_palette.xml
@@ -295,4 +295,8 @@
@color/color_def_greenish_white
@color/color_def_persian_blue_1
@color/color_def_white
+
+ @color/color_def_light_jade
+ @color/color_def_accessible_grey
+ @color/color_def_dark_silver
diff --git a/app/src/main/res/values/component_colors.xml b/app/src/main/res/values/component_colors.xml
index f5da6612882..b1e138bbce1 100644
--- a/app/src/main/res/values/component_colors.xml
+++ b/app/src/main/res/values/component_colors.xml
@@ -322,8 +322,11 @@
@color/color_palette_onboarding_learner_intro_header_color
@color/color_palette_onboarding_learner_intro_list_color
@color/color_palette_onboarding_learner_intro_check_color
+
@color/color_palette_edittext_stroke_color
+
@color/color_palette_text_error_color
+
@color/color_palette_classroom_shared_header_text_color
@color/color_palette_classroom_card_color
@@ -334,4 +337,10 @@
@color/color_palette_classroom_topic_list_background_color
@color/color_palette_classroom_promoted_list_classroom_label_color
@color/color_palette_classroom_promoted_list_card_background_color
+
+ @color/color_palette_profile_login_background_color
+ @color/color_palette_profile_login_primary_text_color
+ @color/color_palette_primary_color
+ @color/color_palette_profile_login_unfocused_state_color
+ @color/color_palette_white_text_color
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4ce5bf00c31..84f4e97d311 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -78,7 +78,6 @@
Featured Questions
Frequently Asked Questions
FAQs (Frequently Asked Questions)
- PIN verification
Introduction
Frequently Asked Questions (FAQs)
Info
@@ -293,6 +292,7 @@
Get Started
Slide %1$s of %2$s
+ PIN verification
Hi, %s!
Please enter your Administrator PIN.
Please enter your PIN.
@@ -701,4 +701,10 @@
Arabic
+
+ Login
+ Please enter your PIN
+ Welcome back, %s!
+ You have entered an incorrect PIN.
+ I forgot my PIN
From b10ae81eb73b4c511acc6b4c6d6471c5471c74b5 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 01:54:04 +0300
Subject: [PATCH 04/43] Create xml layouts
---
.../res/layout/profile_login_activity.xml | 68 +++----------------
.../res/layout/profile_login_fragment.xml | 15 ++++
2 files changed, 24 insertions(+), 59 deletions(-)
create mode 100644 app/src/main/res/layout/profile_login_fragment.xml
diff --git a/app/src/main/res/layout/profile_login_activity.xml b/app/src/main/res/layout/profile_login_activity.xml
index c968ce5a232..066cb57c9b8 100644
--- a/app/src/main/res/layout/profile_login_activity.xml
+++ b/app/src/main/res/layout/profile_login_activity.xml
@@ -1,62 +1,12 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
diff --git a/app/src/main/res/layout/profile_login_fragment.xml b/app/src/main/res/layout/profile_login_fragment.xml
new file mode 100644
index 00000000000..3a6c3c46a72
--- /dev/null
+++ b/app/src/main/res/layout/profile_login_fragment.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
From 5a366f12dd68be56d69f9bcf8576c8929833d6a8 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 02:00:12 +0300
Subject: [PATCH 05/43] Create ProfileLoginActivity
---
app/src/main/AndroidManifest.xml | 4 ++
.../app/activity/ActivityComponentImpl.kt | 2 +
.../app/profile/ProfileLoginActivity.kt | 47 +++++++++++++++++++
.../profile/ProfileLoginActivityPresenter.kt | 38 +++++++++++++++
model/src/main/proto/screens.proto | 3 ++
.../util/logging/EventBundleCreator.kt | 1 +
6 files changed, 95 insertions(+)
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 764936e6d0d..83f29c790af 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -347,6 +347,10 @@
android:name=".app.onboarding.IntroActivity"
android:label="@string/onboarding_learner_intro_activity_title"
android:theme="@style/OppiaThemeWithoutActionBar" />
+
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 bf9968544d9..124826a88cd 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
@@ -49,6 +49,7 @@ import org.oppia.android.app.profile.AdminAuthActivity
import org.oppia.android.app.profile.AdminPinActivity
import org.oppia.android.app.profile.PinPasswordActivity
import org.oppia.android.app.profile.ProfileChooserActivity
+import org.oppia.android.app.profile.ProfileLoginActivity
import org.oppia.android.app.profileprogress.ProfilePictureActivity
import org.oppia.android.app.profileprogress.ProfileProgressActivity
import org.oppia.android.app.resumelesson.ResumeLessonActivity
@@ -226,4 +227,5 @@ interface ActivityComponentImpl :
fun inject(onboardingProfileTypeActivity: OnboardingProfileTypeActivity)
fun inject(createProfileActivity: CreateProfileActivity)
fun inject(introActivity: IntroActivity)
+ fun inject(profileLoginActivity: ProfileLoginActivity)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
new file mode 100644
index 00000000000..1d4939e1952
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
@@ -0,0 +1,47 @@
+package org.oppia.android.app.profile
+
+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.model.ProfileId
+import org.oppia.android.app.model.ScreenName
+import org.oppia.android.util.extensions.putProtoExtra
+import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.extractCurrentUserProfileId
+import javax.inject.Inject
+
+/** Activity that allows user to log in to their profile by inputting their PIN. */
+class ProfileLoginActivity : InjectableAutoLocalizedAppCompatActivity() {
+
+ @Inject
+ lateinit var profileLoginActivityPresenter: ProfileLoginActivityPresenter
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ (activityComponent as ActivityComponentImpl).inject(this)
+
+ val profileId = intent.extractCurrentUserProfileId()
+
+ profileLoginActivityPresenter.handleOnCreate(profileId)
+ }
+
+ companion object {
+ /** Params key for ProfileLoginActivity. */
+ const val PROFILE_LOGIN_ACTIVITY_PARAMS_KEY = "ProfileLoginActivity.params"
+
+ /** Creates and returns an Intent to open a new [ProfileLoginActivity]. */
+ fun createProfileLoginActivityIntent(
+ context: Context,
+ profileId: ProfileId
+ ): Intent {
+ return Intent(context, ProfileLoginActivity::class.java).apply {
+ putProtoExtra(PROFILE_LOGIN_ACTIVITY_PARAMS_KEY, args)
+ decorateWithUserProfileId(profileId)
+ decorateWithScreenName(ScreenName.PROFILE_LOGIN_ACTIVITY)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
new file mode 100644
index 00000000000..aa88c9565ba
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -0,0 +1,38 @@
+package org.oppia.android.app.profile
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import org.oppia.android.app.activity.ActivityScope
+import org.oppia.android.app.model.ProfileId
+import org.oppia.android.app.ui.R
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
+import javax.inject.Inject
+
+private const val TAG_PROFILE_LOGIN_FRAGMENT = "TAG_PROFILE_LOGIN_FRAGMENT"
+
+/** The presenter for [ProfileLoginActivity]. */
+@ActivityScope
+class ProfileLoginActivityPresenter @Inject constructor(private val activity: AppCompatActivity) {
+ /** Creates the view for [ProfileLoginActivity]. */
+ fun handleOnCreate(profileId: ProfileId) {
+ activity.setContentView(R.layout.profile_login_activity)
+
+ if (getProfileLoginFragment() == null) {
+ val profileLoginFragment = ProfileLoginFragment().apply {
+ arguments = Bundle().also { it.decorateWithUserProfileId(profileId) }
+ }
+
+ activity.supportFragmentManager.beginTransaction()
+ .add(
+ R.id.profile_login_fragment_placeholder, profileLoginFragment, TAG_PROFILE_LOGIN_FRAGMENT
+ )
+ .commitNow()
+ }
+ }
+
+ private fun getProfileLoginFragment(): ProfileLoginFragment? {
+ return activity.supportFragmentManager.findFragmentByTag(
+ TAG_PROFILE_LOGIN_FRAGMENT
+ ) as? ProfileLoginFragment
+ }
+}
diff --git a/model/src/main/proto/screens.proto b/model/src/main/proto/screens.proto
index 2824e72bd6c..669bcbe3411 100644
--- a/model/src/main/proto/screens.proto
+++ b/model/src/main/proto/screens.proto
@@ -170,6 +170,9 @@ enum ScreenName {
// Screen name value for the scenario when the learner welcome activity is visible to the user.
INTRO_ACTIVITY = 53;
+
+ // Screen name value for the scenario when a user with a PIN wants to log in to their profile.
+ PROFILE_LOGIN_ACTIVITY = 54;
}
// Defines the current visible UI screen of the application.
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 7078750e2ce..5bab8224392 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
@@ -884,6 +884,7 @@ class EventBundleCreator @Inject constructor(
ScreenName.ONBOARDING_PROFILE_TYPE_ACTIVITY -> "onboarding_profile_type_activity"
ScreenName.CREATE_PROFILE_ACTIVITY -> "create_profile_activity"
ScreenName.INTRO_ACTIVITY -> "intro_activity"
+ ScreenName.PROFILE_LOGIN_ACTIVITY -> "profile_login_activity"
}
private fun AppLanguageSelection.toAnalyticsText(): String {
From 83f3762bc9c48b53f2d4fb3498add0333568dd95 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 02:01:23 +0300
Subject: [PATCH 06/43] Create ProfileLoginFragment
---
.../app/fragment/FragmentComponentImpl.kt | 2 +
.../app/profile/ProfileLoginFragment.kt | 39 +++
.../profile/ProfileLoginFragmentPresenter.kt | 308 ++++++++++++++++++
3 files changed, 349 insertions(+)
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
diff --git a/app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt b/app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
index cab45a1b1b6..8c0f9796b1a 100644
--- a/app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
+++ b/app/src/main/java/org/oppia/android/app/fragment/FragmentComponentImpl.kt
@@ -59,6 +59,7 @@ import org.oppia.android.app.player.stopplaying.UnsavedExplorationDialogFragment
import org.oppia.android.app.policies.PoliciesFragment
import org.oppia.android.app.profile.AdminSettingsDialogFragment
import org.oppia.android.app.profile.ProfileChooserFragment
+import org.oppia.android.app.profile.ProfileLoginFragment
import org.oppia.android.app.profile.ResetPinDialogFragment
import org.oppia.android.app.profileprogress.ProfilePictureEditDialogFragment
import org.oppia.android.app.profileprogress.ProfileProgressFragment
@@ -204,4 +205,5 @@ interface FragmentComponentImpl : FragmentComponent, ViewComponentBuilderInjecto
fun inject(onboardingProfileTypeFragment: OnboardingProfileTypeFragment)
fun inject(createProfileFragment: CreateProfileFragment)
fun inject(introFragment: IntroFragment)
+ fun inject(profileLoginFragment: ProfileLoginFragment)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt
new file mode 100644
index 00000000000..990156d05ed
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt
@@ -0,0 +1,39 @@
+package org.oppia.android.app.profile
+
+import android.content.Context
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import org.oppia.android.app.fragment.FragmentComponentImpl
+import org.oppia.android.app.fragment.InjectableFragment
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.extractCurrentUserProfileId
+import javax.inject.Inject
+
+/** Fragment that contains the profile login screen. */
+class ProfileLoginFragment : InjectableFragment() {
+ @Inject
+ lateinit var profileLoginFragmentPresenter: ProfileLoginFragmentPresenter
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ (fragmentComponent as FragmentComponentImpl).inject(this)
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ val profileId =
+ checkNotNull(arguments?.extractCurrentUserProfileId()) {
+ "Expected profileId to be included in the arguments for ProfileLoginFragment."
+ }
+
+ return profileLoginFragmentPresenter.handleCreateView(
+ inflater,
+ container,
+ profileId
+ )
+ }
+}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
new file mode 100644
index 00000000000..8feb757b728
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -0,0 +1,308 @@
+package org.oppia.android.app.profile
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.aspectRatio
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.BasicTextField
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.MaterialTheme
+import androidx.compose.material.Text
+import androidx.compose.material.TextButton
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.livedata.observeAsState
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.fragment.app.Fragment
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.Transformations
+import kotlinx.coroutines.delay
+import org.oppia.android.app.classroom.ClassroomListActivity
+import org.oppia.android.app.databinding.databinding.ProfileLoginFragmentBinding
+import org.oppia.android.app.home.HomeActivity
+import org.oppia.android.app.model.Profile
+import org.oppia.android.app.model.ProfileId
+import org.oppia.android.app.model.ProfileType
+import org.oppia.android.app.translation.AppLanguageResourceHandler
+import org.oppia.android.app.ui.R
+import org.oppia.android.domain.oppialogger.OppiaLogger
+import org.oppia.android.domain.profile.ProfileManagementController
+import org.oppia.android.util.data.AsyncResult
+import org.oppia.android.util.data.DataProviders.Companion.toLiveData
+import org.oppia.android.util.platformparameter.EnableMultipleClassrooms
+import org.oppia.android.util.platformparameter.PlatformParameterValue
+import javax.inject.Inject
+
+/** The presenter for [ProfileLoginFragment]. */
+class ProfileLoginFragmentPresenter @Inject constructor(
+ private val activity: AppCompatActivity,
+ private val fragment: Fragment,
+ private val oppiaLogger: OppiaLogger,
+ private val profileManagementController: ProfileManagementController,
+ private val resourceHandler: AppLanguageResourceHandler,
+ @EnableMultipleClassrooms private val enableMultipleClassrooms: PlatformParameterValue
+) {
+ private lateinit var binding: ProfileLoginFragmentBinding
+ private lateinit var profileLiveData: LiveData
+
+ /** Creates and returns the view for the [ProfileLoginFragment]. */
+ fun handleCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ profileId: ProfileId
+ ): View? {
+ binding = ProfileLoginFragmentBinding.inflate(inflater, container, /* attachToRoot= */ false)
+
+ profileLiveData =
+ getProfileResult(profileManagementController.getProfile(profileId).toLiveData())
+
+ createComposeView()
+
+ return binding.root
+ }
+
+ private fun getProfileResult(profileResult: LiveData>): LiveData {
+ return Transformations.map(profileResult, ::processGetProfileResult)
+ }
+
+ private fun processGetProfileResult(profileResult: AsyncResult): Profile {
+ val profile = when (profileResult) {
+ is AsyncResult.Failure -> {
+ oppiaLogger.e("ProfileLoginActivity", "Failed to retrieve profile", profileResult.error)
+ Profile.getDefaultInstance()
+ }
+
+ is AsyncResult.Pending -> Profile.getDefaultInstance()
+ is AsyncResult.Success -> profileResult.value
+ }
+ return profile
+ }
+
+ private fun createComposeView() {
+ binding.profileLoginComposeView.apply {
+ setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
+ setContent {
+ MaterialTheme {
+ PinEntryScreen()
+ }
+ }
+ }
+ }
+
+ @Composable
+ fun PinEntryScreen() {
+ var showError by remember { mutableStateOf(false) }
+ val profile: Profile by profileLiveData.observeAsState(initial = Profile.getDefaultInstance())
+ val profileName = profile.name
+ val profileId = profile.id
+ val profileType = profile.profileType
+ var pinValue by remember { mutableStateOf("") }
+ var shakeOffset by remember { mutableStateOf(0f) }
+ val pinLength = if (profileType == ProfileType.SUPERVISOR) 5 else 3
+
+ Box(
+ modifier = Modifier
+ .fillMaxSize()
+ .background(colorResource(R.color.component_color_profile_login_background_color))
+ ) {
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(horizontal = 24.dp),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center
+ ) {
+ WelcomeHeader(profileName)
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ PinInputField(
+ pinValue = pinValue,
+ onPinChanged = { newValue ->
+ pinValue = newValue
+ if (newValue.length == pinLength) {
+ if (newValue == profile.pin) {
+ profileManagementController.loginToProfile(profileId).toLiveData()
+ .observe(fragment) {
+ if (it is AsyncResult.Success) {
+ activity.startActivity(
+ if (enableMultipleClassrooms.value)
+ ClassroomListActivity.createClassroomListActivity(activity, profileId)
+ else
+ HomeActivity.createHomeActivity(activity, profileId)
+ )
+ activity.finish()
+ }
+ }
+ } else {
+ showError = true
+ }
+ }
+ },
+ pinLength = pinLength,
+ modifier = Modifier.offset(x = shakeOffset.dp)
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ PinErrorText(
+ showError = showError,
+ errorMessage = resourceHandler.getStringInLocale(
+ R.string.profile_login_activity_pin_error
+ )
+ )
+
+ Spacer(modifier = Modifier.height(24.dp))
+
+ ForgotPinButton()
+
+ LaunchedEffect(showError) {
+ if (showError) {
+ // Shake animation using offset
+ repeat(3) {
+ shakeOffset = -10f
+ delay(50)
+ shakeOffset = 10f
+ delay(50)
+ }
+ shakeOffset = 0f
+
+ // Clear PIN and hide the error message after delay.
+ delay(1000)
+ pinValue = ""
+ showError = false
+ }
+ }
+ }
+ }
+ }
+
+ @Composable
+ private fun WelcomeHeader(profileName: String) {
+ Text(
+ text = resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_activity_greeting_text, profileName
+ ),
+ style = TextStyle(
+ fontSize = 24.sp,
+ fontWeight = FontWeight.Bold,
+ color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
+ )
+ )
+
+ Spacer(modifier = Modifier.height(16.dp))
+
+ Text(
+ text = resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_activity_enter_pin_prompt
+ ),
+ textAlign = TextAlign.Center,
+ style = TextStyle(
+ fontSize = 16.sp,
+ color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
+ )
+ )
+ }
+
+ @Composable
+ private fun PinInputField(
+ pinValue: String,
+ onPinChanged: (String) -> Unit,
+ pinLength: Int,
+ modifier: Modifier = Modifier
+ ) {
+ BasicTextField(
+ value = pinValue,
+ onValueChange = { newValue ->
+ if (newValue.length <= pinLength && newValue.all { it.isDigit() }) {
+ onPinChanged(newValue)
+ }
+ },
+ keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.NumberPassword),
+ decorationBox = {
+ Row(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = modifier) {
+ repeat(pinLength) { index ->
+ val char = pinValue.getOrNull(index)?.toString() ?: ""
+ val isFocused = pinValue.length == index
+ Box(
+ modifier = Modifier
+ .size(48.dp)
+ .aspectRatio(0.7F)
+ .border(
+ width = if (isFocused) 2.dp else 1.dp,
+ color = if (isFocused)
+ colorResource(id = R.color.component_color_profile_login_shared_primary_color)
+ else
+ colorResource(
+ id = R.color.component_color_profile_login_unfocused_outline_color
+ ),
+ shape = RoundedCornerShape(4.dp)
+ )
+ .background(
+ colorResource(id = R.color.component_color_profile_login_shared_white_color)
+ ),
+ contentAlignment = Alignment.Center
+ ) {
+ Text(text = char, style = MaterialTheme.typography.h6)
+ }
+ }
+ }
+ }
+ )
+ }
+
+ @Composable
+ fun PinErrorText(showError: Boolean, errorMessage: String) {
+ if (showError) {
+ Text(
+ text = errorMessage,
+ textAlign = TextAlign.Center,
+ style = TextStyle(
+ fontSize = 14.sp,
+ color = colorResource(id = R.color.component_color_shared_error_color)
+ )
+ )
+ }
+ }
+
+ @Composable
+ private fun ForgotPinButton() {
+ TextButton(onClick = { /* TODO Handle forgot PIN */ }) {
+ Text(
+ text = resourceHandler.getStringInLocaleWithWrapping
+ (R.string.profile_login_activity_forgot_pin_text),
+ style = TextStyle(
+ fontSize = 16.sp,
+ color = colorResource(id = R.color.component_color_profile_login_shared_primary_color)
+ )
+ )
+ }
+ }
+}
From c384747d6cad1c520d45baa1bbd12921d18961b8 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 02:02:09 +0300
Subject: [PATCH 07/43] Refactor login intent to new ProfileLoginActivity
---
.../app/profile/ProfileChooserFragmentPresenter.kt | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
index 0f622b4d53b..b480ffcad6d 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserFragmentPresenter.kt
@@ -325,12 +325,11 @@ class ProfileChooserFragmentPresenter @Inject constructor(
}
}
} else {
- val pinPasswordIntent = PinPasswordActivity.createPinPasswordActivityIntent(
- activity,
- chooserViewModel.adminPin,
- profile.id.internalId
+ val profileLoginIntent = ProfileLoginActivity.createProfileLoginActivityIntent(
+ context,
+ profile.id
)
- activity.startActivity(pinPasswordIntent)
+ activity.startActivity(profileLoginIntent)
}
}
From a69130476cf971ff98a67136ae6e679170742d6f Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 02:02:34 +0300
Subject: [PATCH 08/43] Add todos to track cleanup
---
.../java/org/oppia/android/app/profile/PinPasswordActivity.kt | 1 +
.../java/org/oppia/android/app/profile/PinPasswordViewModel.kt | 1 +
2 files changed, 2 insertions(+)
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
index 4a25a3d314f..f518b83d631 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
@@ -11,6 +11,7 @@ import org.oppia.android.util.extensions.putProtoExtra
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
import javax.inject.Inject
+// TODO(#5817) Remove when v2 onboarding flow has stabilized.
/** Activity that allows user to input his or her PIN. */
class PinPasswordActivity :
InjectableAutoLocalizedAppCompatActivity(),
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
index d54cbe297d9..8c6846d6aa1 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
@@ -15,6 +15,7 @@ import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
import javax.inject.Inject
+// TODO(#5817) Remove along with PinPasswordActivity when v2 onboarding flow has stabilized.
/** The ViewModel for [PinPasswordActivity]. */
@ActivityScope
class PinPasswordViewModel @Inject constructor(
From eec9434fab24ea3c4515ec2bca19e0f8a204b3df Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sat, 3 May 2025 02:07:04 +0300
Subject: [PATCH 09/43] Cleanup unused items
---
.../ClassroomListFragmentPresenter.kt | 1 -
.../pin_edit_text_background_border.xml | 9 -----
app/src/main/res/values/styles.xml | 33 -------------------
3 files changed, 43 deletions(-)
delete mode 100644 app/src/main/res/drawable/pin_edit_text_background_border.xml
diff --git a/app/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
index 5264f4e7778..280744e6c17 100644
--- a/app/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/classroom/ClassroomListFragmentPresenter.kt
@@ -102,7 +102,6 @@ class ClassroomListFragmentPresenter @Inject constructor(
private lateinit var binding: ClassroomListFragmentBinding
private lateinit var classroomListViewModel: ClassroomListViewModel
private val profileId = activity.intent.extractCurrentUserProfileId()
- private var onBackPressedCallback: OnBackPressedCallback? = null
/** Creates and returns the view for the [ClassroomListFragment]. */
fun handleCreateView(inflater: LayoutInflater, container: ViewGroup?): View? {
diff --git a/app/src/main/res/drawable/pin_edit_text_background_border.xml b/app/src/main/res/drawable/pin_edit_text_background_border.xml
deleted file mode 100644
index ce865903304..00000000000
--- a/app/src/main/res/drawable/pin_edit_text_background_border.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 3e7f31aee67..dea82903275 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -861,37 +861,4 @@
- @dimen/profile_selection_fragment_profile_prompt_size
- @dimen/profile_selection_fragment_view_min_size
-
-
-
-
-
-
-
-
From 99e1a199dce7463206148773a06748911b22dad7 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sun, 4 May 2025 04:10:48 +0300
Subject: [PATCH 10/43] Add admin reset pin flow
---
.../profile/ProfileLoginFragmentPresenter.kt | 221 ++++++++++++++++--
app/src/main/res/values/strings.xml | 4 +
2 files changed, 204 insertions(+), 21 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 8feb757b728..f903716e223 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -20,11 +20,13 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.AlertDialog
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.mutableStateOf
@@ -40,6 +42,7 @@ import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
+import androidx.compose.ui.window.DialogProperties
import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData
import androidx.lifecycle.Transformations
@@ -71,6 +74,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
) {
private lateinit var binding: ProfileLoginFragmentBinding
private lateinit var profileLiveData: LiveData
+ private lateinit var adminProfileLiveData: LiveData
/** Creates and returns the view for the [ProfileLoginFragment]. */
fun handleCreateView(
@@ -83,28 +87,13 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileLiveData =
getProfileResult(profileManagementController.getProfile(profileId).toLiveData())
+ getAdminPin()
+
createComposeView()
return binding.root
}
- private fun getProfileResult(profileResult: LiveData>): LiveData {
- return Transformations.map(profileResult, ::processGetProfileResult)
- }
-
- private fun processGetProfileResult(profileResult: AsyncResult): Profile {
- val profile = when (profileResult) {
- is AsyncResult.Failure -> {
- oppiaLogger.e("ProfileLoginActivity", "Failed to retrieve profile", profileResult.error)
- Profile.getDefaultInstance()
- }
-
- is AsyncResult.Pending -> Profile.getDefaultInstance()
- is AsyncResult.Success -> profileResult.value
- }
- return profile
- }
-
private fun createComposeView() {
binding.profileLoginComposeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
@@ -181,7 +170,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
Spacer(modifier = Modifier.height(24.dp))
- ForgotPinButton()
+ ForgotPinButton(profileType, profileId, profileName)
LaunchedEffect(showError) {
if (showError) {
@@ -279,7 +268,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
}
@Composable
- fun PinErrorText(showError: Boolean, errorMessage: String) {
+ private fun PinErrorText(showError: Boolean, errorMessage: String) {
if (showError) {
Text(
text = errorMessage,
@@ -293,8 +282,13 @@ class ProfileLoginFragmentPresenter @Inject constructor(
}
@Composable
- private fun ForgotPinButton() {
- TextButton(onClick = { /* TODO Handle forgot PIN */ }) {
+ private fun ForgotPinButton(profileType: ProfileType, profileId: ProfileId, profileName: String) {
+ val adminProfile:
+ Profile by adminProfileLiveData.observeAsState(initial = Profile.getDefaultInstance())
+ val adminPin = adminProfile.pin
+ val openForgotPinDialog = remember { mutableStateOf(false) }
+
+ TextButton(onClick = { openForgotPinDialog.value = true }) {
Text(
text = resourceHandler.getStringInLocaleWithWrapping
(R.string.profile_login_activity_forgot_pin_text),
@@ -304,5 +298,190 @@ class ProfileLoginFragmentPresenter @Inject constructor(
)
)
}
+
+ if (openForgotPinDialog.value) {
+ if (profileType == ProfileType.SUPERVISOR) {
+ ForgotAdminPinDialogFlow(openForgotPinDialog)
+ } else {
+ showResetNonAdminPinFlow(adminPin, openForgotPinDialog, profileId, profileName)
+ }
+ }
+ }
+
+ @Composable
+ private fun ForgotAdminPinDialogFlow(openForgotPinDialog: MutableState) {
+ val openConfirmationDialog = remember { mutableStateOf(false) }
+
+ if (openForgotPinDialog.value) {
+ ForgotAdminPinDialog(
+ onDismissRequest = { openForgotPinDialog.value = false },
+ onConfirmation = {
+ openConfirmationDialog.value = true
+ }
+ )
+ }
+
+ if (openConfirmationDialog.value) {
+ ConfirmDataResetDialog(
+ onDismissRequest = { openConfirmationDialog.value = false }
+ )
+ }
+ }
+
+ @Composable
+ private fun ForgotAdminPinDialog(
+ onDismissRequest: () -> Unit,
+ onConfirmation: () -> Unit
+ ) {
+ val appName = resourceHandler.getStringInLocale(R.string.app_name)
+
+ AlertDialog(
+ title = {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_forgot_pin_dialog_title
+ )
+ )
+ },
+ text = {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_forgot_pin_dialog_message, appName
+ )
+ )
+ },
+ properties = DialogProperties(
+ dismissOnClickOutside = false,
+ dismissOnBackPress = false
+ ),
+ onDismissRequest = {
+ onDismissRequest()
+ },
+ dismissButton = {
+ TextButton(
+ onClick = {
+ onDismissRequest()
+ }
+ ) {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_forgot_pin_dialog_cancel_button
+ )
+ )
+ }
+ },
+ confirmButton = {
+ TextButton(
+ onClick = {
+ onConfirmation()
+ }
+ ) {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ appName
+ )
+ )
+ }
+ }
+ )
+ }
+
+ @Composable
+ private fun ConfirmDataResetDialog(
+ onDismissRequest: () -> Unit
+ ) {
+ val appName = resourceHandler.getStringInLocale(R.string.app_name)
+
+ AlertDialog(
+ title = {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.admin_confirm_app_wipe_title, appName
+ )
+ )
+ },
+ text = {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.admin_confirm_app_wipe_message, appName
+ )
+ )
+ },
+ properties = DialogProperties(
+ dismissOnClickOutside = false,
+ dismissOnBackPress = false
+ ),
+ onDismissRequest = {
+ onDismissRequest()
+ },
+ dismissButton = {
+ TextButton(
+ onClick = {
+ onDismissRequest()
+ }
+ ) {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.admin_confirm_app_wipe_negative_button_text
+ )
+ )
+ }
+ },
+ confirmButton = {
+ TextButton(
+ onClick = { deleteAppData() }
+ ) {
+ Text(
+ resourceHandler.getStringInLocaleWithWrapping(
+ R.string.admin_confirm_app_wipe_positive_button_text,
+ appName
+ )
+ )
+ }
+ }
+ )
+ }
+
+ private fun showResetNonAdminPinFlow(
+ correctAdminPin: String,
+ openForgotPinDialog: MutableState,
+ profileId: ProfileId,
+ profileName: String
+ ) {
+ openForgotPinDialog.value = false
+ val dialogFragment = AdminSettingsDialogFragment
+ .newInstance(correctAdminPin, profileId, profileName)
+ dialogFragment.showNow(fragment.parentFragmentManager, TAG_VALIDATE_ADMIN_PIN_DIALOG)
+ }
+
+ private fun deleteAppData() {
+ profileManagementController.deleteAllProfiles().toLiveData().observe(fragment) {
+ activity.finishAffinity()
+ }
+ } // TODO something weird happens when the default profile is created after this == wrong type maybe?
+
+ private fun getAdminPin() {
+ val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
+
+ adminProfileLiveData =
+ getProfileResult(profileManagementController.getProfile(adminProfileId).toLiveData())
+ }
+
+ private fun getProfileResult(profileResult: LiveData>): LiveData {
+ return Transformations.map(profileResult, ::processGetProfileResult)
+ }
+
+ private fun processGetProfileResult(profileResult: AsyncResult): Profile {
+ val profile = when (profileResult) {
+ is AsyncResult.Failure -> {
+ oppiaLogger.e("ProfileLoginActivity", "Failed to retrieve profile", profileResult.error)
+ Profile.getDefaultInstance()
+ }
+
+ is AsyncResult.Pending -> Profile.getDefaultInstance()
+ is AsyncResult.Success -> profileResult.value
+ }
+ return profile
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 84f4e97d311..0957c629f33 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -707,4 +707,8 @@
Welcome back, %s!
You have entered an incorrect PIN.
I forgot my PIN
+ Forgot PIN?
+ To reset your PIN, you\'ll need to clear all saved data for %s.\n\nKeep in mind that this action will cause all profiles and user progress to be deleted, and it cannot be undone. Also, the app will close when this completes and will need to be reopened.
+ Reset %s Data
+ Cancel
From a93542aabcb02d4b3568a31dd782a2805a1f77ab Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sun, 4 May 2025 04:11:54 +0300
Subject: [PATCH 11/43] Add route to non-admin reset pin flow
---
.../profile/AdminSettingsDialogFragment.kt | 23 ++++++++++++++---
.../AdminSettingsDialogFragmentPresenter.kt | 7 ++++--
.../app/profile/PinPasswordActivity.kt | 3 ++-
.../profile/PinPasswordActivityPresenter.kt | 2 +-
.../app/profile/ProfileLoginActivity.kt | 22 +++++++++++-----
.../profile/ProfileLoginActivityPresenter.kt | 25 +++++++++++++++++++
.../profile/ProfileRouteDialogInterface.kt | 4 ++-
model/src/main/proto/arguments.proto | 3 +++
8 files changed, 75 insertions(+), 14 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt b/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt
index 74a1c75de6f..f072d25dd58 100644
--- a/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragment.kt
@@ -6,8 +6,11 @@ import android.os.Bundle
import org.oppia.android.app.fragment.FragmentComponentImpl
import org.oppia.android.app.fragment.InjectableDialogFragment
import org.oppia.android.app.model.AdminSettingsDialogFragmentArguments
+import org.oppia.android.app.model.ProfileId
import org.oppia.android.util.extensions.getProto
import org.oppia.android.util.extensions.putProto
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
+import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.extractCurrentUserProfileId
import javax.inject.Inject
/** DialogFragment that allows user to input admin PIN. */
@@ -15,11 +18,19 @@ class AdminSettingsDialogFragment : InjectableDialogFragment() {
companion object {
/** Arguments key for AdminSettingsDialogFragment. */
const val ADMIN_SETTINGS_DIALOG_FRAGMENT_ARGUMENTS_KEY = "AdminSettingsDialogFragment.arguments"
- fun newInstance(adminPin: String): AdminSettingsDialogFragment {
- val args = AdminSettingsDialogFragmentArguments.newBuilder().setAdminPin(adminPin).build()
+ fun newInstance(
+ adminPin: String,
+ profileId: ProfileId,
+ profileName: String
+ ): AdminSettingsDialogFragment {
+ val args = AdminSettingsDialogFragmentArguments.newBuilder()
+ .setAdminPin(adminPin)
+ .setCurrentProfileName(profileName)
+ .build()
return AdminSettingsDialogFragment().apply {
arguments = Bundle().apply {
putProto(ADMIN_SETTINGS_DIALOG_FRAGMENT_ARGUMENTS_KEY, args)
+ decorateWithUserProfileId(profileId)
}
}
}
@@ -39,10 +50,16 @@ class AdminSettingsDialogFragment : InjectableDialogFragment() {
AdminSettingsDialogFragmentArguments.getDefaultInstance()
)
val adminPin = args?.adminPin
+ val profileName = args?.currentProfileName ?: ""
+ val profileId = arguments?.extractCurrentUserProfileId() ?: ProfileId.getDefaultInstance()
+
checkNotNull(adminPin) { "Admin Pin must not be null" }
+
return adminSettingsDialogFragmentPresenter.handleOnCreateDialog(
activity as ProfileRouteDialogInterface,
- adminPin
+ adminPin,
+ profileId,
+ profileName
)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt
index 20871c5486f..1674f37cb55 100644
--- a/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/AdminSettingsDialogFragmentPresenter.kt
@@ -9,6 +9,7 @@ import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import org.oppia.android.app.databinding.databinding.AdminSettingsDialogBinding
import org.oppia.android.app.fragment.FragmentScope
+import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.translation.AppLanguageResourceHandler
import org.oppia.android.app.ui.R
import org.oppia.android.app.utility.TextInputEditTextHelper.Companion.onTextChanged
@@ -24,7 +25,9 @@ class AdminSettingsDialogFragmentPresenter @Inject constructor(
) {
fun handleOnCreateDialog(
routeDialogInterface: ProfileRouteDialogInterface,
- adminPin: String?
+ adminPin: String?,
+ profileId: ProfileId,
+ profileName: String
): Dialog {
val binding: AdminSettingsDialogBinding =
DataBindingUtil.inflate(
@@ -83,7 +86,7 @@ class AdminSettingsDialogFragmentPresenter @Inject constructor(
return@setOnClickListener
}
if (binding.adminSettingsInputPinEditText.text.toString() == adminPin) {
- routeDialogInterface.routeToResetPinDialog()
+ routeDialogInterface.routeToResetPinDialog(profileId, profileName)
} else {
adminViewModel.errorMessage.set(
resourceHandler.getStringInLocale(
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
index f518b83d631..615e156aaf2 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
@@ -6,6 +6,7 @@ import android.os.Bundle
import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
import org.oppia.android.app.model.PinPasswordActivityParams
+import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.ScreenName.PIN_PASSWORD_ACTIVITY
import org.oppia.android.util.extensions.putProtoExtra
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
@@ -44,7 +45,7 @@ class PinPasswordActivity :
pinPasswordActivityPresenter.handleOnCreate()
}
- override fun routeToResetPinDialog() {
+ override fun routeToResetPinDialog(profileId: ProfileId, profileName: String) {
pinPasswordActivityPresenter.handleRouteToResetPinDialog()
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
index 46009eab634..9b19bafff90 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
@@ -146,7 +146,7 @@ class PinPasswordActivityPresenter @Inject constructor(
activity.supportFragmentManager.beginTransaction().remove(previousFrag).commitNow()
}
val dialogFragment = AdminSettingsDialogFragment
- .newInstance(adminPin!!)
+ .newInstance(adminPin!!, profileId, pinViewModel.name.get()!!) // todo verify
dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_SETTINGS_DIALOG)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
index 1d4939e1952..473a27bcac2 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
@@ -7,14 +7,15 @@ import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.ScreenName
-import org.oppia.android.util.extensions.putProtoExtra
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.extractCurrentUserProfileId
import javax.inject.Inject
/** Activity that allows user to log in to their profile by inputting their PIN. */
-class ProfileLoginActivity : InjectableAutoLocalizedAppCompatActivity() {
+class ProfileLoginActivity :
+ InjectableAutoLocalizedAppCompatActivity(),
+ ProfileRouteDialogInterface {
@Inject
lateinit var profileLoginActivityPresenter: ProfileLoginActivityPresenter
@@ -29,19 +30,28 @@ class ProfileLoginActivity : InjectableAutoLocalizedAppCompatActivity() {
}
companion object {
- /** Params key for ProfileLoginActivity. */
- const val PROFILE_LOGIN_ACTIVITY_PARAMS_KEY = "ProfileLoginActivity.params"
-
/** Creates and returns an Intent to open a new [ProfileLoginActivity]. */
fun createProfileLoginActivityIntent(
context: Context,
profileId: ProfileId
): Intent {
return Intent(context, ProfileLoginActivity::class.java).apply {
- putProtoExtra(PROFILE_LOGIN_ACTIVITY_PARAMS_KEY, args)
decorateWithUserProfileId(profileId)
decorateWithScreenName(ScreenName.PROFILE_LOGIN_ACTIVITY)
}
}
}
+
+ override fun routeToResetPinDialog(profileId: ProfileId, profileName: String) {
+ profileLoginActivityPresenter.handleRouteToResetPinDialog(profileId, profileName)
+ }
+
+ override fun routeToSuccessDialog() {
+ profileLoginActivityPresenter.handleRouteToSuccessDialog()
+ }
+
+ override fun onDestroy() {
+ super.onDestroy()
+ // profileLoginActivityPresenter.handleOnDestroy()
+ }
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
index aa88c9565ba..7bc13472540 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -2,12 +2,19 @@ package org.oppia.android.app.profile
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import androidx.fragment.app.DialogFragment
import org.oppia.android.app.activity.ActivityScope
import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.ui.R
import org.oppia.android.util.profile.CurrentUserProfileIdIntentDecorator.decorateWithUserProfileId
import javax.inject.Inject
+/** Tag for identifying [AdminSettingsDialogFragment] in transactions. */
+const val TAG_VALIDATE_ADMIN_PIN_DIALOG = "ADMIN_SETTINGS_DIALOG"
+
+/** Tag for identifying [ResetPinDialogFragment] in transactions. */
+const val TAG_ADMIN_RESET_PIN_DIALOG = "RESET_PIN_DIALOG"
+
private const val TAG_PROFILE_LOGIN_FRAGMENT = "TAG_PROFILE_LOGIN_FRAGMENT"
/** The presenter for [ProfileLoginActivity]. */
@@ -35,4 +42,22 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
TAG_PROFILE_LOGIN_FRAGMENT
) as? ProfileLoginFragment
}
+
+ fun handleRouteToResetPinDialog(profileId: ProfileId, profileName: String) {
+ (
+ activity
+ .supportFragmentManager
+ .findFragmentByTag(
+ TAG_VALIDATE_ADMIN_PIN_DIALOG
+ ) as DialogFragment
+ ).dismiss()
+ val dialogFragment = ResetPinDialogFragment.newInstance(
+ profileId.internalId,
+ profileName
+ )
+ dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_RESET_PIN_DIALOG)
+ }
+
+ fun handleRouteToSuccessDialog() {
+ }
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt
index 7b28359665e..1a4edac85f4 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt
@@ -1,9 +1,11 @@
package org.oppia.android.app.profile
+import org.oppia.android.app.model.ProfileId
+
/** Interface to route dialogs in user Forgot Password flow. */
interface ProfileRouteDialogInterface {
/** Shows [ResetPinDialogFragment]. */
- fun routeToResetPinDialog()
+ fun routeToResetPinDialog(profileId: ProfileId, profileName: String)
/** Shows Success Dialog. */
fun routeToSuccessDialog()
diff --git a/model/src/main/proto/arguments.proto b/model/src/main/proto/arguments.proto
index cf5b7e082f3..af06e366555 100644
--- a/model/src/main/proto/arguments.proto
+++ b/model/src/main/proto/arguments.proto
@@ -683,6 +683,9 @@ message AdminPinActivityParams {
message AdminSettingsDialogFragmentArguments {
// Admin pin.
string admin_pin = 1;
+
+ // Name of the current profile attempting to reset their PIN.
+ string current_profile_name = 2;
}
// Represents the parameters needed to create PinPasswordActivity.
From 1ea182a54eed3f6886dd4a7626237e41fe5e0009 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Sun, 4 May 2025 04:32:26 +0300
Subject: [PATCH 12/43] Add non-admin pin reset flow
---
.../profile/PinPasswordActivityPresenter.kt | 2 +-
.../app/profile/ProfileLoginActivity.kt | 5 ---
.../profile/ProfileLoginActivityPresenter.kt | 31 +++++++++++++++----
.../profile/ProfileLoginFragmentPresenter.kt | 2 +-
app/src/main/res/values/strings.xml | 2 ++
5 files changed, 29 insertions(+), 13 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
index 9b19bafff90..f78c23487b1 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
@@ -146,7 +146,7 @@ class PinPasswordActivityPresenter @Inject constructor(
activity.supportFragmentManager.beginTransaction().remove(previousFrag).commitNow()
}
val dialogFragment = AdminSettingsDialogFragment
- .newInstance(adminPin!!, profileId, pinViewModel.name.get()!!) // todo verify
+ .newInstance(adminPin!!, profileId, pinViewModel.name.get()!!)
dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_SETTINGS_DIALOG)
}
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
index 473a27bcac2..bdfd87d6adc 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt
@@ -49,9 +49,4 @@ class ProfileLoginActivity :
override fun routeToSuccessDialog() {
profileLoginActivityPresenter.handleRouteToSuccessDialog()
}
-
- override fun onDestroy() {
- super.onDestroy()
- // profileLoginActivityPresenter.handleOnDestroy()
- }
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
index 7bc13472540..47fd3d41b94 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -1,6 +1,7 @@
package org.oppia.android.app.profile
import android.os.Bundle
+import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.DialogFragment
import org.oppia.android.app.activity.ActivityScope
@@ -37,12 +38,7 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
}
}
- private fun getProfileLoginFragment(): ProfileLoginFragment? {
- return activity.supportFragmentManager.findFragmentByTag(
- TAG_PROFILE_LOGIN_FRAGMENT
- ) as? ProfileLoginFragment
- }
-
+ /** Handles showing the [ResetPinDialogFragment]. */
fun handleRouteToResetPinDialog(profileId: ProfileId, profileName: String) {
(
activity
@@ -58,6 +54,29 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_RESET_PIN_DIALOG)
}
+ /** Handles showing the reset pin success dialog. */
fun handleRouteToSuccessDialog() {
+ (
+ activity
+ .supportFragmentManager
+ .findFragmentByTag(
+ TAG_ADMIN_RESET_PIN_DIALOG
+ ) as DialogFragment
+ ).dismiss()
+ showSuccessDialog()
+ }
+
+ private fun showSuccessDialog() {
+ AlertDialog.Builder(activity, R.style.OppiaAlertDialogTheme)
+ .setMessage(R.string.profile_login_reset_pin_success_dialog_message)
+ .setPositiveButton(R.string.profile_login_reset_pin_success_dialog_close) { dialog, _ ->
+ dialog.dismiss()
+ }.create().show()
+ }
+
+ private fun getProfileLoginFragment(): ProfileLoginFragment? {
+ return activity.supportFragmentManager.findFragmentByTag(
+ TAG_PROFILE_LOGIN_FRAGMENT
+ ) as? ProfileLoginFragment
}
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index f903716e223..4243446b403 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -459,7 +459,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileManagementController.deleteAllProfiles().toLiveData().observe(fragment) {
activity.finishAffinity()
}
- } // TODO something weird happens when the default profile is created after this == wrong type maybe?
+ }
private fun getAdminPin() {
val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 0957c629f33..23c6789881a 100755
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -711,4 +711,6 @@
To reset your PIN, you\'ll need to clear all saved data for %s.\n\nKeep in mind that this action will cause all profiles and user progress to be deleted, and it cannot be undone. Also, the app will close when this completes and will need to be reopened.
Reset %s Data
Cancel
+ Close
+ PIN changed successfully!
From 69973d10ecfcac073744efc6d82be4d13e9416ac Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Mon, 5 May 2025 07:28:17 +0300
Subject: [PATCH 13/43] wip commit
---
.../oppia/android/app/profile/ProfileLoginFragmentPresenter.kt | 2 +-
app/src/main/res/layout/profile_login_fragment.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 4243446b403..b7b0db24a1c 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -459,7 +459,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileManagementController.deleteAllProfiles().toLiveData().observe(fragment) {
activity.finishAffinity()
}
- }
+ }// TODO something weird happens when the default profile is created after this == wrong type maybe?
private fun getAdminPin() {
val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
diff --git a/app/src/main/res/layout/profile_login_fragment.xml b/app/src/main/res/layout/profile_login_fragment.xml
index 3a6c3c46a72..01f37a9c9a8 100644
--- a/app/src/main/res/layout/profile_login_fragment.xml
+++ b/app/src/main/res/layout/profile_login_fragment.xml
@@ -12,4 +12,4 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
-
\ No newline at end of file
+
From 9ef0501cc3b104c5d29e394d46d2a4e32d338146 Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Thu, 15 May 2025 13:10:17 +0300
Subject: [PATCH 14/43] Add activity tests
---
.../app/profile/ProfileLoginActivityTest.kt | 209 ++++++++++++++++++
1 file changed, 209 insertions(+)
create mode 100644 app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
new file mode 100644
index 00000000000..db36ce7991e
--- /dev/null
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
@@ -0,0 +1,209 @@
+package org.oppia.android.app.profile
+
+import android.app.Application
+import android.content.Context
+import android.content.Intent
+import androidx.appcompat.app.AppCompatActivity
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.intent.Intents
+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.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+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.ProfileId
+import org.oppia.android.app.model.ScreenName
+import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
+import org.oppia.android.app.shim.ViewBindingShimModule
+import org.oppia.android.app.test.R
+import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
+import org.oppia.android.data.backends.gae.NetworkConfigProdModule
+import org.oppia.android.data.backends.gae.RetrofitModule
+import org.oppia.android.data.backends.gae.RetrofitServiceModule
+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.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
+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.CurrentAppScreenNameIntentDecorator.extractCurrentAppScreenName
+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 [ProfileLoginActivity]. */
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(
+ application = ProfileLoginActivityTest.TestApplication::class,
+ qualifiers = "port-xxhdpi"
+)
+class ProfileLoginActivityTest {
+ @get:Rule
+ val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+
+ @get:Rule
+ val oppiaTestRule = OppiaTestRule()
+
+ @Inject
+ lateinit var context: Context
+
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
+ @Before
+ fun setUp() {
+ Intents.init()
+ setUpTestApplicationComponent()
+ }
+
+ @After
+ fun tearDown() {
+ Intents.release()
+ }
+
+ @Test
+ fun testActivity_createIntent_verifyScreenNameInIntent() {
+ val screenName = createProfileLoginActivityIntent().extractCurrentAppScreenName()
+ assertThat(screenName).isEqualTo(ScreenName.PROFILE_LOGIN_ACTIVITY)
+ }
+
+ @Test
+ fun testActivity_hasCorrectActivityLabel() {
+ ActivityScenario.launch(createProfileLoginActivityIntent())
+ .use { scenario ->
+ scenario?.onActivity { activity ->
+ val title = activity.title
+ assertThat(title).isEqualTo(context.getString(R.string.profile_login_activity_title))
+ }
+ }
+ }
+
+ private fun createProfileLoginActivityIntent(): Intent {
+ val profileId = ProfileId.newBuilder().setInternalId(0).build()
+ return ProfileLoginActivity.createProfileLoginActivityIntent(context, profileId)
+ }
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ // 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,
+ 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, RetrofitModule::class, RetrofitServiceModule::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,
+ ActivityRouterModule::class,
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
+ ]
+ )
+
+ interface TestApplicationComponent : ApplicationComponent {
+ @Component.Builder
+ interface Builder : ApplicationComponent.Builder
+
+ fun inject(profileLoginActivityTest: ProfileLoginActivityTest)
+ }
+
+ class TestApplication : Application(), ActivityComponentFactory, ApplicationInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerProfileLoginActivityTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build() as TestApplicationComponent
+ }
+
+ fun inject(profileLoginActivityTest: ProfileLoginActivityTest) {
+ component.inject(profileLoginActivityTest)
+ }
+
+ override fun createActivityComponent(activity: AppCompatActivity): ActivityComponent {
+ return component.getActivityComponentBuilderProvider().get().setActivity(activity).build()
+ }
+
+ override fun getApplicationInjector(): ApplicationInjector = component
+ }
+}
From 734c9aba9bb5302c7b458ca65d84fbc657c2ff7b Mon Sep 17 00:00:00 2001
From: Adhiambo Peres <59600948+adhiamboperes@users.noreply.github.com>
Date: Wed, 21 May 2025 16:44:25 +0300
Subject: [PATCH 15/43] Add fragment tests
---
.../profile/ProfileLoginFragmentPresenter.kt | 68 ++-
.../app/profile/ProfileLoginFragmentTest.kt | 475 ++++++++++++++++++
2 files changed, 532 insertions(+), 11 deletions(-)
create mode 100644 app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index b7b0db24a1c..13a71c2f045 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -6,6 +6,7 @@ import android.view.ViewGroup
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.foundation.background
import androidx.compose.foundation.border
+import androidx.compose.foundation.focusable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -33,9 +34,16 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
+import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.platform.ViewCompositionStrategy
+import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.colorResource
+import androidx.compose.ui.semantics.contentDescription
+import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
@@ -63,6 +71,24 @@ import org.oppia.android.util.platformparameter.EnableMultipleClassrooms
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject
+/** Test tag for the greeting text. */
+const val GREETING_TEST_TAG = "TEST_TAG.greeting"
+
+/** Test tag for the prompt. */
+const val PROMPT_TEST_TAG = "TEST_TAG.prompt"
+
+/** Test tag for the pin input boxes. */
+const val PIN_INPUT_TEST_TAG = "TEST_TAG.input"
+
+/** Test tag for the pin error text. */
+const val PIN_ERROR_TEST_TAG = "TEST_TAG.error"
+
+/** Test tag for the forgot pin button. */
+const val FORGOT_PIN_TEST_TAG = "TEST_TAG.forgot_pin"
+
+/** Test tag for the forgot pin button. */
+const val PIN_BOX_TEST_TAG = "TEST_TAG.pin_box_"
+
/** The presenter for [ProfileLoginFragment]. */
class ProfileLoginFragmentPresenter @Inject constructor(
private val activity: AppCompatActivity,
@@ -105,6 +131,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
}
}
+ @OptIn(ExperimentalComposeUiApi::class)
@Composable
fun PinEntryScreen() {
var showError by remember { mutableStateOf(false) }
@@ -115,6 +142,8 @@ class ProfileLoginFragmentPresenter @Inject constructor(
var pinValue by remember { mutableStateOf("") }
var shakeOffset by remember { mutableStateOf(0f) }
val pinLength = if (profileType == ProfileType.SUPERVISOR) 5 else 3
+ val focusRequester = remember { FocusRequester() }
+ val keyboardController = LocalSoftwareKeyboardController.current
Box(
modifier = Modifier
@@ -156,9 +185,17 @@ class ProfileLoginFragmentPresenter @Inject constructor(
}
},
pinLength = pinLength,
- modifier = Modifier.offset(x = shakeOffset.dp)
+ modifier = Modifier
+ .offset(x = shakeOffset.dp)
+ .focusRequester(focusRequester)
+ .focusable()
)
+ LaunchedEffect(Unit) {
+ focusRequester.requestFocus()
+ keyboardController?.show()
+ }
+
Spacer(modifier = Modifier.height(16.dp))
PinErrorText(
@@ -181,12 +218,13 @@ class ProfileLoginFragmentPresenter @Inject constructor(
shakeOffset = 10f
delay(50)
}
+
shakeOffset = 0f
- // Clear PIN and hide the error message after delay.
- delay(1000)
- pinValue = ""
+ // Clear the incorrect PIN and hide the error message after a 3s delay.
+ delay(3000)
showError = false
+ pinValue = ""
}
}
}
@@ -203,7 +241,8 @@ class ProfileLoginFragmentPresenter @Inject constructor(
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
- )
+ ),
+ modifier = Modifier.testTag(GREETING_TEST_TAG),
)
Spacer(modifier = Modifier.height(16.dp))
@@ -216,7 +255,8 @@ class ProfileLoginFragmentPresenter @Inject constructor(
style = TextStyle(
fontSize = 16.sp,
color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
- )
+ ),
+ modifier = Modifier.testTag(PROMPT_TEST_TAG)
)
}
@@ -228,6 +268,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
modifier: Modifier = Modifier
) {
BasicTextField(
+ modifier = modifier.testTag(PIN_INPUT_TEST_TAG),
value = pinValue,
onValueChange = { newValue ->
if (newValue.length <= pinLength && newValue.all { it.isDigit() }) {
@@ -256,7 +297,9 @@ class ProfileLoginFragmentPresenter @Inject constructor(
)
.background(
colorResource(id = R.color.component_color_profile_login_shared_white_color)
- ),
+ )
+ .testTag(PIN_BOX_TEST_TAG + index)
+ .semantics { contentDescription = char },
contentAlignment = Alignment.Center
) {
Text(text = char, style = MaterialTheme.typography.h6)
@@ -276,7 +319,8 @@ class ProfileLoginFragmentPresenter @Inject constructor(
style = TextStyle(
fontSize = 14.sp,
color = colorResource(id = R.color.component_color_shared_error_color)
- )
+ ),
+ modifier = Modifier.testTag(PIN_ERROR_TEST_TAG)
)
}
}
@@ -288,10 +332,12 @@ class ProfileLoginFragmentPresenter @Inject constructor(
val adminPin = adminProfile.pin
val openForgotPinDialog = remember { mutableStateOf(false) }
- TextButton(onClick = { openForgotPinDialog.value = true }) {
+ TextButton(
+ modifier = Modifier.testTag(FORGOT_PIN_TEST_TAG),
+ onClick = { openForgotPinDialog.value = true }) {
Text(
text = resourceHandler.getStringInLocaleWithWrapping
- (R.string.profile_login_activity_forgot_pin_text),
+ (R.string.profile_login_activity_forgot_pin_text),
style = TextStyle(
fontSize = 16.sp,
color = colorResource(id = R.color.component_color_profile_login_shared_primary_color)
@@ -459,7 +505,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileManagementController.deleteAllProfiles().toLiveData().observe(fragment) {
activity.finishAffinity()
}
- }// TODO something weird happens when the default profile is created after this == wrong type maybe?
+ } // TODO something weird happens when the default profile is created after this == wrong type maybe?
private fun getAdminPin() {
val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
new file mode 100644
index 00000000000..e49429551ab
--- /dev/null
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -0,0 +1,475 @@
+package org.oppia.android.app.profile
+
+import android.app.Application
+import android.content.Context
+import androidx.appcompat.app.AppCompatActivity
+import androidx.compose.ui.test.assertContentDescriptionEquals
+import androidx.compose.ui.test.assertIsDisplayed
+import androidx.compose.ui.test.assertIsNotDisplayed
+import androidx.compose.ui.test.assertTextContains
+import androidx.compose.ui.test.junit4.createEmptyComposeRule
+import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.performClick
+import androidx.compose.ui.test.performTextInput
+import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.intent.Intents
+import androidx.test.espresso.intent.Intents.intended
+import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
+import androidx.test.ext.junit.runners.AndroidJUnit4
+import dagger.Component
+import javax.inject.Inject
+import javax.inject.Singleton
+import org.junit.After
+import org.junit.Before
+import org.junit.Rule
+import org.junit.Test
+import org.junit.runner.RunWith
+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.classroom.ClassroomListActivity
+import org.oppia.android.app.devoptions.DeveloperOptionsModule
+import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
+import org.oppia.android.app.model.ProfileId
+import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
+import org.oppia.android.app.shim.ViewBindingShimModule
+import org.oppia.android.app.test.R
+import org.oppia.android.app.translation.AppLanguageLocaleHandler
+import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
+import org.oppia.android.data.backends.gae.NetworkConfigProdModule
+import org.oppia.android.data.backends.gae.RetrofitModule
+import org.oppia.android.data.backends.gae.RetrofitServiceModule
+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.PlatformParameterSingletonModule
+import org.oppia.android.domain.profile.ProfileManagementController
+import org.oppia.android.domain.question.QuestionModule
+import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
+import org.oppia.android.testing.OppiaTestRule
+import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.firebase.TestAuthenticationModule
+import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
+import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
+import org.oppia.android.testing.profile.ProfileTestHelper
+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.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
+
+/** Tests for [ProfileLoginFragment]. */
+// FunctionName: test names are conventionally named with underscores.
+@Suppress("FunctionName")
+@RunWith(AndroidJUnit4::class)
+@LooperMode(LooperMode.Mode.PAUSED)
+@Config(
+ application = ProfileLoginFragmentTest.TestApplication::class,
+ qualifiers = "port-xxhdpi"
+)
+class ProfileLoginFragmentTest {
+ @get:Rule
+ val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+ @get:Rule
+ val oppiaTestRule = OppiaTestRule()
+
+ @Inject
+ lateinit var profileTestHelper: ProfileTestHelper
+ @Inject
+ lateinit var profileManagementController: ProfileManagementController
+ @Inject
+ lateinit var context: Context
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+ @get:Rule
+ val composeRule = createEmptyComposeRule()
+ @Inject
+ lateinit var appLanguageLocaleHandler: AppLanguageLocaleHandler
+
+ private lateinit var scenario: ActivityScenario
+
+ private val testProfileId = ProfileId.newBuilder().setInternalId(0).build()
+
+ @Before
+ fun setUp() {
+ Intents.init()
+ setUpTestApplicationComponent()
+ testCoroutineDispatchers.registerIdlingResource()
+ }
+
+ @After
+ fun tearDown() {
+ TestPlatformParameterModule.reset()
+ testCoroutineDispatchers.unregisterIdlingResource()
+ Intents.release()
+ }
+
+ @Test
+ fun testFragment_onLaunch_allTextViewsHaveCorrectContent() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(GREETING_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
+ .assertIsDisplayed()
+ composeRule.onNodeWithTag(PROMPT_TEST_TAG).assertIsDisplayed()
+ .assertTextContains(context.getString(R.string.profile_login_activity_enter_pin_prompt))
+ .assertIsDisplayed()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_forgot_pin_text))
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_onLaunch_adminProfile_fivePinInputBoxesAreDisplayed() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+ repeat(5) { index ->
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
+ .assertIsDisplayed()
+ }
+
+ // Ensure there's no 6th box
+ composeRule
+ .onNodeWithTag("pin_box_5", useUnmergedTree = true)
+ .assertDoesNotExist()
+ }
+
+ @Test
+ fun testFragment_onLaunch_learnerProfile_threePinInputBoxesAreDisplayed() {
+ profileTestHelper.addMoreProfiles(1)
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+ repeat(3) { index ->
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
+ .assertIsDisplayed()
+ }
+
+ // Ensure there's no 4th box
+ composeRule
+ .onNodeWithTag("pin_box_3", useUnmergedTree = true)
+ .assertDoesNotExist()
+ }
+
+ @Test
+ fun testFragment_onLaunch_errorMessageDoesNotShow() {
+ profileTestHelper.addMoreProfiles(1)
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertDoesNotExist()
+ }
+
+ @Test
+ fun testFragment_nonAdmin_enterTwoDigits_doesNotTriggerLogin() {
+ profileTestHelper.addMoreProfiles(1)
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("12")
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
+ .assertContentDescriptionEquals("1")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
+ .assertContentDescriptionEquals("2")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
+ .assertContentDescriptionEquals("")
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_nonAdmin_enterThreeDigits_triggersLoginAndOpensHomeScreen() {
+ profileTestHelper.addMoreProfiles(1)
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("123")
+
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name))
+ }
+
+ @Test
+ fun testFragment_nonAdmin_enterWrongThreeDigits_showsErrorMessage() {
+ profileTestHelper.addMoreProfiles(1)
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("111")
+
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ .assertIsDisplayed()
+ }
+
+ fun testFragment_adminProfile_enterFourDigits_doesNotTriggerLogin() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("1234")
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
+ .assertContentDescriptionEquals("1")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
+ .assertContentDescriptionEquals("2")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
+ .assertContentDescriptionEquals("3")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 3, useUnmergedTree = true)
+ .assertContentDescriptionEquals("4")
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 4, useUnmergedTree = true)
+ .assertContentDescriptionEquals("")
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_adminProfile_enterFiveDigits_triggersLoginAndOpensHomeScreen() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("12345")
+
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name))
+ }
+
+ @Test
+ fun testFragment_adminProfile_enterWrongFiveDigits_showsErrorMessage() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("11111")
+
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_enterWrongPin_showsErrorMessage_thenClearsPinAndError() {
+ profileTestHelper.addOnlyAdminProfile()
+ setUpTestApplicationComponent()
+ scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("11111")
+
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ .assertIsDisplayed()
+
+ // Advance time for the error and PIN to be cleared.
+ testCoroutineDispatchers.advanceTimeBy(3500)
+
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertDoesNotExist()
+
+ repeat(5) { index ->
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
+ .assertTextContains("")
+ }
+ }
+
+// 1. Initial UI Rendering
+// PIN boxes are styled correctly (focused/unfocused state).
+//@Test
+//fun testFragment_onLaunch_fistPinInputBoxIsFocused() {
+// profileTestHelper.addMoreProfiles(1)
+// setUpTestApplicationComponent()
+// scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+// testCoroutineDispatchers.runCurrent()
+//
+// composeRule
+// .onNodeWithTag("pin_box_0", useUnmergedTree = true)
+// .assertIsFocused()
+//
+// If enableMultipleClassrooms is true:
+//
+// Navigates to ClassroomListActivity instead of HomeActivity.
+//
+//
+// 🎠5. State Restoration & Transitions
+// Rotation does not reset the profile name or input state (if applicable).
+//
+// Rotation during error animation should not crash the UI.
+//
+// LiveData is observed correctly and updates UI if the profile changes.
+//
+// 💥 6. Error Handling & Logging
+// If profile loading fails, app doesn't crash and default profile is used.
+//
+// Ensure oppiaLogger logs the error on failure to fetch profile (mock verification).
+
+ private fun setUpTestApplicationComponent() {
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ // TODO(#59): Figure out a way to reuse modules instead of needing to re-declare them.
+ @Singleton
+ @Component(
+ modules = [
+ RobolectricModule::class,
+ TestPlatformParameterModule::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,
+ 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, RetrofitModule::class, RetrofitServiceModule::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,
+ ActivityRouterModule::class,
+ CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
+ TestAuthenticationModule::class
+ ]
+ )
+ interface TestApplicationComponent : ApplicationComponent {
+ @Component.Builder
+ interface Builder : ApplicationComponent.Builder {
+ override fun build(): TestApplicationComponent
+ }
+
+ fun inject(profileLoginFragmentTest: ProfileLoginFragmentTest)
+ }
+
+ class TestApplication : Application(), ActivityComponentFactory, ApplicationInjectorProvider {
+ private val component: TestApplicationComponent by lazy {
+ DaggerProfileLoginFragmentTest_TestApplicationComponent.builder()
+ .setApplication(this)
+ .build() as TestApplicationComponent
+ }
+
+ fun inject(profileLoginFragmentTest: ProfileLoginFragmentTest) {
+ component.inject(profileLoginFragmentTest)
+ }
+
+ override fun createActivityComponent(activity: AppCompatActivity): ActivityComponent {
+ return component.getActivityComponentBuilderProvider().get().setActivity(activity).build()
+ }
+
+ override fun getApplicationInjector(): ApplicationInjector = component
+ }
+}
From d89464679d0020328bffae1af405a522eaac430e Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Thu, 22 May 2025 19:39:51 +0300
Subject: [PATCH 16/43] Break down large composables
---
.../profile/ProfileLoginFragmentPresenter.kt | 165 +++++++++++-------
1 file changed, 101 insertions(+), 64 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 13a71c2f045..8f63b572a15 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -44,9 +44,11 @@ import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.colorResource
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
+import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -166,22 +168,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
onPinChanged = { newValue ->
pinValue = newValue
if (newValue.length == pinLength) {
- if (newValue == profile.pin) {
- profileManagementController.loginToProfile(profileId).toLiveData()
- .observe(fragment) {
- if (it is AsyncResult.Success) {
- activity.startActivity(
- if (enableMultipleClassrooms.value)
- ClassroomListActivity.createClassroomListActivity(activity, profileId)
- else
- HomeActivity.createHomeActivity(activity, profileId)
- )
- activity.finish()
- }
- }
- } else {
- showError = true
- }
+ showError = maybeShowValidationError(newValue, profile.pin, profileId)
}
},
pinLength = pinLength,
@@ -202,33 +189,47 @@ class ProfileLoginFragmentPresenter @Inject constructor(
showError = showError,
errorMessage = resourceHandler.getStringInLocale(
R.string.profile_login_activity_pin_error
- )
+ ),
+ setShakeOffset = { shakeOffset = it },
+ onErrorDismissed = { showError = false },
+ resetPin = { pinValue = "" }
)
Spacer(modifier = Modifier.height(24.dp))
ForgotPinButton(profileType, profileId, profileName)
+ }
+ }
+ }
- LaunchedEffect(showError) {
- if (showError) {
- // Shake animation using offset
- repeat(3) {
- shakeOffset = -10f
- delay(50)
- shakeOffset = 10f
- delay(50)
- }
-
- shakeOffset = 0f
+ private fun maybeShowValidationError(
+ enteredPin: String,
+ profilePin: String,
+ profileId: ProfileId
+ ): Boolean {
+ val showError: Boolean
+ if (enteredPin == profilePin) {
+ loginToProfile(profileId)
+ showError = false
+ } else {
+ showError = true
+ }
+ return showError
+ }
- // Clear the incorrect PIN and hide the error message after a 3s delay.
- delay(3000)
- showError = false
- pinValue = ""
- }
+ private fun loginToProfile(profileId: ProfileId) {
+ profileManagementController.loginToProfile(profileId).toLiveData()
+ .observe(fragment) {
+ if (it is AsyncResult.Success) {
+ activity.startActivity(
+ if (enableMultipleClassrooms.value)
+ ClassroomListActivity.createClassroomListActivity(activity, profileId)
+ else
+ HomeActivity.createHomeActivity(activity, profileId)
+ )
+ activity.finish()
}
}
- }
}
@Composable
@@ -268,42 +269,22 @@ class ProfileLoginFragmentPresenter @Inject constructor(
modifier: Modifier = Modifier
) {
BasicTextField(
- modifier = modifier.testTag(PIN_INPUT_TEST_TAG),
+ modifier = modifier.testTag(PIN_INPUT_TEST_TAG),
value = pinValue,
onValueChange = { newValue ->
if (newValue.length <= pinLength && newValue.all { it.isDigit() }) {
onPinChanged(newValue)
}
},
+ visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.NumberPassword),
decorationBox = {
- Row(horizontalArrangement = Arrangement.spacedBy(8.dp), modifier = modifier) {
+ Row(
+ horizontalArrangement = Arrangement.spacedBy(8.dp),
+ modifier = modifier
+ ) {
repeat(pinLength) { index ->
- val char = pinValue.getOrNull(index)?.toString() ?: ""
- val isFocused = pinValue.length == index
- Box(
- modifier = Modifier
- .size(48.dp)
- .aspectRatio(0.7F)
- .border(
- width = if (isFocused) 2.dp else 1.dp,
- color = if (isFocused)
- colorResource(id = R.color.component_color_profile_login_shared_primary_color)
- else
- colorResource(
- id = R.color.component_color_profile_login_unfocused_outline_color
- ),
- shape = RoundedCornerShape(4.dp)
- )
- .background(
- colorResource(id = R.color.component_color_profile_login_shared_white_color)
- )
- .testTag(PIN_BOX_TEST_TAG + index)
- .semantics { contentDescription = char },
- contentAlignment = Alignment.Center
- ) {
- Text(text = char, style = MaterialTheme.typography.h6)
- }
+ PinInputBox(index, pinValue)
}
}
}
@@ -311,7 +292,45 @@ class ProfileLoginFragmentPresenter @Inject constructor(
}
@Composable
- private fun PinErrorText(showError: Boolean, errorMessage: String) {
+ private fun PinInputBox(index: Int, pinValue: String) {
+ val transformedPin = PasswordVisualTransformation().filter(AnnotatedString(pinValue))
+ val pinChar = pinValue.getOrNull(index)?.toString() ?: ""
+ val maskedChar = transformedPin.text.getOrNull(index)?.toString() ?: ""
+ val isFocused = pinValue.length == index
+
+ Box(
+ modifier = Modifier
+ .size(48.dp)
+ .aspectRatio(0.7F)
+ .border(
+ width = if (isFocused) 2.dp else 1.dp,
+ color = if (isFocused)
+ colorResource(id = R.color.component_color_profile_login_shared_primary_color)
+ else
+ colorResource(
+ id = R.color.component_color_profile_login_unfocused_outline_color
+ ),
+ shape = RoundedCornerShape(4.dp)
+ )
+ .background(
+ colorResource(id = R.color.component_color_profile_login_shared_white_color)
+ )
+ .testTag(PIN_BOX_TEST_TAG + index)
+ .semantics { contentDescription = pinChar },
+ contentAlignment = Alignment.Center
+ ) {
+ Text(text = maskedChar, style = MaterialTheme.typography.h6)
+ }
+ }
+
+ @Composable
+ private fun PinErrorText(
+ showError: Boolean,
+ errorMessage: String,
+ setShakeOffset: (Float) -> Unit,
+ resetPin: () -> Unit,
+ onErrorDismissed: () -> Unit
+ ) {
if (showError) {
Text(
text = errorMessage,
@@ -322,6 +341,23 @@ class ProfileLoginFragmentPresenter @Inject constructor(
),
modifier = Modifier.testTag(PIN_ERROR_TEST_TAG)
)
+
+ LaunchedEffect(true) {
+ // Shake animation using offset.
+ repeat(3) {
+ setShakeOffset(-10f)
+ delay(50)
+ setShakeOffset(10f)
+ delay(50)
+ }
+
+ setShakeOffset(0f)
+
+ // Clear the incorrect PIN and hide the error message after a 2s delay.
+ delay(2000)
+ resetPin()
+ onErrorDismissed()
+ }
}
}
@@ -334,10 +370,11 @@ class ProfileLoginFragmentPresenter @Inject constructor(
TextButton(
modifier = Modifier.testTag(FORGOT_PIN_TEST_TAG),
- onClick = { openForgotPinDialog.value = true }) {
+ onClick = { openForgotPinDialog.value = true }
+ ) {
Text(
text = resourceHandler.getStringInLocaleWithWrapping
- (R.string.profile_login_activity_forgot_pin_text),
+ (R.string.profile_login_activity_forgot_pin_text),
style = TextStyle(
fontSize = 16.sp,
color = colorResource(id = R.color.component_color_profile_login_shared_primary_color)
From a0ca9de10872ab56154d5f764b8ae64e3c805772 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Thu, 22 May 2025 19:47:51 +0300
Subject: [PATCH 17/43] Add tests for login flow
---
.../app/profile/ProfileLoginFragmentTest.kt | 169 ++++++++----------
1 file changed, 70 insertions(+), 99 deletions(-)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index e49429551ab..4927d5b6bf0 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -5,21 +5,21 @@ import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.ui.test.assertContentDescriptionEquals
import androidx.compose.ui.test.assertIsDisplayed
-import androidx.compose.ui.test.assertIsNotDisplayed
import androidx.compose.ui.test.assertTextContains
import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
import androidx.test.core.app.ActivityScenario
+import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
+import androidx.test.espresso.Espresso.onView
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.matcher.ViewMatchers.isRoot
import androidx.test.ext.junit.runners.AndroidJUnit4
import dagger.Component
-import javax.inject.Inject
-import javax.inject.Singleton
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -37,12 +37,12 @@ import org.oppia.android.app.application.testing.TestingBuildFlavorModule
import org.oppia.android.app.classroom.ClassroomListActivity
import org.oppia.android.app.devoptions.DeveloperOptionsModule
import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
-import org.oppia.android.app.model.ProfileId
+import org.oppia.android.app.home.HomeActivity
import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.test.R
-import org.oppia.android.app.translation.AppLanguageLocaleHandler
import org.oppia.android.app.translation.testing.ActivityRecreatorTestModule
+import org.oppia.android.app.utility.OrientationChangeAction.Companion.orientationLandscape
import org.oppia.android.data.backends.gae.NetworkConfigProdModule
import org.oppia.android.data.backends.gae.RetrofitModule
import org.oppia.android.data.backends.gae.RetrofitServiceModule
@@ -100,6 +100,8 @@ 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 [ProfileLoginFragment]. */
// FunctionName: test names are conventionally named with underscores.
@@ -113,45 +115,32 @@ import org.robolectric.annotation.LooperMode
class ProfileLoginFragmentTest {
@get:Rule
val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
- @get:Rule
- val oppiaTestRule = OppiaTestRule()
-
- @Inject
- lateinit var profileTestHelper: ProfileTestHelper
- @Inject
- lateinit var profileManagementController: ProfileManagementController
- @Inject
- lateinit var context: Context
- @Inject
- lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
- @get:Rule
- val composeRule = createEmptyComposeRule()
- @Inject
- lateinit var appLanguageLocaleHandler: AppLanguageLocaleHandler
- private lateinit var scenario: ActivityScenario
+ @get:Rule val oppiaTestRule = OppiaTestRule()
+ @Inject lateinit var context: Context
+ @Inject lateinit var profileTestHelper: ProfileTestHelper
+ @Inject lateinit var profileManagementController: ProfileManagementController
+ @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+ @get:Rule val composeRule = createEmptyComposeRule()
- private val testProfileId = ProfileId.newBuilder().setInternalId(0).build()
+ private lateinit var scenario: ActivityScenario
@Before
fun setUp() {
Intents.init()
setUpTestApplicationComponent()
- testCoroutineDispatchers.registerIdlingResource()
}
@After
fun tearDown() {
TestPlatformParameterModule.reset()
- testCoroutineDispatchers.unregisterIdlingResource()
Intents.release()
}
@Test
fun testFragment_onLaunch_allTextViewsHaveCorrectContent() {
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule.onNodeWithTag(GREETING_TEST_TAG)
@@ -165,12 +154,25 @@ class ProfileLoginFragmentTest {
.assertIsDisplayed()
}
+ @Test
+ fun testFragment_onConfigChange_profileNameIsRetained() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(GREETING_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
+ .assertIsDisplayed()
+
+ }
+
@Test
fun testFragment_onLaunch_adminProfile_fivePinInputBoxesAreDisplayed() {
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
+
repeat(5) { index ->
composeRule
.onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
@@ -186,9 +188,9 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_learnerProfile_threePinInputBoxesAreDisplayed() {
profileTestHelper.addMoreProfiles(1)
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
+
repeat(3) { index ->
composeRule
.onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
@@ -204,8 +206,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_errorMessageDoesNotShow() {
profileTestHelper.addMoreProfiles(1)
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -216,8 +217,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterTwoDigits_doesNotTriggerLogin() {
profileTestHelper.addMoreProfiles(1)
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -243,9 +243,26 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterThreeDigits_triggersLoginAndOpensHomeScreen() {
+ TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
profileTestHelper.addMoreProfiles(1)
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("123")
+
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(HomeActivity::class.java.name))
+ }
+
+ @Test
+ fun testFragment_nonAdmin_classroomsEnabled_enterCorrectThreeDigits_opensClassroomsScreen() {
+ TestPlatformParameterModule.forceEnableMultipleClassrooms(true)
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -261,8 +278,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterWrongThreeDigits_showsErrorMessage() {
profileTestHelper.addMoreProfiles(1)
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -278,8 +294,7 @@ class ProfileLoginFragmentTest {
fun testFragment_adminProfile_enterFourDigits_doesNotTriggerLogin() {
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -314,10 +329,10 @@ class ProfileLoginFragmentTest {
}
@Test
- fun testFragment_adminProfile_enterFiveDigits_triggersLoginAndOpensHomeScreen() {
+ fun testFragment_adminProfile_enterCorrectFiveDigits_triggersLoginAndOpensHomeScreen() {
+ TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
@@ -327,89 +342,45 @@ class ProfileLoginFragmentTest {
testCoroutineDispatchers.runCurrent()
- intended(hasComponent(ClassroomListActivity::class.java.name))
+ intended(hasComponent(HomeActivity::class.java.name))
}
@Test
- fun testFragment_adminProfile_enterWrongFiveDigits_showsErrorMessage() {
+ fun testFragment_adminProfile_classroomsEnabled_enterFiveDigits_opensClassroomScreen() {
+ TestPlatformParameterModule.forceEnableMultipleClassrooms(true)
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
.onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
.performClick()
- .performTextInput("11111")
+ .performTextInput("12345")
- composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
- .assertIsDisplayed()
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name))
}
@Test
- fun testFragment_enterWrongPin_showsErrorMessage_thenClearsPinAndError() {
+ fun testFragment_adminProfile_enterWrongFiveDigits_showsErrorMessage() {
profileTestHelper.addOnlyAdminProfile()
- setUpTestApplicationComponent()
- scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
+ scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule
.onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
.performClick()
- .performTextInput("11111")
+ .performTextInput("22222")
composeRule
.onNodeWithTag(PIN_ERROR_TEST_TAG)
.assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
.assertIsDisplayed()
-
- // Advance time for the error and PIN to be cleared.
- testCoroutineDispatchers.advanceTimeBy(3500)
-
- composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertDoesNotExist()
-
- repeat(5) { index ->
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
- .assertTextContains("")
- }
}
-// 1. Initial UI Rendering
-// PIN boxes are styled correctly (focused/unfocused state).
-//@Test
-//fun testFragment_onLaunch_fistPinInputBoxIsFocused() {
-// profileTestHelper.addMoreProfiles(1)
-// setUpTestApplicationComponent()
-// scenario = ActivityScenario.launch(ProfileLoginActivity::class.java)
-// testCoroutineDispatchers.runCurrent()
-//
-// composeRule
-// .onNodeWithTag("pin_box_0", useUnmergedTree = true)
-// .assertIsFocused()
-//
-// If enableMultipleClassrooms is true:
-//
-// Navigates to ClassroomListActivity instead of HomeActivity.
-//
-//
-// 🎠5. State Restoration & Transitions
-// Rotation does not reset the profile name or input state (if applicable).
-//
-// Rotation during error animation should not crash the UI.
-//
-// LiveData is observed correctly and updates UI if the profile changes.
-//
-// 💥 6. Error Handling & Logging
-// If profile loading fails, app doesn't crash and default profile is used.
-//
-// Ensure oppiaLogger logs the error on failure to fetch profile (mock verification).
-
private fun setUpTestApplicationComponent() {
+ TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
ApplicationProvider.getApplicationContext().inject(this)
}
From 05240054e62fb137c262756ff6c9db7c32df0100 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 02:27:41 +0300
Subject: [PATCH 18/43] Move dialogs to own files
---
.../app/profile/ConfirmDataResetDialog.kt | 60 +++++++++++++++++++
.../app/profile/ForgotAdminPinDialog.kt | 57 ++++++++++++++++++
scripts/assets/test_file_exemptions.textproto | 24 +++++---
3 files changed, 133 insertions(+), 8 deletions(-)
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
create mode 100644 app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
diff --git a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
new file mode 100644
index 00000000000..5e3aa161572
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
@@ -0,0 +1,60 @@
+package org.oppia.android.app.profile
+
+import androidx.compose.material.AlertDialog
+import androidx.compose.material.Text
+import androidx.compose.material.TextButton
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.window.DialogProperties
+import org.oppia.android.app.ui.R
+
+/** Test tag for the confirm reset pin dialog. */
+const val ADMIN_RESET_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_reset_pin"
+
+@Composable
+fun ConfirmDataResetDialog(
+ onDismissRequest: () -> Unit,
+ deleteAppData: () -> Unit
+) {
+ val appName = stringResource(R.string.app_name)
+
+ AlertDialog(
+ title = {
+ Text(
+ stringResource(R.string.admin_confirm_app_wipe_title, appName))
+ },
+ text = {
+ Text(stringResource(R.string.admin_confirm_app_wipe_message, appName))
+ },
+ properties = DialogProperties(
+ dismissOnClickOutside = false,
+ dismissOnBackPress = false
+ ),
+ onDismissRequest = {
+ onDismissRequest()
+ },
+ dismissButton = {
+ TextButton(
+ onClick = {
+ onDismissRequest()
+ }
+ ) {
+ Text(stringResource(R.string.admin_confirm_app_wipe_negative_button_text))
+ }
+ },
+ confirmButton = {
+ TextButton(
+ onClick = { deleteAppData() }
+ ) {
+ Text(stringResource(
+ R.string.admin_confirm_app_wipe_positive_button_text,
+ appName
+ )
+ )
+ }
+ },
+ modifier = Modifier.testTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ )
+}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
new file mode 100644
index 00000000000..2a6a5bbbc24
--- /dev/null
+++ b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
@@ -0,0 +1,57 @@
+package org.oppia.android.app.profile
+
+import androidx.compose.material.AlertDialog
+import androidx.compose.material.Text
+import androidx.compose.material.TextButton
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.platform.testTag
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.window.DialogProperties
+import org.oppia.android.app.ui.R
+
+/** Test tag for the admin's forgot pin dialog. */
+const val ADMIN_FORGOT_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_forgot_pin"
+
+@Composable
+fun ForgotAdminPinDialog(
+ onDismissRequest: () -> Unit,
+ onConfirmation: () -> Unit
+) {
+ val appName = stringResource(R.string.app_name)
+
+ AlertDialog(
+ title = {
+ Text(stringResource(R.string.profile_login_forgot_pin_dialog_title))
+ },
+ text = {
+ Text(stringResource(R.string.profile_login_forgot_pin_dialog_message, appName))
+ },
+ properties = DialogProperties(
+ dismissOnClickOutside = false,
+ dismissOnBackPress = false
+ ),
+ onDismissRequest = {
+ onDismissRequest()
+ },
+ dismissButton = {
+ TextButton(
+ onClick = {
+ onDismissRequest()
+ }
+ ) {
+ Text(stringResource(R.string.profile_login_forgot_pin_dialog_cancel_button))
+ }
+ },
+ confirmButton = {
+ TextButton(
+ onClick = {
+ onConfirmation()
+ }
+ ) {
+ Text(stringResource(R.string.profile_login_forgot_pin_dialog_reset_button, appName))
+ }
+ },
+ modifier = Modifier.testTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ )
+}
diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto
index 99c6cea9185..1f80fd77dde 100644
--- a/scripts/assets/test_file_exemptions.textproto
+++ b/scripts/assets/test_file_exemptions.textproto
@@ -1854,18 +1854,10 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileActivityPresenter.kt"
test_file_not_required: true
}
-test_file_exemption {
- exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileClickListener.kt"
- test_file_not_required: true
-}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AddProfileViewModel.kt"
test_file_not_required: true
}
-test_file_exemption {
- exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileItemViewModel.kt"
- test_file_not_required: true
-}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminAuthActivity.kt"
source_file_is_incompatible_with_code_coverage: true
@@ -1906,10 +1898,18 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminSettingsViewModel.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt"
+ test_file_not_required: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/DynamicProfileItemMarginsDecorator.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt"
+ test_file_not_required: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt"
source_file_is_incompatible_with_code_coverage: true
@@ -1946,6 +1946,14 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileChooserViewModel.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileClickListener.kt"
+ test_file_not_required: true
+}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileItemViewModel.kt"
+ test_file_not_required: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt"
test_file_not_required: true
From 3c7e3ff9ea5649bb724efeca9fb6a29b42070921 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 02:30:23 +0300
Subject: [PATCH 19/43] Add tests for dialog flows: wip for non-admin
---
.../profile/ProfileLoginFragmentPresenter.kt | 134 +-------
.../app/profile/ProfileLoginFragmentTest.kt | 296 ++++++++++++++++++
2 files changed, 305 insertions(+), 125 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 8f63b572a15..274a7ea2312 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material.AlertDialog
import androidx.compose.material.MaterialTheme
import androidx.compose.material.Text
import androidx.compose.material.TextButton
@@ -52,7 +51,6 @@ import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import androidx.compose.ui.window.DialogProperties
import androidx.fragment.app.Fragment
import androidx.lifecycle.LiveData
import androidx.lifecycle.Transformations
@@ -122,6 +120,13 @@ class ProfileLoginFragmentPresenter @Inject constructor(
return binding.root
}
+ private fun getAdminPin() {
+ val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
+
+ adminProfileLiveData =
+ getProfileResult(profileManagementController.getProfile(adminProfileId).toLiveData())
+ }
+
private fun createComposeView() {
binding.profileLoginComposeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
@@ -406,126 +411,12 @@ class ProfileLoginFragmentPresenter @Inject constructor(
if (openConfirmationDialog.value) {
ConfirmDataResetDialog(
- onDismissRequest = { openConfirmationDialog.value = false }
+ onDismissRequest = { openConfirmationDialog.value = false },
+ deleteAppData = { deleteAppData() }
)
}
}
- @Composable
- private fun ForgotAdminPinDialog(
- onDismissRequest: () -> Unit,
- onConfirmation: () -> Unit
- ) {
- val appName = resourceHandler.getStringInLocale(R.string.app_name)
-
- AlertDialog(
- title = {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.profile_login_forgot_pin_dialog_title
- )
- )
- },
- text = {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.profile_login_forgot_pin_dialog_message, appName
- )
- )
- },
- properties = DialogProperties(
- dismissOnClickOutside = false,
- dismissOnBackPress = false
- ),
- onDismissRequest = {
- onDismissRequest()
- },
- dismissButton = {
- TextButton(
- onClick = {
- onDismissRequest()
- }
- ) {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.profile_login_forgot_pin_dialog_cancel_button
- )
- )
- }
- },
- confirmButton = {
- TextButton(
- onClick = {
- onConfirmation()
- }
- ) {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.profile_login_forgot_pin_dialog_reset_button,
- appName
- )
- )
- }
- }
- )
- }
-
- @Composable
- private fun ConfirmDataResetDialog(
- onDismissRequest: () -> Unit
- ) {
- val appName = resourceHandler.getStringInLocale(R.string.app_name)
-
- AlertDialog(
- title = {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.admin_confirm_app_wipe_title, appName
- )
- )
- },
- text = {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.admin_confirm_app_wipe_message, appName
- )
- )
- },
- properties = DialogProperties(
- dismissOnClickOutside = false,
- dismissOnBackPress = false
- ),
- onDismissRequest = {
- onDismissRequest()
- },
- dismissButton = {
- TextButton(
- onClick = {
- onDismissRequest()
- }
- ) {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.admin_confirm_app_wipe_negative_button_text
- )
- )
- }
- },
- confirmButton = {
- TextButton(
- onClick = { deleteAppData() }
- ) {
- Text(
- resourceHandler.getStringInLocaleWithWrapping(
- R.string.admin_confirm_app_wipe_positive_button_text,
- appName
- )
- )
- }
- }
- )
- }
-
private fun showResetNonAdminPinFlow(
correctAdminPin: String,
openForgotPinDialog: MutableState,
@@ -542,13 +433,6 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileManagementController.deleteAllProfiles().toLiveData().observe(fragment) {
activity.finishAffinity()
}
- } // TODO something weird happens when the default profile is created after this == wrong type maybe?
-
- private fun getAdminPin() {
- val adminProfileId = ProfileId.newBuilder().setInternalId(0).build()
-
- adminProfileLiveData =
- getProfileResult(profileManagementController.getProfile(adminProfileId).toLiveData())
}
private fun getProfileResult(profileResult: LiveData>): LiveData {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 4927d5b6bf0..605ab8c8617 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -8,17 +8,31 @@ import androidx.compose.ui.test.assertIsDisplayed
import androidx.compose.ui.test.assertTextContains
import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.compose.ui.test.onNodeWithTag
+import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
+import androidx.lifecycle.Lifecycle
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
+import androidx.test.espresso.ViewInteraction
+import androidx.test.espresso.action.ViewActions
+import androidx.test.espresso.action.ViewActions.click
+import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
+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.matcher.RootMatchers
+import androidx.test.espresso.matcher.RootMatchers.isDialog
+import androidx.test.espresso.matcher.ViewMatchers
+import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isRoot
+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
@@ -102,6 +116,9 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import javax.inject.Inject
import javax.inject.Singleton
+import org.hamcrest.CoreMatchers.not
+import org.hamcrest.Matchers
+import org.oppia.android.testing.espresso.EditTextInputAction
/** Tests for [ProfileLoginFragment]. */
// FunctionName: test names are conventionally named with underscores.
@@ -122,13 +139,16 @@ class ProfileLoginFragmentTest {
@Inject lateinit var profileManagementController: ProfileManagementController
@Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
@get:Rule val composeRule = createEmptyComposeRule()
+ @Inject lateinit var editTextInputAction: EditTextInputAction
private lateinit var scenario: ActivityScenario
+ private lateinit var appName: String
@Before
fun setUp() {
Intents.init()
setUpTestApplicationComponent()
+ appName = context.getString(R.string.app_name)
}
@After
@@ -379,6 +399,282 @@ class ProfileLoginFragmentTest {
.assertIsDisplayed()
}
+ @Test
+ fun testFragment_adminUser_clickForgotPin_opensAdminForgotPinDialogFlow() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_message, appName)
+ )
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button)
+ )
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ )
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_adminUser_openForgotPin_clickCancel_dismissesTheDialog() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button)
+ )
+ .performClick()
+
+ composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
+ }
+
+ @Test
+ fun testFragment_adminUser_openForgotPin_clickResetData_opensAdminResetPinDialogFlow() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ )
+ .assertIsDisplayed()
+ .performClick()
+
+ composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_title, appName))
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_message, appName)
+ )
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_negative_button_text)
+ )
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_positive_button_text)
+ )
+ .assertIsDisplayed()
+ }
+
+ @Test
+ fun testFragment_adminUser_declineDataReset_dismissesTheDialog() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ )
+ .performClick()
+
+ composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_negative_button_text)
+ )
+ .performClick()
+
+ composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
+ }
+
+ @Test
+ fun testFragment_adminUser_confirmDataReset_closesTheApp() {
+ profileTestHelper.addOnlyAdminProfile()
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ )
+ .performClick()
+
+ composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
+
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_positive_button_text)
+ )
+ .performClick()
+
+ testCoroutineDispatchers.runCurrent()
+
+
+ println("activity destroyed ${scenario.state}")
+ assertThat(scenario.result.resultCode).isEqualTo(1)
+// scenario.onActivity {
+//
+// assertThat(it.isDestroyed).isTrue()
+// }
+ }
+
+ //@Test
+ fun testFragment_nonAdminUser_clickForgotPin_opensNonAdminForgotPinDialogFlow() {
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_heading))
+ .check(matches(isDisplayed()))
+ }
+
+ //@Test
+ fun testFragment_nonAdminUser_clickCancel_dismissesTheDialog() {
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ testCoroutineDispatchers.runCurrent()
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_cancel))
+ .perform(click())
+
+ testCoroutineDispatchers.runCurrent()
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_heading))
+ .check(matches(not(isDisplayed())))
+ }
+
+ //@Test
+ fun testFragment_nonAdminUser_enterWrongAdminPin_showsWrongAdminPinError() {
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
+ .perform(editTextInputAction.appendText("1111"), closeSoftKeyboard())
+
+ testCoroutineDispatchers.runCurrent()
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ .perform(click())
+
+ testCoroutineDispatchers.runCurrent()
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_incorrect))
+ .check(matches(isDisplayed()))
+ }
+
+ //@Test
+ fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
+ .perform(editTextInputAction.appendText("12345"), closeSoftKeyboard())
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ .perform(click())
+
+ onDialogViewWithText(context.getString(R.string.reset_pin_enter))
+ .check(matches(isDisplayed()))
+ }
+
+ //@Test
+ fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
+ profileTestHelper.addMoreProfiles(1)
+ scenario = launch(ProfileLoginActivity::class.java)
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
+ .perform(editTextInputAction.appendText("12345"), closeSoftKeyboard())
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ .perform(click())
+
+ onDialogViewWithText(context.getString(R.string.reset_pin_enter))
+ .check(matches(isDisplayed()))
+
+ onDialogViewWithId(R.id.reset_pin_input_pin)
+ .perform(editTextInputAction.appendText("111"), closeSoftKeyboard())
+
+ onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ .perform(click())
+
+ onDialogViewWithText(context.getString(R.string.profile_login_reset_pin_success_dialog_message))
+ .check(matches(isDisplayed()))
+ }
+
+ private fun onDialogViewWithId(viewId: Int): ViewInteraction {
+ return onView(withId(viewId)).inRoot(isDialog())
+ }
+
+ private fun onDialogViewWithText(text: String): ViewInteraction {
+ return onView(withText(text)).inRoot(isDialog())
+ }
+
private fun setUpTestApplicationComponent() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
ApplicationProvider.getApplicationContext().inject(this)
From a83c10b779956b20631693a4ff94c3061d2f056b Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 02:32:04 +0300
Subject: [PATCH 20/43] Add todo to ensure an admin profile is created when all
profile data is reset
---
.../oppia/android/app/profile/ProfileChooserActivityPresenter.kt | 1 +
1 file changed, 1 insertion(+)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
index 19dfbdb2c2d..0dc7f9d29d6 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
@@ -22,6 +22,7 @@ class ProfileChooserActivityPresenter @Inject constructor(
/** Adds [ProfileChooserFragment] to view. */
fun handleOnCreate(profileId: ProfileId, profileType: ProfileType) {
if (enableOnboardingFlowV2.value) {
+ // TODO (#4938): Ensure default profile is present when the admin resets the app data.
profileManagementController.updateNewProfileDetails(
profileId = profileId,
profileType = profileType,
From 09bfe8c7e01e1f8244750154008afa93a3d231b9 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 02:35:14 +0300
Subject: [PATCH 21/43] Fix lint issues
---
.../app/profile/ConfirmDataResetDialog.kt | 12 ++++----
.../app/profile/ProfileLoginFragmentTest.kt | 29 ++++++-------------
2 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
index 5e3aa161572..53bc8bb1d94 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
@@ -23,7 +23,8 @@ fun ConfirmDataResetDialog(
AlertDialog(
title = {
Text(
- stringResource(R.string.admin_confirm_app_wipe_title, appName))
+ stringResource(R.string.admin_confirm_app_wipe_title, appName)
+ )
},
text = {
Text(stringResource(R.string.admin_confirm_app_wipe_message, appName))
@@ -48,10 +49,11 @@ fun ConfirmDataResetDialog(
TextButton(
onClick = { deleteAppData() }
) {
- Text(stringResource(
- R.string.admin_confirm_app_wipe_positive_button_text,
- appName
- )
+ Text(
+ stringResource(
+ R.string.admin_confirm_app_wipe_positive_button_text,
+ appName
+ )
)
}
},
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 605ab8c8617..77f58c008f7 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -11,22 +11,18 @@ import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
import androidx.compose.ui.test.performClick
import androidx.compose.ui.test.performTextInput
-import androidx.lifecycle.Lifecycle
import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
import androidx.test.espresso.ViewInteraction
-import androidx.test.espresso.action.ViewActions
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
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.matcher.RootMatchers
import androidx.test.espresso.matcher.RootMatchers.isDialog
-import androidx.test.espresso.matcher.ViewMatchers
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
import androidx.test.espresso.matcher.ViewMatchers.isRoot
import androidx.test.espresso.matcher.ViewMatchers.withId
@@ -34,6 +30,7 @@ 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.not
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -91,6 +88,7 @@ import org.oppia.android.domain.question.QuestionModule
import org.oppia.android.domain.workmanager.WorkManagerConfigurationModule
import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.TestLogReportingModule
+import org.oppia.android.testing.espresso.EditTextInputAction
import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
@@ -116,9 +114,6 @@ import org.robolectric.annotation.Config
import org.robolectric.annotation.LooperMode
import javax.inject.Inject
import javax.inject.Singleton
-import org.hamcrest.CoreMatchers.not
-import org.hamcrest.Matchers
-import org.oppia.android.testing.espresso.EditTextInputAction
/** Tests for [ProfileLoginFragment]. */
// FunctionName: test names are conventionally named with underscores.
@@ -184,7 +179,6 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(GREETING_TEST_TAG)
.assertTextContains(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
.assertIsDisplayed()
-
}
@Test
@@ -560,16 +554,11 @@ class ProfileLoginFragmentTest {
testCoroutineDispatchers.runCurrent()
-
- println("activity destroyed ${scenario.state}")
- assertThat(scenario.result.resultCode).isEqualTo(1)
-// scenario.onActivity {
-//
-// assertThat(it.isDestroyed).isTrue()
-// }
+ println("activity destroyed ${scenario.state}")
+ assertThat(scenario.result.resultCode).isEqualTo(1)
}
- //@Test
+ // @Test
fun testFragment_nonAdminUser_clickForgotPin_opensNonAdminForgotPinDialogFlow() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -581,7 +570,7 @@ class ProfileLoginFragmentTest {
.check(matches(isDisplayed()))
}
- //@Test
+ // @Test
fun testFragment_nonAdminUser_clickCancel_dismissesTheDialog() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -600,7 +589,7 @@ class ProfileLoginFragmentTest {
.check(matches(not(isDisplayed())))
}
- //@Test
+ // @Test
fun testFragment_nonAdminUser_enterWrongAdminPin_showsWrongAdminPinError() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -622,7 +611,7 @@ class ProfileLoginFragmentTest {
.check(matches(isDisplayed()))
}
- //@Test
+ // @Test
fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -640,7 +629,7 @@ class ProfileLoginFragmentTest {
.check(matches(isDisplayed()))
}
- //@Test
+ // @Test
fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
From a4e9208631f52747a87b84fef9ec6a48c3881e66 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 15:45:21 +0300
Subject: [PATCH 22/43] Fix static analysis checks failures
---
.../oppia/android/app/profile/ConfirmDataResetDialog.kt | 1 +
.../org/oppia/android/app/profile/ForgotAdminPinDialog.kt | 1 +
.../org/oppia/android/app/profile/PinPasswordActivity.kt | 4 ++--
.../org/oppia/android/app/profile/PinPasswordViewModel.kt | 2 +-
.../app/profile/ProfileChooserActivityPresenter.kt | 2 +-
.../android/app/profile/ProfileLoginFragmentPresenter.kt | 2 +-
scripts/assets/test_file_exemptions.textproto | 8 ++++++++
7 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
index 53bc8bb1d94..405e8a3b7f7 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
@@ -13,6 +13,7 @@ import org.oppia.android.app.ui.R
/** Test tag for the confirm reset pin dialog. */
const val ADMIN_RESET_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_reset_pin"
+/** Composable that represents the admin's reset pin confirmation dialog. */
@Composable
fun ConfirmDataResetDialog(
onDismissRequest: () -> Unit,
diff --git a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
index 2a6a5bbbc24..de1d8c6a0ae 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
@@ -13,6 +13,7 @@ import org.oppia.android.app.ui.R
/** Test tag for the admin's forgot pin dialog. */
const val ADMIN_FORGOT_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_forgot_pin"
+/** Composable that represents the admin's forgot pin dialog. */
@Composable
fun ForgotAdminPinDialog(
onDismissRequest: () -> Unit,
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
index 615e156aaf2..d29750ddd8d 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
@@ -3,6 +3,7 @@ package org.oppia.android.app.profile
import android.content.Context
import android.content.Intent
import android.os.Bundle
+import javax.inject.Inject
import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
import org.oppia.android.app.model.PinPasswordActivityParams
@@ -10,9 +11,8 @@ import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.ScreenName.PIN_PASSWORD_ACTIVITY
import org.oppia.android.util.extensions.putProtoExtra
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
-import javax.inject.Inject
-// TODO(#5817) Remove when v2 onboarding flow has stabilized.
+// TODO(#5817): Remove when v2 onboarding flow has stabilized.
/** Activity that allows user to input his or her PIN. */
class PinPasswordActivity :
InjectableAutoLocalizedAppCompatActivity(),
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
index 8c6846d6aa1..b5aac25a29d 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordViewModel.kt
@@ -15,7 +15,7 @@ import org.oppia.android.util.data.AsyncResult
import org.oppia.android.util.data.DataProviders.Companion.toLiveData
import javax.inject.Inject
-// TODO(#5817) Remove along with PinPasswordActivity when v2 onboarding flow has stabilized.
+// TODO(#5817): Remove along with PinPasswordActivity when v2 onboarding flow has stabilized.
/** The ViewModel for [PinPasswordActivity]. */
@ActivityScope
class PinPasswordViewModel @Inject constructor(
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
index 0dc7f9d29d6..297c5e3f4b8 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileChooserActivityPresenter.kt
@@ -22,7 +22,7 @@ class ProfileChooserActivityPresenter @Inject constructor(
/** Adds [ProfileChooserFragment] to view. */
fun handleOnCreate(profileId: ProfileId, profileType: ProfileType) {
if (enableOnboardingFlowV2.value) {
- // TODO (#4938): Ensure default profile is present when the admin resets the app data.
+ // TODO(#4938): Ensure default profile is present when the admin resets the app data.
profileManagementController.updateNewProfileDetails(
profileId = profileId,
profileType = profileType,
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 274a7ea2312..ebf7f4d5d2c 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -140,7 +140,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
@OptIn(ExperimentalComposeUiApi::class)
@Composable
- fun PinEntryScreen() {
+ private fun PinEntryScreen() {
var showError by remember { mutableStateOf(false) }
val profile: Profile by profileLiveData.observeAsState(initial = Profile.getDefaultInstance())
val profileName = profile.name
diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto
index 1f80fd77dde..f673171bcf6 100644
--- a/scripts/assets/test_file_exemptions.textproto
+++ b/scripts/assets/test_file_exemptions.textproto
@@ -1954,6 +1954,14 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileItemViewModel.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt"
+ test_file_not_required: true
+}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt"
+ test_file_not_required: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileRouteDialogInterface.kt"
test_file_not_required: true
From e0a697e75d341e10c0ad156ef8c02706d3fe02dd Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 15:56:39 +0300
Subject: [PATCH 23/43] Fix ProfileChooserFragmentTest failures
---
.../android/app/profile/ProfileChooserFragmentTest.kt | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
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 8a1625a328c..ecc37b88a0b 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
@@ -370,7 +370,7 @@ class ProfileChooserFragmentTest {
}
@Test
- fun testMigrateProfiles_onboardingV2_clickAdminProfile_checkOpensPinPasswordActivity() {
+ fun testMigrateProfiles_onboardingV2_clickAdminProfile_checkOpensProfileLoginActivity() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
profileTestHelper.initializeProfiles(autoLogIn = true)
profileTestHelper.updateProfileType(testProfileId, ProfileType.SUPERVISOR)
@@ -383,7 +383,7 @@ class ProfileChooserFragmentTest {
position = 0
)
).perform(click())
- intended(hasComponent(PinPasswordActivity::class.java.name))
+ intended(hasComponent(ProfileLoginActivity::class.java.name))
}
}
@@ -1348,7 +1348,7 @@ class ProfileChooserFragmentTest {
}
@Test
- fun testFragment_enableOnboardingV2_clickProfileWithPin_checkOpensPinPasswordActivity() {
+ fun testFragment_enableOnboardingV2_clickProfileWithPin_checkOpensProfileLoginActivity() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
profileTestHelper.addOnlyAdminProfile()
profileTestHelper.updateProfileType(testProfileId, ProfileType.SUPERVISOR)
@@ -1360,7 +1360,7 @@ class ProfileChooserFragmentTest {
position = 0
)
).perform(click())
- intended(hasComponent(PinPasswordActivity::class.java.name))
+ intended(hasComponent(ProfileLoginActivity::class.java.name))
}
}
From 6680a9c4919e1a5a56b9dff0a2ba9a352bcb77f3 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 21:21:54 +0300
Subject: [PATCH 24/43] Finish dialog tests
---
.../app/profile/PinPasswordActivity.kt | 2 +-
.../profile/ProfileLoginActivityPresenter.kt | 41 ++++---
.../profile/ProfileLoginFragmentPresenter.kt | 4 +-
.../app/profile/ProfileLoginFragmentTest.kt | 109 ++++++++++--------
4 files changed, 86 insertions(+), 70 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
index d29750ddd8d..df6f8fa2c55 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivity.kt
@@ -3,7 +3,6 @@ package org.oppia.android.app.profile
import android.content.Context
import android.content.Intent
import android.os.Bundle
-import javax.inject.Inject
import org.oppia.android.app.activity.ActivityComponentImpl
import org.oppia.android.app.activity.InjectableAutoLocalizedAppCompatActivity
import org.oppia.android.app.model.PinPasswordActivityParams
@@ -11,6 +10,7 @@ import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.model.ScreenName.PIN_PASSWORD_ACTIVITY
import org.oppia.android.util.extensions.putProtoExtra
import org.oppia.android.util.logging.CurrentAppScreenNameIntentDecorator.decorateWithScreenName
+import javax.inject.Inject
// TODO(#5817): Remove when v2 onboarding flow has stabilized.
/** Activity that allows user to input his or her PIN. */
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
index 47fd3d41b94..0e2197112db 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -21,6 +21,8 @@ private const val TAG_PROFILE_LOGIN_FRAGMENT = "TAG_PROFILE_LOGIN_FRAGMENT"
/** The presenter for [ProfileLoginActivity]. */
@ActivityScope
class ProfileLoginActivityPresenter @Inject constructor(private val activity: AppCompatActivity) {
+ private val fragmentManager = activity.supportFragmentManager
+
/** Creates the view for [ProfileLoginActivity]. */
fun handleOnCreate(profileId: ProfileId) {
activity.setContentView(R.layout.profile_login_activity)
@@ -30,7 +32,7 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
arguments = Bundle().also { it.decorateWithUserProfileId(profileId) }
}
- activity.supportFragmentManager.beginTransaction()
+ fragmentManager.beginTransaction()
.add(
R.id.profile_login_fragment_placeholder, profileLoginFragment, TAG_PROFILE_LOGIN_FRAGMENT
)
@@ -40,29 +42,26 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
/** Handles showing the [ResetPinDialogFragment]. */
fun handleRouteToResetPinDialog(profileId: ProfileId, profileName: String) {
- (
- activity
- .supportFragmentManager
- .findFragmentByTag(
- TAG_VALIDATE_ADMIN_PIN_DIALOG
- ) as DialogFragment
- ).dismiss()
- val dialogFragment = ResetPinDialogFragment.newInstance(
- profileId.internalId,
- profileName
- )
- dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_RESET_PIN_DIALOG)
+
+ val adminPinDialog = fragmentManager.findFragmentByTag(TAG_VALIDATE_ADMIN_PIN_DIALOG)
+ as DialogFragment
+ adminPinDialog.dismiss()
+
+ fragmentManager.executePendingTransactions()
+
+ val resetPinDialog = ResetPinDialogFragment.newInstance(profileId.internalId, profileName)
+
+ resetPinDialog.showNow(fragmentManager, TAG_ADMIN_RESET_PIN_DIALOG)
}
/** Handles showing the reset pin success dialog. */
fun handleRouteToSuccessDialog() {
- (
- activity
- .supportFragmentManager
- .findFragmentByTag(
- TAG_ADMIN_RESET_PIN_DIALOG
- ) as DialogFragment
- ).dismiss()
+ val resetPinDialog = fragmentManager.findFragmentByTag(TAG_ADMIN_RESET_PIN_DIALOG)
+ as DialogFragment
+ resetPinDialog.dismiss()
+
+ fragmentManager.executePendingTransactions()
+
showSuccessDialog()
}
@@ -75,7 +74,7 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
}
private fun getProfileLoginFragment(): ProfileLoginFragment? {
- return activity.supportFragmentManager.findFragmentByTag(
+ return fragmentManager.findFragmentByTag(
TAG_PROFILE_LOGIN_FRAGMENT
) as? ProfileLoginFragment
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index ebf7f4d5d2c..c1a4ce7b755 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -424,9 +424,9 @@ class ProfileLoginFragmentPresenter @Inject constructor(
profileName: String
) {
openForgotPinDialog.value = false
- val dialogFragment = AdminSettingsDialogFragment
+ AdminSettingsDialogFragment
.newInstance(correctAdminPin, profileId, profileName)
- dialogFragment.showNow(fragment.parentFragmentManager, TAG_VALIDATE_ADMIN_PIN_DIALOG)
+ .showNow(activity.supportFragmentManager, TAG_VALIDATE_ADMIN_PIN_DIALOG)
}
private fun deleteAppData() {
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 77f58c008f7..e5dbc4993be 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -1,5 +1,6 @@
package org.oppia.android.app.profile
+import android.app.Activity
import android.app.Application
import android.content.Context
import androidx.appcompat.app.AppCompatActivity
@@ -15,9 +16,9 @@ import androidx.test.core.app.ActivityScenario
import androidx.test.core.app.ActivityScenario.launch
import androidx.test.core.app.ApplicationProvider
import androidx.test.espresso.Espresso.onView
-import androidx.test.espresso.ViewInteraction
import androidx.test.espresso.action.ViewActions.click
import androidx.test.espresso.action.ViewActions.closeSoftKeyboard
+import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
import androidx.test.espresso.assertion.ViewAssertions.matches
import androidx.test.espresso.intent.Intents
import androidx.test.espresso.intent.Intents.intended
@@ -30,7 +31,6 @@ 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.not
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -49,6 +49,7 @@ import org.oppia.android.app.classroom.ClassroomListActivity
import org.oppia.android.app.devoptions.DeveloperOptionsModule
import org.oppia.android.app.devoptions.DeveloperOptionsStarterModule
import org.oppia.android.app.home.HomeActivity
+import org.oppia.android.app.model.ProfileId
import org.oppia.android.app.player.state.itemviewmodel.SplitScreenInteractionModule
import org.oppia.android.app.shim.ViewBindingShimModule
import org.oppia.android.app.test.R
@@ -554,11 +555,10 @@ class ProfileLoginFragmentTest {
testCoroutineDispatchers.runCurrent()
- println("activity destroyed ${scenario.state}")
- assertThat(scenario.result.resultCode).isEqualTo(1)
+ assertThat(scenario.result.resultCode).isEqualTo(Activity.RESULT_CANCELED)
}
- // @Test
+ @Test
fun testFragment_nonAdminUser_clickForgotPin_opensNonAdminForgotPinDialogFlow() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -566,30 +566,33 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- onDialogViewWithText(context.getString(R.string.admin_settings_heading))
+ composeRule.waitForIdle()
+
+ onView(withText(context.getString(R.string.admin_settings_heading)))
+ .inRoot(isDialog())
.check(matches(isDisplayed()))
}
- // @Test
- fun testFragment_nonAdminUser_clickCancel_dismissesTheDialog() {
+ @Test
+ fun testFragment_nonAdminUser_forgotPinDialog_clickCancel_dismissesTheDialog() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- testCoroutineDispatchers.runCurrent()
+ composeRule.waitForIdle()
- onDialogViewWithText(context.getString(R.string.admin_settings_cancel))
+ onView(withText(context.getString(R.string.admin_settings_cancel)))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
.perform(click())
- testCoroutineDispatchers.runCurrent()
-
- onDialogViewWithText(context.getString(R.string.admin_settings_heading))
- .check(matches(not(isDisplayed())))
+ onView(withText(context.getString(R.string.admin_settings_heading)))
+ .check(doesNotExist())
}
- // @Test
+ @Test
fun testFragment_nonAdminUser_enterWrongAdminPin_showsWrongAdminPinError() {
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
@@ -597,71 +600,85 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
- .perform(editTextInputAction.appendText("1111"), closeSoftKeyboard())
+ composeRule.waitForIdle()
- testCoroutineDispatchers.runCurrent()
+ onView(withId(R.id.admin_settings_input_pin_edit_text))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ .perform(editTextInputAction.appendText("1111"), closeSoftKeyboard())
- onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
.perform(click())
- testCoroutineDispatchers.runCurrent()
-
- onDialogViewWithText(context.getString(R.string.admin_settings_incorrect))
+ onView(withText(context.getString(R.string.admin_settings_incorrect)))
+ .inRoot(isDialog())
.check(matches(isDisplayed()))
}
- // @Test
+ @Test
fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
- profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
+ profileTestHelper.initializeProfiles()
+ val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
+ scenario = launch(
+ ProfileLoginActivity.createProfileLoginActivityIntent(context, currentUserProfileId)
+ )
testCoroutineDispatchers.runCurrent()
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
+ composeRule.waitForIdle()
+
+ onView(withId(R.id.admin_settings_input_pin_edit_text))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
.perform(editTextInputAction.appendText("12345"), closeSoftKeyboard())
- onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
.perform(click())
- onDialogViewWithText(context.getString(R.string.reset_pin_enter))
+ onView(withId(R.id.reset_pin_input_pin))
+ .inRoot(isDialog())
.check(matches(isDisplayed()))
}
- // @Test
+ @Test
fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
- profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
+ profileTestHelper.initializeProfiles()
+ val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
+ scenario = launch(
+ ProfileLoginActivity.createProfileLoginActivityIntent(context, currentUserProfileId)
+ )
testCoroutineDispatchers.runCurrent()
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- onDialogViewWithId(R.id.admin_settings_input_pin_edit_text)
+ composeRule.waitForIdle()
+
+ onView(withId(R.id.admin_settings_input_pin_edit_text))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
.perform(editTextInputAction.appendText("12345"), closeSoftKeyboard())
- onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
.perform(click())
- onDialogViewWithText(context.getString(R.string.reset_pin_enter))
+ onView(withId(R.id.reset_pin_input_pin_edit_text))
+ .inRoot(isDialog())
.check(matches(isDisplayed()))
-
- onDialogViewWithId(R.id.reset_pin_input_pin)
.perform(editTextInputAction.appendText("111"), closeSoftKeyboard())
- onDialogViewWithText(context.getString(R.string.admin_settings_submit))
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
.perform(click())
- onDialogViewWithText(context.getString(R.string.profile_login_reset_pin_success_dialog_message))
- .check(matches(isDisplayed()))
- }
-
- private fun onDialogViewWithId(viewId: Int): ViewInteraction {
- return onView(withId(viewId)).inRoot(isDialog())
- }
+ testCoroutineDispatchers.runCurrent()
- private fun onDialogViewWithText(text: String): ViewInteraction {
- return onView(withText(text)).inRoot(isDialog())
+ onView(withText(context.getString(R.string.profile_login_reset_pin_success_dialog_message)))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
}
private fun setUpTestApplicationComponent() {
From 828e042d8ea433cb100370e0ff11ad90669a0cea Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 21:47:14 +0300
Subject: [PATCH 25/43] Format dagger modules
---
.../app/profile/ProfileLoginActivityTest.kt | 82 +++++++++++++------
.../app/profile/ProfileLoginFragmentTest.kt | 82 +++++++++++++------
2 files changed, 113 insertions(+), 51 deletions(-)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
index db36ce7991e..f7cc123fc73 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
@@ -60,7 +60,6 @@ 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.workmanager.WorkManagerConfigurationModule
@@ -152,33 +151,64 @@ class ProfileLoginActivityTest {
@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,
+ AccessibilityTestModule::class,
+ ActivityRecreatorTestModule::class,
+ ActivityRouterModule::class,
+ AlgebraicExpressionInputModule::class,
+ ApplicationLifecycleModule::class,
+ ApplicationModule::class,
+ ApplicationStartupListenerModule::class,
+ AssetModule::class,
+ CachingTestModule::class,
+ ContinueModule::class,
+ CpuPerformanceSnapshotterModule::class,
+ DeveloperOptionsModule::class,
+ DeveloperOptionsStarterModule::class,
+ DragDropSortInputModule::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, RetrofitModule::class, RetrofitServiceModule::class,
+ ExplorationProgressModule::class,
+ ExplorationStorageModule::class,
+ FakeOppiaClockModule::class,
+ FirebaseLogUploaderModule::class,
+ FractionInputModule::class,
+ GcsResourceModule::class,
+ GlideImageLoaderModule::class,
+ HintsAndSolutionConfigModule::class,
+ HintsAndSolutionProdModule::class,
+ HtmlParserEntityTypeModule::class,
+ ImageClickInputModule::class,
+ ImageParsingModule::class,
+ InteractionsModule::class,
+ ItemSelectionInputModule::class,
+ LocaleProdModule::class,
+ LogReportWorkerModule::class,
+ LogStorageModule::class,
+ LoggerModule::class,
+ LoggingIdentifierModule::class,
+ MathEquationInputModule::class,
+ MetricLogSchedulerModule::class,
+ MultipleChoiceInputModule::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,
- ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
- TestAuthenticationModule::class
+ NetworkConnectionDebugUtilModule::class,
+ NetworkConnectionUtilDebugModule::class,
+ NumberWithUnitsRuleModule::class,
+ NumericExpressionInputModule::class,
+ NumericInputRuleModule::class,
+ PlatformParameterSingletonModule::class,
+ QuestionModule::class,
+ RatioInputModule::class,
+ RetrofitModule::class,
+ RetrofitServiceModule::class,
+ RobolectricModule::class,
+ SplitScreenInteractionModule::class,
+ SyncStatusModule::class,
+ TestAuthenticationModule::class,
+ TestDispatcherModule::class,
+ TestLogReportingModule::class,
+ TestingBuildFlavorModule::class,
+ TextInputRuleModule::class,
+ ViewBindingShimModule::class,
+ WorkManagerConfigurationModule::class
]
)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index e5dbc4993be..380cb6bad3f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -690,33 +690,65 @@ class ProfileLoginFragmentTest {
@Singleton
@Component(
modules = [
- RobolectricModule::class,
- TestPlatformParameterModule::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,
+ AccessibilityTestModule::class,
+ ActivityRecreatorTestModule::class,
+ ActivityRouterModule::class,
+ AlgebraicExpressionInputModule::class,
+ ApplicationLifecycleModule::class,
+ ApplicationModule::class,
+ ApplicationStartupListenerModule::class,
+ AssetModule::class,
+ CachingTestModule::class,
+ ContinueModule::class,
+ CpuPerformanceSnapshotterModule::class,
+ DeveloperOptionsModule::class,
+ DeveloperOptionsStarterModule::class,
+ DragDropSortInputModule::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, RetrofitModule::class, RetrofitServiceModule::class,
+ ExplorationProgressModule::class,
+ ExplorationStorageModule::class,
+ FakeOppiaClockModule::class,
+ FirebaseLogUploaderModule::class,
+ FractionInputModule::class,
+ GcsResourceModule::class,
+ GlideImageLoaderModule::class,
+ HintsAndSolutionConfigModule::class,
+ HintsAndSolutionProdModule::class,
+ HtmlParserEntityTypeModule::class,
+ ImageClickInputModule::class,
+ ImageParsingModule::class,
+ InteractionsModule::class,
+ ItemSelectionInputModule::class,
+ LocaleProdModule::class,
+ LogReportWorkerModule::class,
+ LogStorageModule::class,
+ LoggerModule::class,
+ LoggingIdentifierModule::class,
+ MathEquationInputModule::class,
+ MetricLogSchedulerModule::class,
+ MultipleChoiceInputModule::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,
- ActivityRouterModule::class,
- CpuPerformanceSnapshotterModule::class, ExplorationProgressModule::class,
- TestAuthenticationModule::class
+ NetworkConnectionDebugUtilModule::class,
+ NetworkConnectionUtilDebugModule::class,
+ NumberWithUnitsRuleModule::class,
+ NumericExpressionInputModule::class,
+ NumericInputRuleModule::class,
+ PlatformParameterSingletonModule::class,
+ QuestionModule::class,
+ RatioInputModule::class,
+ RetrofitModule::class,
+ RetrofitServiceModule::class,
+ RobolectricModule::class,
+ SplitScreenInteractionModule::class,
+ SyncStatusModule::class,
+ TestAuthenticationModule::class,
+ TestDispatcherModule::class,
+ TestLogReportingModule::class,
+ TestPlatformParameterModule::class,
+ TestingBuildFlavorModule::class,
+ TextInputRuleModule::class,
+ ViewBindingShimModule::class,
+ WorkManagerConfigurationModule::class
]
)
interface TestApplicationComponent : ApplicationComponent {
From c1f6619c2f21b6f33c5b1ac914444eecb21d8be9 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 23 May 2025 23:12:47 +0300
Subject: [PATCH 26/43] Fix missing dagger module
---
.../org/oppia/android/app/profile/ProfileLoginActivityTest.kt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
index f7cc123fc73..2690dcbdb5f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginActivityTest.kt
@@ -67,6 +67,7 @@ import org.oppia.android.testing.OppiaTestRule
import org.oppia.android.testing.TestLogReportingModule
import org.oppia.android.testing.firebase.TestAuthenticationModule
import org.oppia.android.testing.junit.InitializeDefaultLocaleRule
+import org.oppia.android.testing.platformparameter.TestPlatformParameterModule
import org.oppia.android.testing.robolectric.RobolectricModule
import org.oppia.android.testing.threading.TestCoroutineDispatchers
import org.oppia.android.testing.threading.TestDispatcherModule
@@ -205,6 +206,7 @@ class ProfileLoginActivityTest {
TestAuthenticationModule::class,
TestDispatcherModule::class,
TestLogReportingModule::class,
+ TestPlatformParameterModule::class,
TestingBuildFlavorModule::class,
TextInputRuleModule::class,
ViewBindingShimModule::class,
From 432f3d71f09dbcab7dd40aa4e2fd7f2ca7105cf7 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 27 May 2025 17:53:31 +0300
Subject: [PATCH 27/43] fix trim spannable bug
---
.../main/java/org/oppia/android/util/parser/html/HtmlParser.kt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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 f08fcfe807a..7bf6be84bab 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
@@ -176,7 +176,7 @@ class HtmlParser private constructor(
private fun trimSpannable(spannable: SpannableStringBuilder): SpannableStringBuilder {
val trimmedText = spannable.toString()
val trimStart = if (trimmedText.startsWith("\n")) 1 else 0
- val trimEnd = if (trimmedText.length > 1 && trimmedText.endsWith("\n")) 2 else 0
+ val trimEnd = if (trimmedText.length > 1 && trimmedText.endsWith("\n")) 1 else 0
return spannable.delete(0, trimStart).delete(spannable.length - trimEnd, spannable.length)
}
From 98372c981304fc6c51946ace074bd55352316f40 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 30 Jun 2025 13:44:16 +0300
Subject: [PATCH 28/43] Generate a new maven_install due to conflicts in the
old one.
---
third_party/maven_install.json | 8243 --------------------------------
1 file changed, 8243 deletions(-)
delete mode 100644 third_party/maven_install.json
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
deleted file mode 100644
index 7fefe0108af..00000000000
--- a/third_party/maven_install.json
+++ /dev/null
@@ -1,8243 +0,0 @@
-{
- "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": 1952776840,
- "__RESOLVED_ARTIFACTS_HASH": -1450223812,
- "conflict_resolution": {
- "androidx.annotation:annotation:1.1.0": "androidx.annotation:annotation:1.2.0",
- "androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
- "androidx.core:core-ktx:1.0.1": "androidx.core:core-ktx:1.1.0",
- "androidx.core:core:1.0.1": "androidx.core:core:1.7.0",
- "androidx.fragment:fragment:1.1.0": "androidx.fragment:fragment:1.3.6",
- "androidx.lifecycle:lifecycle-livedata-core:2.2.0": "androidx.lifecycle:lifecycle-livedata-core:2.3.1",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0": "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1",
- "androidx.recyclerview:recyclerview:1.0.0": "androidx.recyclerview:recyclerview:1.1.0",
- "androidx.test.ext:junit:1.1.1": "androidx.test.ext:junit:1.1.2",
- "androidx.test:core:1.0.0": "androidx.test:core:1.4.1-alpha07",
- "androidx.test:runner:1.2.0": "androidx.test:runner:1.5.0-alpha04",
- "com.google.firebase:firebase-common:19.3.0": "com.google.firebase:firebase-common:20.1.1",
- "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.6.0",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21",
- "org.mockito:mockito-core:2.19.0": "org.mockito:mockito-core:3.9.0"
- },
- "artifacts": {
- "androidx.activity:activity-compose:aar": {
- "shasums": {
- "jar": "82f97c1c4b96d15ee721b8204bd1273f80bcc654e50d0b16ca5399c77f6c3531"
- },
- "version": "1.4.0"
- },
- "androidx.activity:activity-ktx:aar": {
- "shasums": {
- "jar": "3f301941f37a90b4bc553dbbe84e7464a97c0d21df6cf2d6c0cb1b2c07349f33"
- },
- "version": "1.4.0"
- },
- "androidx.activity:activity:aar": {
- "shasums": {
- "jar": "89dc38e0cdbd11f328c7d0b3b021ddb387ca9da0d49f14b18c91e300c45ed79c"
- },
- "version": "1.4.0"
- },
- "androidx.annotation:annotation": {
- "shasums": {
- "jar": "9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36"
- },
- "version": "1.2.0"
- },
- "androidx.annotation:annotation-experimental:aar": {
- "shasums": {
- "jar": "0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90"
- },
- "version": "1.1.0"
- },
- "androidx.appcompat:appcompat-resources:aar": {
- "shasums": {
- "jar": "e3306cd3e9a19a28a5de5ec3b379580f237c4d81c15c3d795404be9291890a75"
- },
- "version": "1.3.1"
- },
- "androidx.appcompat:appcompat:aar": {
- "shasums": {
- "jar": "959b1daefe40d5e7eed1022f97730b22bc5fd52e6a6083eba284fa86c2971303"
- },
- "version": "1.3.1"
- },
- "androidx.arch.core:core-common": {
- "shasums": {
- "jar": "fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889"
- },
- "version": "2.1.0"
- },
- "androidx.arch.core:core-runtime:aar": {
- "shasums": {
- "jar": "dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852"
- },
- "version": "2.1.0"
- },
- "androidx.arch.core:core-testing:aar": {
- "shasums": {
- "jar": "c57ffade2a9a844bd62b4f4c3916fad5e09e9f24cceba27e932c25bb7a6d1d8f"
- },
- "version": "2.1.0"
- },
- "androidx.autofill:autofill:aar": {
- "shasums": {
- "jar": "c9468f56e05006ea151a426c54957cd0799b8b83a579d2846dd22061f33e5ecd"
- },
- "version": "1.0.0"
- },
- "androidx.cardview:cardview:aar": {
- "shasums": {
- "jar": "1193c04c22a3d6b5946dae9f4e8c59d6adde6a71b6bd5d87fb99d82dda1afec7"
- },
- "version": "1.0.0"
- },
- "androidx.collection:collection": {
- "shasums": {
- "jar": "632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72"
- },
- "version": "1.1.0"
- },
- "androidx.compose.animation:animation-core:aar": {
- "shasums": {
- "jar": "797048e2d03a9b1b98443fbe118d70f0955988e3fca56a71985ee3550be46f4e"
- },
- "version": "1.1.1"
- },
- "androidx.compose.animation:animation:aar": {
- "shasums": {
- "jar": "95fca9d5bbb8da8c4f351331558e7b2f4ec04db0cf290b021852423461d76a9c"
- },
- "version": "1.1.1"
- },
- "androidx.compose.compiler:compiler": {
- "shasums": {
- "jar": "925acb226edfade11905827a8387bca83f83d6bd1a13f48708d1efab2129520a"
- },
- "version": "1.1.1"
- },
- "androidx.compose.foundation:foundation-layout:aar": {
- "shasums": {
- "jar": "8337856c1babb54bdadfdb97eea47eb94640fc5557f91de47d35e9158258a971"
- },
- "version": "1.1.1"
- },
- "androidx.compose.foundation:foundation:aar": {
- "shasums": {
- "jar": "7f5fff6b1d462c7e411533b75ec0a9a73027f9a38f1e85ae8309295811ab64a0"
- },
- "version": "1.1.1"
- },
- "androidx.compose.material:material-icons-core:aar": {
- "shasums": {
- "jar": "8c9c1a9688a9f4dee57d31de8784d0970919fa939a48a466380815b9ebd84cfa"
- },
- "version": "1.1.1"
- },
- "androidx.compose.material:material-ripple:aar": {
- "shasums": {
- "jar": "c84f77c84e0c9ac17d513d38611894558bea6592c5318976fc8b0a51bc3cf8f2"
- },
- "version": "1.1.1"
- },
- "androidx.compose.material:material:aar": {
- "shasums": {
- "jar": "538ab37092d8e837e0d7e58bd854296e54033f449435db3baf913cc5ba4f97f3"
- },
- "version": "1.1.1"
- },
- "androidx.compose.runtime:runtime-livedata:aar": {
- "shasums": {
- "jar": "6495ebfc18e96261196d098e13b05b954feb6b223f20761797f1ffa3fb83da48"
- },
- "version": "1.1.1"
- },
- "androidx.compose.runtime:runtime-saveable:aar": {
- "shasums": {
- "jar": "15b542e07bea14065336da0b255650433da46e250a160feaf39b90f2edc8b230"
- },
- "version": "1.1.1"
- },
- "androidx.compose.runtime:runtime:aar": {
- "shasums": {
- "jar": "e075b3e3952cb3775e7acc7ccdb8f2de777da76bd6d2ea2cc1f96d6f57b37763"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-geometry:aar": {
- "shasums": {
- "jar": "4f1e34ae515af8c04e783275dded50bc8d156135fc35397fb1c81a9e01f173b3"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-graphics:aar": {
- "shasums": {
- "jar": "e1719d8db7545e7f3be3baf42ac1865fb1cca36525d9b889601e2c2f4ea3aafc"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-test-junit4:aar": {
- "shasums": {
- "jar": "db527d645365f76ab135a7b3a5225ea3a3a3171ded8d6092c732c2af033c9e4e"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-test:aar": {
- "shasums": {
- "jar": "b710a1fe38c8acf9dbc7d678b45bdda61867013f2cad031b82547d0dc0b18e26"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-text:aar": {
- "shasums": {
- "jar": "e4af67f79b658862e4d7437f243033ed64334fbbff3247d4df39785a1c2c75d4"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-unit:aar": {
- "shasums": {
- "jar": "35b1d8f7f460874dde09fd7e630cd44052913695298076fc62de91a4fe1345a7"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui-util:aar": {
- "shasums": {
- "jar": "56420281f21e2888145ec9438ca4a632012792013b667da9aa03ea733e482e96"
- },
- "version": "1.1.1"
- },
- "androidx.compose.ui:ui:aar": {
- "shasums": {
- "jar": "f0243d6a2176c9bcb6f077e1212cbc890943391ec9a6e32a4f249ab7c2c807a6"
- },
- "version": "1.1.1"
- },
- "androidx.concurrent:concurrent-futures": {
- "shasums": {
- "jar": "0ce067c514a0d1049d1bebdf709e344ed3266fe9744275682937cdcb13334e9e"
- },
- "version": "1.1.0"
- },
- "androidx.constraintlayout:constraintlayout-solver": {
- "shasums": {
- "jar": "b23732edbb3511d937fea1ffef047b0e6c001b50c1921f0d959fc384d706ec6a"
- },
- "version": "2.0.1"
- },
- "androidx.constraintlayout:constraintlayout:aar": {
- "shasums": {
- "jar": "ec15b5d4a2eff07888bc1499ce2e2c6efe24c0ed60cc57b08c9dc4b6fd3c2189"
- },
- "version": "2.0.1"
- },
- "androidx.coordinatorlayout:coordinatorlayout:aar": {
- "shasums": {
- "jar": "44a9e30abf56af1025c52a0af506fee9c4131aa55efda52f9fd9451211c5e8cb"
- },
- "version": "1.1.0"
- },
- "androidx.core:core-ktx:aar": {
- "shasums": {
- "jar": "070cc5f8864f449128a2f4b25ca5b67aa3adca3ee1bd611e2eaf1a18fad83178"
- },
- "version": "1.1.0"
- },
- "androidx.core:core:aar": {
- "shasums": {
- "jar": "aaf6734226fff923784f92f65d78a2984dbf17534138855c5ce2038f18656e0b"
- },
- "version": "1.7.0"
- },
- "androidx.cursoradapter:cursoradapter:aar": {
- "shasums": {
- "jar": "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564"
- },
- "version": "1.0.0"
- },
- "androidx.customview:customview:aar": {
- "shasums": {
- "jar": "01f76ab043770a97b054046f9815717b82ce0355c02967d16c61981359dc189a"
- },
- "version": "1.1.0"
- },
- "androidx.databinding:databinding-adapters:aar": {
- "shasums": {
- "jar": "840a66744866185b6a74fd99e6596bf1eb0720837c3ae470c25212bccc563939"
- },
- "version": "3.4.2"
- },
- "androidx.databinding:databinding-common": {
- "shasums": {
- "jar": "52886c0ef6cfa492d07b40c3952201d6d2f0cfc680144fbefc69d2d5cb786c25"
- },
- "version": "3.4.2"
- },
- "androidx.databinding:databinding-compiler": {
- "shasums": {
- "jar": "07a9fb44f43048b18f149add7835e1239e92057e6748affde2d2bccf330c4242"
- },
- "version": "3.4.2"
- },
- "androidx.databinding:databinding-compiler-common": {
- "shasums": {
- "jar": "770b6a82da0684f93d037ed5d241248cb25862ed14ecd7d9ec8c756153266051"
- },
- "version": "3.4.2"
- },
- "androidx.databinding:databinding-runtime:aar": {
- "shasums": {
- "jar": "80d966bf58b971334d65b213b2ab16fe827bbb95389a9c6a52b141853f529b30"
- },
- "version": "3.4.2"
- },
- "androidx.documentfile:documentfile:aar": {
- "shasums": {
- "jar": "865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487"
- },
- "version": "1.0.0"
- },
- "androidx.drawerlayout:drawerlayout:aar": {
- "shasums": {
- "jar": "9d79030ad4f93b1c6296f7a8391710f9e9e3228a3b10964c4bb0a042fd6257b8"
- },
- "version": "1.1.0"
- },
- "androidx.dynamicanimation:dynamicanimation:aar": {
- "shasums": {
- "jar": "ce005162c229bf308d2d5b12fb6cad0874069cbbeaccee63a8193bd08d40de04"
- },
- "version": "1.0.0"
- },
- "androidx.exifinterface:exifinterface:aar": {
- "shasums": {
- "jar": "ee48be10aab8f54efff4c14b77d11e10b9eeee4379d5ef6bf297a2923c55cc11"
- },
- "version": "1.0.0"
- },
- "androidx.fragment:fragment:aar": {
- "shasums": {
- "jar": "12f0831b4f08092d5dda272c1923c11a022ff20ceffed3e801751e21bb8d1c1e"
- },
- "version": "1.3.6"
- },
- "androidx.interpolator:interpolator:aar": {
- "shasums": {
- "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a"
- },
- "version": "1.0.0"
- },
- "androidx.legacy:legacy-support-core-utils:aar": {
- "shasums": {
- "jar": "a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7"
- },
- "version": "1.0.0"
- },
- "androidx.lifecycle:lifecycle-common": {
- "shasums": {
- "jar": "15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-common-java8": {
- "shasums": {
- "jar": "a1ec63c1bb973443cb731d78ec336c5e20e7ee35c89cbb32d36f92c55bb02542"
- },
- "version": "2.3.0"
- },
- "androidx.lifecycle:lifecycle-extensions:aar": {
- "shasums": {
- "jar": "648c8de1d10b025d524a2e46ac994fc3f6bf186826c09ec1a62d250bf1b877ae"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar": {
- "shasums": {
- "jar": "5951f882e95b7e05ceb9adfca0fa2ebd511d63ea5a00da4eae6c6d0c1903da18"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-livedata-core:aar": {
- "shasums": {
- "jar": "e55d38c372460f0a03997ddc950c67227511340fd74f8634d99d29653cd81ab1"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-livedata-ktx:aar": {
- "shasums": {
- "jar": "69c3532a70d39adfa13458c9e06d7adcd88a2259f5e9ea517cc7eed26c5fc491"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-livedata:aar": {
- "shasums": {
- "jar": "d83af94860aa9f64cbdc51f40796a7cf55b116f0e6efd752e845c0104c8b16f6"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-process:aar": {
- "shasums": {
- "jar": "3a977e7778fc8418742d388409daaba7ea8fea8823d21ffb96e4c4236f715070"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-runtime-ktx:aar": {
- "shasums": {
- "jar": "7ad2987dd7f4075c0871a72cf07e9649d9cd790fc23dfab1972eca4710373873"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-runtime:aar": {
- "shasums": {
- "jar": "dd294f4a689c71ff877fd41f3b67a3a62f7760d44ce420e6130f1fc3569d8f00"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-service:aar": {
- "shasums": {
- "jar": "ca2801ffc069555afed8eddd2292130f436956452bc8bbad30fb56f8e4e382a0"
- },
- "version": "2.2.0"
- },
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": {
- "shasums": {
- "jar": "5fb3591b6a54eeb3e204be0125d48eb987b8ea45a5048140036865482ccf9de9"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": {
- "shasums": {
- "jar": "97137a8af6a31776a14e4866ab808c7c0a791b484bdbc788bbd83e66407564c0"
- },
- "version": "2.3.1"
- },
- "androidx.lifecycle:lifecycle-viewmodel:aar": {
- "shasums": {
- "jar": "b6db4c274a12ff85a4747e1e6669c7e98aefa2571ace9d1f1a6fa6be417ce838"
- },
- "version": "2.3.1"
- },
- "androidx.loader:loader:aar": {
- "shasums": {
- "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025"
- },
- "version": "1.0.0"
- },
- "androidx.localbroadcastmanager:localbroadcastmanager:aar": {
- "shasums": {
- "jar": "e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8"
- },
- "version": "1.0.0"
- },
- "androidx.multidex:multidex-instrumentation:aar": {
- "shasums": {
- "jar": "fb8115694b1731c23c1bbb628f5baaee37a8f3b50d69a7733b55278e101e1488"
- },
- "version": "2.0.0"
- },
- "androidx.multidex:multidex:aar": {
- "shasums": {
- "jar": "42dd32ff9f97f85771b82a20003a8d70f68ab7b4ba328964312ce0732693db09"
- },
- "version": "2.0.1"
- },
- "androidx.navigation:navigation-common-ktx:aar": {
- "shasums": {
- "jar": "ed00b6f73d8acc7e06729f5f19cdeb410ca1d0e45afbcf6ff435a1091c3a3d57"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-common:aar": {
- "shasums": {
- "jar": "542ec6f993b6d3bfafe2e53e0f250b8685331e2a0258f9313af9ee3376f93959"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-fragment-ktx:aar": {
- "shasums": {
- "jar": "8ad7b7ed765009271cc0fe97ea925b3fbd90a9bc80aeefb2708a554d7330b8d3"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-fragment:aar": {
- "shasums": {
- "jar": "38ddf1afc99a0585904f2121eee7131fef13595e64c9bb6b22f68dd66b8d1f9c"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-runtime-ktx:aar": {
- "shasums": {
- "jar": "41f1145f9aca5a7d97567dfe08924ec1cebcc72cb2c5d6d1a1cd31a780669358"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-runtime:aar": {
- "shasums": {
- "jar": "903cd93d3424300ff048a92086d773cfc5e23f928063d4493a45b4b042f2a550"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-ui-ktx:aar": {
- "shasums": {
- "jar": "fb28826b4eb20a53e9398576bb9e7a3215cf970e99a05d7ccc0422d5978fa915"
- },
- "version": "2.0.0"
- },
- "androidx.navigation:navigation-ui:aar": {
- "shasums": {
- "jar": "d6edc08d69268967d11336bd8c2dce1f154f0ae8117be9874895f6974123ed20"
- },
- "version": "2.0.0"
- },
- "androidx.print:print:aar": {
- "shasums": {
- "jar": "1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd"
- },
- "version": "1.0.0"
- },
- "androidx.profileinstaller:profileinstaller:aar": {
- "shasums": {
- "jar": "d85f562bc70f33595b46a893c22d64f5b4f856c19a02b1eb09aad00c3a2124ee"
- },
- "version": "1.1.0"
- },
- "androidx.recyclerview:recyclerview:aar": {
- "shasums": {
- "jar": "f0d2b5a67d0a91ee1b1c73ef2b636a81f3563925ddd15a1d4e1c41ec28de7a4f"
- },
- "version": "1.1.0"
- },
- "androidx.room:room-common": {
- "shasums": {
- "jar": "2b130dd4a1d3d91b6701ed33096d389f01c4fc1197a7acd6b91724ddc5acfc06"
- },
- "version": "2.2.5"
- },
- "androidx.room:room-runtime:aar": {
- "shasums": {
- "jar": "24a5549b796e43e337513d2908adac67f45350d9a90bca7e2e6120692140bb14"
- },
- "version": "2.2.5"
- },
- "androidx.savedstate:savedstate-ktx:aar": {
- "shasums": {
- "jar": "e44d61347463b0fafeeb649cbcc3d7109b2eb5e11d1522e986105170cdebbf68"
- },
- "version": "1.1.0"
- },
- "androidx.savedstate:savedstate:aar": {
- "shasums": {
- "jar": "d60bbe44c2c08083a17c5dc678a6d6b4d0a2d664858016ab5c049cbea90a63b7"
- },
- "version": "1.1.0"
- },
- "androidx.sqlite:sqlite-framework:aar": {
- "shasums": {
- "jar": "8673737fdb2efbad91aeaeed1927ebb29212d36a867d93b9639c8069019f8a1e"
- },
- "version": "2.1.0"
- },
- "androidx.sqlite:sqlite:aar": {
- "shasums": {
- "jar": "8341ff092d6060d62a07227f29237155fff36fb16f96c95fbd9a884e375db912"
- },
- "version": "2.1.0"
- },
- "androidx.startup:startup-runtime:aar": {
- "shasums": {
- "jar": "ff081d2db7dd28aec59f74934c514fbaf4ae5aac5258495fe10d612a3622f876"
- },
- "version": "1.0.0"
- },
- "androidx.test.espresso:espresso-accessibility:aar": {
- "shasums": {
- "jar": "e2ee8b50081c0b578521d112808321f737f3bf1acce035fe7be0e26ef00b491f"
- },
- "version": "3.1.0"
- },
- "androidx.test.espresso:espresso-contrib:aar": {
- "shasums": {
- "jar": "277c292f02816b5e49051485b11e612c0ba7d36fc76b7dac955fe37766ec2832"
- },
- "version": "3.1.0"
- },
- "androidx.test.espresso:espresso-core:aar": {
- "shasums": {
- "jar": "acacf7cedb340ce4a3b4cccfe2f20606d9cf9d076a3f1a42e5c6b8ad33c403f0"
- },
- "version": "3.5.0-alpha07"
- },
- "androidx.test.espresso:espresso-idling-resource:aar": {
- "shasums": {
- "jar": "57a115f20680ad964c27919232a32bef46cadd272d92c07dca96262c7b850d61"
- },
- "version": "3.5.0-alpha07"
- },
- "androidx.test.espresso:espresso-intents:aar": {
- "shasums": {
- "jar": "6c252ea1221a7973301b62d1695d4d73cb1b7c0853ee2ffdb8274886148f0af6"
- },
- "version": "3.1.0"
- },
- "androidx.test.ext:junit:aar": {
- "shasums": {
- "jar": "6c6ab120c640bf16fcaae69cb83c144d0ed6b6298562be0ac35e37ed969c0409"
- },
- "version": "1.1.2"
- },
- "androidx.test.ext:truth:aar": {
- "shasums": {
- "jar": "d067a9bdd009b08d4230f8283cb4579a1183ef45bbfa169fd6d0f112d6c324f6"
- },
- "version": "1.4.0"
- },
- "androidx.test.services:storage:aar": {
- "shasums": {
- "jar": "4f5f36d1a7c354e806e6fc59292207bcb21d5621c95a2494ac192d4d32cae20c"
- },
- "version": "1.4.2-alpha04"
- },
- "androidx.test.uiautomator:uiautomator:aar": {
- "shasums": {
- "jar": "2838e9d961dbffefbbd229a2bd4f6f82ac4fb2462975862a9e75e9ed325a3197"
- },
- "version": "2.2.0"
- },
- "androidx.test:annotation:aar": {
- "shasums": {
- "jar": "c0754928effe1968c3a9a7b55d1dfc7ceb1e1e7c9f3f09f98afd42431f712492"
- },
- "version": "1.0.1-alpha01"
- },
- "androidx.test:core:aar": {
- "shasums": {
- "jar": "f4881b4cdb100c60ccd06ed932b240eb7b04bd2d98767b03b835a79bcb168147"
- },
- "version": "1.4.1-alpha07"
- },
- "androidx.test:monitor:aar": {
- "shasums": {
- "jar": "1addeea6bb9b9673a8adb42c9f385ffdb3833909a37aed66c93500eaf047a349"
- },
- "version": "1.6.0-alpha04"
- },
- "androidx.test:rules:aar": {
- "shasums": {
- "jar": "0c5c87df67b358c1a17765357138ea1d4bb58c61159ae635b4cb4dcaa3bb5986"
- },
- "version": "1.1.0"
- },
- "androidx.test:runner:aar": {
- "shasums": {
- "jar": "ad24589f6d4c9cf4a17e82f7418cff71e8fd9850385b686d8f965c7f3e781642"
- },
- "version": "1.5.0-alpha04"
- },
- "androidx.tracing:tracing:aar": {
- "shasums": {
- "jar": "07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612"
- },
- "version": "1.0.0"
- },
- "androidx.transition:transition:aar": {
- "shasums": {
- "jar": "a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e"
- },
- "version": "1.2.0"
- },
- "androidx.vectordrawable:vectordrawable-animated:aar": {
- "shasums": {
- "jar": "76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8"
- },
- "version": "1.1.0"
- },
- "androidx.vectordrawable:vectordrawable:aar": {
- "shasums": {
- "jar": "46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26"
- },
- "version": "1.1.0"
- },
- "androidx.versionedparcelable:versionedparcelable:aar": {
- "shasums": {
- "jar": "57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4"
- },
- "version": "1.1.1"
- },
- "androidx.viewpager2:viewpager2:aar": {
- "shasums": {
- "jar": "e95c0031d4cc247cd48196c6287e58d2cee54d9c79b85afea7c90920330275af"
- },
- "version": "1.0.0"
- },
- "androidx.viewpager:viewpager:aar": {
- "shasums": {
- "jar": "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682"
- },
- "version": "1.0.0"
- },
- "androidx.work:work-runtime-ktx:aar": {
- "shasums": {
- "jar": "290d2e9c1a22388b3f0c3dbc204a6176f8c49174126de884820befa83899f129"
- },
- "version": "2.4.0"
- },
- "androidx.work:work-runtime:aar": {
- "shasums": {
- "jar": "7801441cb973fb007ef311d3db35c3b3c9d011cef890357e7ca33890833354e5"
- },
- "version": "2.4.0"
- },
- "androidx.work:work-testing:aar": {
- "shasums": {
- "jar": "dc1d9f743c59ee08c605aa924fc20819b6a0b734338e0a95af1943c3cd806e23"
- },
- "version": "2.4.0"
- },
- "com.almworks.sqlite4java:sqlite4java": {
- "shasums": {
- "jar": "243a64470fda0e86a6fddeb0af4c7aa9426ce84e68cbfe18d75ee5da4b7e0b92"
- },
- "version": "1.0.392"
- },
- "com.android.databinding:baseLibrary": {
- "shasums": {
- "jar": "5e4f3b90995be63f3c8eeecce120c588a98c6aad3b54f60ad4c80b5418c4b012"
- },
- "version": "3.4.2"
- },
- "com.android.tools.analytics-library:protos": {
- "shasums": {
- "jar": "6695fe4be8c58274efbf0fa0ab9e465ceaf4f21792970d68d37591287ee7bed1"
- },
- "version": "30.3.1"
- },
- "com.android.tools.analytics-library:shared": {
- "shasums": {
- "jar": "4a7ee8aad5796e058a2f414993424155172689ac332cd1a999db861949e2e1de"
- },
- "version": "30.3.1"
- },
- "com.android.tools.analytics-library:tracker": {
- "shasums": {
- "jar": "ec43dbc6cf1e93f5999262b483cb6ec93b372010c06c3800c50d9fca903dd1c2"
- },
- "version": "30.3.1"
- },
- "com.android.tools.apkparser:apkanalyzer": {
- "shasums": {
- "jar": "be0f9e079fe166da36127b780de9ffcb297b511b642cc09c0dff75a2ee47c454"
- },
- "version": "30.0.4"
- },
- "com.android.tools.apkparser:binary-resources": {
- "shasums": {
- "jar": "c8fb8f656fe329375d4c669fc00bd396e6debd098a1304ab0189e54e6ab3f303"
- },
- "version": "30.0.4"
- },
- "com.android.tools.build.jetifier:jetifier-core": {
- "shasums": {
- "jar": "c9f8b016144cfb31c5aee92d47f34de23289167cac5e8ef68365b2dd05766f11"
- },
- "version": "1.0.0-beta04"
- },
- "com.android.tools.build:aapt2-proto": {
- "shasums": {
- "jar": "d5e2f3e1e1eb06224b6875f5e513c72a65182342745718160caf191d46a96664"
- },
- "version": "7.3.1-8691043"
- },
- "com.android.tools.build:builder-model": {
- "shasums": {
- "jar": "9737e0b1873180027f58e9902b2fc832e0ce22d36dd9d78fc93a5ca32b6ca5b1"
- },
- "version": "7.3.1"
- },
- "com.android.tools.build:manifest-merger": {
- "shasums": {
- "jar": "534ac50d45d1bbc80f4122c7fa221402442835029ef05ec056f4edf2776c8c9f"
- },
- "version": "30.3.1"
- },
- "com.android.tools.ddms:ddmlib": {
- "shasums": {
- "jar": "58c4db5a94a5f8c933409335f6657a92ff9c87488a271b260315fbd020c07fe0"
- },
- "version": "30.3.1"
- },
- "com.android.tools.external.com-intellij:intellij-core": {
- "shasums": {
- "jar": "8bb2aecfb8dd2208fe341a731ac44a9ec83f989c12449b82dff1eab493de0408"
- },
- "version": "30.3.1"
- },
- "com.android.tools.external.com-intellij:kotlin-compiler": {
- "shasums": {
- "jar": "ccdc9e1abfafdec71f4f93a3a2ad6230a1384925b06fc277d4ed921de5bb6fd8"
- },
- "version": "30.3.1"
- },
- "com.android.tools.external.org-jetbrains:uast": {
- "shasums": {
- "jar": "47bf3fc2a6a9aa09f728788e869033341abd9d8cdb9fc61087dfb7cd576076d8"
- },
- "version": "30.3.1"
- },
- "com.android.tools.layoutlib:layoutlib-api": {
- "shasums": {
- "jar": "7ffb2c13ac92e2d2d454c617ec537ad3b8868a987118c4d3c62018125d656707"
- },
- "version": "30.3.1"
- },
- "com.android.tools.lint:lint": {
- "shasums": {
- "jar": "685080782f6368cc68ac74db065b4c5c59d9c82599dc34be2ec39e425251b864"
- },
- "version": "30.3.1"
- },
- "com.android.tools.lint:lint-api": {
- "shasums": {
- "jar": "cc6ebd7a146226363aa38bbb4a10d3e329079ac3201dbfeb562605be691d482c"
- },
- "version": "30.3.1"
- },
- "com.android.tools.lint:lint-checks": {
- "shasums": {
- "jar": "a6a728be66b4e1cb61333f77f519f8213450989be0fbe125ff77e6241d07be8e"
- },
- "version": "30.3.1"
- },
- "com.android.tools.lint:lint-model": {
- "shasums": {
- "jar": "4b6fc00a29c8dc716fb3a53b200af711318d2a8db5fa6c3d874b6d6d65e44541"
- },
- "version": "30.3.1"
- },
- "com.android.tools:annotations": {
- "shasums": {
- "jar": "77e5196bcafc283c5e987f0944f049eee0e68b532ebeb530d855f6f196db4f2a"
- },
- "version": "30.3.1"
- },
- "com.android.tools:common": {
- "shasums": {
- "jar": "559f1484222d8947ecf4d18538295be6d12ff2b74dc22c3c85922c7ba33678e9"
- },
- "version": "30.3.1"
- },
- "com.android.tools:dvlib": {
- "shasums": {
- "jar": "d4b141bd617afaf292dbd7c4f48b6b3a0b4244ded12b0e241e7bdf755db1597c"
- },
- "version": "30.3.1"
- },
- "com.android.tools:repository": {
- "shasums": {
- "jar": "a3bd11b434ccde5df90de77fd853361d99c150778cce5638d1ce25f820b9e243"
- },
- "version": "30.3.1"
- },
- "com.android.tools:sdk-common": {
- "shasums": {
- "jar": "fbe6b7dfb30b38ab1d17c5c6b660a8446ac2023fb0cfca3231126facedac2b7c"
- },
- "version": "30.3.1"
- },
- "com.android.tools:sdklib": {
- "shasums": {
- "jar": "57e147e5c3add5bfa1c53eb81aa24edbe2056fbd2210a00c9a71409ae498356b"
- },
- "version": "30.3.1"
- },
- "com.beust:jcommander": {
- "shasums": {
- "jar": "156be736199c990321d9ff77090b199629cfc9865e2d6c13f7cd291bb1641817"
- },
- "version": "1.64"
- },
- "com.crashlytics.sdk.android:answers:aar": {
- "shasums": {
- "jar": "5a05ddeda9f421b73727f4287a5d89e981a45e3feb7fac458cfddf29b97e3df8"
- },
- "version": "1.4.6"
- },
- "com.crashlytics.sdk.android:beta:aar": {
- "shasums": {
- "jar": "2a6b77374ebe6168588bd9116cdd66f60f7c151bd931b9a0f8b2012c06b1cd4d"
- },
- "version": "1.2.10"
- },
- "com.crashlytics.sdk.android:crashlytics-core:aar": {
- "shasums": {
- "jar": "4c055e1ad07fbe65a3e315bd27712be715962fb3c065d286a1d19f4f5db6768a"
- },
- "version": "2.6.7"
- },
- "com.crashlytics.sdk.android:crashlytics:aar": {
- "shasums": {
- "jar": "06d90c9d6693f302deae19f4cba67d724b44e8efcfc3c57308a78eead874dfeb"
- },
- "version": "2.9.8"
- },
- "com.github.bumptech.glide:annotations": {
- "shasums": {
- "jar": "d219d238006d824962176229d4708abcdddcfe342c6a18a5d0fa48d6f0479b3e"
- },
- "version": "4.11.0"
- },
- "com.github.bumptech.glide:compiler": {
- "shasums": {
- "jar": "a98cdf265c36261b1d523448b05c322ec290afa865946425eded6361980e8770"
- },
- "version": "4.11.0"
- },
- "com.github.bumptech.glide:disklrucache": {
- "shasums": {
- "jar": "d06775a5171b777aa3db031eb0dd4a1dbe3f00dda35b5574dfd953f6b0d5ef18"
- },
- "version": "4.11.0"
- },
- "com.github.bumptech.glide:gifdecoder:aar": {
- "shasums": {
- "jar": "197a1cd5b76855aa02b230c13974e293229b901dc2b96fab4315201e78baa804"
- },
- "version": "4.11.0"
- },
- "com.github.bumptech.glide:glide:aar": {
- "shasums": {
- "jar": "5c294e6a5f0f812cef876b8412954c1822da184af38e082a5b766e3c4f4fcd95"
- },
- "version": "4.11.0"
- },
- "com.github.bumptech.glide:mocks:aar": {
- "shasums": {
- "jar": "cf58b7972da6695ace6296fb3746535d30d41b422711a897c270d8480e3b055a"
- },
- "version": "4.11.0"
- },
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": {
- "shasums": {
- "jar": "cdf16ef8f5b8023d003ce3cc1b0d51bda737762e2dab2fedf43d1c4292353f7f"
- },
- "version": "2.0"
- },
- "com.google.android.datatransport:transport-api:aar": {
- "shasums": {
- "jar": "576514f8b75d8ae32897f1b9b031f88b00465bf6e0996e227d09af688195f71e"
- },
- "version": "2.2.0"
- },
- "com.google.android.datatransport:transport-backend-cct:aar": {
- "shasums": {
- "jar": "6a2d99756c1fa634d3f14b4479257ac83d5d0fbf7fe5aa1db0a014df95ae217f"
- },
- "version": "2.3.0"
- },
- "com.google.android.datatransport:transport-runtime:aar": {
- "shasums": {
- "jar": "5e219672fe5a03f5b80c4d2211f39c2b0ceeb3988bfe1e8f1e033579dee20414"
- },
- "version": "2.2.3"
- },
- "com.google.android.flexbox:flexbox:aar": {
- "shasums": {
- "jar": "5e19500486fd7c8e2e8c7aad6bbba9c8d0ada7057c6b32b9b5c61439814e7574"
- },
- "version": "3.0.0"
- },
- "com.google.android.gms:play-services-ads-identifier:aar": {
- "shasums": {
- "jar": "b01c408c265b3aa171d19be86d7b8d4f3454f3085169a775690a6a85f57abb73"
- },
- "version": "17.0.0"
- },
- "com.google.android.gms:play-services-base:aar": {
- "shasums": {
- "jar": "2896d76f432be52167295bb9ce45ade25c310aeffc04d28cf8db6a15868e83de"
- },
- "version": "18.0.1"
- },
- "com.google.android.gms:play-services-basement:aar": {
- "shasums": {
- "jar": "55c1777467901a2d399f3252384c4976284aa35fddfd5995466dbeacb49f9dd6"
- },
- "version": "18.0.0"
- },
- "com.google.android.gms:play-services-measurement-api:aar": {
- "shasums": {
- "jar": "fde4cb8493409aa5130de84775eba9f967aaaf916512362987e1bd61b60babfc"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-measurement-base:aar": {
- "shasums": {
- "jar": "39fd34e7da8e822a93b64c66134e2479075c298588018d4f379c53b9eea1cf1e"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-measurement-impl:aar": {
- "shasums": {
- "jar": "d143f6d909619a0aa597ccc127713cd5e4b2eea38477521de739331bb791f3ec"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-measurement-sdk-api:aar": {
- "shasums": {
- "jar": "afff4861d76bc1f6c7527ae9c4c58c50d6d9e4668a3dc58b03cd77e508e305b3"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-measurement-sdk:aar": {
- "shasums": {
- "jar": "24c3c4085609a85debabc43718ac3049583b5452e4d34b2e8c9e620542631b30"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-measurement:aar": {
- "shasums": {
- "jar": "553f0b6fc6e44eed81bb5b7b4cb80719c05a244a394eb38ae91271871dcddf07"
- },
- "version": "17.5.0"
- },
- "com.google.android.gms:play-services-stats:aar": {
- "shasums": {
- "jar": "e8ae5b40512b71e2258bfacd8cd3da398733aa4cde3b32d056093f832b83a6fe"
- },
- "version": "17.0.0"
- },
- "com.google.android.gms:play-services-tasks:aar": {
- "shasums": {
- "jar": "f106db48c6ccfa8e1315a7adc44aecd02ff7355eb3fa7dcdcba8c283a8eb1681"
- },
- "version": "18.0.1"
- },
- "com.google.android.gms:strict-version-matcher-plugin": {
- "shasums": {
- "jar": "0c1027a51198190386eae3f90adee9a30687e76da7589f06c79269fea4c7a4c0"
- },
- "version": "1.2.1"
- },
- "com.google.android.material:material:aar": {
- "shasums": {
- "jar": "cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a"
- },
- "version": "1.3.0"
- },
- "com.google.android.play:integrity:aar": {
- "shasums": {
- "jar": "c44e46f3fa25c89840e5edcd76e203d61bba2bb7c2eae485856fbcc7d6fa411b"
- },
- "version": "1.0.1"
- },
- "com.google.android:annotations": {
- "shasums": {
- "jar": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15"
- },
- "version": "4.1.1.4"
- },
- "com.google.auto.service:auto-service-annotations": {
- "shasums": {
- "jar": "44752893119fdaf01b4c5ee74e46e5dab86f2dcda18114c562f877355c6ed26e"
- },
- "version": "1.0"
- },
- "com.google.auto.value:auto-value-annotations": {
- "shasums": {
- "jar": "37ec09b47d7ed35a99d13927db5c86fc9071f620f943ead5d757144698310852"
- },
- "version": "1.8.1"
- },
- "com.google.code.findbugs:jsr305": {
- "shasums": {
- "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7"
- },
- "version": "3.0.2"
- },
- "com.google.code.gson:gson": {
- "shasums": {
- "jar": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e"
- },
- "version": "2.8.9"
- },
- "com.google.dagger:dagger": {
- "shasums": {
- "jar": "bb0600d2dd9669cbd5a2e40e7d3fbc4692f57fb7d59509d26b380398e20f5739"
- },
- "version": "2.41"
- },
- "com.google.dagger:dagger-compiler": {
- "shasums": {
- "jar": "b53edab184655a0de6bacfb9551849de7b6bf0c688a4771321b4cf6f548ac80e"
- },
- "version": "2.41"
- },
- "com.google.dagger:dagger-producers": {
- "shasums": {
- "jar": "8fe89dc042654fdf38a5be19bfe7f1d61a512225495a9379d52e5c28bc3f4521"
- },
- "version": "2.41"
- },
- "com.google.dagger:dagger-spi": {
- "shasums": {
- "jar": "960d8a3ea526e53f4a47e025bce84c714cdec9b84d29fc29d348bbb58406d8ea"
- },
- "version": "2.41"
- },
- "com.google.devtools.ksp:symbol-processing-api": {
- "shasums": {
- "jar": "bf4a6875af46917174b087d03840456685e115954d926ce88fd04b9d2f254df3"
- },
- "version": "1.5.30-1.0.0"
- },
- "com.google.errorprone:error_prone_annotations": {
- "shasums": {
- "jar": "721cb91842b46fa056847d104d5225c8b8e1e8b62263b993051e1e5a0137b7ec"
- },
- "version": "2.11.0"
- },
- "com.google.errorprone:javac-shaded": {
- "shasums": {
- "jar": "65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30"
- },
- "version": "9-dev-r4023-3"
- },
- "com.google.firebase:firebase-analytics:aar": {
- "shasums": {
- "jar": "5c36ae943a719de1c598287370cb3ee1d27fd2dc9d0ada650de2b7f9a1dcac54"
- },
- "version": "17.5.0"
- },
- "com.google.firebase:firebase-annotations": {
- "shasums": {
- "jar": "0393478cf124721c7502ea76a28129a420c462fc4d5c0a4274db9e309785bd7e"
- },
- "version": "16.1.0"
- },
- "com.google.firebase:firebase-appcheck-debug:aar": {
- "shasums": {
- "jar": "544cff5ae13c1d2edcb2478c1d4ebb703d2d1a616f4e0bf261721aefc108ab4c"
- },
- "version": "16.0.0"
- },
- "com.google.firebase:firebase-appcheck-interop:aar": {
- "shasums": {
- "jar": "44b9133286fe4c550391cf55057b2748323c4052b68412df0f8c83efd6044824"
- },
- "version": "16.0.0"
- },
- "com.google.firebase:firebase-appcheck-playintegrity:aar": {
- "shasums": {
- "jar": "de9ca1700814a52272ad157654f1224c6b05da9c3da15121c4da23a5eca1ebda"
- },
- "version": "16.0.0"
- },
- "com.google.firebase:firebase-appcheck:aar": {
- "shasums": {
- "jar": "f6f093086af3af54797cc8f4070aad5b1e8fbb3e16ccbcfd0f02e7dd3e3c9448"
- },
- "version": "16.0.0"
- },
- "com.google.firebase:firebase-auth-interop:aar": {
- "shasums": {
- "jar": "64dd9a5c20b64d0e367f4731d11e8fd6ea816a89a4e44e4193c72eafb54264d3"
- },
- "version": "19.0.2"
- },
- "com.google.firebase:firebase-auth-ktx:aar": {
- "shasums": {
- "jar": "bd23f0077d8e85c8c57e06c06cdcccdc06a3de96facdd72fabd11159f01c4d4d"
- },
- "version": "19.3.1"
- },
- "com.google.firebase:firebase-auth:aar": {
- "shasums": {
- "jar": "0523401e4028729d1a882d2f787cd180bdf91bd12cb1d362453a770e6a2f72c1"
- },
- "version": "19.3.1"
- },
- "com.google.firebase:firebase-common-ktx:aar": {
- "shasums": {
- "jar": "32ef394eea17445d3460a11f7128ef412f9aa093cd00106e9cfbec363b17a2c1"
- },
- "version": "20.1.1"
- },
- "com.google.firebase:firebase-common:aar": {
- "shasums": {
- "jar": "1ab1a5054cb82395487fe0645dcfec6acc94efb9f4972fe717a8bff6905b8ecf"
- },
- "version": "20.1.1"
- },
- "com.google.firebase:firebase-components:aar": {
- "shasums": {
- "jar": "dd678b2e24dd9b3f570196c618b6ffba9ea59b232ae6dce1356b0629ecb6fbf7"
- },
- "version": "17.0.0"
- },
- "com.google.firebase:firebase-crashlytics:aar": {
- "shasums": {
- "jar": "635953640e1bbb277affadbc3e59b43f1c4dd07de79c8973b6341a756ad8b74b"
- },
- "version": "17.1.1"
- },
- "com.google.firebase:firebase-database-collection:aar": {
- "shasums": {
- "jar": "fb92604df35bf819e706432ff6e3ca9d4794cc85348d94c887622ba93b5450e0"
- },
- "version": "18.0.1"
- },
- "com.google.firebase:firebase-encoders-json:aar": {
- "shasums": {
- "jar": "24ce7c1cfda1d526b76b16437a2e7d0920d7176a377e0e30b2a7381341f22ea1"
- },
- "version": "16.1.0"
- },
- "com.google.firebase:firebase-firestore-ktx:aar": {
- "shasums": {
- "jar": "5c3ebeadfc1feed2fb20c3a974c9f108e2068833af1b9e532cda6a85cb37011f"
- },
- "version": "24.2.1"
- },
- "com.google.firebase:firebase-firestore:aar": {
- "shasums": {
- "jar": "e0f2b11b93e779f13e7fcc6a91724aeb071114959c55d19e7e0028c0a01003aa"
- },
- "version": "24.2.1"
- },
- "com.google.firebase:firebase-iid-interop:aar": {
- "shasums": {
- "jar": "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c"
- },
- "version": "17.0.0"
- },
- "com.google.firebase:firebase-iid:aar": {
- "shasums": {
- "jar": "f1c174e75a24f298fbc0ed93dde29c997f29ca511d7e8a18dec068203553cf6b"
- },
- "version": "20.1.5"
- },
- "com.google.firebase:firebase-installations-interop:aar": {
- "shasums": {
- "jar": "d498fe20e7d2c65fc8f7124f1c1791d2828bebdf6bf06ab4cdee13e7fe9ccaa2"
- },
- "version": "16.0.0"
- },
- "com.google.firebase:firebase-installations:aar": {
- "shasums": {
- "jar": "0d0f88b3c3789d5fe1aa9a69bd5ab6c0e92036fcf34520775a0091e37268dd3f"
- },
- "version": "16.3.2"
- },
- "com.google.firebase:firebase-measurement-connector:aar": {
- "shasums": {
- "jar": "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c"
- },
- "version": "18.0.0"
- },
- "com.google.firebase:protolite-well-known-types:aar": {
- "shasums": {
- "jar": "9ac16b795b44c4ba87937ba0a850260d393f9dc25ff469d52a7bad528daac986"
- },
- "version": "18.0.0"
- },
- "com.google.gms:google-services": {
- "shasums": {
- "jar": "d9668002ef7032deddf7dbf853b47e10e6722bbce1b318fe7d6a297e28a8dcae"
- },
- "version": "4.3.3"
- },
- "com.google.googlejavaformat:google-java-format": {
- "shasums": {
- "jar": "aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e"
- },
- "version": "1.5"
- },
- "com.google.guava:failureaccess": {
- "shasums": {
- "jar": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26"
- },
- "version": "1.0.1"
- },
- "com.google.guava:guava": {
- "shasums": {
- "jar": "d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9"
- },
- "version": "31.0.1-jre"
- },
- "com.google.guava:listenablefuture": {
- "shasums": {
- "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99"
- },
- "version": "9999.0-empty-to-avoid-conflict-with-guava"
- },
- "com.google.j2objc:j2objc-annotations": {
- "shasums": {
- "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b"
- },
- "version": "1.3"
- },
- "com.google.jimfs:jimfs": {
- "shasums": {
- "jar": "c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd"
- },
- "version": "1.1"
- },
- "com.google.protobuf:protobuf-java": {
- "shasums": {
- "jar": "4ac549b192694141958049f060a1c826a33342f619e108ced8c17d9877f5e3ed"
- },
- "version": "3.17.3"
- },
- "com.google.protobuf:protobuf-java-util": {
- "shasums": {
- "jar": "bf320ed076000e1d8c7cbf7601b056acaecab80f75b9a659b9f6398d0d7e3f79"
- },
- "version": "3.17.3"
- },
- "com.google.protobuf:protobuf-javalite": {
- "shasums": {
- "jar": "bfc598474392a015c050d34be38bb84eb3986809374eac437420d51680150e94"
- },
- "version": "3.19.2"
- },
- "com.google.truth.extensions:truth-liteproto-extension": {
- "shasums": {
- "jar": "71cce6284554e546d1b5ba48e310ee4b4050676f09fb0eced136d779284ff78d"
- },
- "version": "1.1.3"
- },
- "com.google.truth:truth": {
- "shasums": {
- "jar": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3"
- },
- "version": "1.1.3"
- },
- "com.googlecode.juniversalchardet:juniversalchardet": {
- "shasums": {
- "jar": "757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76"
- },
- "version": "1.0.3"
- },
- "com.ibm.icu:icu4j": {
- "shasums": {
- "jar": "e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab"
- },
- "version": "53.1"
- },
- "com.squareup.moshi:moshi": {
- "shasums": {
- "jar": "bd004dd9ba175e603ad44420bf605250291b9b7bc6b9d9e916f5741ac8663307"
- },
- "version": "1.13.0"
- },
- "com.squareup.moshi:moshi-kotlin": {
- "shasums": {
- "jar": "a4967678345569919986c0d71ad59ae615745f708ae19fce30ba1e2bcb7f60cd"
- },
- "version": "1.13.0"
- },
- "com.squareup.moshi:moshi-kotlin-codegen": {
- "shasums": {
- "jar": "2cab2ee6ff25c12e2712bacbf170239335b3d4694398a5aeddb39484856fd1ae"
- },
- "version": "1.13.0"
- },
- "com.squareup.okhttp3:mockwebserver": {
- "shasums": {
- "jar": "d7d08b5096336d5b5a27d0e91bb2ebfa7dd54e48c3bb1e3cba15cc9bf16526b7"
- },
- "version": "4.7.2"
- },
- "com.squareup.okhttp3:okhttp": {
- "shasums": {
- "jar": "6b64ca1d2069751242984537d5de2cbe627ae000430f5117c47d8cb3d272facd"
- },
- "version": "4.7.2"
- },
- "com.squareup.okhttp:okhttp": {
- "shasums": {
- "jar": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa"
- },
- "version": "2.7.5"
- },
- "com.squareup.okio:okio": {
- "shasums": {
- "jar": "a27f091d34aa452e37227e2cfa85809f29012a8ef2501a9b5a125a978e4fcbc1"
- },
- "version": "2.10.0"
- },
- "com.squareup.retrofit2:converter-moshi": {
- "shasums": {
- "jar": "6bade0b754a7b8b7551e2208cb8227e697c2db553b8f12df6f1aa70c6f058600"
- },
- "version": "2.5.0"
- },
- "com.squareup.retrofit2:retrofit": {
- "shasums": {
- "jar": "e6ea1929c46852f5bec66ab3357da383476cef4e8d1deefdbf195b79cc4d6581"
- },
- "version": "2.9.0"
- },
- "com.squareup.retrofit2:retrofit-mock": {
- "shasums": {
- "jar": "00692755410b4367c7c12e6e4aadd3b1a28b5169e8961d94bc27ab36ece9bf29"
- },
- "version": "2.5.0"
- },
- "com.squareup:javapoet": {
- "shasums": {
- "jar": "4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291"
- },
- "version": "1.13.0"
- },
- "com.squareup:javawriter": {
- "shasums": {
- "jar": "f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e"
- },
- "version": "2.1.1"
- },
- "com.squareup:kotlinpoet": {
- "shasums": {
- "jar": "336095fd910caeaebcc2f6998df6625a9a90a5fd9f2cfa215ac224b77f37fbc6"
- },
- "version": "1.10.2"
- },
- "com.sun.activation:javax.activation": {
- "shasums": {
- "jar": "993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce"
- },
- "version": "1.2.0"
- },
- "com.sun.istack:istack-commons-runtime": {
- "shasums": {
- "jar": "4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef"
- },
- "version": "3.0.8"
- },
- "com.sun.xml.fastinfoset:FastInfoset": {
- "shasums": {
- "jar": "056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511"
- },
- "version": "1.2.16"
- },
- "commons-codec:commons-codec": {
- "shasums": {
- "jar": "4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569"
- },
- "version": "1.10"
- },
- "commons-io:commons-io": {
- "shasums": {
- "jar": "cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581"
- },
- "version": "2.4"
- },
- "commons-logging:commons-logging": {
- "shasums": {
- "jar": "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636"
- },
- "version": "1.2"
- },
- "io.fabric.sdk.android:fabric:aar": {
- "shasums": {
- "jar": "36df4b321ec95e31226ff5abaae73e66f3a99dedddbc2d03054c4e141c8aaa5c"
- },
- "version": "1.4.7"
- },
- "io.grpc:grpc-android:aar": {
- "shasums": {
- "jar": "5a2d9a295c6e77cb4e615ed4519edcae2432b7828cac2cc1a8ee798cffb43c9a"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-api": {
- "shasums": {
- "jar": "5d2bd58e4003e6b8440b3596c0809ef5c651594d62943edb459d5fa82273bd2f"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-context": {
- "shasums": {
- "jar": "97059fef9e325ecfcc30429921916ebaccd436cf5601af4d706ef1f613f5ea85"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-core": {
- "shasums": {
- "jar": "907dd75d9684dcd1e5664856e45aa05e072870af91796e635405f963f82431da"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-okhttp": {
- "shasums": {
- "jar": "ecd538b47b44b4638fa12b792ae2ac18c9b28c5d5a96595b1d3b75d1af424ac2"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-protobuf-lite": {
- "shasums": {
- "jar": "1e53b2f3d856ee83fe58f7b89a36180e00c79141fbc9752682d1fdb36bcb93be"
- },
- "version": "1.44.1"
- },
- "io.grpc:grpc-stub": {
- "shasums": {
- "jar": "c34e16c085568df0ca8b22d7fe1326999d5be192deb2ae057238ec0f7707a107"
- },
- "version": "1.44.1"
- },
- "io.perfmark:perfmark-api": {
- "shasums": {
- "jar": "c705b5c10c18ff3032b9e81742bc2f6b0e5607f6a6dfc0c8ad0cff75d4913042"
- },
- "version": "0.23.0"
- },
- "io.xlate:yaml-json": {
- "shasums": {
- "jar": "713e1d0c4f0f7c4c93a6b366b361dd1493f406cc532986784c884c205e049558"
- },
- "version": "0.1.0"
- },
- "jakarta.activation:jakarta.activation-api": {
- "shasums": {
- "jar": "8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b"
- },
- "version": "1.2.1"
- },
- "jakarta.json:jakarta.json-api": {
- "shasums": {
- "jar": "f2472507ad2cc12f2aef08a2f7a628cd1c3f855668a6dcb2aa9a30d9b909b998"
- },
- "version": "2.1.2"
- },
- "jakarta.xml.bind:jakarta.xml.bind-api": {
- "shasums": {
- "jar": "69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea"
- },
- "version": "2.3.2"
- },
- "javax.annotation:javax.annotation-api": {
- "shasums": {
- "jar": "e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b"
- },
- "version": "1.3.2"
- },
- "javax.inject:javax.inject": {
- "shasums": {
- "jar": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff"
- },
- "version": "1"
- },
- "junit:junit": {
- "shasums": {
- "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3"
- },
- "version": "4.13.2"
- },
- "net.bytebuddy:byte-buddy": {
- "shasums": {
- "jar": "5fcad05da791e9a22811c255a4a74b7ea094b7243d9dbf3e6fc578c8c94290ac"
- },
- "version": "1.10.20"
- },
- "net.bytebuddy:byte-buddy-agent": {
- "shasums": {
- "jar": "b592a6c43e752bf41659717956c57fbb790394d2ee5f8941876659f9c5c0e7e8"
- },
- "version": "1.10.20"
- },
- "net.java.dev.jna:jna": {
- "shasums": {
- "jar": "5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf"
- },
- "version": "5.6.0"
- },
- "net.java.dev.jna:jna-platform": {
- "shasums": {
- "jar": "9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7"
- },
- "version": "5.6.0"
- },
- "net.ltgt.gradle.incap:incap": {
- "shasums": {
- "jar": "b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd"
- },
- "version": "0.2"
- },
- "net.sf.kxml:kxml2": {
- "shasums": {
- "jar": "f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2"
- },
- "version": "2.3.0"
- },
- "nl.dionsegijn:konfetti:aar": {
- "shasums": {
- "jar": "a9beb9371e9c06c39eeff1ed052142a6ed6f0b28e3408230d8771867f9d817ba"
- },
- "version": "1.2.5"
- },
- "org.antlr:antlr4": {
- "shasums": {
- "jar": "a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4"
- },
- "version": "4.5.3"
- },
- "org.apache.commons:commons-compress": {
- "shasums": {
- "jar": "0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e"
- },
- "version": "1.20"
- },
- "org.apache.httpcomponents:httpclient": {
- "shasums": {
- "jar": "c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7"
- },
- "version": "4.5.6"
- },
- "org.apache.httpcomponents:httpcore": {
- "shasums": {
- "jar": "e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424"
- },
- "version": "4.4.13"
- },
- "org.apache.httpcomponents:httpmime": {
- "shasums": {
- "jar": "0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e"
- },
- "version": "4.5.6"
- },
- "org.bouncycastle:bcpkix-jdk15on": {
- "shasums": {
- "jar": "efbca754880ce3922ca47a43c1f0b72c45731450a0ef193b9db33bf4bb38ce5f"
- },
- "version": "1.67"
- },
- "org.bouncycastle:bcprov-jdk15on": {
- "shasums": {
- "jar": "f732a46c8de7e2232f2007c682a21d1f4cc8a8a0149b6b7bd6aa1afdc65a0f8d"
- },
- "version": "1.68"
- },
- "org.checkerframework:checker-compat-qual": {
- "shasums": {
- "jar": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a"
- },
- "version": "2.5.5"
- },
- "org.checkerframework:checker-qual": {
- "shasums": {
- "jar": "63d474e16948b0a5aabd12c18bdc3d6f47ac2efc4c7ee08da76dba4658138f95"
- },
- "version": "3.21.3"
- },
- "org.codehaus.mojo:animal-sniffer-annotations": {
- "shasums": {
- "jar": "e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d"
- },
- "version": "1.19"
- },
- "org.eclipse.parsson:parsson": {
- "shasums": {
- "jar": "0a0d5fef906ddbbddae6e894f6cf42e7b952d24952f1df09adb0a2426f496bf6"
- },
- "version": "1.1.2"
- },
- "org.glassfish.jaxb:jaxb-runtime": {
- "shasums": {
- "jar": "e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b"
- },
- "version": "2.3.2"
- },
- "org.glassfish.jaxb:txw2": {
- "shasums": {
- "jar": "4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe"
- },
- "version": "2.3.2"
- },
- "org.hamcrest:hamcrest-core": {
- "shasums": {
- "jar": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9"
- },
- "version": "1.3"
- },
- "org.hamcrest:hamcrest-integration": {
- "shasums": {
- "jar": "70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2"
- },
- "version": "1.3"
- },
- "org.hamcrest:hamcrest-library": {
- "shasums": {
- "jar": "711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c"
- },
- "version": "1.3"
- },
- "org.jetbrains.intellij.deps:trove4j": {
- "shasums": {
- "jar": "affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601"
- },
- "version": "1.0.20181211"
- },
- "org.jetbrains.kotlin:kotlin-compiler-embeddable": {
- "shasums": {
- "jar": "d7b85448039e468daf3b9462a172244477fa3eb890f199ec77703992f36ade44"
- },
- "version": "1.5.0"
- },
- "org.jetbrains.kotlin:kotlin-daemon-embeddable": {
- "shasums": {
- "jar": "bf32071706cf3c20580516b04d25a733c7a21db9cd9d04fc7060c00720bc91bc"
- },
- "version": "1.5.0"
- },
- "org.jetbrains.kotlin:kotlin-reflect": {
- "shasums": {
- "jar": "c6161884209221db7f5ddb031bb480a3c46bb90d5b65d7cc0167b149aaa9c494"
- },
- "version": "1.6.0"
- },
- "org.jetbrains.kotlin:kotlin-script-runtime": {
- "shasums": {
- "jar": "f2d45a350628bdfea25570c4c3f29198087e0f8cf53d87d928fb0da8a30c8fb7"
- },
- "version": "1.5.0"
- },
- "org.jetbrains.kotlin:kotlin-stdlib": {
- "shasums": {
- "jar": "739c526672bb337573b28f63afa8306eb088b0c3a0967f56d6c89f4a3012a492"
- },
- "version": "1.6.21"
- },
- "org.jetbrains.kotlin:kotlin-stdlib-common": {
- "shasums": {
- "jar": "183bec59cd9f3a14957b190e8c879cf1194bd1f106b0a7b6e1cbb8790d242363"
- },
- "version": "1.6.21"
- },
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7": {
- "shasums": {
- "jar": "f1b0634dbb94172038463020bb2dd45ca26849f8ce29d625acb0f1569d11dbee"
- },
- "version": "1.6.21"
- },
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8": {
- "shasums": {
- "jar": "dab45489b47736d59fce44b80676f1947a9b6bcab10fd60e878a83bd82a6954c"
- },
- "version": "1.6.21"
- },
- "org.jetbrains.kotlin:kotlin-test": {
- "shasums": {
- "jar": "1794237a1fc908d37adb2fa3d9739b883124571720ad285cfa81e74190e87ba9"
- },
- "version": "1.3.72"
- },
- "org.jetbrains.kotlin:kotlin-test-annotations-common": {
- "shasums": {
- "jar": "cadb25f8660392c1fbc7f9b2b1b9daa36469587b97bd30ba718d3bbaea71dfb3"
- },
- "version": "1.3.72"
- },
- "org.jetbrains.kotlin:kotlin-test-common": {
- "shasums": {
- "jar": "6b4abd7d7d1c07ab72c2318afec2f9b627b9e99a39767f597ac40cf7b1955b8a"
- },
- "version": "1.3.72"
- },
- "org.jetbrains.kotlin:kotlin-test-junit": {
- "shasums": {
- "jar": "d8266ebb919568ddc15c98d2790017f31240ac51936445fd8b27231d60fe4566"
- },
- "version": "1.3.72"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-android": {
- "shasums": {
- "jar": "3fdc0eed5bc4b83ee9622774520a2db25470370eacd1581cac1e37704f095b00"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-core": {
- "shasums": {
- "jar": "778851e73851b502e8366434bc9ec58371431890fb12b89e7edbf1732962c030"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": {
- "shasums": {
- "jar": "c24c8bb27bb320c4a93871501a7e5e0c61607638907b197aef675513d4c820be"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava": {
- "shasums": {
- "jar": "94deeee072e0f762a8a3ccc66b1762c5d96d55eca13cab4001f5b7588bb74390"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-test": {
- "shasums": {
- "jar": "993eef7de86d59e99096fbc51b7df33f0cc8a3a655e195590765b7e51e4c0aaa"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": {
- "shasums": {
- "jar": "69d65e5fea41cbc0bb905d3ef6623a2348b931fd01b9f2c4a1751a372f2e476d"
- },
- "version": "1.6.4"
- },
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm": {
- "shasums": {
- "jar": "fdaf7ba158465f6b6e9ce5762e0300fd681a976fbfeb5ed50fa5a2b26868cec8"
- },
- "version": "0.3.0"
- },
- "org.jetbrains:annotations": {
- "shasums": {
- "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478"
- },
- "version": "13.0"
- },
- "org.jvnet.staxex:stax-ex": {
- "shasums": {
- "jar": "20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a"
- },
- "version": "1.8.1"
- },
- "org.mockito.kotlin:mockito-kotlin": {
- "shasums": {
- "jar": "12995c7fdb8de84cf58fca31f1cd8810eeaa39e63c00e61ffcb2b49a4305f21f"
- },
- "version": "3.2.0"
- },
- "org.mockito:mockito-core": {
- "shasums": {
- "jar": "a1f64211407b8dc4cf80b16e07cc11aa9e5228d53dc4a5357326d66825f6a4ac"
- },
- "version": "3.9.0"
- },
- "org.objenesis:objenesis": {
- "shasums": {
- "jar": "03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3"
- },
- "version": "3.2"
- },
- "org.ow2.asm:asm": {
- "shasums": {
- "jar": "b9d4fe4d71938df38839f0eca42aaaa64cf8b313d678da036f0cb3ca199b47f5"
- },
- "version": "9.2"
- },
- "org.ow2.asm:asm-analysis": {
- "shasums": {
- "jar": "878fbe521731c072d14d2d65b983b1beae6ad06fda0007b6a8bae81f73f433c4"
- },
- "version": "9.2"
- },
- "org.ow2.asm:asm-commons": {
- "shasums": {
- "jar": "be4ce53138a238bb522cd781cf91f3ba5ce2f6ca93ec62d46a162a127225e0a6"
- },
- "version": "9.2"
- },
- "org.ow2.asm:asm-tree": {
- "shasums": {
- "jar": "aabf9bd23091a4ebfc109c1f3ee7cf3e4b89f6ba2d3f51c5243f16b3cffae011"
- },
- "version": "9.2"
- },
- "org.ow2.asm:asm-util": {
- "shasums": {
- "jar": "ff5b3cd331ae8a9a804768280da98f50f424fef23dd3c788bb320e08c94ee598"
- },
- "version": "9.2"
- },
- "org.robolectric:annotations": {
- "shasums": {
- "jar": "e6b50343f492e3a6d8a5ddbfd886be685c946459146f1ea2934cd0dacd8f558b"
- },
- "version": "4.7"
- },
- "org.robolectric:junit": {
- "shasums": {
- "jar": "887adf35c2cfff04a3f40d15eaa1f9b2bdda3290068fb36a851dcba262c9e454"
- },
- "version": "4.7"
- },
- "org.robolectric:nativeruntime": {
- "shasums": {
- "jar": "2a19ea7935855831ccff605e5b07d2539d44fbd9741b767bdfd34b8b3a35d508"
- },
- "version": "4.7"
- },
- "org.robolectric:pluginapi": {
- "shasums": {
- "jar": "101dbd8b6a920a9bf21f6ca06ff68eb8e6dd7a887091c6d51488faa7ffea9b71"
- },
- "version": "4.7"
- },
- "org.robolectric:plugins-maven-dependency-resolver": {
- "shasums": {
- "jar": "a72c736098cfcbf806fabb8560fca4e518fee0bba3182f55ada86b291128d94c"
- },
- "version": "4.7"
- },
- "org.robolectric:resources": {
- "shasums": {
- "jar": "bfca8d227eafc738f9c4fcab08cc6251d1e876330d6cfd6b994bcfdf65894bba"
- },
- "version": "4.7"
- },
- "org.robolectric:robolectric": {
- "shasums": {
- "jar": "7b13241ae4af4719499da02bd1be8aacf9ff13e695df93a115d052a61da4d885"
- },
- "version": "4.7"
- },
- "org.robolectric:sandbox": {
- "shasums": {
- "jar": "a75c6d7ff0b6cd8862fece94a3c47f223f3f3db2d7f35a5ae696a967e76ff747"
- },
- "version": "4.7"
- },
- "org.robolectric:shadowapi": {
- "shasums": {
- "jar": "a5b845650d009ae0bc8c220b53a90939be1cb6192831553785ed165875db8e4d"
- },
- "version": "4.7"
- },
- "org.robolectric:shadows-framework": {
- "shasums": {
- "jar": "05a07bd6c5407999df9d84b73e1dcf016ae73c36b8f0bb53ca2e8c2bfb6d070d"
- },
- "version": "4.7"
- },
- "org.robolectric:utils": {
- "shasums": {
- "jar": "a3bf567dcf05ee9ebdba79cf6f9b9043460958b354d815e49394e00ad536fd99"
- },
- "version": "4.7"
- },
- "org.robolectric:utils-reflector": {
- "shasums": {
- "jar": "a18155366b0d8977f3a23b83c9d0150180c5d6a981f6df92ac9ea3018151eb3e"
- },
- "version": "4.7"
- },
- "org.smali:baksmali": {
- "shasums": {
- "jar": "1990932c4c8cf334a640e52c4bd0426e4abb2c2fc94f1803711ea8460c06de50"
- },
- "version": "2.2.4"
- },
- "org.smali:dexlib2": {
- "shasums": {
- "jar": "cb2677bfb66cfbc954e96e806ac6bda13051ad37754f9d1bcce38514e50e41e6"
- },
- "version": "2.2.4"
- },
- "org.smali:util": {
- "shasums": {
- "jar": "d7de146d2b6dc9d0b75cb6c7ff17ca68ef24049dc6038b84b5f6b22cd00ddd46"
- },
- "version": "2.2.4"
- },
- "org.snakeyaml:snakeyaml-engine": {
- "shasums": {
- "jar": "2652199af40c9aa2f1782400d2dfbbf4e5226208c4e05ddd4059c3d6d9cd1505"
- },
- "version": "2.6"
- },
- "xerces:xercesImpl": {
- "shasums": {
- "jar": "b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0"
- },
- "version": "2.12.0"
- },
- "xml-apis:xml-apis": {
- "shasums": {
- "jar": "a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad"
- },
- "version": "1.4.01"
- }
- },
- "dependencies": {
- "androidx.activity:activity-compose:aar": [
- "androidx.activity:activity-ktx:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.activity:activity-ktx:aar": [
- "androidx.activity:activity:aar",
- "androidx.core:core-ktx:aar",
- "androidx.lifecycle:lifecycle-runtime-ktx:aar",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
- "androidx.savedstate:savedstate-ktx:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.activity:activity:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.tracing:tracing:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.appcompat:appcompat-resources:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "androidx.vectordrawable:vectordrawable:aar"
- ],
- "androidx.appcompat:appcompat:aar": [
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.appcompat:appcompat-resources:aar",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.cursoradapter:cursoradapter:aar",
- "androidx.drawerlayout:drawerlayout:aar",
- "androidx.fragment:fragment:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.savedstate:savedstate:aar"
- ],
- "androidx.arch.core:core-common": [
- "androidx.annotation:annotation"
- ],
- "androidx.arch.core:core-runtime:aar": [
- "androidx.annotation:annotation",
- "androidx.arch.core:core-common"
- ],
- "androidx.arch.core:core-testing:aar": [
- "androidx.annotation:annotation",
- "androidx.arch.core:core-runtime:aar",
- "junit:junit",
- "org.mockito:mockito-core"
- ],
- "androidx.autofill:autofill:aar": [
- "androidx.core:core:aar"
- ],
- "androidx.cardview:cardview:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.collection:collection": [
- "androidx.annotation:annotation"
- ],
- "androidx.compose.animation:animation-core:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core"
- ],
- "androidx.compose.animation:animation:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.foundation:foundation-layout:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.foundation:foundation:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.material:material-icons-core:aar": [
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.material:material-ripple:aar": [
- "androidx.compose.animation:animation:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-util:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.material:material:aar": [
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.material:material-icons-core:aar",
- "androidx.compose.material:material-ripple:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.savedstate:savedstate:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.runtime:runtime-livedata:aar": [
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.runtime:runtime-saveable:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.runtime:runtime:aar": [
- "androidx.annotation:annotation",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android"
- ],
- "androidx.compose.ui:ui-geometry:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-util:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.ui:ui-graphics:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.ui:ui-test-junit4:aar": [
- "androidx.activity:activity-compose:aar",
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.ui:ui-test:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test.ext:junit:aar",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "junit:junit",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test"
- ],
- "androidx.compose.ui:ui-test:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test:monitor:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test"
- ],
- "androidx.compose.ui:ui-text:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.core:core:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "androidx.compose.ui:ui-unit:aar": [
- "androidx.annotation:annotation",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-util:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.ui:ui-util:aar": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.compose.ui:ui:aar": [
- "androidx.annotation:annotation",
- "androidx.autofill:autofill:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.lifecycle:lifecycle-common-java8",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.profileinstaller:profileinstaller:aar",
- "androidx.savedstate:savedstate:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core"
- ],
- "androidx.concurrent:concurrent-futures": [
- "androidx.annotation:annotation",
- "com.google.guava:listenablefuture"
- ],
- "androidx.constraintlayout:constraintlayout:aar": [
- "androidx.appcompat:appcompat:aar",
- "androidx.constraintlayout:constraintlayout-solver",
- "androidx.core:core:aar"
- ],
- "androidx.coordinatorlayout:coordinatorlayout:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.customview:customview:aar"
- ],
- "androidx.core:core-ktx:aar": [
- "androidx.annotation:annotation",
- "androidx.core:core:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.core:core:aar": [
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.collection:collection",
- "androidx.concurrent:concurrent-futures",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.versionedparcelable:versionedparcelable:aar"
- ],
- "androidx.cursoradapter:cursoradapter:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.customview:customview:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar"
- ],
- "androidx.databinding:databinding-adapters:aar": [
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-runtime:aar"
- ],
- "androidx.databinding:databinding-compiler": [
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-compiler-common",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "org.antlr:antlr4",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "androidx.databinding:databinding-compiler-common": [
- "androidx.databinding:databinding-common",
- "com.android.databinding:baseLibrary",
- "com.android.tools.build.jetifier:jetifier-core",
- "com.android.tools:annotations",
- "com.google.code.gson:gson",
- "com.google.guava:guava",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "com.squareup:javapoet",
- "commons-io:commons-io",
- "org.antlr:antlr4",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "androidx.databinding:databinding-runtime:aar": [
- "androidx.collection:collection",
- "androidx.databinding:databinding-common",
- "androidx.lifecycle:lifecycle-runtime:aar"
- ],
- "androidx.documentfile:documentfile:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.drawerlayout:drawerlayout:aar": [
- "androidx.annotation:annotation",
- "androidx.core:core:aar",
- "androidx.customview:customview:aar"
- ],
- "androidx.dynamicanimation:dynamicanimation:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.legacy:legacy-support-core-utils:aar"
- ],
- "androidx.exifinterface:exifinterface:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.fragment:fragment:aar": [
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.loader:loader:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.viewpager:viewpager:aar"
- ],
- "androidx.interpolator:interpolator:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.legacy:legacy-support-core-utils:aar": [
- "androidx.annotation:annotation",
- "androidx.core:core:aar",
- "androidx.documentfile:documentfile:aar",
- "androidx.loader:loader:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "androidx.print:print:aar"
- ],
- "androidx.lifecycle:lifecycle-common": [
- "androidx.annotation:annotation"
- ],
- "androidx.lifecycle:lifecycle-common-java8": [
- "androidx.annotation:annotation",
- "androidx.lifecycle:lifecycle-common"
- ],
- "androidx.lifecycle:lifecycle-extensions:aar": [
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.fragment:fragment:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-process:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar"
- ],
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar": [
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.lifecycle:lifecycle-livedata-core:aar": [
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.lifecycle:lifecycle-common"
- ],
- "androidx.lifecycle:lifecycle-livedata-ktx:aar": [
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core"
- ],
- "androidx.lifecycle:lifecycle-livedata:aar": [
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar"
- ],
- "androidx.lifecycle:lifecycle-process:aar": [
- "androidx.lifecycle:lifecycle-runtime:aar"
- ],
- "androidx.lifecycle:lifecycle-runtime-ktx:aar": [
- "androidx.annotation:annotation",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android"
- ],
- "androidx.lifecycle:lifecycle-runtime:aar": [
- "androidx.annotation:annotation",
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.lifecycle:lifecycle-common"
- ],
- "androidx.lifecycle:lifecycle-service:aar": [
- "androidx.lifecycle:lifecycle-runtime:aar"
- ],
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": [
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android"
- ],
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": [
- "androidx.annotation:annotation",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.savedstate:savedstate:aar"
- ],
- "androidx.lifecycle:lifecycle-viewmodel:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.loader:loader:aar": [
- "androidx.annotation:annotation",
- "androidx.core:core:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar"
- ],
- "androidx.localbroadcastmanager:localbroadcastmanager:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.multidex:multidex-instrumentation:aar": [
- "androidx.multidex:multidex:aar"
- ],
- "androidx.navigation:navigation-common-ktx:aar": [
- "androidx.collection:collection",
- "androidx.navigation:navigation-common:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.navigation:navigation-common:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar"
- ],
- "androidx.navigation:navigation-fragment-ktx:aar": [
- "androidx.navigation:navigation-fragment:aar",
- "androidx.navigation:navigation-runtime-ktx:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.navigation:navigation-fragment:aar": [
- "androidx.fragment:fragment:aar",
- "androidx.navigation:navigation-runtime:aar"
- ],
- "androidx.navigation:navigation-runtime-ktx:aar": [
- "androidx.navigation:navigation-common-ktx:aar",
- "androidx.navigation:navigation-runtime:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.navigation:navigation-runtime:aar": [
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.navigation:navigation-common:aar"
- ],
- "androidx.navigation:navigation-ui-ktx:aar": [
- "androidx.navigation:navigation-runtime-ktx:aar",
- "androidx.navigation:navigation-ui:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.navigation:navigation-ui:aar": [
- "androidx.navigation:navigation-runtime:aar",
- "com.google.android.material:material:aar"
- ],
- "androidx.print:print:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.profileinstaller:profileinstaller:aar": [
- "androidx.annotation:annotation",
- "androidx.startup:startup-runtime:aar"
- ],
- "androidx.recyclerview:recyclerview:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.customview:customview:aar"
- ],
- "androidx.room:room-common": [
- "androidx.annotation:annotation"
- ],
- "androidx.room:room-runtime:aar": [
- "androidx.arch.core:core-runtime:aar",
- "androidx.room:room-common",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar"
- ],
- "androidx.savedstate:savedstate-ktx:aar": [
- "androidx.savedstate:savedstate:aar",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.savedstate:savedstate:aar": [
- "androidx.annotation:annotation",
- "androidx.arch.core:core-common",
- "androidx.lifecycle:lifecycle-common"
- ],
- "androidx.sqlite:sqlite-framework:aar": [
- "androidx.annotation:annotation",
- "androidx.sqlite:sqlite:aar"
- ],
- "androidx.sqlite:sqlite:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.startup:startup-runtime:aar": [
- "androidx.annotation:annotation",
- "androidx.tracing:tracing:aar"
- ],
- "androidx.test.espresso:espresso-accessibility:aar": [
- "androidx.test.espresso:espresso-core:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework"
- ],
- "androidx.test.espresso:espresso-contrib:aar": [
- "androidx.core:core:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
- "com.google.android.material:material:aar"
- ],
- "androidx.test.espresso:espresso-core:aar": [
- "androidx.annotation:annotation",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test:annotation:aar",
- "androidx.test:core:aar",
- "androidx.test:runner:aar",
- "com.google.code.findbugs:jsr305",
- "com.squareup:javawriter",
- "javax.inject:javax.inject",
- "org.hamcrest:hamcrest-integration",
- "org.hamcrest:hamcrest-library",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.test.espresso:espresso-intents:aar": [
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test:rules:aar"
- ],
- "androidx.test.ext:junit:aar": [
- "androidx.annotation:annotation",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "junit:junit"
- ],
- "androidx.test.ext:truth:aar": [
- "androidx.annotation:annotation",
- "androidx.test:core:aar",
- "com.google.guava:guava",
- "com.google.truth:truth"
- ],
- "androidx.test.services:storage:aar": [
- "androidx.annotation:annotation",
- "androidx.test:annotation:aar",
- "androidx.test:monitor:aar",
- "com.google.code.findbugs:jsr305"
- ],
- "androidx.test:annotation:aar": [
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar"
- ],
- "androidx.test:core:aar": [
- "androidx.annotation:annotation",
- "androidx.concurrent:concurrent-futures",
- "androidx.lifecycle:lifecycle-common",
- "androidx.test.services:storage:aar",
- "androidx.test:monitor:aar",
- "androidx.tracing:tracing:aar",
- "com.google.guava:listenablefuture",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "androidx.test:monitor:aar": [
- "androidx.annotation:annotation",
- "androidx.test:annotation:aar",
- "androidx.tracing:tracing:aar"
- ],
- "androidx.test:rules:aar": [
- "androidx.test:runner:aar"
- ],
- "androidx.test:runner:aar": [
- "androidx.annotation:annotation",
- "androidx.test.services:storage:aar",
- "androidx.test:annotation:aar",
- "androidx.test:monitor:aar",
- "androidx.tracing:tracing:aar",
- "junit:junit"
- ],
- "androidx.tracing:tracing:aar": [
- "androidx.annotation:annotation"
- ],
- "androidx.transition:transition:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar"
- ],
- "androidx.vectordrawable:vectordrawable-animated:aar": [
- "androidx.collection:collection",
- "androidx.interpolator:interpolator:aar",
- "androidx.vectordrawable:vectordrawable:aar"
- ],
- "androidx.vectordrawable:vectordrawable:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar"
- ],
- "androidx.versionedparcelable:versionedparcelable:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection"
- ],
- "androidx.viewpager2:viewpager2:aar": [
- "androidx.annotation:annotation",
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.fragment:fragment:aar",
- "androidx.recyclerview:recyclerview:aar"
- ],
- "androidx.viewpager:viewpager:aar": [
- "androidx.annotation:annotation",
- "androidx.core:core:aar",
- "androidx.customview:customview:aar"
- ],
- "androidx.work:work-runtime-ktx:aar": [
- "androidx.work:work-runtime:aar",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android"
- ],
- "androidx.work:work-runtime:aar": [
- "androidx.core:core:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.room:room-runtime:aar",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar",
- "com.google.guava:listenablefuture"
- ],
- "androidx.work:work-testing:aar": [
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.room:room-runtime:aar",
- "androidx.work:work-runtime-ktx:aar"
- ],
- "com.android.tools.analytics-library:protos": [
- "com.google.protobuf:protobuf-java"
- ],
- "com.android.tools.analytics-library:shared": [
- "com.android.tools.analytics-library:protos",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.google.code.gson:gson",
- "com.google.guava:guava",
- "net.java.dev.jna:jna-platform",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.analytics-library:tracker": [
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.apkparser:apkanalyzer": [
- "com.android.tools.apkparser:binary-resources",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "org.smali:baksmali",
- "org.smali:dexlib2"
- ],
- "com.android.tools.apkparser:binary-resources": [
- "com.android.tools:annotations",
- "com.google.code.findbugs:jsr305",
- "com.google.guava:guava"
- ],
- "com.android.tools.build.jetifier:jetifier-core": [
- "com.google.code.gson:gson",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "com.android.tools.build:aapt2-proto": [
- "com.google.protobuf:protobuf-java"
- ],
- "com.android.tools.build:builder-model": [
- "com.android.tools:annotations",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.build:manifest-merger": [
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.google.code.gson:gson",
- "net.sf.kxml:kxml2",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.ddms:ddmlib": [
- "com.android.tools:common",
- "com.google.protobuf:protobuf-java",
- "net.sf.kxml:kxml2",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.external.com-intellij:intellij-core": [
- "org.jetbrains.intellij.deps:trove4j"
- ],
- "com.android.tools.layoutlib:layoutlib-api": [
- "com.android.tools:annotations",
- "com.android.tools:common",
- "net.sf.kxml:kxml2",
- "org.jetbrains:annotations"
- ],
- "com.android.tools.lint:lint": [
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools.analytics-library:tracker",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.google.guava:guava",
- "net.sf.kxml:kxml2",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools.lint:lint-api": [
- "com.android.tools.build:builder-model",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint-model",
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.google.guava:guava",
- "commons-io:commons-io",
- "net.sf.kxml:kxml2",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-tree"
- ],
- "com.android.tools.lint:lint-checks": [
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint-api",
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.google.code.gson:gson",
- "com.google.guava:guava",
- "net.sf.kxml:kxml2",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.ow2.asm:asm-analysis"
- ],
- "com.android.tools.lint:lint-model": [
- "com.android.tools.build:builder-model",
- "com.android.tools:common",
- "com.android.tools:sdk-common",
- "net.sf.kxml:kxml2",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools:common": [
- "com.android.tools:annotations",
- "com.google.guava:guava",
- "net.java.dev.jna:jna-platform",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools:dvlib": [
- "com.android.tools:common"
- ],
- "com.android.tools:repository": [
- "com.android.tools.analytics-library:shared",
- "com.android.tools:common",
- "com.google.jimfs:jimfs",
- "com.sun.activation:javax.activation",
- "org.apache.commons:commons-compress",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.android.tools:sdk-common": [
- "com.android.tools.analytics-library:shared",
- "com.android.tools.build:aapt2-proto",
- "com.android.tools.ddms:ddmlib",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools:common",
- "com.android.tools:sdklib",
- "com.google.code.gson:gson",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java",
- "javax.inject:javax.inject",
- "net.sf.kxml:kxml2",
- "org.bouncycastle:bcpkix-jdk15on",
- "org.bouncycastle:bcprov-jdk15on",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "xerces:xercesImpl"
- ],
- "com.android.tools:sdklib": [
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools:common",
- "com.android.tools:dvlib",
- "com.android.tools:repository",
- "com.google.code.gson:gson",
- "org.apache.commons:commons-compress",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpmime",
- "org.glassfish.jaxb:jaxb-runtime"
- ],
- "com.crashlytics.sdk.android:answers:aar": [
- "io.fabric.sdk.android:fabric:aar"
- ],
- "com.crashlytics.sdk.android:crashlytics-core:aar": [
- "com.crashlytics.sdk.android:answers:aar",
- "io.fabric.sdk.android:fabric:aar"
- ],
- "com.crashlytics.sdk.android:crashlytics:aar": [
- "com.crashlytics.sdk.android:answers:aar",
- "com.crashlytics.sdk.android:beta:aar",
- "com.crashlytics.sdk.android:crashlytics-core:aar",
- "io.fabric.sdk.android:fabric:aar"
- ],
- "com.github.bumptech.glide:compiler": [
- "com.github.bumptech.glide:annotations"
- ],
- "com.github.bumptech.glide:gifdecoder:aar": [
- "androidx.annotation:annotation"
- ],
- "com.github.bumptech.glide:glide:aar": [
- "androidx.exifinterface:exifinterface:aar",
- "androidx.fragment:fragment:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "com.github.bumptech.glide:annotations",
- "com.github.bumptech.glide:disklrucache",
- "com.github.bumptech.glide:gifdecoder:aar"
- ],
- "com.github.bumptech.glide:mocks:aar": [
- "androidx.annotation:annotation",
- "com.github.bumptech.glide:glide:aar",
- "com.google.guava:guava"
- ],
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": [
- "org.hamcrest:hamcrest-core"
- ],
- "com.google.android.datatransport:transport-backend-cct:aar": [
- "androidx.annotation:annotation",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.firebase:firebase-encoders-json:aar"
- ],
- "com.google.android.datatransport:transport-runtime:aar": [
- "androidx.annotation:annotation",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.dagger:dagger"
- ],
- "com.google.android.flexbox:flexbox:aar": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "com.google.android.gms:play-services-ads-identifier:aar": [
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.android.gms:play-services-base:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.fragment:fragment:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar"
- ],
- "com.google.android.gms:play-services-basement:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.fragment:fragment:aar"
- ],
- "com.google.android.gms:play-services-measurement-api:aar": [
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-measurement-sdk-api:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar",
- "com.google.firebase:firebase-measurement-connector:aar"
- ],
- "com.google.android.gms:play-services-measurement-base:aar": [
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.android.gms:play-services-measurement-impl:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-stats:aar"
- ],
- "com.google.android.gms:play-services-measurement-sdk-api:aar": [
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-base:aar"
- ],
- "com.google.android.gms:play-services-measurement-sdk:aar": [
- "androidx.collection:collection",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar"
- ],
- "com.google.android.gms:play-services-measurement:aar": [
- "androidx.collection:collection",
- "androidx.legacy:legacy-support-core-utils:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-stats:aar"
- ],
- "com.google.android.gms:play-services-stats:aar": [
- "androidx.legacy:legacy-support-core-utils:aar",
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.android.gms:play-services-tasks:aar": [
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.android.gms:strict-version-matcher-plugin": [
- "com.google.code.findbugs:jsr305",
- "com.google.guava:guava",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.google.android.material:material:aar": [
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.appcompat:appcompat:aar",
- "androidx.cardview:cardview:aar",
- "androidx.constraintlayout:constraintlayout:aar",
- "androidx.coordinatorlayout:coordinatorlayout:aar",
- "androidx.core:core:aar",
- "androidx.dynamicanimation:dynamicanimation:aar",
- "androidx.fragment:fragment:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.transition:transition:aar",
- "androidx.vectordrawable:vectordrawable:aar",
- "androidx.viewpager2:viewpager2:aar"
- ],
- "com.google.android.play:integrity:aar": [
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar"
- ],
- "com.google.dagger:dagger": [
- "javax.inject:javax.inject"
- ],
- "com.google.dagger:dagger-compiler": [
- "com.google.code.findbugs:jsr305",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-producers",
- "com.google.dagger:dagger-spi",
- "com.google.googlejavaformat:google-java-format",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.squareup:javapoet",
- "javax.inject:javax.inject",
- "net.ltgt.gradle.incap:incap",
- "org.checkerframework:checker-compat-qual",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm"
- ],
- "com.google.dagger:dagger-producers": [
- "com.google.dagger:dagger",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "javax.inject:javax.inject",
- "org.checkerframework:checker-compat-qual"
- ],
- "com.google.dagger:dagger-spi": [
- "com.google.code.findbugs:jsr305",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-producers",
- "com.google.devtools.ksp:symbol-processing-api",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.squareup:javapoet",
- "javax.inject:javax.inject",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.google.devtools.ksp:symbol-processing-api": [
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.google.firebase:firebase-analytics:aar": [
- "com.google.android.gms:play-services-measurement-api:aar",
- "com.google.android.gms:play-services-measurement-sdk:aar",
- "com.google.android.gms:play-services-measurement:aar"
- ],
- "com.google.firebase:firebase-appcheck-debug:aar": [
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-appcheck-interop:aar": [
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-appcheck-playintegrity:aar": [
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.android.play:integrity:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-appcheck:aar": [
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-auth-interop:aar": [
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-common:aar"
- ],
- "com.google.firebase:firebase-auth-ktx:aar": [
- "com.google.firebase:firebase-auth:aar",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
- ],
- "com.google.firebase:firebase-auth:aar": [
- "androidx.collection:collection",
- "androidx.fragment:fragment:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-common-ktx:aar": [
- "androidx.annotation:annotation",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
- ],
- "com.google.firebase:firebase-common:aar": [
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-components:aar"
- ],
- "com.google.firebase:firebase-components:aar": [
- "androidx.annotation:annotation",
- "com.google.firebase:firebase-annotations"
- ],
- "com.google.firebase:firebase-crashlytics:aar": [
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-backend-cct:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-encoders-json:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-iid:aar",
- "com.google.firebase:firebase-measurement-connector:aar",
- "com.squareup.okhttp3:okhttp"
- ],
- "com.google.firebase:firebase-database-collection:aar": [
- "com.google.android.gms:play-services-base:aar"
- ],
- "com.google.firebase:firebase-encoders-json:aar": [
- "androidx.annotation:annotation"
- ],
- "com.google.firebase:firebase-firestore-ktx:aar": [
- "androidx.annotation:annotation",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-firestore:aar",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
- ],
- "com.google.firebase:firebase-firestore:aar": [
- "androidx.annotation:annotation",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-database-collection:aar",
- "com.google.firebase:protolite-well-known-types:aar",
- "com.squareup.okhttp:okhttp",
- "io.grpc:grpc-android:aar",
- "io.grpc:grpc-okhttp",
- "io.grpc:grpc-protobuf-lite",
- "io.grpc:grpc-stub"
- ],
- "com.google.firebase:firebase-iid-interop:aar": [
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.firebase:firebase-iid:aar": [
- "androidx.collection:collection",
- "androidx.core:core:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-stats:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar"
- ],
- "com.google.firebase:firebase-installations-interop:aar": [
- "com.google.android.gms:play-services-tasks:aar"
- ],
- "com.google.firebase:firebase-installations:aar": [
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-installations-interop:aar"
- ],
- "com.google.firebase:firebase-measurement-connector:aar": [
- "com.google.android.gms:play-services-basement:aar"
- ],
- "com.google.firebase:protolite-well-known-types:aar": [
- "com.google.protobuf:protobuf-javalite"
- ],
- "com.google.gms:google-services": [
- "com.google.android.gms:strict-version-matcher-plugin",
- "com.google.code.gson:gson",
- "com.google.guava:guava"
- ],
- "com.google.googlejavaformat:google-java-format": [
- "com.google.errorprone:javac-shaded",
- "com.google.guava:guava"
- ],
- "com.google.guava:guava": [
- "com.google.code.findbugs:jsr305",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:failureaccess",
- "com.google.guava:listenablefuture",
- "com.google.j2objc:j2objc-annotations",
- "org.checkerframework:checker-qual"
- ],
- "com.google.jimfs:jimfs": [
- "com.google.guava:guava"
- ],
- "com.google.protobuf:protobuf-java-util": [
- "com.google.code.gson:gson",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-java"
- ],
- "com.google.truth.extensions:truth-liteproto-extension": [
- "com.google.auto.value:auto-value-annotations",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "com.google.truth:truth",
- "org.checkerframework:checker-qual"
- ],
- "com.google.truth:truth": [
- "com.google.auto.value:auto-value-annotations",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "junit:junit",
- "org.checkerframework:checker-qual",
- "org.ow2.asm:asm"
- ],
- "com.squareup.moshi:moshi": [
- "com.squareup.okio:okio",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.squareup.moshi:moshi-kotlin": [
- "com.squareup.moshi:moshi",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.squareup.moshi:moshi-kotlin-codegen": [
- "com.google.auto.service:auto-service-annotations",
- "com.google.guava:guava",
- "com.squareup.moshi:moshi",
- "com.squareup:kotlinpoet",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.ow2.asm:asm"
- ],
- "com.squareup.okhttp3:mockwebserver": [
- "com.squareup.okhttp3:okhttp",
- "junit:junit"
- ],
- "com.squareup.okhttp3:okhttp": [
- "com.squareup.okio:okio",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "com.squareup.okhttp:okhttp": [
- "com.squareup.okio:okio"
- ],
- "com.squareup.okio:okio": [
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "com.squareup.retrofit2:converter-moshi": [
- "com.squareup.moshi:moshi",
- "com.squareup.retrofit2:retrofit"
- ],
- "com.squareup.retrofit2:retrofit": [
- "com.squareup.okhttp3:okhttp"
- ],
- "com.squareup.retrofit2:retrofit-mock": [
- "com.squareup.retrofit2:retrofit"
- ],
- "com.squareup:kotlinpoet": [
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "com.sun.istack:istack-commons-runtime": [
- "jakarta.activation:jakarta.activation-api"
- ],
- "io.grpc:grpc-android:aar": [
- "com.google.guava:guava",
- "io.grpc:grpc-core"
- ],
- "io.grpc:grpc-api": [
- "com.google.code.findbugs:jsr305",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "io.grpc:grpc-context"
- ],
- "io.grpc:grpc-core": [
- "com.google.android:annotations",
- "com.google.code.gson:gson",
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "io.grpc:grpc-api",
- "io.perfmark:perfmark-api",
- "org.codehaus.mojo:animal-sniffer-annotations"
- ],
- "io.grpc:grpc-okhttp": [
- "com.google.guava:guava",
- "com.squareup.okhttp:okhttp",
- "com.squareup.okio:okio",
- "io.grpc:grpc-core",
- "io.perfmark:perfmark-api"
- ],
- "io.grpc:grpc-protobuf-lite": [
- "com.google.code.findbugs:jsr305",
- "com.google.guava:guava",
- "com.google.protobuf:protobuf-javalite",
- "io.grpc:grpc-api"
- ],
- "io.grpc:grpc-stub": [
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "io.grpc:grpc-api"
- ],
- "jakarta.xml.bind:jakarta.xml.bind-api": [
- "jakarta.activation:jakarta.activation-api"
- ],
- "junit:junit": [
- "org.hamcrest:hamcrest-core"
- ],
- "net.java.dev.jna:jna-platform": [
- "net.java.dev.jna:jna"
- ],
- "nl.dionsegijn:konfetti:aar": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "org.apache.httpcomponents:httpclient": [
- "commons-codec:commons-codec",
- "commons-logging:commons-logging",
- "org.apache.httpcomponents:httpcore"
- ],
- "org.apache.httpcomponents:httpmime": [
- "org.apache.httpcomponents:httpclient"
- ],
- "org.bouncycastle:bcpkix-jdk15on": [
- "org.bouncycastle:bcprov-jdk15on"
- ],
- "org.eclipse.parsson:parsson": [
- "jakarta.json:jakarta.json-api"
- ],
- "org.glassfish.jaxb:jaxb-runtime": [
- "com.sun.istack:istack-commons-runtime",
- "com.sun.xml.fastinfoset:FastInfoset",
- "jakarta.activation:jakarta.activation-api",
- "jakarta.xml.bind:jakarta.xml.bind-api",
- "org.glassfish.jaxb:txw2",
- "org.jvnet.staxex:stax-ex"
- ],
- "org.hamcrest:hamcrest-integration": [
- "org.hamcrest:hamcrest-library"
- ],
- "org.hamcrest:hamcrest-library": [
- "org.hamcrest:hamcrest-core"
- ],
- "org.jetbrains.kotlin:kotlin-compiler-embeddable": [
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-daemon-embeddable",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-script-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "org.jetbrains.kotlin:kotlin-reflect": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib": [
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains:annotations"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
- ],
- "org.jetbrains.kotlin:kotlin-test": [
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-test-common"
- ],
- "org.jetbrains.kotlin:kotlin-test-annotations-common": [
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "org.jetbrains.kotlin:kotlin-test-common": [
- "org.jetbrains.kotlin:kotlin-stdlib-common"
- ],
- "org.jetbrains.kotlin:kotlin-test-junit": [
- "junit:junit",
- "org.jetbrains.kotlin:kotlin-test",
- "org.jetbrains.kotlin:kotlin-test-annotations-common"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-android": [
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-core": [
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava": [
- "com.google.guava:guava",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-test": [
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
- ],
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [
- "org.jetbrains.kotlin:kotlin-stdlib"
- ],
- "org.jvnet.staxex:stax-ex": [
- "jakarta.activation:jakarta.activation-api",
- "jakarta.xml.bind:jakarta.xml.bind-api"
- ],
- "org.mockito.kotlin:mockito-kotlin": [
- "org.mockito:mockito-core"
- ],
- "org.mockito:mockito-core": [
- "net.bytebuddy:byte-buddy",
- "net.bytebuddy:byte-buddy-agent",
- "org.objenesis:objenesis"
- ],
- "org.ow2.asm:asm-analysis": [
- "org.ow2.asm:asm-tree"
- ],
- "org.ow2.asm:asm-commons": [
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-tree"
- ],
- "org.ow2.asm:asm-tree": [
- "org.ow2.asm:asm"
- ],
- "org.ow2.asm:asm-util": [
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-tree"
- ],
- "org.robolectric:junit": [
- "org.robolectric:annotations",
- "org.robolectric:pluginapi",
- "org.robolectric:sandbox",
- "org.robolectric:shadowapi",
- "org.robolectric:utils-reflector"
- ],
- "org.robolectric:nativeruntime": [
- "com.google.guava:guava"
- ],
- "org.robolectric:pluginapi": [
- "org.robolectric:annotations"
- ],
- "org.robolectric:plugins-maven-dependency-resolver": [
- "com.google.guava:guava",
- "org.robolectric:pluginapi",
- "org.robolectric:utils"
- ],
- "org.robolectric:resources": [
- "com.google.guava:guava",
- "org.robolectric:annotations",
- "org.robolectric:pluginapi",
- "org.robolectric:utils"
- ],
- "org.robolectric:robolectric": [
- "androidx.test:monitor:aar",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "org.bouncycastle:bcprov-jdk15on",
- "org.robolectric:annotations",
- "org.robolectric:junit",
- "org.robolectric:pluginapi",
- "org.robolectric:plugins-maven-dependency-resolver",
- "org.robolectric:resources",
- "org.robolectric:sandbox",
- "org.robolectric:shadows-framework",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector"
- ],
- "org.robolectric:sandbox": [
- "com.google.guava:guava",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-commons",
- "org.robolectric:annotations",
- "org.robolectric:shadowapi",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector"
- ],
- "org.robolectric:shadowapi": [
- "org.robolectric:annotations",
- "org.robolectric:utils"
- ],
- "org.robolectric:shadows-framework": [
- "androidx.annotation:annotation",
- "androidx.test:monitor:aar",
- "com.almworks.sqlite4java:sqlite4java",
- "com.google.auto.value:auto-value-annotations",
- "com.google.errorprone:error_prone_annotations",
- "com.ibm.icu:icu4j",
- "org.robolectric:annotations",
- "org.robolectric:nativeruntime",
- "org.robolectric:pluginapi",
- "org.robolectric:resources",
- "org.robolectric:shadowapi",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector"
- ],
- "org.robolectric:utils": [
- "com.google.errorprone:error_prone_annotations",
- "com.google.guava:guava",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "org.robolectric:annotations",
- "org.robolectric:pluginapi"
- ],
- "org.robolectric:utils-reflector": [
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-commons",
- "org.ow2.asm:asm-util",
- "org.robolectric:utils"
- ],
- "org.smali:baksmali": [
- "com.beust:jcommander",
- "com.google.guava:guava",
- "org.smali:dexlib2",
- "org.smali:util"
- ],
- "org.smali:dexlib2": [
- "com.google.code.findbugs:jsr305",
- "com.google.guava:guava",
- "org.smali:util"
- ],
- "org.smali:util": [
- "com.beust:jcommander",
- "com.google.code.findbugs:jsr305",
- "com.google.guava:guava"
- ],
- "xerces:xercesImpl": [
- "xml-apis:xml-apis"
- ]
- },
- "packages": {
- "androidx.annotation:annotation": [
- "androidx.annotation"
- ],
- "androidx.arch.core:core-common": [
- "androidx.arch.core.internal",
- "androidx.arch.core.util"
- ],
- "androidx.collection:collection": [
- "androidx.collection"
- ],
- "androidx.compose.compiler:compiler": [
- "androidx.compose.compiler.plugins.kotlin",
- "androidx.compose.compiler.plugins.kotlin.analysis",
- "androidx.compose.compiler.plugins.kotlin.lower",
- "androidx.compose.compiler.plugins.kotlin.lower.decoys"
- ],
- "androidx.concurrent:concurrent-futures": [
- "androidx.concurrent.futures"
- ],
- "androidx.constraintlayout:constraintlayout-solver": [
- "androidx.constraintlayout.solver",
- "androidx.constraintlayout.solver.state",
- "androidx.constraintlayout.solver.state.helpers",
- "androidx.constraintlayout.solver.widgets",
- "androidx.constraintlayout.solver.widgets.analyzer"
- ],
- "androidx.databinding:databinding-common": [
- "androidx.databinding"
- ],
- "androidx.databinding:databinding-compiler": [
- "android.databinding.annotationprocessor",
- "android.databinding.tool",
- "android.databinding.tool.expr",
- "android.databinding.tool.reflection",
- "android.databinding.tool.reflection.annotation",
- "android.databinding.tool.solver",
- "android.databinding.tool.store",
- "android.databinding.tool.util",
- "android.databinding.tool.writer"
- ],
- "androidx.databinding:databinding-compiler-common": [
- "android.databinding.parser",
- "android.databinding.tool",
- "android.databinding.tool.expr",
- "android.databinding.tool.ext",
- "android.databinding.tool.processing",
- "android.databinding.tool.processing.scopes",
- "android.databinding.tool.store",
- "android.databinding.tool.util",
- "android.databinding.tool.writer"
- ],
- "androidx.lifecycle:lifecycle-common": [
- "androidx.lifecycle"
- ],
- "androidx.lifecycle:lifecycle-common-java8": [
- "androidx.lifecycle"
- ],
- "androidx.room:room-common": [
- "androidx.room"
- ],
- "com.almworks.sqlite4java:sqlite4java": [
- "com.almworks.sqlite4java",
- "javolution.util.stripped"
- ],
- "com.android.databinding:baseLibrary": [
- "android.databinding"
- ],
- "com.android.tools.analytics-library:protos": [
- "com.android.tools.build.gradle.internal.profile",
- "com.google.wireless.android.play.playlog.proto",
- "com.google.wireless.android.sdk.stats"
- ],
- "com.android.tools.analytics-library:shared": [
- "com.android.tools.analytics"
- ],
- "com.android.tools.analytics-library:tracker": [
- "com.android.tools.analytics"
- ],
- "com.android.tools.apkparser:apkanalyzer": [
- "com.android.tools.apk.analyzer",
- "com.android.tools.apk.analyzer.dex",
- "com.android.tools.apk.analyzer.dex.tree",
- "com.android.tools.apk.analyzer.internal",
- "com.android.tools.apk.analyzer.internal.rewriters"
- ],
- "com.android.tools.apkparser:binary-resources": [
- "com.google.devrel.gmscore.tools.apk.arsc"
- ],
- "com.android.tools.build.jetifier:jetifier-core": [
- "com.android.tools.build.jetifier.core",
- "com.android.tools.build.jetifier.core.config",
- "com.android.tools.build.jetifier.core.pom",
- "com.android.tools.build.jetifier.core.proguard",
- "com.android.tools.build.jetifier.core.rule",
- "com.android.tools.build.jetifier.core.type",
- "com.android.tools.build.jetifier.core.utils"
- ],
- "com.android.tools.build:aapt2-proto": [
- "android.aapt.pb.internal",
- "com.android.aapt"
- ],
- "com.android.tools.build:builder-model": [
- "com.android.build",
- "com.android.builder.model",
- "com.android.builder.model.level2",
- "com.android.builder.model.v2",
- "com.android.builder.model.v2.dsl",
- "com.android.builder.model.v2.ide",
- "com.android.builder.model.v2.models",
- "com.android.builder.model.v2.models.ndk"
- ],
- "com.android.tools.build:manifest-merger": [
- "com.android.manifmerger"
- ],
- "com.android.tools.ddms:ddmlib": [
- "com.android.commands.am",
- "com.android.ddmlib",
- "com.android.ddmlib.internal",
- "com.android.ddmlib.internal.commands",
- "com.android.ddmlib.internal.jdwp",
- "com.android.ddmlib.internal.jdwp.chunkhandler",
- "com.android.ddmlib.internal.jdwp.interceptor",
- "com.android.ddmlib.jdwp",
- "com.android.ddmlib.jdwp.packets",
- "com.android.ddmlib.log",
- "com.android.ddmlib.logcat",
- "com.android.ddmlib.testrunner",
- "com.android.ddmlib.utils",
- "com.android.incfs.install",
- "com.android.incfs.install.adb.ddmlib",
- "com.android.server.adb.protos"
- ],
- "com.android.tools.external.com-intellij:intellij-core": [
- "com.fasterxml.aalto",
- "com.fasterxml.aalto.async",
- "com.fasterxml.aalto.dom",
- "com.fasterxml.aalto.evt",
- "com.fasterxml.aalto.impl",
- "com.fasterxml.aalto.in",
- "com.fasterxml.aalto.io",
- "com.fasterxml.aalto.out",
- "com.fasterxml.aalto.sax",
- "com.fasterxml.aalto.stax",
- "com.fasterxml.aalto.util",
- "com.intellij",
- "com.intellij.codeInsight",
- "com.intellij.codeInsight.completion",
- "com.intellij.codeInsight.completion.proc",
- "com.intellij.codeInsight.completion.scope",
- "com.intellij.codeInsight.controlflow",
- "com.intellij.codeInsight.controlflow.impl",
- "com.intellij.codeInsight.daemon.impl",
- "com.intellij.codeInsight.daemon.impl.analysis",
- "com.intellij.codeInsight.documentation",
- "com.intellij.codeInsight.folding",
- "com.intellij.codeInsight.folding.impl",
- "com.intellij.codeInsight.generation",
- "com.intellij.codeInsight.highlighting",
- "com.intellij.codeInsight.javadoc",
- "com.intellij.codeInsight.runner",
- "com.intellij.codeInspection",
- "com.intellij.codeWithMe",
- "com.intellij.concurrency",
- "com.intellij.core",
- "com.intellij.diagnostic",
- "com.intellij.diagnostic.tracing",
- "com.intellij.execution",
- "com.intellij.execution.configurations",
- "com.intellij.execution.filters",
- "com.intellij.execution.process",
- "com.intellij.execution.rmi",
- "com.intellij.execution.rmi.ssl",
- "com.intellij.extapi.psi",
- "com.intellij.formatting",
- "com.intellij.icons",
- "com.intellij.ide",
- "com.intellij.ide.fileTemplates",
- "com.intellij.ide.highlighter",
- "com.intellij.ide.highlighter.custom",
- "com.intellij.ide.highlighter.custom.tokens",
- "com.intellij.ide.lightEdit",
- "com.intellij.ide.plugins",
- "com.intellij.ide.plugins.cl",
- "com.intellij.ide.util",
- "com.intellij.indentation",
- "com.intellij.injected.editor",
- "com.intellij.jna",
- "com.intellij.lang",
- "com.intellij.lang.folding",
- "com.intellij.lang.impl",
- "com.intellij.lang.injection",
- "com.intellij.lang.injection.general",
- "com.intellij.lang.java",
- "com.intellij.lang.java.beans",
- "com.intellij.lang.java.lexer",
- "com.intellij.lang.java.parser",
- "com.intellij.lang.java.source",
- "com.intellij.lang.jvm",
- "com.intellij.lang.jvm.annotation",
- "com.intellij.lang.jvm.facade",
- "com.intellij.lang.jvm.source",
- "com.intellij.lang.jvm.types",
- "com.intellij.lang.jvm.util",
- "com.intellij.lang.spi",
- "com.intellij.lexer",
- "com.intellij.mock",
- "com.intellij.model",
- "com.intellij.model.presentation",
- "com.intellij.model.psi",
- "com.intellij.model.psi.impl",
- "com.intellij.model.search",
- "com.intellij.navigation",
- "com.intellij.notebook.editor",
- "com.intellij.openapi",
- "com.intellij.openapi.application",
- "com.intellij.openapi.application.ex",
- "com.intellij.openapi.application.impl",
- "com.intellij.openapi.command",
- "com.intellij.openapi.command.impl",
- "com.intellij.openapi.command.undo",
- "com.intellij.openapi.components",
- "com.intellij.openapi.diagnostic",
- "com.intellij.openapi.diff",
- "com.intellij.openapi.diff.ex",
- "com.intellij.openapi.diff.impl",
- "com.intellij.openapi.diff.impl.fragments",
- "com.intellij.openapi.diff.impl.highlighting",
- "com.intellij.openapi.diff.impl.patch",
- "com.intellij.openapi.diff.impl.processing",
- "com.intellij.openapi.diff.impl.string",
- "com.intellij.openapi.diff.impl.util",
- "com.intellij.openapi.editor",
- "com.intellij.openapi.editor.actionSystem",
- "com.intellij.openapi.editor.colors",
- "com.intellij.openapi.editor.event",
- "com.intellij.openapi.editor.ex",
- "com.intellij.openapi.editor.ex.util",
- "com.intellij.openapi.editor.impl",
- "com.intellij.openapi.editor.impl.event",
- "com.intellij.openapi.editor.markup",
- "com.intellij.openapi.extensions",
- "com.intellij.openapi.extensions.impl",
- "com.intellij.openapi.fileEditor",
- "com.intellij.openapi.fileEditor.impl",
- "com.intellij.openapi.fileTypes",
- "com.intellij.openapi.fileTypes.ex",
- "com.intellij.openapi.fileTypes.impl",
- "com.intellij.openapi.module",
- "com.intellij.openapi.module.impl",
- "com.intellij.openapi.options",
- "com.intellij.openapi.progress",
- "com.intellij.openapi.progress.impl",
- "com.intellij.openapi.progress.util",
- "com.intellij.openapi.project",
- "com.intellij.openapi.projectRoots",
- "com.intellij.openapi.roots",
- "com.intellij.openapi.roots.impl",
- "com.intellij.openapi.startup",
- "com.intellij.openapi.ui",
- "com.intellij.openapi.util",
- "com.intellij.openapi.util.io",
- "com.intellij.openapi.util.io.win32",
- "com.intellij.openapi.util.objectTree",
- "com.intellij.openapi.util.registry",
- "com.intellij.openapi.util.text",
- "com.intellij.openapi.vfs",
- "com.intellij.openapi.vfs.encoding",
- "com.intellij.openapi.vfs.ex",
- "com.intellij.openapi.vfs.ex.http",
- "com.intellij.openapi.vfs.impl",
- "com.intellij.openapi.vfs.impl.http",
- "com.intellij.openapi.vfs.impl.jar",
- "com.intellij.openapi.vfs.local",
- "com.intellij.openapi.vfs.newvfs",
- "com.intellij.openapi.vfs.newvfs.events",
- "com.intellij.openapi.vfs.pointers",
- "com.intellij.openapi.wm.ex",
- "com.intellij.patterns",
- "com.intellij.patterns.compiler",
- "com.intellij.platform.util",
- "com.intellij.platform.util.plugins",
- "com.intellij.pom",
- "com.intellij.pom.core.impl",
- "com.intellij.pom.event",
- "com.intellij.pom.impl",
- "com.intellij.pom.java",
- "com.intellij.pom.references",
- "com.intellij.pom.tree",
- "com.intellij.pom.tree.events",
- "com.intellij.pom.tree.events.impl",
- "com.intellij.pom.wrappers",
- "com.intellij.psi",
- "com.intellij.psi.augment",
- "com.intellij.psi.codeStyle",
- "com.intellij.psi.compiled",
- "com.intellij.psi.controlFlow",
- "com.intellij.psi.css",
- "com.intellij.psi.filters",
- "com.intellij.psi.filters.classes",
- "com.intellij.psi.filters.element",
- "com.intellij.psi.filters.position",
- "com.intellij.psi.impl",
- "com.intellij.psi.impl.cache",
- "com.intellij.psi.impl.compiled",
- "com.intellij.psi.impl.file",
- "com.intellij.psi.impl.file.impl",
- "com.intellij.psi.impl.java.stubs",
- "com.intellij.psi.impl.java.stubs.impl",
- "com.intellij.psi.impl.java.stubs.index",
- "com.intellij.psi.impl.light",
- "com.intellij.psi.impl.meta",
- "com.intellij.psi.impl.search",
- "com.intellij.psi.impl.smartPointers",
- "com.intellij.psi.impl.source",
- "com.intellij.psi.impl.source.codeStyle",
- "com.intellij.psi.impl.source.javadoc",
- "com.intellij.psi.impl.source.resolve",
- "com.intellij.psi.impl.source.resolve.graphInference",
- "com.intellij.psi.impl.source.resolve.graphInference.constraints",
- "com.intellij.psi.impl.source.resolve.reference",
- "com.intellij.psi.impl.source.resolve.reference.impl",
- "com.intellij.psi.impl.source.resolve.reference.impl.manipulators",
- "com.intellij.psi.impl.source.resolve.reference.impl.providers",
- "com.intellij.psi.impl.source.tree",
- "com.intellij.psi.impl.source.tree.injected",
- "com.intellij.psi.impl.source.tree.java",
- "com.intellij.psi.infos",
- "com.intellij.psi.javadoc",
- "com.intellij.psi.meta",
- "com.intellij.psi.presentation.java",
- "com.intellij.psi.scope",
- "com.intellij.psi.scope.conflictResolvers",
- "com.intellij.psi.scope.processor",
- "com.intellij.psi.scope.util",
- "com.intellij.psi.search",
- "com.intellij.psi.search.impl",
- "com.intellij.psi.search.searches",
- "com.intellij.psi.stub",
- "com.intellij.psi.stubs",
- "com.intellij.psi.targets",
- "com.intellij.psi.templateLanguages",
- "com.intellij.psi.text",
- "com.intellij.psi.tree",
- "com.intellij.psi.tree.java",
- "com.intellij.psi.util",
- "com.intellij.refactoring.rename",
- "com.intellij.refactoring.util",
- "com.intellij.reference",
- "com.intellij.security",
- "com.intellij.serialization",
- "com.intellij.serviceContainer",
- "com.intellij.testFramework",
- "com.intellij.testIntegration",
- "com.intellij.ui",
- "com.intellij.ui.icons",
- "com.intellij.usageView",
- "com.intellij.util",
- "com.intellij.util.cls",
- "com.intellij.util.codeInsight",
- "com.intellij.util.concurrency",
- "com.intellij.util.concurrency.annotations",
- "com.intellij.util.containers",
- "com.intellij.util.containers.hash",
- "com.intellij.util.diff",
- "com.intellij.util.download",
- "com.intellij.util.download.impl",
- "com.intellij.util.enumeration",
- "com.intellij.util.execution",
- "com.intellij.util.fmap",
- "com.intellij.util.graph",
- "com.intellij.util.graph.impl",
- "com.intellij.util.indexing",
- "com.intellij.util.indexing.containers",
- "com.intellij.util.indexing.flavor",
- "com.intellij.util.indexing.impl",
- "com.intellij.util.indexing.impl.forward",
- "com.intellij.util.io",
- "com.intellij.util.io.externalizer",
- "com.intellij.util.io.keyStorage",
- "com.intellij.util.io.storage",
- "com.intellij.util.io.zip",
- "com.intellij.util.keyFMap",
- "com.intellij.util.lang",
- "com.intellij.util.lang.fastutil",
- "com.intellij.util.loader",
- "com.intellij.util.messages",
- "com.intellij.util.messages.impl",
- "com.intellij.util.pico",
- "com.intellij.util.profiling",
- "com.intellij.util.properties",
- "com.intellij.util.ref",
- "com.intellij.util.system",
- "com.intellij.util.text",
- "com.intellij.util.ui",
- "com.intellij.util.xmlb",
- "com.intellij.util.xmlb.annotations",
- "com.intellij.xml",
- "com.intellij.xml.util",
- "com.sun.jna",
- "com.sun.jna.internal",
- "com.sun.jna.platform",
- "com.sun.jna.platform.dnd",
- "com.sun.jna.platform.linux",
- "com.sun.jna.platform.mac",
- "com.sun.jna.platform.unix",
- "com.sun.jna.platform.unix.aix",
- "com.sun.jna.platform.unix.solaris",
- "com.sun.jna.platform.win32",
- "com.sun.jna.platform.win32.COM",
- "com.sun.jna.platform.win32.COM.tlb",
- "com.sun.jna.platform.win32.COM.tlb.imp",
- "com.sun.jna.platform.win32.COM.util",
- "com.sun.jna.platform.win32.COM.util.annotation",
- "com.sun.jna.platform.wince",
- "com.sun.jna.ptr",
- "com.sun.jna.win32",
- "it.unimi.dsi.fastutil",
- "it.unimi.dsi.fastutil.booleans",
- "it.unimi.dsi.fastutil.bytes",
- "it.unimi.dsi.fastutil.chars",
- "it.unimi.dsi.fastutil.doubles",
- "it.unimi.dsi.fastutil.floats",
- "it.unimi.dsi.fastutil.ints",
- "it.unimi.dsi.fastutil.io",
- "it.unimi.dsi.fastutil.longs",
- "it.unimi.dsi.fastutil.objects",
- "it.unimi.dsi.fastutil.shorts",
- "kotlinx.coroutines",
- "kotlinx.coroutines.channels",
- "kotlinx.coroutines.debug",
- "kotlinx.coroutines.debug.internal",
- "kotlinx.coroutines.flow",
- "kotlinx.coroutines.flow.internal",
- "kotlinx.coroutines.future",
- "kotlinx.coroutines.internal",
- "kotlinx.coroutines.intrinsics",
- "kotlinx.coroutines.scheduling",
- "kotlinx.coroutines.selects",
- "kotlinx.coroutines.stream",
- "kotlinx.coroutines.sync",
- "kotlinx.coroutines.test",
- "kotlinx.coroutines.time",
- "net.jpountz.lz4",
- "net.jpountz.util",
- "net.jpountz.xxhash",
- "net.n3.nanoxml",
- "one.util.streamex",
- "org.apache.commons.compress",
- "org.apache.commons.compress.archivers",
- "org.apache.commons.compress.archivers.ar",
- "org.apache.commons.compress.archivers.arj",
- "org.apache.commons.compress.archivers.cpio",
- "org.apache.commons.compress.archivers.dump",
- "org.apache.commons.compress.archivers.examples",
- "org.apache.commons.compress.archivers.jar",
- "org.apache.commons.compress.archivers.sevenz",
- "org.apache.commons.compress.archivers.tar",
- "org.apache.commons.compress.archivers.zip",
- "org.apache.commons.compress.changes",
- "org.apache.commons.compress.compressors",
- "org.apache.commons.compress.compressors.brotli",
- "org.apache.commons.compress.compressors.bzip2",
- "org.apache.commons.compress.compressors.deflate",
- "org.apache.commons.compress.compressors.deflate64",
- "org.apache.commons.compress.compressors.gzip",
- "org.apache.commons.compress.compressors.lz4",
- "org.apache.commons.compress.compressors.lz77support",
- "org.apache.commons.compress.compressors.lzma",
- "org.apache.commons.compress.compressors.lzw",
- "org.apache.commons.compress.compressors.pack200",
- "org.apache.commons.compress.compressors.snappy",
- "org.apache.commons.compress.compressors.xz",
- "org.apache.commons.compress.compressors.z",
- "org.apache.commons.compress.compressors.zstandard",
- "org.apache.commons.compress.harmony.archive.internal.nls",
- "org.apache.commons.compress.harmony.pack200",
- "org.apache.commons.compress.harmony.unpack200",
- "org.apache.commons.compress.harmony.unpack200.bytecode",
- "org.apache.commons.compress.harmony.unpack200.bytecode.forms",
- "org.apache.commons.compress.java.util.jar",
- "org.apache.commons.compress.parallel",
- "org.apache.commons.compress.utils",
- "org.apache.log4j",
- "org.apache.log4j.chainsaw",
- "org.apache.log4j.config",
- "org.apache.log4j.helpers",
- "org.apache.log4j.jdbc",
- "org.apache.log4j.jmx",
- "org.apache.log4j.lf5",
- "org.apache.log4j.lf5.util",
- "org.apache.log4j.lf5.viewer",
- "org.apache.log4j.lf5.viewer.categoryexplorer",
- "org.apache.log4j.lf5.viewer.configure",
- "org.apache.log4j.nt",
- "org.apache.log4j.or",
- "org.apache.log4j.or.jms",
- "org.apache.log4j.or.sax",
- "org.apache.log4j.pattern",
- "org.apache.log4j.rewrite",
- "org.apache.log4j.spi",
- "org.apache.log4j.varia",
- "org.apache.log4j.xml",
- "org.apache.oro.io",
- "org.apache.oro.text",
- "org.apache.oro.text.awk",
- "org.apache.oro.text.perl",
- "org.apache.oro.text.regex",
- "org.apache.oro.util",
- "org.codehaus.stax2",
- "org.codehaus.stax2.evt",
- "org.codehaus.stax2.io",
- "org.codehaus.stax2.osgi",
- "org.codehaus.stax2.ri",
- "org.codehaus.stax2.ri.dom",
- "org.codehaus.stax2.ri.evt",
- "org.codehaus.stax2.ri.typed",
- "org.codehaus.stax2.typed",
- "org.codehaus.stax2.util",
- "org.codehaus.stax2.validation",
- "org.intellij.lang.annotations",
- "org.jdom",
- "org.jdom.adapters",
- "org.jdom.filter",
- "org.jdom.filter2",
- "org.jdom.input",
- "org.jdom.input.sax",
- "org.jdom.input.stax",
- "org.jdom.internal",
- "org.jdom.located",
- "org.jdom.output",
- "org.jdom.output.support",
- "org.jdom.transform",
- "org.jdom.util",
- "org.jdom.xpath",
- "org.jdom.xpath.jaxen",
- "org.jdom.xpath.util",
- "org.jetbrains.annotations",
- "org.jetbrains.concurrency",
- "org.jetbrains.ide",
- "org.jetbrains.jps.model",
- "org.jetbrains.jps.model.artifact",
- "org.jetbrains.jps.model.artifact.elements",
- "org.jetbrains.jps.model.artifact.elements.ex",
- "org.jetbrains.jps.model.artifact.impl",
- "org.jetbrains.jps.model.artifact.impl.elements",
- "org.jetbrains.jps.model.ex",
- "org.jetbrains.jps.model.fileTypes",
- "org.jetbrains.jps.model.fileTypes.impl",
- "org.jetbrains.jps.model.impl",
- "org.jetbrains.jps.model.impl.runConfiguration",
- "org.jetbrains.jps.model.jarRepository",
- "org.jetbrains.jps.model.jarRepository.impl",
- "org.jetbrains.jps.model.java",
- "org.jetbrains.jps.model.java.compiler",
- "org.jetbrains.jps.model.java.impl",
- "org.jetbrains.jps.model.java.impl.compiler",
- "org.jetbrains.jps.model.java.impl.runConfiguration",
- "org.jetbrains.jps.model.java.runConfiguration",
- "org.jetbrains.jps.model.library",
- "org.jetbrains.jps.model.library.impl",
- "org.jetbrains.jps.model.library.impl.sdk",
- "org.jetbrains.jps.model.library.sdk",
- "org.jetbrains.jps.model.module",
- "org.jetbrains.jps.model.module.impl",
- "org.jetbrains.jps.model.runConfiguration",
- "org.jetbrains.jps.model.serialization",
- "org.jetbrains.jps.plugin",
- "org.jetbrains.jps.service",
- "org.jetbrains.jps.service.impl",
- "org.jetbrains.jps.util",
- "org.jetbrains.org.objectweb.asm",
- "org.jetbrains.org.objectweb.asm.commons",
- "org.jetbrains.org.objectweb.asm.signature",
- "org.jetbrains.org.objectweb.asm.tree",
- "org.jetbrains.org.objectweb.asm.tree.analysis",
- "org.jetbrains.org.objectweb.asm.util",
- "org.picocontainer",
- "org.picocontainer.defaults"
- ],
- "com.android.tools.external.com-intellij:kotlin-compiler": [
- "com.google.gwt.dev.js",
- "com.google.gwt.dev.js.parserExceptions",
- "com.google.gwt.dev.js.rhino",
- "com.intellij.util.io",
- "javaslang",
- "javaslang.collection",
- "javaslang.concurrent",
- "javaslang.control",
- "javaslang.match",
- "javaslang.match.annotation",
- "javaslang.match.generator",
- "javaslang.match.model",
- "kotlin.script.dependencies",
- "kotlin.script.experimental.annotations",
- "kotlin.script.experimental.api",
- "kotlin.script.experimental.dependencies",
- "kotlin.script.experimental.host",
- "kotlin.script.experimental.impl",
- "kotlin.script.experimental.jvm",
- "kotlin.script.experimental.jvm.compat",
- "kotlin.script.experimental.jvm.impl",
- "kotlin.script.experimental.jvm.util",
- "kotlin.script.experimental.location",
- "kotlin.script.experimental.util",
- "kotlin.script.extensions",
- "kotlin.script.templates",
- "kotlin.script.templates.standard",
- "net.rubygrapefruit.platform",
- "net.rubygrapefruit.platform.internal",
- "net.rubygrapefruit.platform.internal.jni",
- "org.jetbrains.annotations",
- "org.jetbrains.kotlin",
- "org.jetbrains.kotlin.analyzer",
- "org.jetbrains.kotlin.analyzer.common",
- "org.jetbrains.kotlin.asJava",
- "org.jetbrains.kotlin.asJava.builder",
- "org.jetbrains.kotlin.asJava.classes",
- "org.jetbrains.kotlin.asJava.elements",
- "org.jetbrains.kotlin.asJava.finder",
- "org.jetbrains.kotlin.backend.common",
- "org.jetbrains.kotlin.backend.common.bridges",
- "org.jetbrains.kotlin.backend.common.descriptors",
- "org.jetbrains.kotlin.backend.common.extensions",
- "org.jetbrains.kotlin.backend.common.ir",
- "org.jetbrains.kotlin.backend.common.lower",
- "org.jetbrains.kotlin.backend.common.lower.inline",
- "org.jetbrains.kotlin.backend.common.lower.loops",
- "org.jetbrains.kotlin.backend.common.lower.loops.handlers",
- "org.jetbrains.kotlin.backend.common.lower.matchers",
- "org.jetbrains.kotlin.backend.common.lower.optimizations",
- "org.jetbrains.kotlin.backend.common.output",
- "org.jetbrains.kotlin.backend.common.overrides",
- "org.jetbrains.kotlin.backend.common.phaser",
- "org.jetbrains.kotlin.backend.common.psi",
- "org.jetbrains.kotlin.backend.common.serialization",
- "org.jetbrains.kotlin.backend.common.serialization.encodings",
- "org.jetbrains.kotlin.backend.common.serialization.linkerissues",
- "org.jetbrains.kotlin.backend.common.serialization.mangle",
- "org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor",
- "org.jetbrains.kotlin.backend.common.serialization.mangle.ir",
- "org.jetbrains.kotlin.backend.common.serialization.metadata",
- "org.jetbrains.kotlin.backend.common.serialization.metadata.impl",
- "org.jetbrains.kotlin.backend.common.serialization.proto",
- "org.jetbrains.kotlin.backend.common.serialization.signature",
- "org.jetbrains.kotlin.backend.jvm",
- "org.jetbrains.kotlin.backend.jvm.caches",
- "org.jetbrains.kotlin.backend.jvm.codegen",
- "org.jetbrains.kotlin.backend.jvm.intrinsics",
- "org.jetbrains.kotlin.backend.jvm.ir",
- "org.jetbrains.kotlin.backend.jvm.lower",
- "org.jetbrains.kotlin.backend.jvm.lower.indy",
- "org.jetbrains.kotlin.backend.jvm.mapping",
- "org.jetbrains.kotlin.backend.jvm.metadata",
- "org.jetbrains.kotlin.backend.jvm.serialization",
- "org.jetbrains.kotlin.backend.jvm.serialization.proto",
- "org.jetbrains.kotlin.build",
- "org.jetbrains.kotlin.build.report",
- "org.jetbrains.kotlin.build.report.metrics",
- "org.jetbrains.kotlin.builtins",
- "org.jetbrains.kotlin.builtins.functions",
- "org.jetbrains.kotlin.builtins.jvm",
- "org.jetbrains.kotlin.builtins.konan",
- "org.jetbrains.kotlin.cfg",
- "org.jetbrains.kotlin.cfg.pseudocode",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.eval",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.special",
- "org.jetbrains.kotlin.cfg.pseudocodeTraverser",
- "org.jetbrains.kotlin.cfg.variable",
- "org.jetbrains.kotlin.checkers",
- "org.jetbrains.kotlin.checkers.diagnostics",
- "org.jetbrains.kotlin.checkers.diagnostics.factories",
- "org.jetbrains.kotlin.checkers.utils",
- "org.jetbrains.kotlin.cli.common",
- "org.jetbrains.kotlin.cli.common.arguments",
- "org.jetbrains.kotlin.cli.common.config",
- "org.jetbrains.kotlin.cli.common.environment",
- "org.jetbrains.kotlin.cli.common.extensions",
- "org.jetbrains.kotlin.cli.common.fir",
- "org.jetbrains.kotlin.cli.common.messages",
- "org.jetbrains.kotlin.cli.common.modules",
- "org.jetbrains.kotlin.cli.common.output",
- "org.jetbrains.kotlin.cli.common.profiling",
- "org.jetbrains.kotlin.cli.common.repl",
- "org.jetbrains.kotlin.cli.js",
- "org.jetbrains.kotlin.cli.js.dce",
- "org.jetbrains.kotlin.cli.js.internal",
- "org.jetbrains.kotlin.cli.jvm",
- "org.jetbrains.kotlin.cli.jvm.compiler",
- "org.jetbrains.kotlin.cli.jvm.compiler.jarfs",
- "org.jetbrains.kotlin.cli.jvm.config",
- "org.jetbrains.kotlin.cli.jvm.index",
- "org.jetbrains.kotlin.cli.jvm.javac",
- "org.jetbrains.kotlin.cli.jvm.modules",
- "org.jetbrains.kotlin.cli.jvm.plugins",
- "org.jetbrains.kotlin.cli.metadata",
- "org.jetbrains.kotlin.codegen",
- "org.jetbrains.kotlin.codegen.binding",
- "org.jetbrains.kotlin.codegen.context",
- "org.jetbrains.kotlin.codegen.coroutines",
- "org.jetbrains.kotlin.codegen.extensions",
- "org.jetbrains.kotlin.codegen.inline",
- "org.jetbrains.kotlin.codegen.inline.coroutines",
- "org.jetbrains.kotlin.codegen.intrinsics",
- "org.jetbrains.kotlin.codegen.optimization",
- "org.jetbrains.kotlin.codegen.optimization.boxing",
- "org.jetbrains.kotlin.codegen.optimization.common",
- "org.jetbrains.kotlin.codegen.optimization.fixStack",
- "org.jetbrains.kotlin.codegen.optimization.nullCheck",
- "org.jetbrains.kotlin.codegen.optimization.temporaryVals",
- "org.jetbrains.kotlin.codegen.optimization.transformer",
- "org.jetbrains.kotlin.codegen.pseudoInsns",
- "org.jetbrains.kotlin.codegen.range",
- "org.jetbrains.kotlin.codegen.range.comparison",
- "org.jetbrains.kotlin.codegen.range.forLoop",
- "org.jetbrains.kotlin.codegen.range.inExpression",
- "org.jetbrains.kotlin.codegen.serialization",
- "org.jetbrains.kotlin.codegen.signature",
- "org.jetbrains.kotlin.codegen.state",
- "org.jetbrains.kotlin.codegen.when",
- "org.jetbrains.kotlin.compiler.plugin",
- "org.jetbrains.kotlin.compilerRunner",
- "org.jetbrains.kotlin.config",
- "org.jetbrains.kotlin.container",
- "org.jetbrains.kotlin.context",
- "org.jetbrains.kotlin.contracts",
- "org.jetbrains.kotlin.contracts.description",
- "org.jetbrains.kotlin.contracts.description.expressions",
- "org.jetbrains.kotlin.contracts.interpretation",
- "org.jetbrains.kotlin.contracts.model",
- "org.jetbrains.kotlin.contracts.model.functors",
- "org.jetbrains.kotlin.contracts.model.structure",
- "org.jetbrains.kotlin.contracts.model.visitors",
- "org.jetbrains.kotlin.contracts.parsing",
- "org.jetbrains.kotlin.contracts.parsing.effects",
- "org.jetbrains.kotlin.coroutines",
- "org.jetbrains.kotlin.daemon.client",
- "org.jetbrains.kotlin.daemon.client.impls",
- "org.jetbrains.kotlin.daemon.common",
- "org.jetbrains.kotlin.descriptors",
- "org.jetbrains.kotlin.descriptors.annotations",
- "org.jetbrains.kotlin.descriptors.deserialization",
- "org.jetbrains.kotlin.descriptors.impl",
- "org.jetbrains.kotlin.descriptors.java",
- "org.jetbrains.kotlin.descriptors.konan",
- "org.jetbrains.kotlin.descriptors.konan.impl",
- "org.jetbrains.kotlin.descriptors.runtime.components",
- "org.jetbrains.kotlin.descriptors.runtime.structure",
- "org.jetbrains.kotlin.descriptors.synthetic",
- "org.jetbrains.kotlin.diagnostics",
- "org.jetbrains.kotlin.diagnostics.impl",
- "org.jetbrains.kotlin.diagnostics.rendering",
- "org.jetbrains.kotlin.extensions",
- "org.jetbrains.kotlin.extensions.internal",
- "org.jetbrains.kotlin.fileClasses",
- "org.jetbrains.kotlin.fir",
- "org.jetbrains.kotlin.fir.analysis",
- "org.jetbrains.kotlin.fir.analysis.cfa",
- "org.jetbrains.kotlin.fir.analysis.cfa.util",
- "org.jetbrains.kotlin.fir.analysis.checkers",
- "org.jetbrains.kotlin.fir.analysis.checkers.cfa",
- "org.jetbrains.kotlin.fir.analysis.checkers.context",
- "org.jetbrains.kotlin.fir.analysis.checkers.declaration",
- "org.jetbrains.kotlin.fir.analysis.checkers.expression",
- "org.jetbrains.kotlin.fir.analysis.checkers.extended",
- "org.jetbrains.kotlin.fir.analysis.checkers.syntax",
- "org.jetbrains.kotlin.fir.analysis.checkers.type",
- "org.jetbrains.kotlin.fir.analysis.collectors",
- "org.jetbrains.kotlin.fir.analysis.collectors.components",
- "org.jetbrains.kotlin.fir.analysis.diagnostics",
- "org.jetbrains.kotlin.fir.analysis.diagnostics.jvm",
- "org.jetbrains.kotlin.fir.analysis.extensions",
- "org.jetbrains.kotlin.fir.analysis.jvm",
- "org.jetbrains.kotlin.fir.analysis.jvm.checkers",
- "org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration",
- "org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression",
- "org.jetbrains.kotlin.fir.backend",
- "org.jetbrains.kotlin.fir.backend.evaluate",
- "org.jetbrains.kotlin.fir.backend.generators",
- "org.jetbrains.kotlin.fir.backend.jvm",
- "org.jetbrains.kotlin.fir.builder",
- "org.jetbrains.kotlin.fir.caches",
- "org.jetbrains.kotlin.fir.checkers",
- "org.jetbrains.kotlin.fir.contracts",
- "org.jetbrains.kotlin.fir.contracts.builder",
- "org.jetbrains.kotlin.fir.contracts.description",
- "org.jetbrains.kotlin.fir.contracts.impl",
- "org.jetbrains.kotlin.fir.declarations",
- "org.jetbrains.kotlin.fir.declarations.builder",
- "org.jetbrains.kotlin.fir.declarations.comparators",
- "org.jetbrains.kotlin.fir.declarations.impl",
- "org.jetbrains.kotlin.fir.declarations.synthetic",
- "org.jetbrains.kotlin.fir.declarations.utils",
- "org.jetbrains.kotlin.fir.descriptors",
- "org.jetbrains.kotlin.fir.deserialization",
- "org.jetbrains.kotlin.fir.diagnostics",
- "org.jetbrains.kotlin.fir.expressions",
- "org.jetbrains.kotlin.fir.expressions.builder",
- "org.jetbrains.kotlin.fir.expressions.impl",
- "org.jetbrains.kotlin.fir.extensions",
- "org.jetbrains.kotlin.fir.extensions.predicate",
- "org.jetbrains.kotlin.fir.impl",
- "org.jetbrains.kotlin.fir.java",
- "org.jetbrains.kotlin.fir.java.declarations",
- "org.jetbrains.kotlin.fir.java.deserialization",
- "org.jetbrains.kotlin.fir.java.enhancement",
- "org.jetbrains.kotlin.fir.java.scopes",
- "org.jetbrains.kotlin.fir.java.symbols",
- "org.jetbrains.kotlin.fir.lazy",
- "org.jetbrains.kotlin.fir.pipeline",
- "org.jetbrains.kotlin.fir.references",
- "org.jetbrains.kotlin.fir.references.builder",
- "org.jetbrains.kotlin.fir.references.impl",
- "org.jetbrains.kotlin.fir.resolve",
- "org.jetbrains.kotlin.fir.resolve.calls",
- "org.jetbrains.kotlin.fir.resolve.calls.jvm",
- "org.jetbrains.kotlin.fir.resolve.calls.tower",
- "org.jetbrains.kotlin.fir.resolve.dfa",
- "org.jetbrains.kotlin.fir.resolve.dfa.cfg",
- "org.jetbrains.kotlin.fir.resolve.dfa.contracts",
- "org.jetbrains.kotlin.fir.resolve.diagnostics",
- "org.jetbrains.kotlin.fir.resolve.inference",
- "org.jetbrains.kotlin.fir.resolve.inference.model",
- "org.jetbrains.kotlin.fir.resolve.providers",
- "org.jetbrains.kotlin.fir.resolve.providers.impl",
- "org.jetbrains.kotlin.fir.resolve.scopes",
- "org.jetbrains.kotlin.fir.resolve.substitution",
- "org.jetbrains.kotlin.fir.resolve.transformers",
- "org.jetbrains.kotlin.fir.resolve.transformers.body.resolve",
- "org.jetbrains.kotlin.fir.resolve.transformers.contracts",
- "org.jetbrains.kotlin.fir.resolve.transformers.plugin",
- "org.jetbrains.kotlin.fir.scopes",
- "org.jetbrains.kotlin.fir.scopes.impl",
- "org.jetbrains.kotlin.fir.scopes.jvm",
- "org.jetbrains.kotlin.fir.serialization",
- "org.jetbrains.kotlin.fir.serialization.constant",
- "org.jetbrains.kotlin.fir.session",
- "org.jetbrains.kotlin.fir.session.environment",
- "org.jetbrains.kotlin.fir.signaturer",
- "org.jetbrains.kotlin.fir.symbols",
- "org.jetbrains.kotlin.fir.symbols.impl",
- "org.jetbrains.kotlin.fir.types",
- "org.jetbrains.kotlin.fir.types.builder",
- "org.jetbrains.kotlin.fir.types.impl",
- "org.jetbrains.kotlin.fir.types.jvm",
- "org.jetbrains.kotlin.fir.util",
- "org.jetbrains.kotlin.fir.utils",
- "org.jetbrains.kotlin.fir.visitors",
- "org.jetbrains.kotlin.frontend.di",
- "org.jetbrains.kotlin.frontend.java.di",
- "org.jetbrains.kotlin.frontend.js.di",
- "org.jetbrains.kotlin.idea",
- "org.jetbrains.kotlin.idea.references",
- "org.jetbrains.kotlin.incremental",
- "org.jetbrains.kotlin.incremental.components",
- "org.jetbrains.kotlin.incremental.js",
- "org.jetbrains.kotlin.incremental.storage",
- "org.jetbrains.kotlin.inline",
- "org.jetbrains.kotlin.ir",
- "org.jetbrains.kotlin.ir.backend.jvm",
- "org.jetbrains.kotlin.ir.backend.jvm.serialization",
- "org.jetbrains.kotlin.ir.builders",
- "org.jetbrains.kotlin.ir.builders.declarations",
- "org.jetbrains.kotlin.ir.declarations",
- "org.jetbrains.kotlin.ir.declarations.impl",
- "org.jetbrains.kotlin.ir.declarations.lazy",
- "org.jetbrains.kotlin.ir.declarations.persistent",
- "org.jetbrains.kotlin.ir.declarations.persistent.carriers",
- "org.jetbrains.kotlin.ir.descriptors",
- "org.jetbrains.kotlin.ir.expressions",
- "org.jetbrains.kotlin.ir.expressions.impl",
- "org.jetbrains.kotlin.ir.expressions.persistent",
- "org.jetbrains.kotlin.ir.interpreter",
- "org.jetbrains.kotlin.ir.interpreter.builtins",
- "org.jetbrains.kotlin.ir.interpreter.checker",
- "org.jetbrains.kotlin.ir.interpreter.exceptions",
- "org.jetbrains.kotlin.ir.interpreter.intrinsics",
- "org.jetbrains.kotlin.ir.interpreter.proxy",
- "org.jetbrains.kotlin.ir.interpreter.proxy.reflection",
- "org.jetbrains.kotlin.ir.interpreter.stack",
- "org.jetbrains.kotlin.ir.interpreter.state",
- "org.jetbrains.kotlin.ir.interpreter.state.reflection",
- "org.jetbrains.kotlin.ir.linkage",
- "org.jetbrains.kotlin.ir.overrides",
- "org.jetbrains.kotlin.ir.serialization",
- "org.jetbrains.kotlin.ir.symbols",
- "org.jetbrains.kotlin.ir.symbols.impl",
- "org.jetbrains.kotlin.ir.types",
- "org.jetbrains.kotlin.ir.types.impl",
- "org.jetbrains.kotlin.ir.util",
- "org.jetbrains.kotlin.ir.visitors",
- "org.jetbrains.kotlin.js",
- "org.jetbrains.kotlin.js.analyze",
- "org.jetbrains.kotlin.js.analyzer",
- "org.jetbrains.kotlin.js.backend",
- "org.jetbrains.kotlin.js.backend.ast",
- "org.jetbrains.kotlin.js.backend.ast.metadata",
- "org.jetbrains.kotlin.js.common",
- "org.jetbrains.kotlin.js.config",
- "org.jetbrains.kotlin.js.coroutine",
- "org.jetbrains.kotlin.js.descriptorUtils",
- "org.jetbrains.kotlin.js.facade",
- "org.jetbrains.kotlin.js.facade.exceptions",
- "org.jetbrains.kotlin.js.inline",
- "org.jetbrains.kotlin.js.inline.clean",
- "org.jetbrains.kotlin.js.inline.context",
- "org.jetbrains.kotlin.js.inline.util",
- "org.jetbrains.kotlin.js.inline.util.collectors",
- "org.jetbrains.kotlin.js.inline.util.rewriters",
- "org.jetbrains.kotlin.js.naming",
- "org.jetbrains.kotlin.js.parser",
- "org.jetbrains.kotlin.js.parser.sourcemaps",
- "org.jetbrains.kotlin.js.patterns",
- "org.jetbrains.kotlin.js.patterns.typePredicates",
- "org.jetbrains.kotlin.js.resolve",
- "org.jetbrains.kotlin.js.resolve.diagnostics",
- "org.jetbrains.kotlin.js.sourceMap",
- "org.jetbrains.kotlin.js.translate.callTranslator",
- "org.jetbrains.kotlin.js.translate.context",
- "org.jetbrains.kotlin.js.translate.context.generator",
- "org.jetbrains.kotlin.js.translate.declaration",
- "org.jetbrains.kotlin.js.translate.expression",
- "org.jetbrains.kotlin.js.translate.extensions",
- "org.jetbrains.kotlin.js.translate.general",
- "org.jetbrains.kotlin.js.translate.initializer",
- "org.jetbrains.kotlin.js.translate.intrinsic",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions.basic",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions.factories",
- "org.jetbrains.kotlin.js.translate.intrinsic.objects",
- "org.jetbrains.kotlin.js.translate.intrinsic.operation",
- "org.jetbrains.kotlin.js.translate.operation",
- "org.jetbrains.kotlin.js.translate.reference",
- "org.jetbrains.kotlin.js.translate.test",
- "org.jetbrains.kotlin.js.translate.utils",
- "org.jetbrains.kotlin.js.translate.utils.jsAstUtils",
- "org.jetbrains.kotlin.js.translate.utils.mutator",
- "org.jetbrains.kotlin.js.util",
- "org.jetbrains.kotlin.kapt3.diagnostic",
- "org.jetbrains.kotlin.kdoc.lexer",
- "org.jetbrains.kotlin.kdoc.parser",
- "org.jetbrains.kotlin.kdoc.psi.api",
- "org.jetbrains.kotlin.kdoc.psi.impl",
- "org.jetbrains.kotlin.konan",
- "org.jetbrains.kotlin.konan.file",
- "org.jetbrains.kotlin.konan.library",
- "org.jetbrains.kotlin.konan.properties",
- "org.jetbrains.kotlin.konan.target",
- "org.jetbrains.kotlin.konan.util",
- "org.jetbrains.kotlin.lexer",
- "org.jetbrains.kotlin.library",
- "org.jetbrains.kotlin.library.encodings",
- "org.jetbrains.kotlin.library.impl",
- "org.jetbrains.kotlin.library.metadata",
- "org.jetbrains.kotlin.library.resolver",
- "org.jetbrains.kotlin.library.resolver.impl",
- "org.jetbrains.kotlin.load.java",
- "org.jetbrains.kotlin.load.java.components",
- "org.jetbrains.kotlin.load.java.descriptors",
- "org.jetbrains.kotlin.load.java.lazy",
- "org.jetbrains.kotlin.load.java.lazy.descriptors",
- "org.jetbrains.kotlin.load.java.lazy.types",
- "org.jetbrains.kotlin.load.java.sam",
- "org.jetbrains.kotlin.load.java.sources",
- "org.jetbrains.kotlin.load.java.structure",
- "org.jetbrains.kotlin.load.java.structure.impl",
- "org.jetbrains.kotlin.load.java.structure.impl.classFiles",
- "org.jetbrains.kotlin.load.java.typeEnhancement",
- "org.jetbrains.kotlin.load.kotlin",
- "org.jetbrains.kotlin.load.kotlin.header",
- "org.jetbrains.kotlin.load.kotlin.incremental",
- "org.jetbrains.kotlin.load.kotlin.incremental.components",
- "org.jetbrains.kotlin.metadata",
- "org.jetbrains.kotlin.metadata.builtins",
- "org.jetbrains.kotlin.metadata.deserialization",
- "org.jetbrains.kotlin.metadata.java",
- "org.jetbrains.kotlin.metadata.js",
- "org.jetbrains.kotlin.metadata.jvm",
- "org.jetbrains.kotlin.metadata.jvm.deserialization",
- "org.jetbrains.kotlin.metadata.jvm.serialization",
- "org.jetbrains.kotlin.metadata.serialization",
- "org.jetbrains.kotlin.modules",
- "org.jetbrains.kotlin.name",
- "org.jetbrains.kotlin.parsing",
- "org.jetbrains.kotlin.platform",
- "org.jetbrains.kotlin.platform.js",
- "org.jetbrains.kotlin.platform.jvm",
- "org.jetbrains.kotlin.platform.konan",
- "org.jetbrains.kotlin.preloading",
- "org.jetbrains.kotlin.preloading.instrumentation",
- "org.jetbrains.kotlin.preloading.instrumentation.annotations",
- "org.jetbrains.kotlin.progress",
- "org.jetbrains.kotlin.progress.experimental",
- "org.jetbrains.kotlin.protobuf",
- "org.jetbrains.kotlin.psi",
- "org.jetbrains.kotlin.psi.addRemoveModifier",
- "org.jetbrains.kotlin.psi.codeFragmentUtil",
- "org.jetbrains.kotlin.psi.debugText",
- "org.jetbrains.kotlin.psi.findDocComment",
- "org.jetbrains.kotlin.psi.psiUtil",
- "org.jetbrains.kotlin.psi.stubs",
- "org.jetbrains.kotlin.psi.stubs.elements",
- "org.jetbrains.kotlin.psi.stubs.impl",
- "org.jetbrains.kotlin.psi.synthetics",
- "org.jetbrains.kotlin.psi.typeRefHelpers",
- "org.jetbrains.kotlin.psi2ir",
- "org.jetbrains.kotlin.psi2ir.generators",
- "org.jetbrains.kotlin.psi2ir.generators.fragments",
- "org.jetbrains.kotlin.psi2ir.intermediate",
- "org.jetbrains.kotlin.psi2ir.preprocessing",
- "org.jetbrains.kotlin.psi2ir.transformations",
- "org.jetbrains.kotlin.renderer",
- "org.jetbrains.kotlin.resolve",
- "org.jetbrains.kotlin.resolve.annotations",
- "org.jetbrains.kotlin.resolve.bindingContextUtil",
- "org.jetbrains.kotlin.resolve.calls",
- "org.jetbrains.kotlin.resolve.calls.callUtil",
- "org.jetbrains.kotlin.resolve.calls.checkers",
- "org.jetbrains.kotlin.resolve.calls.components",
- "org.jetbrains.kotlin.resolve.calls.components.candidate",
- "org.jetbrains.kotlin.resolve.calls.context",
- "org.jetbrains.kotlin.resolve.calls.inference",
- "org.jetbrains.kotlin.resolve.calls.inference.components",
- "org.jetbrains.kotlin.resolve.calls.inference.constraintPosition",
- "org.jetbrains.kotlin.resolve.calls.inference.model",
- "org.jetbrains.kotlin.resolve.calls.model",
- "org.jetbrains.kotlin.resolve.calls.results",
- "org.jetbrains.kotlin.resolve.calls.smartcasts",
- "org.jetbrains.kotlin.resolve.calls.tasks",
- "org.jetbrains.kotlin.resolve.calls.tower",
- "org.jetbrains.kotlin.resolve.calls.util",
- "org.jetbrains.kotlin.resolve.checkers",
- "org.jetbrains.kotlin.resolve.constants",
- "org.jetbrains.kotlin.resolve.constants.evaluate",
- "org.jetbrains.kotlin.resolve.deprecation",
- "org.jetbrains.kotlin.resolve.descriptorUtil",
- "org.jetbrains.kotlin.resolve.diagnostics",
- "org.jetbrains.kotlin.resolve.extensions",
- "org.jetbrains.kotlin.resolve.inline",
- "org.jetbrains.kotlin.resolve.jvm",
- "org.jetbrains.kotlin.resolve.jvm.annotations",
- "org.jetbrains.kotlin.resolve.jvm.checkers",
- "org.jetbrains.kotlin.resolve.jvm.diagnostics",
- "org.jetbrains.kotlin.resolve.jvm.extensions",
- "org.jetbrains.kotlin.resolve.jvm.jvmSignature",
- "org.jetbrains.kotlin.resolve.jvm.kotlinSignature",
- "org.jetbrains.kotlin.resolve.jvm.modules",
- "org.jetbrains.kotlin.resolve.jvm.multiplatform",
- "org.jetbrains.kotlin.resolve.jvm.platform",
- "org.jetbrains.kotlin.resolve.konan.diagnostics",
- "org.jetbrains.kotlin.resolve.konan.platform",
- "org.jetbrains.kotlin.resolve.lazy",
- "org.jetbrains.kotlin.resolve.lazy.data",
- "org.jetbrains.kotlin.resolve.lazy.declarations",
- "org.jetbrains.kotlin.resolve.lazy.descriptors",
- "org.jetbrains.kotlin.resolve.multiplatform",
- "org.jetbrains.kotlin.resolve.references",
- "org.jetbrains.kotlin.resolve.repl",
- "org.jetbrains.kotlin.resolve.sam",
- "org.jetbrains.kotlin.resolve.scopes",
- "org.jetbrains.kotlin.resolve.scopes.receivers",
- "org.jetbrains.kotlin.resolve.scopes.synthetic",
- "org.jetbrains.kotlin.resolve.scopes.utils",
- "org.jetbrains.kotlin.resolve.source",
- "org.jetbrains.kotlin.resolve.typeBinding",
- "org.jetbrains.kotlin.scripting",
- "org.jetbrains.kotlin.scripting.compiler.plugin",
- "org.jetbrains.kotlin.scripting.compiler.plugin.definitions",
- "org.jetbrains.kotlin.scripting.compiler.plugin.dependencies",
- "org.jetbrains.kotlin.scripting.compiler.plugin.extensions",
- "org.jetbrains.kotlin.scripting.compiler.plugin.impl",
- "org.jetbrains.kotlin.scripting.compiler.plugin.repl",
- "org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration",
- "org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages",
- "org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader",
- "org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer",
- "org.jetbrains.kotlin.scripting.configuration",
- "org.jetbrains.kotlin.scripting.definitions",
- "org.jetbrains.kotlin.scripting.extensions",
- "org.jetbrains.kotlin.scripting.resolve",
- "org.jetbrains.kotlin.serialization",
- "org.jetbrains.kotlin.serialization.builtins",
- "org.jetbrains.kotlin.serialization.deserialization",
- "org.jetbrains.kotlin.serialization.deserialization.builtins",
- "org.jetbrains.kotlin.serialization.deserialization.descriptors",
- "org.jetbrains.kotlin.serialization.js",
- "org.jetbrains.kotlin.serialization.js.ast",
- "org.jetbrains.kotlin.serialization.konan",
- "org.jetbrains.kotlin.serialization.konan.impl",
- "org.jetbrains.kotlin.storage",
- "org.jetbrains.kotlin.synthetic",
- "org.jetbrains.kotlin.type",
- "org.jetbrains.kotlin.types",
- "org.jetbrains.kotlin.types.checker",
- "org.jetbrains.kotlin.types.error",
- "org.jetbrains.kotlin.types.expressions",
- "org.jetbrains.kotlin.types.expressions.typeInfoFactory",
- "org.jetbrains.kotlin.types.expressions.unqualifiedSuper",
- "org.jetbrains.kotlin.types.model",
- "org.jetbrains.kotlin.types.typeUtil",
- "org.jetbrains.kotlin.types.typesApproximation",
- "org.jetbrains.kotlin.util",
- "org.jetbrains.kotlin.util.capitalizeDecapitalize",
- "org.jetbrains.kotlin.util.collectionUtils",
- "org.jetbrains.kotlin.util.javaslang",
- "org.jetbrains.kotlin.util.slicedMap",
- "org.jetbrains.kotlin.utils",
- "org.jetbrains.kotlin.utils.addToStdlib",
- "org.jetbrains.kotlin.utils.concurrent.block",
- "org.jetbrains.kotlin.utils.fileUtils",
- "org.jetbrains.kotlin.utils.intellij",
- "org.jetbrains.kotlin.utils.kapt",
- "org.jetbrains.kotlin.utils.repl",
- "org.jetbrains.kotlin.utils.strings",
- "org.jetbrains.kotlin.wasm.ir",
- "org.jetbrains.kotlin.wasm.ir.convertors"
- ],
- "com.android.tools.external.org-jetbrains:uast": [
- "com.intellij.patterns.uast",
- "com.intellij.psi",
- "org.jetbrains.uast",
- "org.jetbrains.uast.analysis",
- "org.jetbrains.uast.evaluation",
- "org.jetbrains.uast.expressions",
- "org.jetbrains.uast.generate",
- "org.jetbrains.uast.internal",
- "org.jetbrains.uast.java",
- "org.jetbrains.uast.java.analysis",
- "org.jetbrains.uast.java.declarations",
- "org.jetbrains.uast.java.expressions",
- "org.jetbrains.uast.java.generate",
- "org.jetbrains.uast.java.internal",
- "org.jetbrains.uast.java.kinds",
- "org.jetbrains.uast.kotlin",
- "org.jetbrains.uast.kotlin.analysis",
- "org.jetbrains.uast.kotlin.evaluation",
- "org.jetbrains.uast.kotlin.internal",
- "org.jetbrains.uast.kotlin.kinds",
- "org.jetbrains.uast.kotlin.psi",
- "org.jetbrains.uast.psi",
- "org.jetbrains.uast.util",
- "org.jetbrains.uast.values",
- "org.jetbrains.uast.visitor"
- ],
- "com.android.tools.layoutlib:layoutlib-api": [
- "com.android.ide.common.rendering.api",
- "com.android.resources"
- ],
- "com.android.tools.lint:lint": [
- "com.android.tools.lint",
- "com.android.tools.lint.gradle"
- ],
- "com.android.tools.lint:lint-api": [
- "com.android.tools.lint.client.api",
- "com.android.tools.lint.detector.api",
- "com.android.tools.lint.detector.api.interprocedural",
- "com.android.tools.lint.helpers"
- ],
- "com.android.tools.lint:lint-checks": [
- "com.android.tools.lint.checks"
- ],
- "com.android.tools.lint:lint-model": [
- "com.android.tools.lint.model"
- ],
- "com.android.tools:annotations": [
- "com.android.annotations",
- "com.android.annotations.concurrency"
- ],
- "com.android.tools:common": [
- "com.android",
- "com.android.ide.common.blame",
- "com.android.io",
- "com.android.prefs",
- "com.android.resources",
- "com.android.sdklib",
- "com.android.support",
- "com.android.testing.utils",
- "com.android.tools.proguard",
- "com.android.utils",
- "com.android.utils.concurrency",
- "com.android.utils.cxx",
- "com.android.utils.reflection",
- "com.android.xml"
- ],
- "com.android.tools:dvlib": [
- "com.android.dvlib"
- ],
- "com.android.tools:repository": [
- "com.android.repository",
- "com.android.repository.api",
- "com.android.repository.impl.downloader",
- "com.android.repository.impl.generated.generic.v1",
- "com.android.repository.impl.generated.generic.v2",
- "com.android.repository.impl.generated.v1",
- "com.android.repository.impl.generated.v2",
- "com.android.repository.impl.installer",
- "com.android.repository.impl.manager",
- "com.android.repository.impl.meta",
- "com.android.repository.impl.sources",
- "com.android.repository.impl.sources.generated.v1",
- "com.android.repository.io",
- "com.android.repository.util"
- ],
- "com.android.tools:sdk-common": [
- "com.android.ide.common.attribution",
- "com.android.ide.common.blame",
- "com.android.ide.common.blame.parser",
- "com.android.ide.common.blame.parser.aapt",
- "com.android.ide.common.blame.parser.util",
- "com.android.ide.common.build",
- "com.android.ide.common.build.filebasedproperties.module",
- "com.android.ide.common.build.filebasedproperties.variant",
- "com.android.ide.common.caching",
- "com.android.ide.common.fonts",
- "com.android.ide.common.internal",
- "com.android.ide.common.process",
- "com.android.ide.common.rendering",
- "com.android.ide.common.repository",
- "com.android.ide.common.resources",
- "com.android.ide.common.resources.configuration",
- "com.android.ide.common.resources.sampledata",
- "com.android.ide.common.resources.usage",
- "com.android.ide.common.sdk",
- "com.android.ide.common.signing",
- "com.android.ide.common.symbols",
- "com.android.ide.common.util",
- "com.android.ide.common.vectordrawable",
- "com.android.ide.common.workers",
- "com.android.ide.common.xml",
- "com.android.instantapp.provision",
- "com.android.instantapp.run",
- "com.android.instantapp.sdk",
- "com.android.instantapp.utils",
- "com.android.projectmodel",
- "wireless.android.instantapps.sdk"
- ],
- "com.android.tools:sdklib": [
- "com.android.sdklib",
- "com.android.sdklib.devices",
- "com.android.sdklib.internal.avd",
- "com.android.sdklib.internal.build",
- "com.android.sdklib.internal.project",
- "com.android.sdklib.repository",
- "com.android.sdklib.repository.generated.addon.v1",
- "com.android.sdklib.repository.generated.addon.v2",
- "com.android.sdklib.repository.generated.addon.v3",
- "com.android.sdklib.repository.generated.common.v1",
- "com.android.sdklib.repository.generated.common.v2",
- "com.android.sdklib.repository.generated.common.v3",
- "com.android.sdklib.repository.generated.repository.v1",
- "com.android.sdklib.repository.generated.repository.v2",
- "com.android.sdklib.repository.generated.repository.v3",
- "com.android.sdklib.repository.generated.sysimg.v1",
- "com.android.sdklib.repository.generated.sysimg.v2",
- "com.android.sdklib.repository.generated.sysimg.v3",
- "com.android.sdklib.repository.installer",
- "com.android.sdklib.repository.legacy",
- "com.android.sdklib.repository.legacy.descriptors",
- "com.android.sdklib.repository.legacy.io",
- "com.android.sdklib.repository.legacy.local",
- "com.android.sdklib.repository.legacy.remote",
- "com.android.sdklib.repository.legacy.remote.internal",
- "com.android.sdklib.repository.legacy.remote.internal.archives",
- "com.android.sdklib.repository.legacy.remote.internal.packages",
- "com.android.sdklib.repository.legacy.remote.internal.sources",
- "com.android.sdklib.repository.meta",
- "com.android.sdklib.repository.sources",
- "com.android.sdklib.repository.sources.generated.v1",
- "com.android.sdklib.repository.sources.generated.v2",
- "com.android.sdklib.repository.sources.generated.v3",
- "com.android.sdklib.repository.sources.generated.v4",
- "com.android.sdklib.repository.sources.generated.v5",
- "com.android.sdklib.repository.targets",
- "com.android.sdklib.tool",
- "com.android.sdklib.tool.sdkmanager",
- "com.android.sdklib.util"
- ],
- "com.beust:jcommander": [
- "com.beust.jcommander",
- "com.beust.jcommander.converters",
- "com.beust.jcommander.defaultprovider",
- "com.beust.jcommander.internal",
- "com.beust.jcommander.validators"
- ],
- "com.github.bumptech.glide:annotations": [
- "com.bumptech.glide.annotation",
- "com.bumptech.glide.annotation.compiler"
- ],
- "com.github.bumptech.glide:compiler": [
- "com.bumptech.glide.annotation.compiler",
- "com.bumptech.glide.repackaged.com.google.common.base",
- "com.bumptech.glide.repackaged.com.google.common.collect",
- "com.bumptech.glide.repackaged.com.squareup.javapoet"
- ],
- "com.github.bumptech.glide:disklrucache": [
- "com.bumptech.glide.disklrucache"
- ],
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": [
- "com.google.android.apps.common.testing.accessibility.framework",
- "com.google.android.apps.common.testing.accessibility.framework.integrations",
- "com.google.android.apps.common.testing.accessibility.framework.integrations.espresso",
- "com.googlecode.eyesfree.compat",
- "com.googlecode.eyesfree.utils"
- ],
- "com.google.android.gms:strict-version-matcher-plugin": [
- "com.google.android.gms",
- "com.google.android.gms.dependencies"
- ],
- "com.google.android:annotations": [
- "android.annotation"
- ],
- "com.google.auto.service:auto-service-annotations": [
- "com.google.auto.service"
- ],
- "com.google.auto.value:auto-value-annotations": [
- "com.google.auto.value",
- "com.google.auto.value.extension.memoized",
- "com.google.auto.value.extension.serializable",
- "com.google.auto.value.extension.toprettystring"
- ],
- "com.google.code.findbugs:jsr305": [
- "javax.annotation",
- "javax.annotation.concurrent",
- "javax.annotation.meta"
- ],
- "com.google.code.gson:gson": [
- "com.google.gson",
- "com.google.gson.annotations",
- "com.google.gson.internal",
- "com.google.gson.internal.bind",
- "com.google.gson.internal.bind.util",
- "com.google.gson.internal.reflect",
- "com.google.gson.internal.sql",
- "com.google.gson.reflect",
- "com.google.gson.stream"
- ],
- "com.google.dagger:dagger": [
- "dagger",
- "dagger.assisted",
- "dagger.internal",
- "dagger.multibindings"
- ],
- "com.google.dagger:dagger-compiler": [
- "dagger.internal.codegen",
- "dagger.internal.codegen.base",
- "dagger.internal.codegen.binding",
- "dagger.internal.codegen.bindinggraphvalidation",
- "dagger.internal.codegen.compileroption",
- "dagger.internal.codegen.componentgenerator",
- "dagger.internal.codegen.javapoet",
- "dagger.internal.codegen.kotlin",
- "dagger.internal.codegen.langmodel",
- "dagger.internal.codegen.validation",
- "dagger.internal.codegen.writing"
- ],
- "com.google.dagger:dagger-producers": [
- "dagger.producers",
- "dagger.producers.internal",
- "dagger.producers.monitoring",
- "dagger.producers.monitoring.internal"
- ],
- "com.google.dagger:dagger-spi": [
- "dagger.internal.codegen.extension",
- "dagger.internal.codegen.xprocessing",
- "dagger.model",
- "dagger.spi",
- "dagger.spi.model",
- "dagger.spi.shaded.androidx.room.compiler.processing",
- "dagger.spi.shaded.androidx.room.compiler.processing.compat",
- "dagger.spi.shaded.androidx.room.compiler.processing.javac",
- "dagger.spi.shaded.androidx.room.compiler.processing.javac.kotlin",
- "dagger.spi.shaded.androidx.room.compiler.processing.ksp",
- "dagger.spi.shaded.androidx.room.compiler.processing.ksp.synthetic",
- "dagger.spi.shaded.androidx.room.compiler.processing.util",
- "dagger.spi.shaded.auto.common"
- ],
- "com.google.devtools.ksp:symbol-processing-api": [
- "com.google.devtools.ksp",
- "com.google.devtools.ksp.processing",
- "com.google.devtools.ksp.symbol",
- "com.google.devtools.ksp.visitor"
- ],
- "com.google.errorprone:error_prone_annotations": [
- "com.google.errorprone.annotations",
- "com.google.errorprone.annotations.concurrent"
- ],
- "com.google.errorprone:javac-shaded": [
- "org.openjdk.javax.annotation.processing",
- "org.openjdk.javax.lang.model",
- "org.openjdk.javax.lang.model.element",
- "org.openjdk.javax.lang.model.type",
- "org.openjdk.javax.lang.model.util",
- "org.openjdk.javax.tools",
- "org.openjdk.source.doctree",
- "org.openjdk.source.tree",
- "org.openjdk.source.util",
- "org.openjdk.tools.doclint",
- "org.openjdk.tools.doclint.resources",
- "org.openjdk.tools.javac",
- "org.openjdk.tools.javac.api",
- "org.openjdk.tools.javac.code",
- "org.openjdk.tools.javac.comp",
- "org.openjdk.tools.javac.file",
- "org.openjdk.tools.javac.jvm",
- "org.openjdk.tools.javac.main",
- "org.openjdk.tools.javac.model",
- "org.openjdk.tools.javac.parser",
- "org.openjdk.tools.javac.platform",
- "org.openjdk.tools.javac.processing",
- "org.openjdk.tools.javac.resources",
- "org.openjdk.tools.javac.tree",
- "org.openjdk.tools.javac.util",
- "org.openjdk.tools.javah",
- "org.openjdk.tools.javah.resources",
- "org.openjdk.tools.sjavac",
- "org.openjdk.tools.sjavac.client",
- "org.openjdk.tools.sjavac.comp",
- "org.openjdk.tools.sjavac.comp.dependencies",
- "org.openjdk.tools.sjavac.options",
- "org.openjdk.tools.sjavac.pubapi",
- "org.openjdk.tools.sjavac.server",
- "org.openjdk.tools.sjavac.server.log"
- ],
- "com.google.firebase:firebase-annotations": [
- "com.google.firebase.annotations"
- ],
- "com.google.gms:google-services": [
- "com.google.gms.googleservices"
- ],
- "com.google.googlejavaformat:google-java-format": [
- "com.google.googlejavaformat",
- "com.google.googlejavaformat.java",
- "com.google.googlejavaformat.java.filer",
- "com.google.googlejavaformat.java.javadoc"
- ],
- "com.google.guava:failureaccess": [
- "com.google.common.util.concurrent.internal"
- ],
- "com.google.guava:guava": [
- "com.google.common.annotations",
- "com.google.common.base",
- "com.google.common.base.internal",
- "com.google.common.cache",
- "com.google.common.collect",
- "com.google.common.escape",
- "com.google.common.eventbus",
- "com.google.common.graph",
- "com.google.common.hash",
- "com.google.common.html",
- "com.google.common.io",
- "com.google.common.math",
- "com.google.common.net",
- "com.google.common.primitives",
- "com.google.common.reflect",
- "com.google.common.util.concurrent",
- "com.google.common.xml",
- "com.google.thirdparty.publicsuffix"
- ],
- "com.google.j2objc:j2objc-annotations": [
- "com.google.j2objc.annotations"
- ],
- "com.google.jimfs:jimfs": [
- "com.google.common.jimfs"
- ],
- "com.google.protobuf:protobuf-java": [
- "com.google.protobuf",
- "com.google.protobuf.compiler"
- ],
- "com.google.protobuf:protobuf-java-util": [
- "com.google.protobuf.util"
- ],
- "com.google.protobuf:protobuf-javalite": [
- "com.google.protobuf"
- ],
- "com.google.truth.extensions:truth-liteproto-extension": [
- "com.google.common.truth.extensions.proto"
- ],
- "com.google.truth:truth": [
- "com.google.common.truth"
- ],
- "com.googlecode.juniversalchardet:juniversalchardet": [
- "org.mozilla.universalchardet",
- "org.mozilla.universalchardet.prober",
- "org.mozilla.universalchardet.prober.contextanalysis",
- "org.mozilla.universalchardet.prober.distributionanalysis",
- "org.mozilla.universalchardet.prober.sequence",
- "org.mozilla.universalchardet.prober.statemachine"
- ],
- "com.ibm.icu:icu4j": [
- "com.ibm.icu.impl",
- "com.ibm.icu.impl.coll",
- "com.ibm.icu.impl.data",
- "com.ibm.icu.impl.duration",
- "com.ibm.icu.impl.duration.impl",
- "com.ibm.icu.impl.locale",
- "com.ibm.icu.lang",
- "com.ibm.icu.math",
- "com.ibm.icu.text",
- "com.ibm.icu.util"
- ],
- "com.squareup.moshi:moshi": [
- "com.squareup.moshi",
- "com.squareup.moshi.internal"
- ],
- "com.squareup.moshi:moshi-kotlin": [
- "com.squareup.moshi",
- "com.squareup.moshi.kotlin.reflect"
- ],
- "com.squareup.moshi:moshi-kotlin-codegen": [
- "com.squareup.moshi.kotlin.codegen.api",
- "com.squareup.moshi.kotlin.codegen.apt",
- "com.squareup.moshi.kotlin.codegen.ksp",
- "com.squareup.moshi.kotlinpoet.metadata",
- "com.squareup.moshi.kotlinpoet.metadata.classinspectors",
- "com.squareup.moshi.kotlinpoet.metadata.specs",
- "com.squareup.moshi.kotlinx.metadata",
- "com.squareup.moshi.kotlinx.metadata.impl",
- "com.squareup.moshi.kotlinx.metadata.impl.extensions",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.builtins",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.deserialization",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.deserialization",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.serialization",
- "com.squareup.moshi.kotlinx.metadata.internal.metadata.serialization",
- "com.squareup.moshi.kotlinx.metadata.internal.protobuf",
- "com.squareup.moshi.kotlinx.metadata.jvm",
- "com.squareup.moshi.kotlinx.metadata.jvm.impl",
- "shadow.com.google.auto.common",
- "shadow.com.squareup.kotlinpoet.ksp"
- ],
- "com.squareup.okhttp3:mockwebserver": [
- "okhttp3.internal.duplex",
- "okhttp3.mockwebserver",
- "okhttp3.mockwebserver.internal.duplex"
- ],
- "com.squareup.okhttp3:okhttp": [
- "okhttp3",
- "okhttp3.internal",
- "okhttp3.internal.authenticator",
- "okhttp3.internal.cache",
- "okhttp3.internal.cache2",
- "okhttp3.internal.concurrent",
- "okhttp3.internal.connection",
- "okhttp3.internal.http",
- "okhttp3.internal.http1",
- "okhttp3.internal.http2",
- "okhttp3.internal.io",
- "okhttp3.internal.platform",
- "okhttp3.internal.platform.android",
- "okhttp3.internal.proxy",
- "okhttp3.internal.publicsuffix",
- "okhttp3.internal.tls",
- "okhttp3.internal.ws"
- ],
- "com.squareup.okhttp:okhttp": [
- "com.squareup.okhttp",
- "com.squareup.okhttp.internal",
- "com.squareup.okhttp.internal.framed",
- "com.squareup.okhttp.internal.http",
- "com.squareup.okhttp.internal.io",
- "com.squareup.okhttp.internal.tls"
- ],
- "com.squareup.okio:okio": [
- "okio",
- "okio.internal"
- ],
- "com.squareup.retrofit2:converter-moshi": [
- "retrofit2.converter.moshi"
- ],
- "com.squareup.retrofit2:retrofit": [
- "retrofit2",
- "retrofit2.http",
- "retrofit2.internal"
- ],
- "com.squareup.retrofit2:retrofit-mock": [
- "retrofit2.mock"
- ],
- "com.squareup:javapoet": [
- "com.squareup.javapoet"
- ],
- "com.squareup:javawriter": [
- "com.squareup.javawriter"
- ],
- "com.squareup:kotlinpoet": [
- "com.squareup.kotlinpoet",
- "com.squareup.kotlinpoet.jvm",
- "com.squareup.kotlinpoet.tags"
- ],
- "com.sun.activation:javax.activation": [
- "com.sun.activation.registries",
- "com.sun.activation.viewers",
- "javax.activation"
- ],
- "com.sun.istack:istack-commons-runtime": [
- "com.sun.istack",
- "com.sun.istack.localization",
- "com.sun.istack.logging"
- ],
- "com.sun.xml.fastinfoset:FastInfoset": [
- "com.sun.xml.fastinfoset",
- "com.sun.xml.fastinfoset.algorithm",
- "com.sun.xml.fastinfoset.alphabet",
- "com.sun.xml.fastinfoset.dom",
- "com.sun.xml.fastinfoset.org.apache.xerces.util",
- "com.sun.xml.fastinfoset.sax",
- "com.sun.xml.fastinfoset.stax",
- "com.sun.xml.fastinfoset.stax.events",
- "com.sun.xml.fastinfoset.stax.factory",
- "com.sun.xml.fastinfoset.stax.util",
- "com.sun.xml.fastinfoset.tools",
- "com.sun.xml.fastinfoset.util",
- "com.sun.xml.fastinfoset.vocab",
- "org.jvnet.fastinfoset",
- "org.jvnet.fastinfoset.sax",
- "org.jvnet.fastinfoset.sax.helpers",
- "org.jvnet.fastinfoset.stax"
- ],
- "commons-codec:commons-codec": [
- "org.apache.commons.codec",
- "org.apache.commons.codec.binary",
- "org.apache.commons.codec.digest",
- "org.apache.commons.codec.language",
- "org.apache.commons.codec.language.bm",
- "org.apache.commons.codec.net"
- ],
- "commons-io:commons-io": [
- "org.apache.commons.io",
- "org.apache.commons.io.comparator",
- "org.apache.commons.io.filefilter",
- "org.apache.commons.io.input",
- "org.apache.commons.io.monitor",
- "org.apache.commons.io.output"
- ],
- "commons-logging:commons-logging": [
- "org.apache.commons.logging",
- "org.apache.commons.logging.impl"
- ],
- "io.grpc:grpc-api": [
- "io.grpc"
- ],
- "io.grpc:grpc-context": [
- "io.grpc"
- ],
- "io.grpc:grpc-core": [
- "io.grpc.inprocess",
- "io.grpc.internal",
- "io.grpc.util"
- ],
- "io.grpc:grpc-okhttp": [
- "io.grpc.okhttp",
- "io.grpc.okhttp.internal",
- "io.grpc.okhttp.internal.framed"
- ],
- "io.grpc:grpc-protobuf-lite": [
- "io.grpc.protobuf.lite"
- ],
- "io.grpc:grpc-stub": [
- "io.grpc.stub",
- "io.grpc.stub.annotations"
- ],
- "io.perfmark:perfmark-api": [
- "io.perfmark"
- ],
- "io.xlate:yaml-json": [
- "io.xlate.yamljson"
- ],
- "jakarta.activation:jakarta.activation-api": [
- "javax.activation"
- ],
- "jakarta.json:jakarta.json-api": [
- "jakarta.json",
- "jakarta.json.spi",
- "jakarta.json.stream"
- ],
- "jakarta.xml.bind:jakarta.xml.bind-api": [
- "javax.xml.bind",
- "javax.xml.bind.annotation",
- "javax.xml.bind.annotation.adapters",
- "javax.xml.bind.attachment",
- "javax.xml.bind.helpers",
- "javax.xml.bind.util"
- ],
- "javax.annotation:javax.annotation-api": [
- "javax.annotation",
- "javax.annotation.security",
- "javax.annotation.sql"
- ],
- "javax.inject:javax.inject": [
- "javax.inject"
- ],
- "junit:junit": [
- "junit.extensions",
- "junit.framework",
- "junit.runner",
- "junit.textui",
- "org.junit",
- "org.junit.experimental",
- "org.junit.experimental.categories",
- "org.junit.experimental.max",
- "org.junit.experimental.results",
- "org.junit.experimental.runners",
- "org.junit.experimental.theories",
- "org.junit.experimental.theories.internal",
- "org.junit.experimental.theories.suppliers",
- "org.junit.function",
- "org.junit.internal",
- "org.junit.internal.builders",
- "org.junit.internal.management",
- "org.junit.internal.matchers",
- "org.junit.internal.requests",
- "org.junit.internal.runners",
- "org.junit.internal.runners.model",
- "org.junit.internal.runners.rules",
- "org.junit.internal.runners.statements",
- "org.junit.matchers",
- "org.junit.rules",
- "org.junit.runner",
- "org.junit.runner.manipulation",
- "org.junit.runner.notification",
- "org.junit.runners",
- "org.junit.runners.model",
- "org.junit.runners.parameterized",
- "org.junit.validator"
- ],
- "net.bytebuddy:byte-buddy": [
- "net.bytebuddy",
- "net.bytebuddy.agent.builder",
- "net.bytebuddy.asm",
- "net.bytebuddy.build",
- "net.bytebuddy.description",
- "net.bytebuddy.description.annotation",
- "net.bytebuddy.description.enumeration",
- "net.bytebuddy.description.field",
- "net.bytebuddy.description.method",
- "net.bytebuddy.description.modifier",
- "net.bytebuddy.description.type",
- "net.bytebuddy.dynamic",
- "net.bytebuddy.dynamic.loading",
- "net.bytebuddy.dynamic.scaffold",
- "net.bytebuddy.dynamic.scaffold.inline",
- "net.bytebuddy.dynamic.scaffold.subclass",
- "net.bytebuddy.implementation",
- "net.bytebuddy.implementation.attribute",
- "net.bytebuddy.implementation.auxiliary",
- "net.bytebuddy.implementation.bind",
- "net.bytebuddy.implementation.bind.annotation",
- "net.bytebuddy.implementation.bytecode",
- "net.bytebuddy.implementation.bytecode.assign",
- "net.bytebuddy.implementation.bytecode.assign.primitive",
- "net.bytebuddy.implementation.bytecode.assign.reference",
- "net.bytebuddy.implementation.bytecode.collection",
- "net.bytebuddy.implementation.bytecode.constant",
- "net.bytebuddy.implementation.bytecode.member",
- "net.bytebuddy.jar.asm",
- "net.bytebuddy.jar.asm.commons",
- "net.bytebuddy.jar.asm.signature",
- "net.bytebuddy.matcher",
- "net.bytebuddy.pool",
- "net.bytebuddy.utility",
- "net.bytebuddy.utility.privilege",
- "net.bytebuddy.utility.visitor"
- ],
- "net.bytebuddy:byte-buddy-agent": [
- "net.bytebuddy.agent"
- ],
- "net.java.dev.jna:jna": [
- "com.sun.jna",
- "com.sun.jna.internal",
- "com.sun.jna.ptr",
- "com.sun.jna.win32"
- ],
- "net.java.dev.jna:jna-platform": [
- "com.sun.jna.platform",
- "com.sun.jna.platform.dnd",
- "com.sun.jna.platform.linux",
- "com.sun.jna.platform.mac",
- "com.sun.jna.platform.unix",
- "com.sun.jna.platform.unix.solaris",
- "com.sun.jna.platform.win32",
- "com.sun.jna.platform.win32.COM",
- "com.sun.jna.platform.win32.COM.tlb",
- "com.sun.jna.platform.win32.COM.tlb.imp",
- "com.sun.jna.platform.win32.COM.util",
- "com.sun.jna.platform.win32.COM.util.annotation",
- "com.sun.jna.platform.wince"
- ],
- "net.ltgt.gradle.incap:incap": [
- "net.ltgt.gradle.incap"
- ],
- "net.sf.kxml:kxml2": [
- "org.kxml2.io",
- "org.kxml2.kdom",
- "org.kxml2.wap",
- "org.kxml2.wap.syncml",
- "org.kxml2.wap.wml",
- "org.kxml2.wap.wv",
- "org.xmlpull.v1"
- ],
- "org.antlr:antlr4": [
- "org.abego.treelayout",
- "org.abego.treelayout.internal.util",
- "org.abego.treelayout.internal.util.java.lang",
- "org.abego.treelayout.internal.util.java.lang.string",
- "org.abego.treelayout.internal.util.java.util",
- "org.abego.treelayout.util",
- "org.antlr.runtime",
- "org.antlr.runtime.debug",
- "org.antlr.runtime.misc",
- "org.antlr.runtime.tree",
- "org.antlr.v4",
- "org.antlr.v4.analysis",
- "org.antlr.v4.automata",
- "org.antlr.v4.codegen",
- "org.antlr.v4.codegen.model",
- "org.antlr.v4.codegen.model.chunk",
- "org.antlr.v4.codegen.model.decl",
- "org.antlr.v4.codegen.target",
- "org.antlr.v4.gui",
- "org.antlr.v4.misc",
- "org.antlr.v4.parse",
- "org.antlr.v4.runtime",
- "org.antlr.v4.runtime.atn",
- "org.antlr.v4.runtime.dfa",
- "org.antlr.v4.runtime.misc",
- "org.antlr.v4.runtime.tree",
- "org.antlr.v4.runtime.tree.pattern",
- "org.antlr.v4.runtime.tree.xpath",
- "org.antlr.v4.semantics",
- "org.antlr.v4.tool",
- "org.antlr.v4.tool.ast",
- "org.stringtemplate.v4",
- "org.stringtemplate.v4.compiler",
- "org.stringtemplate.v4.debug",
- "org.stringtemplate.v4.gui",
- "org.stringtemplate.v4.misc"
- ],
- "org.apache.commons:commons-compress": [
- "org.apache.commons.compress",
- "org.apache.commons.compress.archivers",
- "org.apache.commons.compress.archivers.ar",
- "org.apache.commons.compress.archivers.arj",
- "org.apache.commons.compress.archivers.cpio",
- "org.apache.commons.compress.archivers.dump",
- "org.apache.commons.compress.archivers.examples",
- "org.apache.commons.compress.archivers.jar",
- "org.apache.commons.compress.archivers.sevenz",
- "org.apache.commons.compress.archivers.tar",
- "org.apache.commons.compress.archivers.zip",
- "org.apache.commons.compress.changes",
- "org.apache.commons.compress.compressors",
- "org.apache.commons.compress.compressors.brotli",
- "org.apache.commons.compress.compressors.bzip2",
- "org.apache.commons.compress.compressors.deflate",
- "org.apache.commons.compress.compressors.deflate64",
- "org.apache.commons.compress.compressors.gzip",
- "org.apache.commons.compress.compressors.lz4",
- "org.apache.commons.compress.compressors.lz77support",
- "org.apache.commons.compress.compressors.lzma",
- "org.apache.commons.compress.compressors.lzw",
- "org.apache.commons.compress.compressors.pack200",
- "org.apache.commons.compress.compressors.snappy",
- "org.apache.commons.compress.compressors.xz",
- "org.apache.commons.compress.compressors.z",
- "org.apache.commons.compress.compressors.zstandard",
- "org.apache.commons.compress.parallel",
- "org.apache.commons.compress.utils"
- ],
- "org.apache.httpcomponents:httpclient": [
- "org.apache.http.auth",
- "org.apache.http.auth.params",
- "org.apache.http.client",
- "org.apache.http.client.config",
- "org.apache.http.client.entity",
- "org.apache.http.client.methods",
- "org.apache.http.client.params",
- "org.apache.http.client.protocol",
- "org.apache.http.client.utils",
- "org.apache.http.conn",
- "org.apache.http.conn.params",
- "org.apache.http.conn.routing",
- "org.apache.http.conn.scheme",
- "org.apache.http.conn.socket",
- "org.apache.http.conn.ssl",
- "org.apache.http.conn.util",
- "org.apache.http.cookie",
- "org.apache.http.cookie.params",
- "org.apache.http.impl.auth",
- "org.apache.http.impl.client",
- "org.apache.http.impl.conn",
- "org.apache.http.impl.conn.tsccm",
- "org.apache.http.impl.cookie",
- "org.apache.http.impl.execchain"
- ],
- "org.apache.httpcomponents:httpcore": [
- "org.apache.http",
- "org.apache.http.annotation",
- "org.apache.http.concurrent",
- "org.apache.http.config",
- "org.apache.http.entity",
- "org.apache.http.impl",
- "org.apache.http.impl.bootstrap",
- "org.apache.http.impl.entity",
- "org.apache.http.impl.io",
- "org.apache.http.impl.pool",
- "org.apache.http.io",
- "org.apache.http.message",
- "org.apache.http.params",
- "org.apache.http.pool",
- "org.apache.http.protocol",
- "org.apache.http.ssl",
- "org.apache.http.util"
- ],
- "org.apache.httpcomponents:httpmime": [
- "org.apache.http.entity.mime",
- "org.apache.http.entity.mime.content"
- ],
- "org.bouncycastle:bcpkix-jdk15on": [
- "org.bouncycastle.cert",
- "org.bouncycastle.cert.bc",
- "org.bouncycastle.cert.cmp",
- "org.bouncycastle.cert.crmf",
- "org.bouncycastle.cert.crmf.bc",
- "org.bouncycastle.cert.crmf.jcajce",
- "org.bouncycastle.cert.dane",
- "org.bouncycastle.cert.dane.fetcher",
- "org.bouncycastle.cert.jcajce",
- "org.bouncycastle.cert.ocsp",
- "org.bouncycastle.cert.ocsp.jcajce",
- "org.bouncycastle.cert.path",
- "org.bouncycastle.cert.path.validations",
- "org.bouncycastle.cert.selector",
- "org.bouncycastle.cert.selector.jcajce",
- "org.bouncycastle.cmc",
- "org.bouncycastle.cms",
- "org.bouncycastle.cms.bc",
- "org.bouncycastle.cms.jcajce",
- "org.bouncycastle.dvcs",
- "org.bouncycastle.eac",
- "org.bouncycastle.eac.jcajce",
- "org.bouncycastle.eac.operator",
- "org.bouncycastle.eac.operator.jcajce",
- "org.bouncycastle.est",
- "org.bouncycastle.est.jcajce",
- "org.bouncycastle.mime",
- "org.bouncycastle.mime.encoding",
- "org.bouncycastle.mime.smime",
- "org.bouncycastle.mozilla",
- "org.bouncycastle.mozilla.jcajce",
- "org.bouncycastle.openssl",
- "org.bouncycastle.openssl.bc",
- "org.bouncycastle.openssl.jcajce",
- "org.bouncycastle.operator",
- "org.bouncycastle.operator.bc",
- "org.bouncycastle.operator.jcajce",
- "org.bouncycastle.pkcs",
- "org.bouncycastle.pkcs.bc",
- "org.bouncycastle.pkcs.jcajce",
- "org.bouncycastle.pkix",
- "org.bouncycastle.pkix.jcajce",
- "org.bouncycastle.tsp",
- "org.bouncycastle.tsp.cms",
- "org.bouncycastle.voms"
- ],
- "org.bouncycastle:bcprov-jdk15on": [
- "org.bouncycastle",
- "org.bouncycastle.asn1",
- "org.bouncycastle.asn1.anssi",
- "org.bouncycastle.asn1.bc",
- "org.bouncycastle.asn1.bsi",
- "org.bouncycastle.asn1.cmc",
- "org.bouncycastle.asn1.cmp",
- "org.bouncycastle.asn1.cms",
- "org.bouncycastle.asn1.cms.ecc",
- "org.bouncycastle.asn1.crmf",
- "org.bouncycastle.asn1.cryptlib",
- "org.bouncycastle.asn1.cryptopro",
- "org.bouncycastle.asn1.dvcs",
- "org.bouncycastle.asn1.eac",
- "org.bouncycastle.asn1.edec",
- "org.bouncycastle.asn1.esf",
- "org.bouncycastle.asn1.ess",
- "org.bouncycastle.asn1.est",
- "org.bouncycastle.asn1.gm",
- "org.bouncycastle.asn1.gnu",
- "org.bouncycastle.asn1.iana",
- "org.bouncycastle.asn1.icao",
- "org.bouncycastle.asn1.isara",
- "org.bouncycastle.asn1.isismtt",
- "org.bouncycastle.asn1.isismtt.ocsp",
- "org.bouncycastle.asn1.isismtt.x509",
- "org.bouncycastle.asn1.iso",
- "org.bouncycastle.asn1.kisa",
- "org.bouncycastle.asn1.microsoft",
- "org.bouncycastle.asn1.misc",
- "org.bouncycastle.asn1.mozilla",
- "org.bouncycastle.asn1.nist",
- "org.bouncycastle.asn1.nsri",
- "org.bouncycastle.asn1.ntt",
- "org.bouncycastle.asn1.ocsp",
- "org.bouncycastle.asn1.oiw",
- "org.bouncycastle.asn1.pkcs",
- "org.bouncycastle.asn1.rosstandart",
- "org.bouncycastle.asn1.sec",
- "org.bouncycastle.asn1.smime",
- "org.bouncycastle.asn1.teletrust",
- "org.bouncycastle.asn1.tsp",
- "org.bouncycastle.asn1.ua",
- "org.bouncycastle.asn1.util",
- "org.bouncycastle.asn1.x500",
- "org.bouncycastle.asn1.x500.style",
- "org.bouncycastle.asn1.x509",
- "org.bouncycastle.asn1.x509.qualified",
- "org.bouncycastle.asn1.x509.sigi",
- "org.bouncycastle.asn1.x9",
- "org.bouncycastle.crypto",
- "org.bouncycastle.crypto.agreement",
- "org.bouncycastle.crypto.agreement.jpake",
- "org.bouncycastle.crypto.agreement.kdf",
- "org.bouncycastle.crypto.agreement.srp",
- "org.bouncycastle.crypto.commitments",
- "org.bouncycastle.crypto.digests",
- "org.bouncycastle.crypto.ec",
- "org.bouncycastle.crypto.encodings",
- "org.bouncycastle.crypto.engines",
- "org.bouncycastle.crypto.examples",
- "org.bouncycastle.crypto.generators",
- "org.bouncycastle.crypto.io",
- "org.bouncycastle.crypto.kems",
- "org.bouncycastle.crypto.macs",
- "org.bouncycastle.crypto.modes",
- "org.bouncycastle.crypto.modes.gcm",
- "org.bouncycastle.crypto.modes.kgcm",
- "org.bouncycastle.crypto.paddings",
- "org.bouncycastle.crypto.params",
- "org.bouncycastle.crypto.parsers",
- "org.bouncycastle.crypto.prng",
- "org.bouncycastle.crypto.prng.drbg",
- "org.bouncycastle.crypto.signers",
- "org.bouncycastle.crypto.util",
- "org.bouncycastle.i18n",
- "org.bouncycastle.i18n.filter",
- "org.bouncycastle.iana",
- "org.bouncycastle.its.asn1",
- "org.bouncycastle.jcajce",
- "org.bouncycastle.jcajce.interfaces",
- "org.bouncycastle.jcajce.io",
- "org.bouncycastle.jcajce.provider.asymmetric",
- "org.bouncycastle.jcajce.provider.asymmetric.dh",
- "org.bouncycastle.jcajce.provider.asymmetric.dsa",
- "org.bouncycastle.jcajce.provider.asymmetric.dstu",
- "org.bouncycastle.jcajce.provider.asymmetric.ec",
- "org.bouncycastle.jcajce.provider.asymmetric.ecgost",
- "org.bouncycastle.jcajce.provider.asymmetric.ecgost12",
- "org.bouncycastle.jcajce.provider.asymmetric.edec",
- "org.bouncycastle.jcajce.provider.asymmetric.elgamal",
- "org.bouncycastle.jcajce.provider.asymmetric.gost",
- "org.bouncycastle.jcajce.provider.asymmetric.ies",
- "org.bouncycastle.jcajce.provider.asymmetric.rsa",
- "org.bouncycastle.jcajce.provider.asymmetric.util",
- "org.bouncycastle.jcajce.provider.asymmetric.x509",
- "org.bouncycastle.jcajce.provider.config",
- "org.bouncycastle.jcajce.provider.digest",
- "org.bouncycastle.jcajce.provider.drbg",
- "org.bouncycastle.jcajce.provider.keystore",
- "org.bouncycastle.jcajce.provider.keystore.bc",
- "org.bouncycastle.jcajce.provider.keystore.bcfks",
- "org.bouncycastle.jcajce.provider.keystore.pkcs12",
- "org.bouncycastle.jcajce.provider.symmetric",
- "org.bouncycastle.jcajce.provider.symmetric.util",
- "org.bouncycastle.jcajce.provider.util",
- "org.bouncycastle.jcajce.spec",
- "org.bouncycastle.jcajce.util",
- "org.bouncycastle.jce",
- "org.bouncycastle.jce.exception",
- "org.bouncycastle.jce.interfaces",
- "org.bouncycastle.jce.netscape",
- "org.bouncycastle.jce.provider",
- "org.bouncycastle.jce.spec",
- "org.bouncycastle.math",
- "org.bouncycastle.math.ec",
- "org.bouncycastle.math.ec.custom.djb",
- "org.bouncycastle.math.ec.custom.gm",
- "org.bouncycastle.math.ec.custom.sec",
- "org.bouncycastle.math.ec.endo",
- "org.bouncycastle.math.ec.rfc7748",
- "org.bouncycastle.math.ec.rfc8032",
- "org.bouncycastle.math.ec.tools",
- "org.bouncycastle.math.field",
- "org.bouncycastle.math.raw",
- "org.bouncycastle.pqc.asn1",
- "org.bouncycastle.pqc.crypto",
- "org.bouncycastle.pqc.crypto.gmss",
- "org.bouncycastle.pqc.crypto.gmss.util",
- "org.bouncycastle.pqc.crypto.lms",
- "org.bouncycastle.pqc.crypto.mceliece",
- "org.bouncycastle.pqc.crypto.newhope",
- "org.bouncycastle.pqc.crypto.qtesla",
- "org.bouncycastle.pqc.crypto.rainbow",
- "org.bouncycastle.pqc.crypto.rainbow.util",
- "org.bouncycastle.pqc.crypto.sphincs",
- "org.bouncycastle.pqc.crypto.util",
- "org.bouncycastle.pqc.crypto.xmss",
- "org.bouncycastle.pqc.jcajce.interfaces",
- "org.bouncycastle.pqc.jcajce.provider",
- "org.bouncycastle.pqc.jcajce.provider.gmss",
- "org.bouncycastle.pqc.jcajce.provider.lms",
- "org.bouncycastle.pqc.jcajce.provider.mceliece",
- "org.bouncycastle.pqc.jcajce.provider.newhope",
- "org.bouncycastle.pqc.jcajce.provider.qtesla",
- "org.bouncycastle.pqc.jcajce.provider.rainbow",
- "org.bouncycastle.pqc.jcajce.provider.sphincs",
- "org.bouncycastle.pqc.jcajce.provider.util",
- "org.bouncycastle.pqc.jcajce.provider.xmss",
- "org.bouncycastle.pqc.jcajce.spec",
- "org.bouncycastle.pqc.math.linearalgebra",
- "org.bouncycastle.util",
- "org.bouncycastle.util.encoders",
- "org.bouncycastle.util.io",
- "org.bouncycastle.util.io.pem",
- "org.bouncycastle.util.test",
- "org.bouncycastle.x509",
- "org.bouncycastle.x509.extension",
- "org.bouncycastle.x509.util"
- ],
- "org.checkerframework:checker-compat-qual": [
- "org.checkerframework.checker.nullness.compatqual"
- ],
- "org.checkerframework:checker-qual": [
- "org.checkerframework.checker.builder.qual",
- "org.checkerframework.checker.calledmethods.qual",
- "org.checkerframework.checker.compilermsgs.qual",
- "org.checkerframework.checker.fenum.qual",
- "org.checkerframework.checker.formatter.qual",
- "org.checkerframework.checker.guieffect.qual",
- "org.checkerframework.checker.i18n.qual",
- "org.checkerframework.checker.i18nformatter.qual",
- "org.checkerframework.checker.index.qual",
- "org.checkerframework.checker.initialization.qual",
- "org.checkerframework.checker.interning.qual",
- "org.checkerframework.checker.lock.qual",
- "org.checkerframework.checker.mustcall.qual",
- "org.checkerframework.checker.nullness.qual",
- "org.checkerframework.checker.optional.qual",
- "org.checkerframework.checker.propkey.qual",
- "org.checkerframework.checker.regex.qual",
- "org.checkerframework.checker.signature.qual",
- "org.checkerframework.checker.signedness.qual",
- "org.checkerframework.checker.tainting.qual",
- "org.checkerframework.checker.units.qual",
- "org.checkerframework.common.aliasing.qual",
- "org.checkerframework.common.initializedfields.qual",
- "org.checkerframework.common.reflection.qual",
- "org.checkerframework.common.returnsreceiver.qual",
- "org.checkerframework.common.subtyping.qual",
- "org.checkerframework.common.util.report.qual",
- "org.checkerframework.common.value.qual",
- "org.checkerframework.dataflow.qual",
- "org.checkerframework.framework.qual"
- ],
- "org.codehaus.mojo:animal-sniffer-annotations": [
- "org.codehaus.mojo.animal_sniffer"
- ],
- "org.eclipse.parsson:parsson": [
- "org.eclipse.parsson",
- "org.eclipse.parsson.api"
- ],
- "org.glassfish.jaxb:jaxb-runtime": [
- "com.sun.xml.bind",
- "com.sun.xml.bind.annotation",
- "com.sun.xml.bind.api",
- "com.sun.xml.bind.api.impl",
- "com.sun.xml.bind.marshaller",
- "com.sun.xml.bind.unmarshaller",
- "com.sun.xml.bind.util",
- "com.sun.xml.bind.v2",
- "com.sun.xml.bind.v2.bytecode",
- "com.sun.xml.bind.v2.model.annotation",
- "com.sun.xml.bind.v2.model.core",
- "com.sun.xml.bind.v2.model.impl",
- "com.sun.xml.bind.v2.model.nav",
- "com.sun.xml.bind.v2.model.runtime",
- "com.sun.xml.bind.v2.model.util",
- "com.sun.xml.bind.v2.runtime",
- "com.sun.xml.bind.v2.runtime.output",
- "com.sun.xml.bind.v2.runtime.property",
- "com.sun.xml.bind.v2.runtime.reflect",
- "com.sun.xml.bind.v2.runtime.reflect.opt",
- "com.sun.xml.bind.v2.runtime.unmarshaller",
- "com.sun.xml.bind.v2.schemagen",
- "com.sun.xml.bind.v2.schemagen.episode",
- "com.sun.xml.bind.v2.schemagen.xmlschema",
- "com.sun.xml.bind.v2.util"
- ],
- "org.glassfish.jaxb:txw2": [
- "com.sun.xml.txw2",
- "com.sun.xml.txw2.annotation",
- "com.sun.xml.txw2.output"
- ],
- "org.hamcrest:hamcrest-core": [
- "org.hamcrest",
- "org.hamcrest.core",
- "org.hamcrest.internal"
- ],
- "org.hamcrest:hamcrest-integration": [
- "org.hamcrest",
- "org.hamcrest.integration"
- ],
- "org.hamcrest:hamcrest-library": [
- "org.hamcrest",
- "org.hamcrest.beans",
- "org.hamcrest.collection",
- "org.hamcrest.number",
- "org.hamcrest.object",
- "org.hamcrest.text",
- "org.hamcrest.xml"
- ],
- "org.jetbrains.intellij.deps:trove4j": [
- "gnu.trove",
- "gnu.trove.decorator"
- ],
- "org.jetbrains.kotlin:kotlin-compiler-embeddable": [
- "javaslang",
- "javaslang.collection",
- "javaslang.concurrent",
- "javaslang.control",
- "javaslang.match",
- "javaslang.match.annotation",
- "javaslang.match.generator",
- "javaslang.match.model",
- "org.jetbrains.concurrency",
- "org.jetbrains.ide",
- "org.jetbrains.jps.model.java.impl",
- "org.jetbrains.kotlin",
- "org.jetbrains.kotlin.analyzer",
- "org.jetbrains.kotlin.analyzer.common",
- "org.jetbrains.kotlin.asJava",
- "org.jetbrains.kotlin.asJava.builder",
- "org.jetbrains.kotlin.asJava.classes",
- "org.jetbrains.kotlin.asJava.elements",
- "org.jetbrains.kotlin.asJava.finder",
- "org.jetbrains.kotlin.backend.common",
- "org.jetbrains.kotlin.backend.common.bridges",
- "org.jetbrains.kotlin.backend.common.descriptors",
- "org.jetbrains.kotlin.backend.common.extensions",
- "org.jetbrains.kotlin.backend.common.ir",
- "org.jetbrains.kotlin.backend.common.lower",
- "org.jetbrains.kotlin.backend.common.lower.inline",
- "org.jetbrains.kotlin.backend.common.lower.loops",
- "org.jetbrains.kotlin.backend.common.lower.loops.handlers",
- "org.jetbrains.kotlin.backend.common.lower.matchers",
- "org.jetbrains.kotlin.backend.common.lower.optimizations",
- "org.jetbrains.kotlin.backend.common.output",
- "org.jetbrains.kotlin.backend.common.overrides",
- "org.jetbrains.kotlin.backend.common.phaser",
- "org.jetbrains.kotlin.backend.common.serialization",
- "org.jetbrains.kotlin.backend.common.serialization.encodings",
- "org.jetbrains.kotlin.backend.common.serialization.mangle",
- "org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor",
- "org.jetbrains.kotlin.backend.common.serialization.mangle.ir",
- "org.jetbrains.kotlin.backend.common.serialization.metadata",
- "org.jetbrains.kotlin.backend.common.serialization.metadata.impl",
- "org.jetbrains.kotlin.backend.common.serialization.proto",
- "org.jetbrains.kotlin.backend.common.serialization.signature",
- "org.jetbrains.kotlin.backend.jvm",
- "org.jetbrains.kotlin.backend.jvm.codegen",
- "org.jetbrains.kotlin.backend.jvm.descriptors",
- "org.jetbrains.kotlin.backend.jvm.intrinsics",
- "org.jetbrains.kotlin.backend.jvm.ir",
- "org.jetbrains.kotlin.backend.jvm.lower",
- "org.jetbrains.kotlin.backend.jvm.lower.indy",
- "org.jetbrains.kotlin.backend.jvm.lower.inlineclasses",
- "org.jetbrains.kotlin.backend.jvm.serialization",
- "org.jetbrains.kotlin.backend.wasm",
- "org.jetbrains.kotlin.backend.wasm.ir2wasm",
- "org.jetbrains.kotlin.backend.wasm.lower",
- "org.jetbrains.kotlin.backend.wasm.utils",
- "org.jetbrains.kotlin.build",
- "org.jetbrains.kotlin.build.report",
- "org.jetbrains.kotlin.build.report.metrics",
- "org.jetbrains.kotlin.builtins",
- "org.jetbrains.kotlin.builtins.functions",
- "org.jetbrains.kotlin.builtins.jvm",
- "org.jetbrains.kotlin.builtins.konan",
- "org.jetbrains.kotlin.cfg",
- "org.jetbrains.kotlin.cfg.pseudocode",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.eval",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps",
- "org.jetbrains.kotlin.cfg.pseudocode.instructions.special",
- "org.jetbrains.kotlin.cfg.pseudocodeTraverser",
- "org.jetbrains.kotlin.cfg.variable",
- "org.jetbrains.kotlin.checkers",
- "org.jetbrains.kotlin.checkers.diagnostics",
- "org.jetbrains.kotlin.checkers.diagnostics.factories",
- "org.jetbrains.kotlin.checkers.utils",
- "org.jetbrains.kotlin.cli.common",
- "org.jetbrains.kotlin.cli.common.arguments",
- "org.jetbrains.kotlin.cli.common.config",
- "org.jetbrains.kotlin.cli.common.environment",
- "org.jetbrains.kotlin.cli.common.extensions",
- "org.jetbrains.kotlin.cli.common.messages",
- "org.jetbrains.kotlin.cli.common.modules",
- "org.jetbrains.kotlin.cli.common.output",
- "org.jetbrains.kotlin.cli.common.profiling",
- "org.jetbrains.kotlin.cli.common.repl",
- "org.jetbrains.kotlin.cli.js",
- "org.jetbrains.kotlin.cli.js.dce",
- "org.jetbrains.kotlin.cli.js.internal",
- "org.jetbrains.kotlin.cli.jvm",
- "org.jetbrains.kotlin.cli.jvm.compiler",
- "org.jetbrains.kotlin.cli.jvm.config",
- "org.jetbrains.kotlin.cli.jvm.index",
- "org.jetbrains.kotlin.cli.jvm.javac",
- "org.jetbrains.kotlin.cli.jvm.modules",
- "org.jetbrains.kotlin.cli.jvm.plugins",
- "org.jetbrains.kotlin.cli.metadata",
- "org.jetbrains.kotlin.codegen",
- "org.jetbrains.kotlin.codegen.binding",
- "org.jetbrains.kotlin.codegen.context",
- "org.jetbrains.kotlin.codegen.coroutines",
- "org.jetbrains.kotlin.codegen.extensions",
- "org.jetbrains.kotlin.codegen.inline",
- "org.jetbrains.kotlin.codegen.inline.coroutines",
- "org.jetbrains.kotlin.codegen.intrinsics",
- "org.jetbrains.kotlin.codegen.optimization",
- "org.jetbrains.kotlin.codegen.optimization.boxing",
- "org.jetbrains.kotlin.codegen.optimization.common",
- "org.jetbrains.kotlin.codegen.optimization.fixStack",
- "org.jetbrains.kotlin.codegen.optimization.nullCheck",
- "org.jetbrains.kotlin.codegen.optimization.transformer",
- "org.jetbrains.kotlin.codegen.pseudoInsns",
- "org.jetbrains.kotlin.codegen.range",
- "org.jetbrains.kotlin.codegen.range.comparison",
- "org.jetbrains.kotlin.codegen.range.forLoop",
- "org.jetbrains.kotlin.codegen.range.inExpression",
- "org.jetbrains.kotlin.codegen.serialization",
- "org.jetbrains.kotlin.codegen.signature",
- "org.jetbrains.kotlin.codegen.state",
- "org.jetbrains.kotlin.codegen.when",
- "org.jetbrains.kotlin.com.google.common.base",
- "org.jetbrains.kotlin.com.google.common.collect",
- "org.jetbrains.kotlin.com.google.common.graph",
- "org.jetbrains.kotlin.com.google.common.hash",
- "org.jetbrains.kotlin.com.google.common.math",
- "org.jetbrains.kotlin.com.google.common.primitives",
- "org.jetbrains.kotlin.com.google.common.util.concurrent",
- "org.jetbrains.kotlin.com.google.gwt.dev.js",
- "org.jetbrains.kotlin.com.google.gwt.dev.js.parserExceptions",
- "org.jetbrains.kotlin.com.google.gwt.dev.js.rhino",
- "org.jetbrains.kotlin.com.intellij",
- "org.jetbrains.kotlin.com.intellij.codeInsight",
- "org.jetbrains.kotlin.com.intellij.codeInsight.completion.scope",
- "org.jetbrains.kotlin.com.intellij.codeInsight.daemon.impl.analysis",
- "org.jetbrains.kotlin.com.intellij.codeInsight.folding",
- "org.jetbrains.kotlin.com.intellij.codeInsight.folding.impl",
- "org.jetbrains.kotlin.com.intellij.codeInsight.javadoc",
- "org.jetbrains.kotlin.com.intellij.codeInsight.runner",
- "org.jetbrains.kotlin.com.intellij.codeWithMe",
- "org.jetbrains.kotlin.com.intellij.concurrency",
- "org.jetbrains.kotlin.com.intellij.core",
- "org.jetbrains.kotlin.com.intellij.diagnostic",
- "org.jetbrains.kotlin.com.intellij.extapi.psi",
- "org.jetbrains.kotlin.com.intellij.formatting",
- "org.jetbrains.kotlin.com.intellij.icons",
- "org.jetbrains.kotlin.com.intellij.ide",
- "org.jetbrains.kotlin.com.intellij.ide.highlighter",
- "org.jetbrains.kotlin.com.intellij.ide.plugins",
- "org.jetbrains.kotlin.com.intellij.ide.util",
- "org.jetbrains.kotlin.com.intellij.injected.editor",
- "org.jetbrains.kotlin.com.intellij.jna",
- "org.jetbrains.kotlin.com.intellij.lang",
- "org.jetbrains.kotlin.com.intellij.lang.folding",
- "org.jetbrains.kotlin.com.intellij.lang.impl",
- "org.jetbrains.kotlin.com.intellij.lang.injection",
- "org.jetbrains.kotlin.com.intellij.lang.java",
- "org.jetbrains.kotlin.com.intellij.lang.java.beans",
- "org.jetbrains.kotlin.com.intellij.lang.java.lexer",
- "org.jetbrains.kotlin.com.intellij.lang.java.parser",
- "org.jetbrains.kotlin.com.intellij.lang.jvm",
- "org.jetbrains.kotlin.com.intellij.lang.jvm.annotation",
- "org.jetbrains.kotlin.com.intellij.lang.jvm.facade",
- "org.jetbrains.kotlin.com.intellij.lang.jvm.types",
- "org.jetbrains.kotlin.com.intellij.lexer",
- "org.jetbrains.kotlin.com.intellij.mock",
- "org.jetbrains.kotlin.com.intellij.model",
- "org.jetbrains.kotlin.com.intellij.model.psi",
- "org.jetbrains.kotlin.com.intellij.navigation",
- "org.jetbrains.kotlin.com.intellij.openapi",
- "org.jetbrains.kotlin.com.intellij.openapi.application",
- "org.jetbrains.kotlin.com.intellij.openapi.application.ex",
- "org.jetbrains.kotlin.com.intellij.openapi.application.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.command",
- "org.jetbrains.kotlin.com.intellij.openapi.command.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.command.undo",
- "org.jetbrains.kotlin.com.intellij.openapi.components",
- "org.jetbrains.kotlin.com.intellij.openapi.diagnostic",
- "org.jetbrains.kotlin.com.intellij.openapi.editor",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.actionSystem",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.colors",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.event",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.ex",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.impl.event",
- "org.jetbrains.kotlin.com.intellij.openapi.editor.markup",
- "org.jetbrains.kotlin.com.intellij.openapi.extensions",
- "org.jetbrains.kotlin.com.intellij.openapi.extensions.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.fileEditor",
- "org.jetbrains.kotlin.com.intellij.openapi.fileEditor.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.fileTypes",
- "org.jetbrains.kotlin.com.intellij.openapi.module",
- "org.jetbrains.kotlin.com.intellij.openapi.progress",
- "org.jetbrains.kotlin.com.intellij.openapi.progress.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.progress.util",
- "org.jetbrains.kotlin.com.intellij.openapi.project",
- "org.jetbrains.kotlin.com.intellij.openapi.projectRoots",
- "org.jetbrains.kotlin.com.intellij.openapi.roots",
- "org.jetbrains.kotlin.com.intellij.openapi.roots.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.ui",
- "org.jetbrains.kotlin.com.intellij.openapi.util",
- "org.jetbrains.kotlin.com.intellij.openapi.util.io",
- "org.jetbrains.kotlin.com.intellij.openapi.util.io.win32",
- "org.jetbrains.kotlin.com.intellij.openapi.util.objectTree",
- "org.jetbrains.kotlin.com.intellij.openapi.util.registry",
- "org.jetbrains.kotlin.com.intellij.openapi.util.text",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.encoding",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.ex",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.local",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs.events",
- "org.jetbrains.kotlin.com.intellij.openapi.vfs.pointers",
- "org.jetbrains.kotlin.com.intellij.openapi.wm.ex",
- "org.jetbrains.kotlin.com.intellij.patterns",
- "org.jetbrains.kotlin.com.intellij.patterns.compiler",
- "org.jetbrains.kotlin.com.intellij.pom",
- "org.jetbrains.kotlin.com.intellij.pom.event",
- "org.jetbrains.kotlin.com.intellij.pom.impl",
- "org.jetbrains.kotlin.com.intellij.pom.java",
- "org.jetbrains.kotlin.com.intellij.pom.tree",
- "org.jetbrains.kotlin.com.intellij.pom.tree.events",
- "org.jetbrains.kotlin.com.intellij.pom.tree.events.impl",
- "org.jetbrains.kotlin.com.intellij.psi",
- "org.jetbrains.kotlin.com.intellij.psi.augment",
- "org.jetbrains.kotlin.com.intellij.psi.codeStyle",
- "org.jetbrains.kotlin.com.intellij.psi.compiled",
- "org.jetbrains.kotlin.com.intellij.psi.controlFlow",
- "org.jetbrains.kotlin.com.intellij.psi.css",
- "org.jetbrains.kotlin.com.intellij.psi.filters",
- "org.jetbrains.kotlin.com.intellij.psi.filters.classes",
- "org.jetbrains.kotlin.com.intellij.psi.filters.element",
- "org.jetbrains.kotlin.com.intellij.psi.filters.position",
- "org.jetbrains.kotlin.com.intellij.psi.impl",
- "org.jetbrains.kotlin.com.intellij.psi.impl.cache",
- "org.jetbrains.kotlin.com.intellij.psi.impl.compiled",
- "org.jetbrains.kotlin.com.intellij.psi.impl.file",
- "org.jetbrains.kotlin.com.intellij.psi.impl.file.impl",
- "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs",
- "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.impl",
- "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.index",
- "org.jetbrains.kotlin.com.intellij.psi.impl.light",
- "org.jetbrains.kotlin.com.intellij.psi.impl.meta",
- "org.jetbrains.kotlin.com.intellij.psi.impl.search",
- "org.jetbrains.kotlin.com.intellij.psi.impl.smartPointers",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.codeStyle",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.javadoc",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference.constraints",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.manipulators",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.providers",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.injected",
- "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.java",
- "org.jetbrains.kotlin.com.intellij.psi.infos",
- "org.jetbrains.kotlin.com.intellij.psi.javadoc",
- "org.jetbrains.kotlin.com.intellij.psi.meta",
- "org.jetbrains.kotlin.com.intellij.psi.presentation.java",
- "org.jetbrains.kotlin.com.intellij.psi.scope",
- "org.jetbrains.kotlin.com.intellij.psi.scope.conflictResolvers",
- "org.jetbrains.kotlin.com.intellij.psi.scope.processor",
- "org.jetbrains.kotlin.com.intellij.psi.scope.util",
- "org.jetbrains.kotlin.com.intellij.psi.search",
- "org.jetbrains.kotlin.com.intellij.psi.search.searches",
- "org.jetbrains.kotlin.com.intellij.psi.stub",
- "org.jetbrains.kotlin.com.intellij.psi.stubs",
- "org.jetbrains.kotlin.com.intellij.psi.targets",
- "org.jetbrains.kotlin.com.intellij.psi.templateLanguages",
- "org.jetbrains.kotlin.com.intellij.psi.text",
- "org.jetbrains.kotlin.com.intellij.psi.tree",
- "org.jetbrains.kotlin.com.intellij.psi.tree.java",
- "org.jetbrains.kotlin.com.intellij.psi.util",
- "org.jetbrains.kotlin.com.intellij.reference",
- "org.jetbrains.kotlin.com.intellij.serialization",
- "org.jetbrains.kotlin.com.intellij.serviceContainer",
- "org.jetbrains.kotlin.com.intellij.testFramework",
- "org.jetbrains.kotlin.com.intellij.ui",
- "org.jetbrains.kotlin.com.intellij.ui.icons",
- "org.jetbrains.kotlin.com.intellij.util",
- "org.jetbrains.kotlin.com.intellij.util.cls",
- "org.jetbrains.kotlin.com.intellij.util.codeInsight",
- "org.jetbrains.kotlin.com.intellij.util.concurrency",
- "org.jetbrains.kotlin.com.intellij.util.containers",
- "org.jetbrains.kotlin.com.intellij.util.containers.hash",
- "org.jetbrains.kotlin.com.intellij.util.diff",
- "org.jetbrains.kotlin.com.intellij.util.exception",
- "org.jetbrains.kotlin.com.intellij.util.execution",
- "org.jetbrains.kotlin.com.intellij.util.graph",
- "org.jetbrains.kotlin.com.intellij.util.graph.impl",
- "org.jetbrains.kotlin.com.intellij.util.indexing",
- "org.jetbrains.kotlin.com.intellij.util.io",
- "org.jetbrains.kotlin.com.intellij.util.io.keyStorage",
- "org.jetbrains.kotlin.com.intellij.util.keyFMap",
- "org.jetbrains.kotlin.com.intellij.util.lang",
- "org.jetbrains.kotlin.com.intellij.util.loader",
- "org.jetbrains.kotlin.com.intellij.util.messages",
- "org.jetbrains.kotlin.com.intellij.util.messages.impl",
- "org.jetbrains.kotlin.com.intellij.util.pico",
- "org.jetbrains.kotlin.com.intellij.util.ref",
- "org.jetbrains.kotlin.com.intellij.util.text",
- "org.jetbrains.kotlin.com.intellij.util.xmlb",
- "org.jetbrains.kotlin.com.intellij.util.xmlb.annotations",
- "org.jetbrains.kotlin.com.intellij.xml.util",
- "org.jetbrains.kotlin.compiler.plugin",
- "org.jetbrains.kotlin.compilerRunner",
- "org.jetbrains.kotlin.config",
- "org.jetbrains.kotlin.container",
- "org.jetbrains.kotlin.context",
- "org.jetbrains.kotlin.contracts",
- "org.jetbrains.kotlin.contracts.description",
- "org.jetbrains.kotlin.contracts.description.expressions",
- "org.jetbrains.kotlin.contracts.interpretation",
- "org.jetbrains.kotlin.contracts.model",
- "org.jetbrains.kotlin.contracts.model.functors",
- "org.jetbrains.kotlin.contracts.model.structure",
- "org.jetbrains.kotlin.contracts.model.visitors",
- "org.jetbrains.kotlin.contracts.parsing",
- "org.jetbrains.kotlin.contracts.parsing.effects",
- "org.jetbrains.kotlin.coroutines",
- "org.jetbrains.kotlin.descriptors",
- "org.jetbrains.kotlin.descriptors.annotations",
- "org.jetbrains.kotlin.descriptors.deserialization",
- "org.jetbrains.kotlin.descriptors.impl",
- "org.jetbrains.kotlin.descriptors.java",
- "org.jetbrains.kotlin.descriptors.konan",
- "org.jetbrains.kotlin.descriptors.konan.impl",
- "org.jetbrains.kotlin.descriptors.runtime.components",
- "org.jetbrains.kotlin.descriptors.runtime.structure",
- "org.jetbrains.kotlin.descriptors.synthetic",
- "org.jetbrains.kotlin.diagnostics",
- "org.jetbrains.kotlin.diagnostics.rendering",
- "org.jetbrains.kotlin.extensions",
- "org.jetbrains.kotlin.extensions.internal",
- "org.jetbrains.kotlin.fileClasses",
- "org.jetbrains.kotlin.fir",
- "org.jetbrains.kotlin.fir.analysis",
- "org.jetbrains.kotlin.fir.analysis.cfa",
- "org.jetbrains.kotlin.fir.analysis.checkers",
- "org.jetbrains.kotlin.fir.analysis.checkers.cfa",
- "org.jetbrains.kotlin.fir.analysis.checkers.context",
- "org.jetbrains.kotlin.fir.analysis.checkers.declaration",
- "org.jetbrains.kotlin.fir.analysis.checkers.expression",
- "org.jetbrains.kotlin.fir.analysis.checkers.extended",
- "org.jetbrains.kotlin.fir.analysis.collectors",
- "org.jetbrains.kotlin.fir.analysis.collectors.components",
- "org.jetbrains.kotlin.fir.analysis.diagnostics",
- "org.jetbrains.kotlin.fir.analysis.extensions",
- "org.jetbrains.kotlin.fir.backend",
- "org.jetbrains.kotlin.fir.backend.evaluate",
- "org.jetbrains.kotlin.fir.backend.generators",
- "org.jetbrains.kotlin.fir.backend.jvm",
- "org.jetbrains.kotlin.fir.builder",
- "org.jetbrains.kotlin.fir.caches",
- "org.jetbrains.kotlin.fir.checkers",
- "org.jetbrains.kotlin.fir.contracts",
- "org.jetbrains.kotlin.fir.contracts.builder",
- "org.jetbrains.kotlin.fir.contracts.description",
- "org.jetbrains.kotlin.fir.contracts.impl",
- "org.jetbrains.kotlin.fir.declarations",
- "org.jetbrains.kotlin.fir.declarations.builder",
- "org.jetbrains.kotlin.fir.declarations.impl",
- "org.jetbrains.kotlin.fir.declarations.synthetic",
- "org.jetbrains.kotlin.fir.descriptors",
- "org.jetbrains.kotlin.fir.deserialization",
- "org.jetbrains.kotlin.fir.diagnostics",
- "org.jetbrains.kotlin.fir.expressions",
- "org.jetbrains.kotlin.fir.expressions.builder",
- "org.jetbrains.kotlin.fir.expressions.impl",
- "org.jetbrains.kotlin.fir.extensions",
- "org.jetbrains.kotlin.fir.extensions.predicate",
- "org.jetbrains.kotlin.fir.impl",
- "org.jetbrains.kotlin.fir.java",
- "org.jetbrains.kotlin.fir.java.declarations",
- "org.jetbrains.kotlin.fir.java.deserialization",
- "org.jetbrains.kotlin.fir.java.enhancement",
- "org.jetbrains.kotlin.fir.java.scopes",
- "org.jetbrains.kotlin.fir.lazy",
- "org.jetbrains.kotlin.fir.lightTree",
- "org.jetbrains.kotlin.fir.lightTree.converter",
- "org.jetbrains.kotlin.fir.lightTree.fir",
- "org.jetbrains.kotlin.fir.lightTree.fir.modifier",
- "org.jetbrains.kotlin.fir.references",
- "org.jetbrains.kotlin.fir.references.builder",
- "org.jetbrains.kotlin.fir.references.impl",
- "org.jetbrains.kotlin.fir.resolve",
- "org.jetbrains.kotlin.fir.resolve.calls",
- "org.jetbrains.kotlin.fir.resolve.calls.jvm",
- "org.jetbrains.kotlin.fir.resolve.calls.tower",
- "org.jetbrains.kotlin.fir.resolve.dfa",
- "org.jetbrains.kotlin.fir.resolve.dfa.cfg",
- "org.jetbrains.kotlin.fir.resolve.dfa.contracts",
- "org.jetbrains.kotlin.fir.resolve.diagnostics",
- "org.jetbrains.kotlin.fir.resolve.inference",
- "org.jetbrains.kotlin.fir.resolve.inference.model",
- "org.jetbrains.kotlin.fir.resolve.providers",
- "org.jetbrains.kotlin.fir.resolve.providers.impl",
- "org.jetbrains.kotlin.fir.resolve.scopes",
- "org.jetbrains.kotlin.fir.resolve.substitution",
- "org.jetbrains.kotlin.fir.resolve.transformers",
- "org.jetbrains.kotlin.fir.resolve.transformers.body.resolve",
- "org.jetbrains.kotlin.fir.resolve.transformers.contracts",
- "org.jetbrains.kotlin.fir.resolve.transformers.plugin",
- "org.jetbrains.kotlin.fir.scopes",
- "org.jetbrains.kotlin.fir.scopes.impl",
- "org.jetbrains.kotlin.fir.scopes.jvm",
- "org.jetbrains.kotlin.fir.serialization",
- "org.jetbrains.kotlin.fir.serialization.constant",
- "org.jetbrains.kotlin.fir.session",
- "org.jetbrains.kotlin.fir.signaturer",
- "org.jetbrains.kotlin.fir.symbols",
- "org.jetbrains.kotlin.fir.symbols.impl",
- "org.jetbrains.kotlin.fir.types",
- "org.jetbrains.kotlin.fir.types.builder",
- "org.jetbrains.kotlin.fir.types.impl",
- "org.jetbrains.kotlin.fir.types.jvm",
- "org.jetbrains.kotlin.fir.utils",
- "org.jetbrains.kotlin.fir.visitors",
- "org.jetbrains.kotlin.frontend.di",
- "org.jetbrains.kotlin.frontend.java.di",
- "org.jetbrains.kotlin.frontend.js.di",
- "org.jetbrains.kotlin.idea",
- "org.jetbrains.kotlin.incremental",
- "org.jetbrains.kotlin.incremental.components",
- "org.jetbrains.kotlin.incremental.js",
- "org.jetbrains.kotlin.incremental.multiproject",
- "org.jetbrains.kotlin.incremental.parsing",
- "org.jetbrains.kotlin.incremental.snapshots",
- "org.jetbrains.kotlin.incremental.storage",
- "org.jetbrains.kotlin.incremental.util",
- "org.jetbrains.kotlin.inline",
- "org.jetbrains.kotlin.ir",
- "org.jetbrains.kotlin.ir.backend.js",
- "org.jetbrains.kotlin.ir.backend.js.export",
- "org.jetbrains.kotlin.ir.backend.js.ir",
- "org.jetbrains.kotlin.ir.backend.js.lower",
- "org.jetbrains.kotlin.ir.backend.js.lower.calls",
- "org.jetbrains.kotlin.ir.backend.js.lower.cleanup",
- "org.jetbrains.kotlin.ir.backend.js.lower.coroutines",
- "org.jetbrains.kotlin.ir.backend.js.lower.inline",
- "org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir",
- "org.jetbrains.kotlin.ir.backend.js.transformers.irToJs",
- "org.jetbrains.kotlin.ir.backend.js.utils",
- "org.jetbrains.kotlin.ir.backend.jvm",
- "org.jetbrains.kotlin.ir.backend.jvm.serialization",
- "org.jetbrains.kotlin.ir.builders",
- "org.jetbrains.kotlin.ir.builders.declarations",
- "org.jetbrains.kotlin.ir.declarations",
- "org.jetbrains.kotlin.ir.declarations.impl",
- "org.jetbrains.kotlin.ir.declarations.lazy",
- "org.jetbrains.kotlin.ir.declarations.persistent",
- "org.jetbrains.kotlin.ir.declarations.persistent.carriers",
- "org.jetbrains.kotlin.ir.descriptors",
- "org.jetbrains.kotlin.ir.expressions",
- "org.jetbrains.kotlin.ir.expressions.impl",
- "org.jetbrains.kotlin.ir.expressions.persistent",
- "org.jetbrains.kotlin.ir.interpreter",
- "org.jetbrains.kotlin.ir.interpreter.builtins",
- "org.jetbrains.kotlin.ir.interpreter.exceptions",
- "org.jetbrains.kotlin.ir.interpreter.intrinsics",
- "org.jetbrains.kotlin.ir.interpreter.stack",
- "org.jetbrains.kotlin.ir.interpreter.state",
- "org.jetbrains.kotlin.ir.linkage",
- "org.jetbrains.kotlin.ir.overrides",
- "org.jetbrains.kotlin.ir.symbols",
- "org.jetbrains.kotlin.ir.symbols.impl",
- "org.jetbrains.kotlin.ir.types",
- "org.jetbrains.kotlin.ir.types.impl",
- "org.jetbrains.kotlin.ir.util",
- "org.jetbrains.kotlin.ir.visitors",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.booleans",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.bytes",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.chars",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.doubles",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.floats",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.ints",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.longs",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.objects",
- "org.jetbrains.kotlin.it.unimi.dsi.fastutil.shorts",
- "org.jetbrains.kotlin.javac",
- "org.jetbrains.kotlin.javac.components",
- "org.jetbrains.kotlin.javac.resolve",
- "org.jetbrains.kotlin.javac.wrappers.symbols",
- "org.jetbrains.kotlin.javac.wrappers.trees",
- "org.jetbrains.kotlin.javax.inject",
- "org.jetbrains.kotlin.js",
- "org.jetbrains.kotlin.js.analyze",
- "org.jetbrains.kotlin.js.analyzer",
- "org.jetbrains.kotlin.js.backend",
- "org.jetbrains.kotlin.js.backend.ast",
- "org.jetbrains.kotlin.js.backend.ast.metadata",
- "org.jetbrains.kotlin.js.common",
- "org.jetbrains.kotlin.js.config",
- "org.jetbrains.kotlin.js.coroutine",
- "org.jetbrains.kotlin.js.dce",
- "org.jetbrains.kotlin.js.descriptorUtils",
- "org.jetbrains.kotlin.js.facade",
- "org.jetbrains.kotlin.js.facade.exceptions",
- "org.jetbrains.kotlin.js.inline",
- "org.jetbrains.kotlin.js.inline.clean",
- "org.jetbrains.kotlin.js.inline.context",
- "org.jetbrains.kotlin.js.inline.util",
- "org.jetbrains.kotlin.js.inline.util.collectors",
- "org.jetbrains.kotlin.js.inline.util.rewriters",
- "org.jetbrains.kotlin.js.naming",
- "org.jetbrains.kotlin.js.parser",
- "org.jetbrains.kotlin.js.parser.sourcemaps",
- "org.jetbrains.kotlin.js.patterns",
- "org.jetbrains.kotlin.js.patterns.typePredicates",
- "org.jetbrains.kotlin.js.resolve",
- "org.jetbrains.kotlin.js.resolve.diagnostics",
- "org.jetbrains.kotlin.js.sourceMap",
- "org.jetbrains.kotlin.js.translate.callTranslator",
- "org.jetbrains.kotlin.js.translate.context",
- "org.jetbrains.kotlin.js.translate.context.generator",
- "org.jetbrains.kotlin.js.translate.declaration",
- "org.jetbrains.kotlin.js.translate.expression",
- "org.jetbrains.kotlin.js.translate.extensions",
- "org.jetbrains.kotlin.js.translate.general",
- "org.jetbrains.kotlin.js.translate.initializer",
- "org.jetbrains.kotlin.js.translate.intrinsic",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions.basic",
- "org.jetbrains.kotlin.js.translate.intrinsic.functions.factories",
- "org.jetbrains.kotlin.js.translate.intrinsic.objects",
- "org.jetbrains.kotlin.js.translate.intrinsic.operation",
- "org.jetbrains.kotlin.js.translate.operation",
- "org.jetbrains.kotlin.js.translate.reference",
- "org.jetbrains.kotlin.js.translate.test",
- "org.jetbrains.kotlin.js.translate.utils",
- "org.jetbrains.kotlin.js.translate.utils.jsAstUtils",
- "org.jetbrains.kotlin.js.translate.utils.mutator",
- "org.jetbrains.kotlin.js.util",
- "org.jetbrains.kotlin.kapt3.diagnostic",
- "org.jetbrains.kotlin.kdoc.lexer",
- "org.jetbrains.kotlin.kdoc.parser",
- "org.jetbrains.kotlin.kdoc.psi.api",
- "org.jetbrains.kotlin.kdoc.psi.impl",
- "org.jetbrains.kotlin.konan",
- "org.jetbrains.kotlin.konan.file",
- "org.jetbrains.kotlin.konan.library",
- "org.jetbrains.kotlin.konan.properties",
- "org.jetbrains.kotlin.konan.target",
- "org.jetbrains.kotlin.konan.util",
- "org.jetbrains.kotlin.kotlinx.collections.immutable",
- "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableList",
- "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableMap",
- "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedMap",
- "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedSet",
- "org.jetbrains.kotlin.kotlinx.collections.immutable.internal",
- "org.jetbrains.kotlin.lexer",
- "org.jetbrains.kotlin.library",
- "org.jetbrains.kotlin.library.impl",
- "org.jetbrains.kotlin.library.metadata",
- "org.jetbrains.kotlin.library.resolver",
- "org.jetbrains.kotlin.library.resolver.impl",
- "org.jetbrains.kotlin.load.java",
- "org.jetbrains.kotlin.load.java.components",
- "org.jetbrains.kotlin.load.java.descriptors",
- "org.jetbrains.kotlin.load.java.lazy",
- "org.jetbrains.kotlin.load.java.lazy.descriptors",
- "org.jetbrains.kotlin.load.java.lazy.types",
- "org.jetbrains.kotlin.load.java.sam",
- "org.jetbrains.kotlin.load.java.sources",
- "org.jetbrains.kotlin.load.java.structure",
- "org.jetbrains.kotlin.load.java.structure.impl",
- "org.jetbrains.kotlin.load.java.structure.impl.classFiles",
- "org.jetbrains.kotlin.load.java.typeEnhancement",
- "org.jetbrains.kotlin.load.kotlin",
- "org.jetbrains.kotlin.load.kotlin.header",
- "org.jetbrains.kotlin.load.kotlin.incremental",
- "org.jetbrains.kotlin.load.kotlin.incremental.components",
- "org.jetbrains.kotlin.metadata",
- "org.jetbrains.kotlin.metadata.builtins",
- "org.jetbrains.kotlin.metadata.deserialization",
- "org.jetbrains.kotlin.metadata.java",
- "org.jetbrains.kotlin.metadata.js",
- "org.jetbrains.kotlin.metadata.jvm",
- "org.jetbrains.kotlin.metadata.jvm.deserialization",
- "org.jetbrains.kotlin.metadata.jvm.serialization",
- "org.jetbrains.kotlin.metadata.serialization",
- "org.jetbrains.kotlin.modules",
- "org.jetbrains.kotlin.name",
- "org.jetbrains.kotlin.net.jpountz.lz4",
- "org.jetbrains.kotlin.net.jpountz.util",
- "org.jetbrains.kotlin.net.jpountz.xxhash",
- "org.jetbrains.kotlin.one.util.streamex",
- "org.jetbrains.kotlin.org.apache.log4j",
- "org.jetbrains.kotlin.org.fusesource.hawtjni.runtime",
- "org.jetbrains.kotlin.org.fusesource.jansi",
- "org.jetbrains.kotlin.org.fusesource.jansi.internal",
- "org.jetbrains.kotlin.org.jdom",
- "org.jetbrains.kotlin.org.jdom.filter",
- "org.jetbrains.kotlin.org.jdom.filter2",
- "org.jetbrains.kotlin.org.jdom.internal",
- "org.jetbrains.kotlin.org.jdom.output",
- "org.jetbrains.kotlin.org.jdom.output.support",
- "org.jetbrains.kotlin.org.jline.keymap",
- "org.jetbrains.kotlin.org.jline.reader",
- "org.jetbrains.kotlin.org.jline.reader.impl",
- "org.jetbrains.kotlin.org.jline.reader.impl.history",
- "org.jetbrains.kotlin.org.jline.terminal",
- "org.jetbrains.kotlin.org.jline.terminal.impl",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jansi",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.freebsd",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.linux",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.osx",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.win",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna.freebsd",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna.linux",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna.osx",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna.solaris",
- "org.jetbrains.kotlin.org.jline.terminal.impl.jna.win",
- "org.jetbrains.kotlin.org.jline.terminal.spi",
- "org.jetbrains.kotlin.org.jline.utils",
- "org.jetbrains.kotlin.org.picocontainer",
- "org.jetbrains.kotlin.org.picocontainer.defaults",
- "org.jetbrains.kotlin.parsing",
- "org.jetbrains.kotlin.platform",
- "org.jetbrains.kotlin.platform.js",
- "org.jetbrains.kotlin.platform.jvm",
- "org.jetbrains.kotlin.platform.konan",
- "org.jetbrains.kotlin.progress",
- "org.jetbrains.kotlin.progress.experimental",
- "org.jetbrains.kotlin.protobuf",
- "org.jetbrains.kotlin.psi",
- "org.jetbrains.kotlin.psi.addRemoveModifier",
- "org.jetbrains.kotlin.psi.codeFragmentUtil",
- "org.jetbrains.kotlin.psi.debugText",
- "org.jetbrains.kotlin.psi.findDocComment",
- "org.jetbrains.kotlin.psi.psiUtil",
- "org.jetbrains.kotlin.psi.stubs",
- "org.jetbrains.kotlin.psi.stubs.elements",
- "org.jetbrains.kotlin.psi.stubs.impl",
- "org.jetbrains.kotlin.psi.synthetics",
- "org.jetbrains.kotlin.psi.typeRefHelpers",
- "org.jetbrains.kotlin.psi2ir",
- "org.jetbrains.kotlin.psi2ir.generators",
- "org.jetbrains.kotlin.psi2ir.intermediate",
- "org.jetbrains.kotlin.psi2ir.transformations",
- "org.jetbrains.kotlin.renderer",
- "org.jetbrains.kotlin.resolve",
- "org.jetbrains.kotlin.resolve.annotations",
- "org.jetbrains.kotlin.resolve.bindingContextUtil",
- "org.jetbrains.kotlin.resolve.calls",
- "org.jetbrains.kotlin.resolve.calls.callResolverUtil",
- "org.jetbrains.kotlin.resolve.calls.callUtil",
- "org.jetbrains.kotlin.resolve.calls.checkers",
- "org.jetbrains.kotlin.resolve.calls.components",
- "org.jetbrains.kotlin.resolve.calls.context",
- "org.jetbrains.kotlin.resolve.calls.inference",
- "org.jetbrains.kotlin.resolve.calls.inference.components",
- "org.jetbrains.kotlin.resolve.calls.inference.constraintPosition",
- "org.jetbrains.kotlin.resolve.calls.inference.model",
- "org.jetbrains.kotlin.resolve.calls.model",
- "org.jetbrains.kotlin.resolve.calls.resolvedCallUtil",
- "org.jetbrains.kotlin.resolve.calls.results",
- "org.jetbrains.kotlin.resolve.calls.smartcasts",
- "org.jetbrains.kotlin.resolve.calls.tasks",
- "org.jetbrains.kotlin.resolve.calls.tower",
- "org.jetbrains.kotlin.resolve.calls.util",
- "org.jetbrains.kotlin.resolve.checkers",
- "org.jetbrains.kotlin.resolve.constants",
- "org.jetbrains.kotlin.resolve.constants.evaluate",
- "org.jetbrains.kotlin.resolve.deprecation",
- "org.jetbrains.kotlin.resolve.descriptorUtil",
- "org.jetbrains.kotlin.resolve.diagnostics",
- "org.jetbrains.kotlin.resolve.extensions",
- "org.jetbrains.kotlin.resolve.inline",
- "org.jetbrains.kotlin.resolve.jvm",
- "org.jetbrains.kotlin.resolve.jvm.annotations",
- "org.jetbrains.kotlin.resolve.jvm.checkers",
- "org.jetbrains.kotlin.resolve.jvm.diagnostics",
- "org.jetbrains.kotlin.resolve.jvm.extensions",
- "org.jetbrains.kotlin.resolve.jvm.jvmSignature",
- "org.jetbrains.kotlin.resolve.jvm.kotlinSignature",
- "org.jetbrains.kotlin.resolve.jvm.modules",
- "org.jetbrains.kotlin.resolve.jvm.multiplatform",
- "org.jetbrains.kotlin.resolve.jvm.platform",
- "org.jetbrains.kotlin.resolve.konan.diagnostics",
- "org.jetbrains.kotlin.resolve.konan.platform",
- "org.jetbrains.kotlin.resolve.lazy",
- "org.jetbrains.kotlin.resolve.lazy.data",
- "org.jetbrains.kotlin.resolve.lazy.declarations",
- "org.jetbrains.kotlin.resolve.lazy.descriptors",
- "org.jetbrains.kotlin.resolve.multiplatform",
- "org.jetbrains.kotlin.resolve.repl",
- "org.jetbrains.kotlin.resolve.sam",
- "org.jetbrains.kotlin.resolve.scopes",
- "org.jetbrains.kotlin.resolve.scopes.receivers",
- "org.jetbrains.kotlin.resolve.scopes.synthetic",
- "org.jetbrains.kotlin.resolve.scopes.utils",
- "org.jetbrains.kotlin.resolve.source",
- "org.jetbrains.kotlin.resolve.typeBinding",
- "org.jetbrains.kotlin.serialization",
- "org.jetbrains.kotlin.serialization.builtins",
- "org.jetbrains.kotlin.serialization.deserialization",
- "org.jetbrains.kotlin.serialization.deserialization.builtins",
- "org.jetbrains.kotlin.serialization.deserialization.descriptors",
- "org.jetbrains.kotlin.serialization.js",
- "org.jetbrains.kotlin.serialization.js.ast",
- "org.jetbrains.kotlin.serialization.konan",
- "org.jetbrains.kotlin.serialization.konan.impl",
- "org.jetbrains.kotlin.storage",
- "org.jetbrains.kotlin.synthetic",
- "org.jetbrains.kotlin.type",
- "org.jetbrains.kotlin.types",
- "org.jetbrains.kotlin.types.checker",
- "org.jetbrains.kotlin.types.error",
- "org.jetbrains.kotlin.types.expressions",
- "org.jetbrains.kotlin.types.expressions.typeInfoFactory",
- "org.jetbrains.kotlin.types.expressions.unqualifiedSuper",
- "org.jetbrains.kotlin.types.model",
- "org.jetbrains.kotlin.types.refinement",
- "org.jetbrains.kotlin.types.typeUtil",
- "org.jetbrains.kotlin.types.typesApproximation",
- "org.jetbrains.kotlin.util",
- "org.jetbrains.kotlin.util.capitalizeDecapitalize",
- "org.jetbrains.kotlin.util.collectionUtils",
- "org.jetbrains.kotlin.util.javaslang",
- "org.jetbrains.kotlin.util.slicedMap",
- "org.jetbrains.kotlin.utils",
- "org.jetbrains.kotlin.utils.addToStdlib",
- "org.jetbrains.kotlin.utils.concurrent.block",
- "org.jetbrains.kotlin.utils.fileUtils",
- "org.jetbrains.kotlin.utils.intellij",
- "org.jetbrains.kotlin.utils.kapt",
- "org.jetbrains.kotlin.utils.repl",
- "org.jetbrains.kotlin.utils.strings",
- "org.jetbrains.kotlin.wasm.ir",
- "org.jetbrains.kotlin.wasm.ir.convertors",
- "org.jetbrains.org.objectweb.asm",
- "org.jetbrains.org.objectweb.asm.commons",
- "org.jetbrains.org.objectweb.asm.signature",
- "org.jetbrains.org.objectweb.asm.tree",
- "org.jetbrains.org.objectweb.asm.tree.analysis",
- "org.jetbrains.org.objectweb.asm.util"
- ],
- "org.jetbrains.kotlin:kotlin-daemon-embeddable": [
- "org.jetbrains.kotlin.daemon",
- "org.jetbrains.kotlin.daemon.common",
- "org.jetbrains.kotlin.daemon.experimental",
- "org.jetbrains.kotlin.daemon.report",
- "org.jetbrains.kotlin.daemon.report.experimental"
- ],
- "org.jetbrains.kotlin:kotlin-reflect": [
- "kotlin.reflect.full",
- "kotlin.reflect.jvm",
- "kotlin.reflect.jvm.internal",
- "kotlin.reflect.jvm.internal.calls",
- "kotlin.reflect.jvm.internal.impl",
- "kotlin.reflect.jvm.internal.impl.builtins",
- "kotlin.reflect.jvm.internal.impl.builtins.functions",
- "kotlin.reflect.jvm.internal.impl.builtins.jvm",
- "kotlin.reflect.jvm.internal.impl.descriptors",
- "kotlin.reflect.jvm.internal.impl.descriptors.annotations",
- "kotlin.reflect.jvm.internal.impl.descriptors.deserialization",
- "kotlin.reflect.jvm.internal.impl.descriptors.impl",
- "kotlin.reflect.jvm.internal.impl.descriptors.java",
- "kotlin.reflect.jvm.internal.impl.descriptors.runtime.components",
- "kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure",
- "kotlin.reflect.jvm.internal.impl.incremental",
- "kotlin.reflect.jvm.internal.impl.incremental.components",
- "kotlin.reflect.jvm.internal.impl.load.java",
- "kotlin.reflect.jvm.internal.impl.load.java.components",
- "kotlin.reflect.jvm.internal.impl.load.java.descriptors",
- "kotlin.reflect.jvm.internal.impl.load.java.lazy",
- "kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors",
- "kotlin.reflect.jvm.internal.impl.load.java.lazy.types",
- "kotlin.reflect.jvm.internal.impl.load.java.sources",
- "kotlin.reflect.jvm.internal.impl.load.java.structure",
- "kotlin.reflect.jvm.internal.impl.load.java.typeEnhancement",
- "kotlin.reflect.jvm.internal.impl.load.kotlin",
- "kotlin.reflect.jvm.internal.impl.load.kotlin.header",
- "kotlin.reflect.jvm.internal.impl.metadata",
- "kotlin.reflect.jvm.internal.impl.metadata.builtins",
- "kotlin.reflect.jvm.internal.impl.metadata.deserialization",
- "kotlin.reflect.jvm.internal.impl.metadata.jvm",
- "kotlin.reflect.jvm.internal.impl.metadata.jvm.deserialization",
- "kotlin.reflect.jvm.internal.impl.name",
- "kotlin.reflect.jvm.internal.impl.platform",
- "kotlin.reflect.jvm.internal.impl.protobuf",
- "kotlin.reflect.jvm.internal.impl.renderer",
- "kotlin.reflect.jvm.internal.impl.resolve",
- "kotlin.reflect.jvm.internal.impl.resolve.calls.inference",
- "kotlin.reflect.jvm.internal.impl.resolve.constants",
- "kotlin.reflect.jvm.internal.impl.resolve.deprecation",
- "kotlin.reflect.jvm.internal.impl.resolve.descriptorUtil",
- "kotlin.reflect.jvm.internal.impl.resolve.jvm",
- "kotlin.reflect.jvm.internal.impl.resolve.sam",
- "kotlin.reflect.jvm.internal.impl.resolve.scopes",
- "kotlin.reflect.jvm.internal.impl.resolve.scopes.receivers",
- "kotlin.reflect.jvm.internal.impl.serialization",
- "kotlin.reflect.jvm.internal.impl.serialization.deserialization",
- "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins",
- "kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors",
- "kotlin.reflect.jvm.internal.impl.storage",
- "kotlin.reflect.jvm.internal.impl.types",
- "kotlin.reflect.jvm.internal.impl.types.checker",
- "kotlin.reflect.jvm.internal.impl.types.error",
- "kotlin.reflect.jvm.internal.impl.types.model",
- "kotlin.reflect.jvm.internal.impl.types.typeUtil",
- "kotlin.reflect.jvm.internal.impl.types.typesApproximation",
- "kotlin.reflect.jvm.internal.impl.util",
- "kotlin.reflect.jvm.internal.impl.util.capitalizeDecapitalize",
- "kotlin.reflect.jvm.internal.impl.util.collectionUtils",
- "kotlin.reflect.jvm.internal.impl.utils",
- "kotlin.reflect.jvm.internal.pcollections"
- ],
- "org.jetbrains.kotlin:kotlin-script-runtime": [
- "kotlin.script.dependencies",
- "kotlin.script.experimental.dependencies",
- "kotlin.script.experimental.location",
- "kotlin.script.extensions",
- "kotlin.script.templates",
- "kotlin.script.templates.standard"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib": [
- "kotlin",
- "kotlin.annotation",
- "kotlin.collections",
- "kotlin.collections.builders",
- "kotlin.collections.unsigned",
- "kotlin.comparisons",
- "kotlin.concurrent",
- "kotlin.contracts",
- "kotlin.coroutines",
- "kotlin.coroutines.cancellation",
- "kotlin.coroutines.intrinsics",
- "kotlin.coroutines.jvm.internal",
- "kotlin.experimental",
- "kotlin.internal",
- "kotlin.io",
- "kotlin.js",
- "kotlin.jvm",
- "kotlin.jvm.functions",
- "kotlin.jvm.internal",
- "kotlin.jvm.internal.markers",
- "kotlin.jvm.internal.unsafe",
- "kotlin.math",
- "kotlin.properties",
- "kotlin.random",
- "kotlin.ranges",
- "kotlin.reflect",
- "kotlin.sequences",
- "kotlin.system",
- "kotlin.text",
- "kotlin.time"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [
- "kotlin.internal.jdk7",
- "kotlin.io.path",
- "kotlin.jdk7"
- ],
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [
- "kotlin.collections.jdk8",
- "kotlin.internal.jdk8",
- "kotlin.jvm.jdk8",
- "kotlin.random.jdk8",
- "kotlin.streams.jdk8",
- "kotlin.text.jdk8",
- "kotlin.time.jdk8"
- ],
- "org.jetbrains.kotlin:kotlin-test": [
- "kotlin.test"
- ],
- "org.jetbrains.kotlin:kotlin-test-junit": [
- "kotlin.test.junit",
- "kotlin.test.junit.annotations"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-android": [
- "kotlinx.coroutines.android"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [
- "kotlinx.coroutines",
- "kotlinx.coroutines.channels",
- "kotlinx.coroutines.debug",
- "kotlinx.coroutines.debug.internal",
- "kotlinx.coroutines.flow",
- "kotlinx.coroutines.flow.internal",
- "kotlinx.coroutines.internal",
- "kotlinx.coroutines.intrinsics",
- "kotlinx.coroutines.scheduling",
- "kotlinx.coroutines.selects",
- "kotlinx.coroutines.sync"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava": [
- "kotlinx.coroutines.guava"
- ],
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [
- "kotlinx.coroutines.test",
- "kotlinx.coroutines.test.internal"
- ],
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [
- "kotlinx.metadata",
- "kotlinx.metadata.impl",
- "kotlinx.metadata.impl.extensions",
- "kotlinx.metadata.internal.metadata",
- "kotlinx.metadata.internal.metadata.builtins",
- "kotlinx.metadata.internal.metadata.deserialization",
- "kotlinx.metadata.internal.metadata.jvm",
- "kotlinx.metadata.internal.metadata.jvm.deserialization",
- "kotlinx.metadata.internal.metadata.jvm.serialization",
- "kotlinx.metadata.internal.metadata.serialization",
- "kotlinx.metadata.internal.protobuf",
- "kotlinx.metadata.jvm",
- "kotlinx.metadata.jvm.impl"
- ],
- "org.jetbrains:annotations": [
- "org.intellij.lang.annotations",
- "org.jetbrains.annotations"
- ],
- "org.jvnet.staxex:stax-ex": [
- "org.jvnet.staxex",
- "org.jvnet.staxex.util"
- ],
- "org.mockito.kotlin:mockito-kotlin": [
- "org.mockito.kotlin",
- "org.mockito.kotlin.internal"
- ],
- "org.mockito:mockito-core": [
- "org.mockito",
- "org.mockito.codegen",
- "org.mockito.configuration",
- "org.mockito.creation.instance",
- "org.mockito.exceptions.base",
- "org.mockito.exceptions.misusing",
- "org.mockito.exceptions.stacktrace",
- "org.mockito.exceptions.verification",
- "org.mockito.exceptions.verification.junit",
- "org.mockito.exceptions.verification.opentest4j",
- "org.mockito.hamcrest",
- "org.mockito.internal",
- "org.mockito.internal.configuration",
- "org.mockito.internal.configuration.injection",
- "org.mockito.internal.configuration.injection.filter",
- "org.mockito.internal.configuration.injection.scanner",
- "org.mockito.internal.configuration.plugins",
- "org.mockito.internal.creation",
- "org.mockito.internal.creation.bytebuddy",
- "org.mockito.internal.creation.instance",
- "org.mockito.internal.creation.settings",
- "org.mockito.internal.creation.util",
- "org.mockito.internal.debugging",
- "org.mockito.internal.exceptions",
- "org.mockito.internal.exceptions.stacktrace",
- "org.mockito.internal.exceptions.util",
- "org.mockito.internal.framework",
- "org.mockito.internal.hamcrest",
- "org.mockito.internal.handler",
- "org.mockito.internal.invocation",
- "org.mockito.internal.invocation.finder",
- "org.mockito.internal.invocation.mockref",
- "org.mockito.internal.junit",
- "org.mockito.internal.junit.util",
- "org.mockito.internal.listeners",
- "org.mockito.internal.matchers",
- "org.mockito.internal.matchers.apachecommons",
- "org.mockito.internal.matchers.text",
- "org.mockito.internal.progress",
- "org.mockito.internal.reporting",
- "org.mockito.internal.runners",
- "org.mockito.internal.runners.util",
- "org.mockito.internal.session",
- "org.mockito.internal.stubbing",
- "org.mockito.internal.stubbing.answers",
- "org.mockito.internal.stubbing.defaultanswers",
- "org.mockito.internal.util",
- "org.mockito.internal.util.collections",
- "org.mockito.internal.util.concurrent",
- "org.mockito.internal.util.io",
- "org.mockito.internal.util.reflection",
- "org.mockito.internal.verification",
- "org.mockito.internal.verification.api",
- "org.mockito.internal.verification.argumentmatching",
- "org.mockito.internal.verification.checkers",
- "org.mockito.invocation",
- "org.mockito.junit",
- "org.mockito.listeners",
- "org.mockito.mock",
- "org.mockito.plugins",
- "org.mockito.quality",
- "org.mockito.runners",
- "org.mockito.session",
- "org.mockito.stubbing",
- "org.mockito.verification"
- ],
- "org.objenesis:objenesis": [
- "org.objenesis",
- "org.objenesis.instantiator",
- "org.objenesis.instantiator.android",
- "org.objenesis.instantiator.annotations",
- "org.objenesis.instantiator.basic",
- "org.objenesis.instantiator.gcj",
- "org.objenesis.instantiator.perc",
- "org.objenesis.instantiator.sun",
- "org.objenesis.instantiator.util",
- "org.objenesis.strategy"
- ],
- "org.ow2.asm:asm": [
- "org.objectweb.asm",
- "org.objectweb.asm.signature"
- ],
- "org.ow2.asm:asm-analysis": [
- "org.objectweb.asm.tree.analysis"
- ],
- "org.ow2.asm:asm-commons": [
- "org.objectweb.asm.commons"
- ],
- "org.ow2.asm:asm-tree": [
- "org.objectweb.asm.tree"
- ],
- "org.ow2.asm:asm-util": [
- "org.objectweb.asm.util"
- ],
- "org.robolectric:annotations": [
- "org.robolectric.annotation",
- "org.robolectric.annotation.experimental",
- "org.robolectric.annotation.internal",
- "org.robolectric.shadow.api"
- ],
- "org.robolectric:junit": [
- "org.robolectric.internal"
- ],
- "org.robolectric:nativeruntime": [
- "org.robolectric.nativeruntime"
- ],
- "org.robolectric:pluginapi": [
- "org.robolectric.internal.dependency",
- "org.robolectric.pluginapi",
- "org.robolectric.pluginapi.config",
- "org.robolectric.pluginapi.perf"
- ],
- "org.robolectric:plugins-maven-dependency-resolver": [
- "org.robolectric",
- "org.robolectric.internal.dependency"
- ],
- "org.robolectric:resources": [
- "org.robolectric",
- "org.robolectric.manifest",
- "org.robolectric.res",
- "org.robolectric.res.android",
- "org.robolectric.res.builder"
- ],
- "org.robolectric:robolectric": [
- "org.robolectric",
- "org.robolectric.android",
- "org.robolectric.android.internal",
- "org.robolectric.internal",
- "org.robolectric.internal.dependency",
- "org.robolectric.junit.rules",
- "org.robolectric.plugins",
- "org.robolectric.util"
- ],
- "org.robolectric:sandbox": [
- "org.robolectric.config",
- "org.robolectric.fakes",
- "org.robolectric.interceptors",
- "org.robolectric.internal.bytecode",
- "org.robolectric.sandbox",
- "org.robolectric.util"
- ],
- "org.robolectric:shadowapi": [
- "org.robolectric.annotation.internal",
- "org.robolectric.config",
- "org.robolectric.internal",
- "org.robolectric.shadow.api",
- "org.robolectric.util"
- ],
- "org.robolectric:shadows-framework": [
- "android.media",
- "android.webkit",
- "org.robolectric",
- "org.robolectric.android",
- "org.robolectric.android.controller",
- "org.robolectric.android.internal",
- "org.robolectric.android.util.concurrent",
- "org.robolectric.fakes",
- "org.robolectric.shadows",
- "org.robolectric.shadows.util"
- ],
- "org.robolectric:utils": [
- "org.robolectric",
- "org.robolectric.util",
- "org.robolectric.util.inject"
- ],
- "org.robolectric:utils-reflector": [
- "org.robolectric.util.reflector"
- ],
- "org.smali:baksmali": [
- "org.jf.baksmali",
- "org.jf.baksmali.Adaptors",
- "org.jf.baksmali.Adaptors.Debug",
- "org.jf.baksmali.Adaptors.EncodedValue",
- "org.jf.baksmali.Adaptors.Format",
- "org.jf.baksmali.Renderers"
- ],
- "org.smali:dexlib2": [
- "org.jf.dexlib2",
- "org.jf.dexlib2.analysis",
- "org.jf.dexlib2.analysis.reflection",
- "org.jf.dexlib2.analysis.reflection.util",
- "org.jf.dexlib2.analysis.util",
- "org.jf.dexlib2.base",
- "org.jf.dexlib2.base.reference",
- "org.jf.dexlib2.base.value",
- "org.jf.dexlib2.builder",
- "org.jf.dexlib2.builder.debug",
- "org.jf.dexlib2.builder.instruction",
- "org.jf.dexlib2.dexbacked",
- "org.jf.dexlib2.dexbacked.instruction",
- "org.jf.dexlib2.dexbacked.raw",
- "org.jf.dexlib2.dexbacked.raw.util",
- "org.jf.dexlib2.dexbacked.reference",
- "org.jf.dexlib2.dexbacked.util",
- "org.jf.dexlib2.dexbacked.value",
- "org.jf.dexlib2.iface",
- "org.jf.dexlib2.iface.debug",
- "org.jf.dexlib2.iface.instruction",
- "org.jf.dexlib2.iface.instruction.formats",
- "org.jf.dexlib2.iface.reference",
- "org.jf.dexlib2.iface.value",
- "org.jf.dexlib2.immutable",
- "org.jf.dexlib2.immutable.debug",
- "org.jf.dexlib2.immutable.instruction",
- "org.jf.dexlib2.immutable.reference",
- "org.jf.dexlib2.immutable.util",
- "org.jf.dexlib2.immutable.value",
- "org.jf.dexlib2.rewriter",
- "org.jf.dexlib2.util",
- "org.jf.dexlib2.writer",
- "org.jf.dexlib2.writer.builder",
- "org.jf.dexlib2.writer.io",
- "org.jf.dexlib2.writer.pool",
- "org.jf.dexlib2.writer.util"
- ],
- "org.smali:util": [
- "org.jf.util",
- "org.jf.util.jcommander"
- ],
- "org.snakeyaml:snakeyaml-engine": [
- "org.snakeyaml.engine.external.com.google.gdata.util.common.base",
- "org.snakeyaml.engine.v2.api",
- "org.snakeyaml.engine.v2.api.lowlevel",
- "org.snakeyaml.engine.v2.comments",
- "org.snakeyaml.engine.v2.common",
- "org.snakeyaml.engine.v2.composer",
- "org.snakeyaml.engine.v2.constructor",
- "org.snakeyaml.engine.v2.constructor.core",
- "org.snakeyaml.engine.v2.constructor.json",
- "org.snakeyaml.engine.v2.emitter",
- "org.snakeyaml.engine.v2.env",
- "org.snakeyaml.engine.v2.events",
- "org.snakeyaml.engine.v2.exceptions",
- "org.snakeyaml.engine.v2.nodes",
- "org.snakeyaml.engine.v2.parser",
- "org.snakeyaml.engine.v2.representer",
- "org.snakeyaml.engine.v2.resolver",
- "org.snakeyaml.engine.v2.scanner",
- "org.snakeyaml.engine.v2.schema",
- "org.snakeyaml.engine.v2.serializer",
- "org.snakeyaml.engine.v2.tokens"
- ],
- "xerces:xercesImpl": [
- "org.apache.html.dom",
- "org.apache.wml",
- "org.apache.wml.dom",
- "org.apache.xerces.dom",
- "org.apache.xerces.dom.events",
- "org.apache.xerces.dom3.as",
- "org.apache.xerces.impl",
- "org.apache.xerces.impl.dtd",
- "org.apache.xerces.impl.dtd.models",
- "org.apache.xerces.impl.dv",
- "org.apache.xerces.impl.dv.dtd",
- "org.apache.xerces.impl.dv.util",
- "org.apache.xerces.impl.dv.xs",
- "org.apache.xerces.impl.io",
- "org.apache.xerces.impl.msg",
- "org.apache.xerces.impl.validation",
- "org.apache.xerces.impl.xpath",
- "org.apache.xerces.impl.xpath.regex",
- "org.apache.xerces.impl.xs",
- "org.apache.xerces.impl.xs.identity",
- "org.apache.xerces.impl.xs.models",
- "org.apache.xerces.impl.xs.opti",
- "org.apache.xerces.impl.xs.traversers",
- "org.apache.xerces.impl.xs.util",
- "org.apache.xerces.jaxp",
- "org.apache.xerces.jaxp.datatype",
- "org.apache.xerces.jaxp.validation",
- "org.apache.xerces.parsers",
- "org.apache.xerces.stax",
- "org.apache.xerces.stax.events",
- "org.apache.xerces.util",
- "org.apache.xerces.xinclude",
- "org.apache.xerces.xni",
- "org.apache.xerces.xni.grammars",
- "org.apache.xerces.xni.parser",
- "org.apache.xerces.xpointer",
- "org.apache.xerces.xs",
- "org.apache.xerces.xs.datatypes",
- "org.apache.xml.serialize",
- "org.w3c.dom.html"
- ],
- "xml-apis:xml-apis": [
- "javax.xml",
- "javax.xml.datatype",
- "javax.xml.namespace",
- "javax.xml.parsers",
- "javax.xml.stream",
- "javax.xml.stream.events",
- "javax.xml.stream.util",
- "javax.xml.transform",
- "javax.xml.transform.dom",
- "javax.xml.transform.sax",
- "javax.xml.transform.stax",
- "javax.xml.transform.stream",
- "javax.xml.validation",
- "javax.xml.xpath",
- "org.apache.xmlcommons",
- "org.w3c.dom",
- "org.w3c.dom.bootstrap",
- "org.w3c.dom.css",
- "org.w3c.dom.events",
- "org.w3c.dom.html",
- "org.w3c.dom.ls",
- "org.w3c.dom.ranges",
- "org.w3c.dom.stylesheets",
- "org.w3c.dom.traversal",
- "org.w3c.dom.views",
- "org.w3c.dom.xpath",
- "org.xml.sax",
- "org.xml.sax.ext",
- "org.xml.sax.helpers"
- ]
- },
- "repositories": {
- "https://maven.google.com/": [
- "androidx.activity:activity-compose:aar",
- "androidx.activity:activity-ktx:aar",
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.appcompat:appcompat-resources:aar",
- "androidx.appcompat:appcompat:aar",
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.arch.core:core-testing:aar",
- "androidx.autofill:autofill:aar",
- "androidx.cardview:cardview:aar",
- "androidx.collection:collection",
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.compiler:compiler",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.material:material-icons-core:aar",
- "androidx.compose.material:material-ripple:aar",
- "androidx.compose.material:material:aar",
- "androidx.compose.runtime:runtime-livedata:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-test-junit4:aar",
- "androidx.compose.ui:ui-test:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.concurrent:concurrent-futures",
- "androidx.constraintlayout:constraintlayout-solver",
- "androidx.constraintlayout:constraintlayout:aar",
- "androidx.coordinatorlayout:coordinatorlayout:aar",
- "androidx.core:core-ktx:aar",
- "androidx.core:core:aar",
- "androidx.cursoradapter:cursoradapter:aar",
- "androidx.customview:customview:aar",
- "androidx.databinding:databinding-adapters:aar",
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-compiler",
- "androidx.databinding:databinding-compiler-common",
- "androidx.databinding:databinding-runtime:aar",
- "androidx.documentfile:documentfile:aar",
- "androidx.drawerlayout:drawerlayout:aar",
- "androidx.dynamicanimation:dynamicanimation:aar",
- "androidx.exifinterface:exifinterface:aar",
- "androidx.fragment:fragment:aar",
- "androidx.interpolator:interpolator:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-common-java8",
- "androidx.lifecycle:lifecycle-extensions:aar",
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-livedata-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-process:aar",
- "androidx.lifecycle:lifecycle-runtime-ktx:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.loader:loader:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "androidx.multidex:multidex-instrumentation:aar",
- "androidx.multidex:multidex:aar",
- "androidx.navigation:navigation-common-ktx:aar",
- "androidx.navigation:navigation-common:aar",
- "androidx.navigation:navigation-fragment-ktx:aar",
- "androidx.navigation:navigation-fragment:aar",
- "androidx.navigation:navigation-runtime-ktx:aar",
- "androidx.navigation:navigation-runtime:aar",
- "androidx.navigation:navigation-ui-ktx:aar",
- "androidx.navigation:navigation-ui:aar",
- "androidx.print:print:aar",
- "androidx.profileinstaller:profileinstaller:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.room:room-common",
- "androidx.room:room-runtime:aar",
- "androidx.savedstate:savedstate-ktx:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar",
- "androidx.startup:startup-runtime:aar",
- "androidx.test.espresso:espresso-accessibility:aar",
- "androidx.test.espresso:espresso-contrib:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test.espresso:espresso-intents:aar",
- "androidx.test.ext:junit:aar",
- "androidx.test.ext:truth:aar",
- "androidx.test.services:storage:aar",
- "androidx.test.uiautomator:uiautomator:aar",
- "androidx.test:annotation:aar",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "androidx.test:rules:aar",
- "androidx.test:runner:aar",
- "androidx.tracing:tracing:aar",
- "androidx.transition:transition:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "androidx.vectordrawable:vectordrawable:aar",
- "androidx.versionedparcelable:versionedparcelable:aar",
- "androidx.viewpager2:viewpager2:aar",
- "androidx.viewpager:viewpager:aar",
- "androidx.work:work-runtime-ktx:aar",
- "androidx.work:work-runtime:aar",
- "androidx.work:work-testing:aar",
- "com.almworks.sqlite4java:sqlite4java",
- "com.android.databinding:baseLibrary",
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools.analytics-library:tracker",
- "com.android.tools.apkparser:apkanalyzer",
- "com.android.tools.apkparser:binary-resources",
- "com.android.tools.build.jetifier:jetifier-core",
- "com.android.tools.build:aapt2-proto",
- "com.android.tools.build:builder-model",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.ddms:ddmlib",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools.lint:lint-model",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.android.tools:dvlib",
- "com.android.tools:repository",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.beust:jcommander",
- "com.crashlytics.sdk.android:answers:aar",
- "com.crashlytics.sdk.android:beta:aar",
- "com.crashlytics.sdk.android:crashlytics-core:aar",
- "com.crashlytics.sdk.android:crashlytics:aar",
- "com.github.bumptech.glide:annotations",
- "com.github.bumptech.glide:compiler",
- "com.github.bumptech.glide:disklrucache",
- "com.github.bumptech.glide:gifdecoder:aar",
- "com.github.bumptech.glide:glide:aar",
- "com.github.bumptech.glide:mocks:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-backend-cct:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.android.flexbox:flexbox:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-api:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-measurement-sdk-api:aar",
- "com.google.android.gms:play-services-measurement-sdk:aar",
- "com.google.android.gms:play-services-measurement:aar",
- "com.google.android.gms:play-services-stats:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.android.gms:strict-version-matcher-plugin",
- "com.google.android.material:material:aar",
- "com.google.android.play:integrity:aar",
- "com.google.android:annotations",
- "com.google.auto.service:auto-service-annotations",
- "com.google.auto.value:auto-value-annotations",
- "com.google.code.findbugs:jsr305",
- "com.google.code.gson:gson",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-compiler",
- "com.google.dagger:dagger-producers",
- "com.google.dagger:dagger-spi",
- "com.google.devtools.ksp:symbol-processing-api",
- "com.google.errorprone:error_prone_annotations",
- "com.google.errorprone:javac-shaded",
- "com.google.firebase:firebase-analytics:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-appcheck-debug:aar",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-appcheck-playintegrity:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-auth-ktx:aar",
- "com.google.firebase:firebase-auth:aar",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-crashlytics:aar",
- "com.google.firebase:firebase-database-collection:aar",
- "com.google.firebase:firebase-encoders-json:aar",
- "com.google.firebase:firebase-firestore-ktx:aar",
- "com.google.firebase:firebase-firestore:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-iid:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar",
- "com.google.firebase:firebase-measurement-connector:aar",
- "com.google.firebase:protolite-well-known-types:aar",
- "com.google.gms:google-services",
- "com.google.googlejavaformat:google-java-format",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.google.guava:listenablefuture",
- "com.google.j2objc:j2objc-annotations",
- "com.google.jimfs:jimfs",
- "com.google.protobuf:protobuf-java",
- "com.google.protobuf:protobuf-java-util",
- "com.google.protobuf:protobuf-javalite",
- "com.google.truth.extensions:truth-liteproto-extension",
- "com.google.truth:truth",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "com.ibm.icu:icu4j",
- "com.squareup.moshi:moshi",
- "com.squareup.moshi:moshi-kotlin",
- "com.squareup.moshi:moshi-kotlin-codegen",
- "com.squareup.okhttp3:mockwebserver",
- "com.squareup.okhttp3:okhttp",
- "com.squareup.okhttp:okhttp",
- "com.squareup.okio:okio",
- "com.squareup.retrofit2:converter-moshi",
- "com.squareup.retrofit2:retrofit",
- "com.squareup.retrofit2:retrofit-mock",
- "com.squareup:javapoet",
- "com.squareup:javawriter",
- "com.squareup:kotlinpoet",
- "com.sun.activation:javax.activation",
- "com.sun.istack:istack-commons-runtime",
- "com.sun.xml.fastinfoset:FastInfoset",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "commons-logging:commons-logging",
- "io.fabric.sdk.android:fabric:aar",
- "io.grpc:grpc-android:aar",
- "io.grpc:grpc-api",
- "io.grpc:grpc-context",
- "io.grpc:grpc-core",
- "io.grpc:grpc-okhttp",
- "io.grpc:grpc-protobuf-lite",
- "io.grpc:grpc-stub",
- "io.perfmark:perfmark-api",
- "io.xlate:yaml-json",
- "jakarta.activation:jakarta.activation-api",
- "jakarta.json:jakarta.json-api",
- "jakarta.xml.bind:jakarta.xml.bind-api",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "junit:junit",
- "net.bytebuddy:byte-buddy",
- "net.bytebuddy:byte-buddy-agent",
- "net.java.dev.jna:jna",
- "net.java.dev.jna:jna-platform",
- "net.ltgt.gradle.incap:incap",
- "net.sf.kxml:kxml2",
- "nl.dionsegijn:konfetti:aar",
- "org.antlr:antlr4",
- "org.apache.commons:commons-compress",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpmime",
- "org.bouncycastle:bcpkix-jdk15on",
- "org.bouncycastle:bcprov-jdk15on",
- "org.checkerframework:checker-compat-qual",
- "org.checkerframework:checker-qual",
- "org.codehaus.mojo:animal-sniffer-annotations",
- "org.eclipse.parsson:parsson",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.glassfish.jaxb:txw2",
- "org.hamcrest:hamcrest-core",
- "org.hamcrest:hamcrest-integration",
- "org.hamcrest:hamcrest-library",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-compiler-embeddable",
- "org.jetbrains.kotlin:kotlin-daemon-embeddable",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-script-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlin:kotlin-test",
- "org.jetbrains.kotlin:kotlin-test-annotations-common",
- "org.jetbrains.kotlin:kotlin-test-common",
- "org.jetbrains.kotlin:kotlin-test-junit",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
- "org.jetbrains:annotations",
- "org.jvnet.staxex:stax-ex",
- "org.mockito.kotlin:mockito-kotlin",
- "org.mockito:mockito-core",
- "org.objenesis:objenesis",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-commons",
- "org.ow2.asm:asm-tree",
- "org.ow2.asm:asm-util",
- "org.robolectric:annotations",
- "org.robolectric:junit",
- "org.robolectric:nativeruntime",
- "org.robolectric:pluginapi",
- "org.robolectric:plugins-maven-dependency-resolver",
- "org.robolectric:resources",
- "org.robolectric:robolectric",
- "org.robolectric:sandbox",
- "org.robolectric:shadowapi",
- "org.robolectric:shadows-framework",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector",
- "org.smali:baksmali",
- "org.smali:dexlib2",
- "org.smali:util",
- "org.snakeyaml:snakeyaml-engine",
- "xerces:xercesImpl",
- "xml-apis:xml-apis"
- ],
- "https://repo1.maven.org/maven2/": [
- "androidx.activity:activity-compose:aar",
- "androidx.activity:activity-ktx:aar",
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.appcompat:appcompat-resources:aar",
- "androidx.appcompat:appcompat:aar",
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.arch.core:core-testing:aar",
- "androidx.autofill:autofill:aar",
- "androidx.cardview:cardview:aar",
- "androidx.collection:collection",
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.compiler:compiler",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.material:material-icons-core:aar",
- "androidx.compose.material:material-ripple:aar",
- "androidx.compose.material:material:aar",
- "androidx.compose.runtime:runtime-livedata:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-test-junit4:aar",
- "androidx.compose.ui:ui-test:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.concurrent:concurrent-futures",
- "androidx.constraintlayout:constraintlayout-solver",
- "androidx.constraintlayout:constraintlayout:aar",
- "androidx.coordinatorlayout:coordinatorlayout:aar",
- "androidx.core:core-ktx:aar",
- "androidx.core:core:aar",
- "androidx.cursoradapter:cursoradapter:aar",
- "androidx.customview:customview:aar",
- "androidx.databinding:databinding-adapters:aar",
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-compiler",
- "androidx.databinding:databinding-compiler-common",
- "androidx.databinding:databinding-runtime:aar",
- "androidx.documentfile:documentfile:aar",
- "androidx.drawerlayout:drawerlayout:aar",
- "androidx.dynamicanimation:dynamicanimation:aar",
- "androidx.exifinterface:exifinterface:aar",
- "androidx.fragment:fragment:aar",
- "androidx.interpolator:interpolator:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-common-java8",
- "androidx.lifecycle:lifecycle-extensions:aar",
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-livedata-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-process:aar",
- "androidx.lifecycle:lifecycle-runtime-ktx:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.loader:loader:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "androidx.multidex:multidex-instrumentation:aar",
- "androidx.multidex:multidex:aar",
- "androidx.navigation:navigation-common-ktx:aar",
- "androidx.navigation:navigation-common:aar",
- "androidx.navigation:navigation-fragment-ktx:aar",
- "androidx.navigation:navigation-fragment:aar",
- "androidx.navigation:navigation-runtime-ktx:aar",
- "androidx.navigation:navigation-runtime:aar",
- "androidx.navigation:navigation-ui-ktx:aar",
- "androidx.navigation:navigation-ui:aar",
- "androidx.print:print:aar",
- "androidx.profileinstaller:profileinstaller:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.room:room-common",
- "androidx.room:room-runtime:aar",
- "androidx.savedstate:savedstate-ktx:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar",
- "androidx.startup:startup-runtime:aar",
- "androidx.test.espresso:espresso-accessibility:aar",
- "androidx.test.espresso:espresso-contrib:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test.espresso:espresso-intents:aar",
- "androidx.test.ext:junit:aar",
- "androidx.test.ext:truth:aar",
- "androidx.test.services:storage:aar",
- "androidx.test.uiautomator:uiautomator:aar",
- "androidx.test:annotation:aar",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "androidx.test:rules:aar",
- "androidx.test:runner:aar",
- "androidx.tracing:tracing:aar",
- "androidx.transition:transition:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "androidx.vectordrawable:vectordrawable:aar",
- "androidx.versionedparcelable:versionedparcelable:aar",
- "androidx.viewpager2:viewpager2:aar",
- "androidx.viewpager:viewpager:aar",
- "androidx.work:work-runtime-ktx:aar",
- "androidx.work:work-runtime:aar",
- "androidx.work:work-testing:aar",
- "com.almworks.sqlite4java:sqlite4java",
- "com.android.databinding:baseLibrary",
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools.analytics-library:tracker",
- "com.android.tools.apkparser:apkanalyzer",
- "com.android.tools.apkparser:binary-resources",
- "com.android.tools.build.jetifier:jetifier-core",
- "com.android.tools.build:aapt2-proto",
- "com.android.tools.build:builder-model",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.ddms:ddmlib",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools.lint:lint-model",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.android.tools:dvlib",
- "com.android.tools:repository",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.beust:jcommander",
- "com.crashlytics.sdk.android:answers:aar",
- "com.crashlytics.sdk.android:beta:aar",
- "com.crashlytics.sdk.android:crashlytics-core:aar",
- "com.crashlytics.sdk.android:crashlytics:aar",
- "com.github.bumptech.glide:annotations",
- "com.github.bumptech.glide:compiler",
- "com.github.bumptech.glide:disklrucache",
- "com.github.bumptech.glide:gifdecoder:aar",
- "com.github.bumptech.glide:glide:aar",
- "com.github.bumptech.glide:mocks:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-backend-cct:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.android.flexbox:flexbox:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-api:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-measurement-sdk-api:aar",
- "com.google.android.gms:play-services-measurement-sdk:aar",
- "com.google.android.gms:play-services-measurement:aar",
- "com.google.android.gms:play-services-stats:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.android.gms:strict-version-matcher-plugin",
- "com.google.android.material:material:aar",
- "com.google.android.play:integrity:aar",
- "com.google.android:annotations",
- "com.google.auto.service:auto-service-annotations",
- "com.google.auto.value:auto-value-annotations",
- "com.google.code.findbugs:jsr305",
- "com.google.code.gson:gson",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-compiler",
- "com.google.dagger:dagger-producers",
- "com.google.dagger:dagger-spi",
- "com.google.devtools.ksp:symbol-processing-api",
- "com.google.errorprone:error_prone_annotations",
- "com.google.errorprone:javac-shaded",
- "com.google.firebase:firebase-analytics:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-appcheck-debug:aar",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-appcheck-playintegrity:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-auth-ktx:aar",
- "com.google.firebase:firebase-auth:aar",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-crashlytics:aar",
- "com.google.firebase:firebase-database-collection:aar",
- "com.google.firebase:firebase-encoders-json:aar",
- "com.google.firebase:firebase-firestore-ktx:aar",
- "com.google.firebase:firebase-firestore:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-iid:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar",
- "com.google.firebase:firebase-measurement-connector:aar",
- "com.google.firebase:protolite-well-known-types:aar",
- "com.google.gms:google-services",
- "com.google.googlejavaformat:google-java-format",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.google.guava:listenablefuture",
- "com.google.j2objc:j2objc-annotations",
- "com.google.jimfs:jimfs",
- "com.google.protobuf:protobuf-java",
- "com.google.protobuf:protobuf-java-util",
- "com.google.protobuf:protobuf-javalite",
- "com.google.truth.extensions:truth-liteproto-extension",
- "com.google.truth:truth",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "com.ibm.icu:icu4j",
- "com.squareup.moshi:moshi",
- "com.squareup.moshi:moshi-kotlin",
- "com.squareup.moshi:moshi-kotlin-codegen",
- "com.squareup.okhttp3:mockwebserver",
- "com.squareup.okhttp3:okhttp",
- "com.squareup.okhttp:okhttp",
- "com.squareup.okio:okio",
- "com.squareup.retrofit2:converter-moshi",
- "com.squareup.retrofit2:retrofit",
- "com.squareup.retrofit2:retrofit-mock",
- "com.squareup:javapoet",
- "com.squareup:javawriter",
- "com.squareup:kotlinpoet",
- "com.sun.activation:javax.activation",
- "com.sun.istack:istack-commons-runtime",
- "com.sun.xml.fastinfoset:FastInfoset",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "commons-logging:commons-logging",
- "io.fabric.sdk.android:fabric:aar",
- "io.grpc:grpc-android:aar",
- "io.grpc:grpc-api",
- "io.grpc:grpc-context",
- "io.grpc:grpc-core",
- "io.grpc:grpc-okhttp",
- "io.grpc:grpc-protobuf-lite",
- "io.grpc:grpc-stub",
- "io.perfmark:perfmark-api",
- "io.xlate:yaml-json",
- "jakarta.activation:jakarta.activation-api",
- "jakarta.json:jakarta.json-api",
- "jakarta.xml.bind:jakarta.xml.bind-api",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "junit:junit",
- "net.bytebuddy:byte-buddy",
- "net.bytebuddy:byte-buddy-agent",
- "net.java.dev.jna:jna",
- "net.java.dev.jna:jna-platform",
- "net.ltgt.gradle.incap:incap",
- "net.sf.kxml:kxml2",
- "nl.dionsegijn:konfetti:aar",
- "org.antlr:antlr4",
- "org.apache.commons:commons-compress",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpmime",
- "org.bouncycastle:bcpkix-jdk15on",
- "org.bouncycastle:bcprov-jdk15on",
- "org.checkerframework:checker-compat-qual",
- "org.checkerframework:checker-qual",
- "org.codehaus.mojo:animal-sniffer-annotations",
- "org.eclipse.parsson:parsson",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.glassfish.jaxb:txw2",
- "org.hamcrest:hamcrest-core",
- "org.hamcrest:hamcrest-integration",
- "org.hamcrest:hamcrest-library",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-compiler-embeddable",
- "org.jetbrains.kotlin:kotlin-daemon-embeddable",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-script-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlin:kotlin-test",
- "org.jetbrains.kotlin:kotlin-test-annotations-common",
- "org.jetbrains.kotlin:kotlin-test-common",
- "org.jetbrains.kotlin:kotlin-test-junit",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
- "org.jetbrains:annotations",
- "org.jvnet.staxex:stax-ex",
- "org.mockito.kotlin:mockito-kotlin",
- "org.mockito:mockito-core",
- "org.objenesis:objenesis",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-commons",
- "org.ow2.asm:asm-tree",
- "org.ow2.asm:asm-util",
- "org.robolectric:annotations",
- "org.robolectric:junit",
- "org.robolectric:nativeruntime",
- "org.robolectric:pluginapi",
- "org.robolectric:plugins-maven-dependency-resolver",
- "org.robolectric:resources",
- "org.robolectric:robolectric",
- "org.robolectric:sandbox",
- "org.robolectric:shadowapi",
- "org.robolectric:shadows-framework",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector",
- "org.smali:baksmali",
- "org.smali:dexlib2",
- "org.smali:util",
- "org.snakeyaml:snakeyaml-engine",
- "xerces:xercesImpl",
- "xml-apis:xml-apis"
- ],
- "https://oss.sonatype.org/content/repositories/snapshots/": [
- "androidx.activity:activity-compose:aar",
- "androidx.activity:activity-ktx:aar",
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.appcompat:appcompat-resources:aar",
- "androidx.appcompat:appcompat:aar",
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.arch.core:core-testing:aar",
- "androidx.autofill:autofill:aar",
- "androidx.cardview:cardview:aar",
- "androidx.collection:collection",
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.compiler:compiler",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.material:material-icons-core:aar",
- "androidx.compose.material:material-ripple:aar",
- "androidx.compose.material:material:aar",
- "androidx.compose.runtime:runtime-livedata:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-test-junit4:aar",
- "androidx.compose.ui:ui-test:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.concurrent:concurrent-futures",
- "androidx.constraintlayout:constraintlayout-solver",
- "androidx.constraintlayout:constraintlayout:aar",
- "androidx.coordinatorlayout:coordinatorlayout:aar",
- "androidx.core:core-ktx:aar",
- "androidx.core:core:aar",
- "androidx.cursoradapter:cursoradapter:aar",
- "androidx.customview:customview:aar",
- "androidx.databinding:databinding-adapters:aar",
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-compiler",
- "androidx.databinding:databinding-compiler-common",
- "androidx.databinding:databinding-runtime:aar",
- "androidx.documentfile:documentfile:aar",
- "androidx.drawerlayout:drawerlayout:aar",
- "androidx.dynamicanimation:dynamicanimation:aar",
- "androidx.exifinterface:exifinterface:aar",
- "androidx.fragment:fragment:aar",
- "androidx.interpolator:interpolator:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-common-java8",
- "androidx.lifecycle:lifecycle-extensions:aar",
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-livedata-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-process:aar",
- "androidx.lifecycle:lifecycle-runtime-ktx:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.loader:loader:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "androidx.multidex:multidex-instrumentation:aar",
- "androidx.multidex:multidex:aar",
- "androidx.navigation:navigation-common-ktx:aar",
- "androidx.navigation:navigation-common:aar",
- "androidx.navigation:navigation-fragment-ktx:aar",
- "androidx.navigation:navigation-fragment:aar",
- "androidx.navigation:navigation-runtime-ktx:aar",
- "androidx.navigation:navigation-runtime:aar",
- "androidx.navigation:navigation-ui-ktx:aar",
- "androidx.navigation:navigation-ui:aar",
- "androidx.print:print:aar",
- "androidx.profileinstaller:profileinstaller:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.room:room-common",
- "androidx.room:room-runtime:aar",
- "androidx.savedstate:savedstate-ktx:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar",
- "androidx.startup:startup-runtime:aar",
- "androidx.test.espresso:espresso-accessibility:aar",
- "androidx.test.espresso:espresso-contrib:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test.espresso:espresso-intents:aar",
- "androidx.test.ext:junit:aar",
- "androidx.test.ext:truth:aar",
- "androidx.test.services:storage:aar",
- "androidx.test.uiautomator:uiautomator:aar",
- "androidx.test:annotation:aar",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "androidx.test:rules:aar",
- "androidx.test:runner:aar",
- "androidx.tracing:tracing:aar",
- "androidx.transition:transition:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "androidx.vectordrawable:vectordrawable:aar",
- "androidx.versionedparcelable:versionedparcelable:aar",
- "androidx.viewpager2:viewpager2:aar",
- "androidx.viewpager:viewpager:aar",
- "androidx.work:work-runtime-ktx:aar",
- "androidx.work:work-runtime:aar",
- "androidx.work:work-testing:aar",
- "com.almworks.sqlite4java:sqlite4java",
- "com.android.databinding:baseLibrary",
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools.analytics-library:tracker",
- "com.android.tools.apkparser:apkanalyzer",
- "com.android.tools.apkparser:binary-resources",
- "com.android.tools.build.jetifier:jetifier-core",
- "com.android.tools.build:aapt2-proto",
- "com.android.tools.build:builder-model",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.ddms:ddmlib",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools.lint:lint-model",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.android.tools:dvlib",
- "com.android.tools:repository",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.beust:jcommander",
- "com.crashlytics.sdk.android:answers:aar",
- "com.crashlytics.sdk.android:beta:aar",
- "com.crashlytics.sdk.android:crashlytics-core:aar",
- "com.crashlytics.sdk.android:crashlytics:aar",
- "com.github.bumptech.glide:annotations",
- "com.github.bumptech.glide:compiler",
- "com.github.bumptech.glide:disklrucache",
- "com.github.bumptech.glide:gifdecoder:aar",
- "com.github.bumptech.glide:glide:aar",
- "com.github.bumptech.glide:mocks:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-backend-cct:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.android.flexbox:flexbox:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-api:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-measurement-sdk-api:aar",
- "com.google.android.gms:play-services-measurement-sdk:aar",
- "com.google.android.gms:play-services-measurement:aar",
- "com.google.android.gms:play-services-stats:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.android.gms:strict-version-matcher-plugin",
- "com.google.android.material:material:aar",
- "com.google.android.play:integrity:aar",
- "com.google.android:annotations",
- "com.google.auto.service:auto-service-annotations",
- "com.google.auto.value:auto-value-annotations",
- "com.google.code.findbugs:jsr305",
- "com.google.code.gson:gson",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-compiler",
- "com.google.dagger:dagger-producers",
- "com.google.dagger:dagger-spi",
- "com.google.devtools.ksp:symbol-processing-api",
- "com.google.errorprone:error_prone_annotations",
- "com.google.errorprone:javac-shaded",
- "com.google.firebase:firebase-analytics:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-appcheck-debug:aar",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-appcheck-playintegrity:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-auth-ktx:aar",
- "com.google.firebase:firebase-auth:aar",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-crashlytics:aar",
- "com.google.firebase:firebase-database-collection:aar",
- "com.google.firebase:firebase-encoders-json:aar",
- "com.google.firebase:firebase-firestore-ktx:aar",
- "com.google.firebase:firebase-firestore:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-iid:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar",
- "com.google.firebase:firebase-measurement-connector:aar",
- "com.google.firebase:protolite-well-known-types:aar",
- "com.google.gms:google-services",
- "com.google.googlejavaformat:google-java-format",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.google.guava:listenablefuture",
- "com.google.j2objc:j2objc-annotations",
- "com.google.jimfs:jimfs",
- "com.google.protobuf:protobuf-java",
- "com.google.protobuf:protobuf-java-util",
- "com.google.protobuf:protobuf-javalite",
- "com.google.truth.extensions:truth-liteproto-extension",
- "com.google.truth:truth",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "com.ibm.icu:icu4j",
- "com.squareup.moshi:moshi",
- "com.squareup.moshi:moshi-kotlin",
- "com.squareup.moshi:moshi-kotlin-codegen",
- "com.squareup.okhttp3:mockwebserver",
- "com.squareup.okhttp3:okhttp",
- "com.squareup.okhttp:okhttp",
- "com.squareup.okio:okio",
- "com.squareup.retrofit2:converter-moshi",
- "com.squareup.retrofit2:retrofit",
- "com.squareup.retrofit2:retrofit-mock",
- "com.squareup:javapoet",
- "com.squareup:javawriter",
- "com.squareup:kotlinpoet",
- "com.sun.activation:javax.activation",
- "com.sun.istack:istack-commons-runtime",
- "com.sun.xml.fastinfoset:FastInfoset",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "commons-logging:commons-logging",
- "io.fabric.sdk.android:fabric:aar",
- "io.grpc:grpc-android:aar",
- "io.grpc:grpc-api",
- "io.grpc:grpc-context",
- "io.grpc:grpc-core",
- "io.grpc:grpc-okhttp",
- "io.grpc:grpc-protobuf-lite",
- "io.grpc:grpc-stub",
- "io.perfmark:perfmark-api",
- "io.xlate:yaml-json",
- "jakarta.activation:jakarta.activation-api",
- "jakarta.json:jakarta.json-api",
- "jakarta.xml.bind:jakarta.xml.bind-api",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "junit:junit",
- "net.bytebuddy:byte-buddy",
- "net.bytebuddy:byte-buddy-agent",
- "net.java.dev.jna:jna",
- "net.java.dev.jna:jna-platform",
- "net.ltgt.gradle.incap:incap",
- "net.sf.kxml:kxml2",
- "nl.dionsegijn:konfetti:aar",
- "org.antlr:antlr4",
- "org.apache.commons:commons-compress",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpmime",
- "org.bouncycastle:bcpkix-jdk15on",
- "org.bouncycastle:bcprov-jdk15on",
- "org.checkerframework:checker-compat-qual",
- "org.checkerframework:checker-qual",
- "org.codehaus.mojo:animal-sniffer-annotations",
- "org.eclipse.parsson:parsson",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.glassfish.jaxb:txw2",
- "org.hamcrest:hamcrest-core",
- "org.hamcrest:hamcrest-integration",
- "org.hamcrest:hamcrest-library",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-compiler-embeddable",
- "org.jetbrains.kotlin:kotlin-daemon-embeddable",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-script-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlin:kotlin-test",
- "org.jetbrains.kotlin:kotlin-test-annotations-common",
- "org.jetbrains.kotlin:kotlin-test-common",
- "org.jetbrains.kotlin:kotlin-test-junit",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
- "org.jetbrains:annotations",
- "org.jvnet.staxex:stax-ex",
- "org.mockito.kotlin:mockito-kotlin",
- "org.mockito:mockito-core",
- "org.objenesis:objenesis",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-commons",
- "org.ow2.asm:asm-tree",
- "org.ow2.asm:asm-util",
- "org.robolectric:annotations",
- "org.robolectric:junit",
- "org.robolectric:nativeruntime",
- "org.robolectric:pluginapi",
- "org.robolectric:plugins-maven-dependency-resolver",
- "org.robolectric:resources",
- "org.robolectric:robolectric",
- "org.robolectric:sandbox",
- "org.robolectric:shadowapi",
- "org.robolectric:shadows-framework",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector",
- "org.smali:baksmali",
- "org.smali:dexlib2",
- "org.smali:util",
- "org.snakeyaml:snakeyaml-engine",
- "xerces:xercesImpl",
- "xml-apis:xml-apis"
- ],
- "https://maven.fabric.io/public/": [
- "androidx.activity:activity-compose:aar",
- "androidx.activity:activity-ktx:aar",
- "androidx.activity:activity:aar",
- "androidx.annotation:annotation",
- "androidx.annotation:annotation-experimental:aar",
- "androidx.appcompat:appcompat-resources:aar",
- "androidx.appcompat:appcompat:aar",
- "androidx.arch.core:core-common",
- "androidx.arch.core:core-runtime:aar",
- "androidx.arch.core:core-testing:aar",
- "androidx.autofill:autofill:aar",
- "androidx.cardview:cardview:aar",
- "androidx.collection:collection",
- "androidx.compose.animation:animation-core:aar",
- "androidx.compose.animation:animation:aar",
- "androidx.compose.compiler:compiler",
- "androidx.compose.foundation:foundation-layout:aar",
- "androidx.compose.foundation:foundation:aar",
- "androidx.compose.material:material-icons-core:aar",
- "androidx.compose.material:material-ripple:aar",
- "androidx.compose.material:material:aar",
- "androidx.compose.runtime:runtime-livedata:aar",
- "androidx.compose.runtime:runtime-saveable:aar",
- "androidx.compose.runtime:runtime:aar",
- "androidx.compose.ui:ui-geometry:aar",
- "androidx.compose.ui:ui-graphics:aar",
- "androidx.compose.ui:ui-test-junit4:aar",
- "androidx.compose.ui:ui-test:aar",
- "androidx.compose.ui:ui-text:aar",
- "androidx.compose.ui:ui-unit:aar",
- "androidx.compose.ui:ui-util:aar",
- "androidx.compose.ui:ui:aar",
- "androidx.concurrent:concurrent-futures",
- "androidx.constraintlayout:constraintlayout-solver",
- "androidx.constraintlayout:constraintlayout:aar",
- "androidx.coordinatorlayout:coordinatorlayout:aar",
- "androidx.core:core-ktx:aar",
- "androidx.core:core:aar",
- "androidx.cursoradapter:cursoradapter:aar",
- "androidx.customview:customview:aar",
- "androidx.databinding:databinding-adapters:aar",
- "androidx.databinding:databinding-common",
- "androidx.databinding:databinding-compiler",
- "androidx.databinding:databinding-compiler-common",
- "androidx.databinding:databinding-runtime:aar",
- "androidx.documentfile:documentfile:aar",
- "androidx.drawerlayout:drawerlayout:aar",
- "androidx.dynamicanimation:dynamicanimation:aar",
- "androidx.exifinterface:exifinterface:aar",
- "androidx.fragment:fragment:aar",
- "androidx.interpolator:interpolator:aar",
- "androidx.legacy:legacy-support-core-utils:aar",
- "androidx.lifecycle:lifecycle-common",
- "androidx.lifecycle:lifecycle-common-java8",
- "androidx.lifecycle:lifecycle-extensions:aar",
- "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata-core:aar",
- "androidx.lifecycle:lifecycle-livedata-ktx:aar",
- "androidx.lifecycle:lifecycle-livedata:aar",
- "androidx.lifecycle:lifecycle-process:aar",
- "androidx.lifecycle:lifecycle-runtime-ktx:aar",
- "androidx.lifecycle:lifecycle-runtime:aar",
- "androidx.lifecycle:lifecycle-service:aar",
- "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
- "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
- "androidx.lifecycle:lifecycle-viewmodel:aar",
- "androidx.loader:loader:aar",
- "androidx.localbroadcastmanager:localbroadcastmanager:aar",
- "androidx.multidex:multidex-instrumentation:aar",
- "androidx.multidex:multidex:aar",
- "androidx.navigation:navigation-common-ktx:aar",
- "androidx.navigation:navigation-common:aar",
- "androidx.navigation:navigation-fragment-ktx:aar",
- "androidx.navigation:navigation-fragment:aar",
- "androidx.navigation:navigation-runtime-ktx:aar",
- "androidx.navigation:navigation-runtime:aar",
- "androidx.navigation:navigation-ui-ktx:aar",
- "androidx.navigation:navigation-ui:aar",
- "androidx.print:print:aar",
- "androidx.profileinstaller:profileinstaller:aar",
- "androidx.recyclerview:recyclerview:aar",
- "androidx.room:room-common",
- "androidx.room:room-runtime:aar",
- "androidx.savedstate:savedstate-ktx:aar",
- "androidx.savedstate:savedstate:aar",
- "androidx.sqlite:sqlite-framework:aar",
- "androidx.sqlite:sqlite:aar",
- "androidx.startup:startup-runtime:aar",
- "androidx.test.espresso:espresso-accessibility:aar",
- "androidx.test.espresso:espresso-contrib:aar",
- "androidx.test.espresso:espresso-core:aar",
- "androidx.test.espresso:espresso-idling-resource:aar",
- "androidx.test.espresso:espresso-intents:aar",
- "androidx.test.ext:junit:aar",
- "androidx.test.ext:truth:aar",
- "androidx.test.services:storage:aar",
- "androidx.test.uiautomator:uiautomator:aar",
- "androidx.test:annotation:aar",
- "androidx.test:core:aar",
- "androidx.test:monitor:aar",
- "androidx.test:rules:aar",
- "androidx.test:runner:aar",
- "androidx.tracing:tracing:aar",
- "androidx.transition:transition:aar",
- "androidx.vectordrawable:vectordrawable-animated:aar",
- "androidx.vectordrawable:vectordrawable:aar",
- "androidx.versionedparcelable:versionedparcelable:aar",
- "androidx.viewpager2:viewpager2:aar",
- "androidx.viewpager:viewpager:aar",
- "androidx.work:work-runtime-ktx:aar",
- "androidx.work:work-runtime:aar",
- "androidx.work:work-testing:aar",
- "com.almworks.sqlite4java:sqlite4java",
- "com.android.databinding:baseLibrary",
- "com.android.tools.analytics-library:protos",
- "com.android.tools.analytics-library:shared",
- "com.android.tools.analytics-library:tracker",
- "com.android.tools.apkparser:apkanalyzer",
- "com.android.tools.apkparser:binary-resources",
- "com.android.tools.build.jetifier:jetifier-core",
- "com.android.tools.build:aapt2-proto",
- "com.android.tools.build:builder-model",
- "com.android.tools.build:manifest-merger",
- "com.android.tools.ddms:ddmlib",
- "com.android.tools.external.com-intellij:intellij-core",
- "com.android.tools.external.com-intellij:kotlin-compiler",
- "com.android.tools.external.org-jetbrains:uast",
- "com.android.tools.layoutlib:layoutlib-api",
- "com.android.tools.lint:lint",
- "com.android.tools.lint:lint-api",
- "com.android.tools.lint:lint-checks",
- "com.android.tools.lint:lint-model",
- "com.android.tools:annotations",
- "com.android.tools:common",
- "com.android.tools:dvlib",
- "com.android.tools:repository",
- "com.android.tools:sdk-common",
- "com.android.tools:sdklib",
- "com.beust:jcommander",
- "com.crashlytics.sdk.android:answers:aar",
- "com.crashlytics.sdk.android:beta:aar",
- "com.crashlytics.sdk.android:crashlytics-core:aar",
- "com.crashlytics.sdk.android:crashlytics:aar",
- "com.github.bumptech.glide:annotations",
- "com.github.bumptech.glide:compiler",
- "com.github.bumptech.glide:disklrucache",
- "com.github.bumptech.glide:gifdecoder:aar",
- "com.github.bumptech.glide:glide:aar",
- "com.github.bumptech.glide:mocks:aar",
- "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
- "com.google.android.datatransport:transport-api:aar",
- "com.google.android.datatransport:transport-backend-cct:aar",
- "com.google.android.datatransport:transport-runtime:aar",
- "com.google.android.flexbox:flexbox:aar",
- "com.google.android.gms:play-services-ads-identifier:aar",
- "com.google.android.gms:play-services-base:aar",
- "com.google.android.gms:play-services-basement:aar",
- "com.google.android.gms:play-services-measurement-api:aar",
- "com.google.android.gms:play-services-measurement-base:aar",
- "com.google.android.gms:play-services-measurement-impl:aar",
- "com.google.android.gms:play-services-measurement-sdk-api:aar",
- "com.google.android.gms:play-services-measurement-sdk:aar",
- "com.google.android.gms:play-services-measurement:aar",
- "com.google.android.gms:play-services-stats:aar",
- "com.google.android.gms:play-services-tasks:aar",
- "com.google.android.gms:strict-version-matcher-plugin",
- "com.google.android.material:material:aar",
- "com.google.android.play:integrity:aar",
- "com.google.android:annotations",
- "com.google.auto.service:auto-service-annotations",
- "com.google.auto.value:auto-value-annotations",
- "com.google.code.findbugs:jsr305",
- "com.google.code.gson:gson",
- "com.google.dagger:dagger",
- "com.google.dagger:dagger-compiler",
- "com.google.dagger:dagger-producers",
- "com.google.dagger:dagger-spi",
- "com.google.devtools.ksp:symbol-processing-api",
- "com.google.errorprone:error_prone_annotations",
- "com.google.errorprone:javac-shaded",
- "com.google.firebase:firebase-analytics:aar",
- "com.google.firebase:firebase-annotations",
- "com.google.firebase:firebase-appcheck-debug:aar",
- "com.google.firebase:firebase-appcheck-interop:aar",
- "com.google.firebase:firebase-appcheck-playintegrity:aar",
- "com.google.firebase:firebase-appcheck:aar",
- "com.google.firebase:firebase-auth-interop:aar",
- "com.google.firebase:firebase-auth-ktx:aar",
- "com.google.firebase:firebase-auth:aar",
- "com.google.firebase:firebase-common-ktx:aar",
- "com.google.firebase:firebase-common:aar",
- "com.google.firebase:firebase-components:aar",
- "com.google.firebase:firebase-crashlytics:aar",
- "com.google.firebase:firebase-database-collection:aar",
- "com.google.firebase:firebase-encoders-json:aar",
- "com.google.firebase:firebase-firestore-ktx:aar",
- "com.google.firebase:firebase-firestore:aar",
- "com.google.firebase:firebase-iid-interop:aar",
- "com.google.firebase:firebase-iid:aar",
- "com.google.firebase:firebase-installations-interop:aar",
- "com.google.firebase:firebase-installations:aar",
- "com.google.firebase:firebase-measurement-connector:aar",
- "com.google.firebase:protolite-well-known-types:aar",
- "com.google.gms:google-services",
- "com.google.googlejavaformat:google-java-format",
- "com.google.guava:failureaccess",
- "com.google.guava:guava",
- "com.google.guava:listenablefuture",
- "com.google.j2objc:j2objc-annotations",
- "com.google.jimfs:jimfs",
- "com.google.protobuf:protobuf-java",
- "com.google.protobuf:protobuf-java-util",
- "com.google.protobuf:protobuf-javalite",
- "com.google.truth.extensions:truth-liteproto-extension",
- "com.google.truth:truth",
- "com.googlecode.juniversalchardet:juniversalchardet",
- "com.ibm.icu:icu4j",
- "com.squareup.moshi:moshi",
- "com.squareup.moshi:moshi-kotlin",
- "com.squareup.moshi:moshi-kotlin-codegen",
- "com.squareup.okhttp3:mockwebserver",
- "com.squareup.okhttp3:okhttp",
- "com.squareup.okhttp:okhttp",
- "com.squareup.okio:okio",
- "com.squareup.retrofit2:converter-moshi",
- "com.squareup.retrofit2:retrofit",
- "com.squareup.retrofit2:retrofit-mock",
- "com.squareup:javapoet",
- "com.squareup:javawriter",
- "com.squareup:kotlinpoet",
- "com.sun.activation:javax.activation",
- "com.sun.istack:istack-commons-runtime",
- "com.sun.xml.fastinfoset:FastInfoset",
- "commons-codec:commons-codec",
- "commons-io:commons-io",
- "commons-logging:commons-logging",
- "io.fabric.sdk.android:fabric:aar",
- "io.grpc:grpc-android:aar",
- "io.grpc:grpc-api",
- "io.grpc:grpc-context",
- "io.grpc:grpc-core",
- "io.grpc:grpc-okhttp",
- "io.grpc:grpc-protobuf-lite",
- "io.grpc:grpc-stub",
- "io.perfmark:perfmark-api",
- "io.xlate:yaml-json",
- "jakarta.activation:jakarta.activation-api",
- "jakarta.json:jakarta.json-api",
- "jakarta.xml.bind:jakarta.xml.bind-api",
- "javax.annotation:javax.annotation-api",
- "javax.inject:javax.inject",
- "junit:junit",
- "net.bytebuddy:byte-buddy",
- "net.bytebuddy:byte-buddy-agent",
- "net.java.dev.jna:jna",
- "net.java.dev.jna:jna-platform",
- "net.ltgt.gradle.incap:incap",
- "net.sf.kxml:kxml2",
- "nl.dionsegijn:konfetti:aar",
- "org.antlr:antlr4",
- "org.apache.commons:commons-compress",
- "org.apache.httpcomponents:httpclient",
- "org.apache.httpcomponents:httpcore",
- "org.apache.httpcomponents:httpmime",
- "org.bouncycastle:bcpkix-jdk15on",
- "org.bouncycastle:bcprov-jdk15on",
- "org.checkerframework:checker-compat-qual",
- "org.checkerframework:checker-qual",
- "org.codehaus.mojo:animal-sniffer-annotations",
- "org.eclipse.parsson:parsson",
- "org.glassfish.jaxb:jaxb-runtime",
- "org.glassfish.jaxb:txw2",
- "org.hamcrest:hamcrest-core",
- "org.hamcrest:hamcrest-integration",
- "org.hamcrest:hamcrest-library",
- "org.jetbrains.intellij.deps:trove4j",
- "org.jetbrains.kotlin:kotlin-compiler-embeddable",
- "org.jetbrains.kotlin:kotlin-daemon-embeddable",
- "org.jetbrains.kotlin:kotlin-reflect",
- "org.jetbrains.kotlin:kotlin-script-runtime",
- "org.jetbrains.kotlin:kotlin-stdlib",
- "org.jetbrains.kotlin:kotlin-stdlib-common",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
- "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
- "org.jetbrains.kotlin:kotlin-test",
- "org.jetbrains.kotlin:kotlin-test-annotations-common",
- "org.jetbrains.kotlin:kotlin-test-common",
- "org.jetbrains.kotlin:kotlin-test-junit",
- "org.jetbrains.kotlinx:kotlinx-coroutines-android",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core",
- "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
- "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test",
- "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
- "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
- "org.jetbrains:annotations",
- "org.jvnet.staxex:stax-ex",
- "org.mockito.kotlin:mockito-kotlin",
- "org.mockito:mockito-core",
- "org.objenesis:objenesis",
- "org.ow2.asm:asm",
- "org.ow2.asm:asm-analysis",
- "org.ow2.asm:asm-commons",
- "org.ow2.asm:asm-tree",
- "org.ow2.asm:asm-util",
- "org.robolectric:annotations",
- "org.robolectric:junit",
- "org.robolectric:nativeruntime",
- "org.robolectric:pluginapi",
- "org.robolectric:plugins-maven-dependency-resolver",
- "org.robolectric:resources",
- "org.robolectric:robolectric",
- "org.robolectric:sandbox",
- "org.robolectric:shadowapi",
- "org.robolectric:shadows-framework",
- "org.robolectric:utils",
- "org.robolectric:utils-reflector",
- "org.smali:baksmali",
- "org.smali:dexlib2",
- "org.smali:util",
- "org.snakeyaml:snakeyaml-engine",
- "xerces:xercesImpl",
- "xml-apis:xml-apis"
- ]
- },
- "version": "2"
-}
From d6cc784e60db454c869f9df40ce945928e18b7a2 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 30 Jun 2025 14:29:14 +0300
Subject: [PATCH 29/43] regenerate maven_install.json
---
third_party/maven_install.json | 8243 ++++++++++++++++++++++++++++++++
1 file changed, 8243 insertions(+)
create mode 100755 third_party/maven_install.json
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
new file mode 100755
index 00000000000..43da957b38c
--- /dev/null
+++ b/third_party/maven_install.json
@@ -0,0 +1,8243 @@
+{
+ "__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
+ "__INPUT_ARTIFACTS_HASH": -32092749,
+ "__RESOLVED_ARTIFACTS_HASH": 945869759,
+ "conflict_resolution": {
+ "androidx.annotation:annotation:1.1.0": "androidx.annotation:annotation:1.2.0",
+ "androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
+ "androidx.core:core-ktx:1.0.1": "androidx.core:core-ktx:1.1.0",
+ "androidx.core:core:1.0.1": "androidx.core:core:1.7.0",
+ "androidx.fragment:fragment:1.1.0": "androidx.fragment:fragment:1.3.6",
+ "androidx.lifecycle:lifecycle-livedata-core:2.2.0": "androidx.lifecycle:lifecycle-livedata-core:2.3.1",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0": "androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1",
+ "androidx.recyclerview:recyclerview:1.0.0": "androidx.recyclerview:recyclerview:1.1.0",
+ "androidx.test.ext:junit:1.1.1": "androidx.test.ext:junit:1.1.2",
+ "androidx.test:core:1.0.0": "androidx.test:core:1.4.1-alpha07",
+ "androidx.test:runner:1.2.0": "androidx.test:runner:1.5.0-alpha04",
+ "com.google.firebase:firebase-common:19.3.0": "com.google.firebase:firebase-common:20.1.1",
+ "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.6.0",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.10": "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.6.21",
+ "org.mockito:mockito-core:2.19.0": "org.mockito:mockito-core:3.9.0"
+ },
+ "artifacts": {
+ "androidx.activity:activity-compose:aar": {
+ "shasums": {
+ "jar": "82f97c1c4b96d15ee721b8204bd1273f80bcc654e50d0b16ca5399c77f6c3531"
+ },
+ "version": "1.4.0"
+ },
+ "androidx.activity:activity-ktx:aar": {
+ "shasums": {
+ "jar": "3f301941f37a90b4bc553dbbe84e7464a97c0d21df6cf2d6c0cb1b2c07349f33"
+ },
+ "version": "1.4.0"
+ },
+ "androidx.activity:activity:aar": {
+ "shasums": {
+ "jar": "89dc38e0cdbd11f328c7d0b3b021ddb387ca9da0d49f14b18c91e300c45ed79c"
+ },
+ "version": "1.4.0"
+ },
+ "androidx.annotation:annotation": {
+ "shasums": {
+ "jar": "9029262bddce116e6d02be499e4afdba21f24c239087b76b3b57d7e98b490a36"
+ },
+ "version": "1.2.0"
+ },
+ "androidx.annotation:annotation-experimental:aar": {
+ "shasums": {
+ "jar": "0157de61a2064047896a058080f3fd67ba57ad9a94857b3f7a363660243e3f90"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.appcompat:appcompat-resources:aar": {
+ "shasums": {
+ "jar": "e3306cd3e9a19a28a5de5ec3b379580f237c4d81c15c3d795404be9291890a75"
+ },
+ "version": "1.3.1"
+ },
+ "androidx.appcompat:appcompat:aar": {
+ "shasums": {
+ "jar": "959b1daefe40d5e7eed1022f97730b22bc5fd52e6a6083eba284fa86c2971303"
+ },
+ "version": "1.3.1"
+ },
+ "androidx.arch.core:core-common": {
+ "shasums": {
+ "jar": "fe1237bf029d063e7f29fe39aeaf73ef74c8b0a3658486fc29d3c54326653889"
+ },
+ "version": "2.1.0"
+ },
+ "androidx.arch.core:core-runtime:aar": {
+ "shasums": {
+ "jar": "dd77615bd3dd275afb11b62df25bae46b10b4a117cd37943af45bdcbf8755852"
+ },
+ "version": "2.1.0"
+ },
+ "androidx.arch.core:core-testing:aar": {
+ "shasums": {
+ "jar": "c57ffade2a9a844bd62b4f4c3916fad5e09e9f24cceba27e932c25bb7a6d1d8f"
+ },
+ "version": "2.1.0"
+ },
+ "androidx.autofill:autofill:aar": {
+ "shasums": {
+ "jar": "c9468f56e05006ea151a426c54957cd0799b8b83a579d2846dd22061f33e5ecd"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.cardview:cardview:aar": {
+ "shasums": {
+ "jar": "1193c04c22a3d6b5946dae9f4e8c59d6adde6a71b6bd5d87fb99d82dda1afec7"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.collection:collection": {
+ "shasums": {
+ "jar": "632a0e5407461de774409352940e292a291037724207a787820c77daf7d33b72"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.compose.animation:animation-core:aar": {
+ "shasums": {
+ "jar": "797048e2d03a9b1b98443fbe118d70f0955988e3fca56a71985ee3550be46f4e"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.animation:animation:aar": {
+ "shasums": {
+ "jar": "95fca9d5bbb8da8c4f351331558e7b2f4ec04db0cf290b021852423461d76a9c"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.compiler:compiler": {
+ "shasums": {
+ "jar": "925acb226edfade11905827a8387bca83f83d6bd1a13f48708d1efab2129520a"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.foundation:foundation-layout:aar": {
+ "shasums": {
+ "jar": "8337856c1babb54bdadfdb97eea47eb94640fc5557f91de47d35e9158258a971"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.foundation:foundation:aar": {
+ "shasums": {
+ "jar": "7f5fff6b1d462c7e411533b75ec0a9a73027f9a38f1e85ae8309295811ab64a0"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.material:material-icons-core:aar": {
+ "shasums": {
+ "jar": "8c9c1a9688a9f4dee57d31de8784d0970919fa939a48a466380815b9ebd84cfa"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.material:material-ripple:aar": {
+ "shasums": {
+ "jar": "c84f77c84e0c9ac17d513d38611894558bea6592c5318976fc8b0a51bc3cf8f2"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.material:material:aar": {
+ "shasums": {
+ "jar": "538ab37092d8e837e0d7e58bd854296e54033f449435db3baf913cc5ba4f97f3"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.runtime:runtime-livedata:aar": {
+ "shasums": {
+ "jar": "6495ebfc18e96261196d098e13b05b954feb6b223f20761797f1ffa3fb83da48"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.runtime:runtime-saveable:aar": {
+ "shasums": {
+ "jar": "15b542e07bea14065336da0b255650433da46e250a160feaf39b90f2edc8b230"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.runtime:runtime:aar": {
+ "shasums": {
+ "jar": "e075b3e3952cb3775e7acc7ccdb8f2de777da76bd6d2ea2cc1f96d6f57b37763"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-geometry:aar": {
+ "shasums": {
+ "jar": "4f1e34ae515af8c04e783275dded50bc8d156135fc35397fb1c81a9e01f173b3"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-graphics:aar": {
+ "shasums": {
+ "jar": "e1719d8db7545e7f3be3baf42ac1865fb1cca36525d9b889601e2c2f4ea3aafc"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-test-junit4:aar": {
+ "shasums": {
+ "jar": "db527d645365f76ab135a7b3a5225ea3a3a3171ded8d6092c732c2af033c9e4e"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-test:aar": {
+ "shasums": {
+ "jar": "b710a1fe38c8acf9dbc7d678b45bdda61867013f2cad031b82547d0dc0b18e26"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-text:aar": {
+ "shasums": {
+ "jar": "e4af67f79b658862e4d7437f243033ed64334fbbff3247d4df39785a1c2c75d4"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-unit:aar": {
+ "shasums": {
+ "jar": "35b1d8f7f460874dde09fd7e630cd44052913695298076fc62de91a4fe1345a7"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui-util:aar": {
+ "shasums": {
+ "jar": "56420281f21e2888145ec9438ca4a632012792013b667da9aa03ea733e482e96"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.compose.ui:ui:aar": {
+ "shasums": {
+ "jar": "f0243d6a2176c9bcb6f077e1212cbc890943391ec9a6e32a4f249ab7c2c807a6"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.concurrent:concurrent-futures": {
+ "shasums": {
+ "jar": "0ce067c514a0d1049d1bebdf709e344ed3266fe9744275682937cdcb13334e9e"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.constraintlayout:constraintlayout-solver": {
+ "shasums": {
+ "jar": "b23732edbb3511d937fea1ffef047b0e6c001b50c1921f0d959fc384d706ec6a"
+ },
+ "version": "2.0.1"
+ },
+ "androidx.constraintlayout:constraintlayout:aar": {
+ "shasums": {
+ "jar": "ec15b5d4a2eff07888bc1499ce2e2c6efe24c0ed60cc57b08c9dc4b6fd3c2189"
+ },
+ "version": "2.0.1"
+ },
+ "androidx.coordinatorlayout:coordinatorlayout:aar": {
+ "shasums": {
+ "jar": "44a9e30abf56af1025c52a0af506fee9c4131aa55efda52f9fd9451211c5e8cb"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.core:core-ktx:aar": {
+ "shasums": {
+ "jar": "070cc5f8864f449128a2f4b25ca5b67aa3adca3ee1bd611e2eaf1a18fad83178"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.core:core:aar": {
+ "shasums": {
+ "jar": "aaf6734226fff923784f92f65d78a2984dbf17534138855c5ce2038f18656e0b"
+ },
+ "version": "1.7.0"
+ },
+ "androidx.cursoradapter:cursoradapter:aar": {
+ "shasums": {
+ "jar": "a81c8fe78815fa47df5b749deb52727ad11f9397da58b16017f4eb2c11e28564"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.customview:customview:aar": {
+ "shasums": {
+ "jar": "01f76ab043770a97b054046f9815717b82ce0355c02967d16c61981359dc189a"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.databinding:databinding-adapters:aar": {
+ "shasums": {
+ "jar": "840a66744866185b6a74fd99e6596bf1eb0720837c3ae470c25212bccc563939"
+ },
+ "version": "3.4.2"
+ },
+ "androidx.databinding:databinding-common": {
+ "shasums": {
+ "jar": "52886c0ef6cfa492d07b40c3952201d6d2f0cfc680144fbefc69d2d5cb786c25"
+ },
+ "version": "3.4.2"
+ },
+ "androidx.databinding:databinding-compiler": {
+ "shasums": {
+ "jar": "07a9fb44f43048b18f149add7835e1239e92057e6748affde2d2bccf330c4242"
+ },
+ "version": "3.4.2"
+ },
+ "androidx.databinding:databinding-compiler-common": {
+ "shasums": {
+ "jar": "770b6a82da0684f93d037ed5d241248cb25862ed14ecd7d9ec8c756153266051"
+ },
+ "version": "3.4.2"
+ },
+ "androidx.databinding:databinding-runtime:aar": {
+ "shasums": {
+ "jar": "80d966bf58b971334d65b213b2ab16fe827bbb95389a9c6a52b141853f529b30"
+ },
+ "version": "3.4.2"
+ },
+ "androidx.documentfile:documentfile:aar": {
+ "shasums": {
+ "jar": "865a061ef2fad16522f8433536b8d47208c46ff7c7745197dfa1eeb481869487"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.drawerlayout:drawerlayout:aar": {
+ "shasums": {
+ "jar": "9d79030ad4f93b1c6296f7a8391710f9e9e3228a3b10964c4bb0a042fd6257b8"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.dynamicanimation:dynamicanimation:aar": {
+ "shasums": {
+ "jar": "ce005162c229bf308d2d5b12fb6cad0874069cbbeaccee63a8193bd08d40de04"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.exifinterface:exifinterface:aar": {
+ "shasums": {
+ "jar": "ee48be10aab8f54efff4c14b77d11e10b9eeee4379d5ef6bf297a2923c55cc11"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.fragment:fragment:aar": {
+ "shasums": {
+ "jar": "12f0831b4f08092d5dda272c1923c11a022ff20ceffed3e801751e21bb8d1c1e"
+ },
+ "version": "1.3.6"
+ },
+ "androidx.interpolator:interpolator:aar": {
+ "shasums": {
+ "jar": "33193135a64fe21fa2c35eec6688f1a76e512606c0fc83dc1b689e37add7732a"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.legacy:legacy-support-core-utils:aar": {
+ "shasums": {
+ "jar": "a7edcf01d5b52b3034073027bc4775b78a4764bb6202bb91d61c829add8dd1c7"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.lifecycle:lifecycle-common": {
+ "shasums": {
+ "jar": "15848fb56db32f4c7cdc72b324003183d52a4884d6bf09be708ac7f587d139b5"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-common-java8": {
+ "shasums": {
+ "jar": "a1ec63c1bb973443cb731d78ec336c5e20e7ee35c89cbb32d36f92c55bb02542"
+ },
+ "version": "2.3.0"
+ },
+ "androidx.lifecycle:lifecycle-extensions:aar": {
+ "shasums": {
+ "jar": "648c8de1d10b025d524a2e46ac994fc3f6bf186826c09ec1a62d250bf1b877ae"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar": {
+ "shasums": {
+ "jar": "5951f882e95b7e05ceb9adfca0fa2ebd511d63ea5a00da4eae6c6d0c1903da18"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-livedata-core:aar": {
+ "shasums": {
+ "jar": "e55d38c372460f0a03997ddc950c67227511340fd74f8634d99d29653cd81ab1"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar": {
+ "shasums": {
+ "jar": "69c3532a70d39adfa13458c9e06d7adcd88a2259f5e9ea517cc7eed26c5fc491"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-livedata:aar": {
+ "shasums": {
+ "jar": "d83af94860aa9f64cbdc51f40796a7cf55b116f0e6efd752e845c0104c8b16f6"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-process:aar": {
+ "shasums": {
+ "jar": "3a977e7778fc8418742d388409daaba7ea8fea8823d21ffb96e4c4236f715070"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar": {
+ "shasums": {
+ "jar": "7ad2987dd7f4075c0871a72cf07e9649d9cd790fc23dfab1972eca4710373873"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-runtime:aar": {
+ "shasums": {
+ "jar": "dd294f4a689c71ff877fd41f3b67a3a62f7760d44ce420e6130f1fc3569d8f00"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-service:aar": {
+ "shasums": {
+ "jar": "ca2801ffc069555afed8eddd2292130f436956452bc8bbad30fb56f8e4e382a0"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": {
+ "shasums": {
+ "jar": "5fb3591b6a54eeb3e204be0125d48eb987b8ea45a5048140036865482ccf9de9"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": {
+ "shasums": {
+ "jar": "97137a8af6a31776a14e4866ab808c7c0a791b484bdbc788bbd83e66407564c0"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.lifecycle:lifecycle-viewmodel:aar": {
+ "shasums": {
+ "jar": "b6db4c274a12ff85a4747e1e6669c7e98aefa2571ace9d1f1a6fa6be417ce838"
+ },
+ "version": "2.3.1"
+ },
+ "androidx.loader:loader:aar": {
+ "shasums": {
+ "jar": "11f735cb3b55c458d470bed9e25254375b518b4b1bad6926783a7026db0f5025"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar": {
+ "shasums": {
+ "jar": "e71c328ceef5c4a7d76f2d86df1b65d65fe2acf868b1a4efd84a3f34336186d8"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.multidex:multidex-instrumentation:aar": {
+ "shasums": {
+ "jar": "fb8115694b1731c23c1bbb628f5baaee37a8f3b50d69a7733b55278e101e1488"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.multidex:multidex:aar": {
+ "shasums": {
+ "jar": "42dd32ff9f97f85771b82a20003a8d70f68ab7b4ba328964312ce0732693db09"
+ },
+ "version": "2.0.1"
+ },
+ "androidx.navigation:navigation-common-ktx:aar": {
+ "shasums": {
+ "jar": "ed00b6f73d8acc7e06729f5f19cdeb410ca1d0e45afbcf6ff435a1091c3a3d57"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-common:aar": {
+ "shasums": {
+ "jar": "542ec6f993b6d3bfafe2e53e0f250b8685331e2a0258f9313af9ee3376f93959"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-fragment-ktx:aar": {
+ "shasums": {
+ "jar": "8ad7b7ed765009271cc0fe97ea925b3fbd90a9bc80aeefb2708a554d7330b8d3"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-fragment:aar": {
+ "shasums": {
+ "jar": "38ddf1afc99a0585904f2121eee7131fef13595e64c9bb6b22f68dd66b8d1f9c"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-runtime-ktx:aar": {
+ "shasums": {
+ "jar": "41f1145f9aca5a7d97567dfe08924ec1cebcc72cb2c5d6d1a1cd31a780669358"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-runtime:aar": {
+ "shasums": {
+ "jar": "903cd93d3424300ff048a92086d773cfc5e23f928063d4493a45b4b042f2a550"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-ui-ktx:aar": {
+ "shasums": {
+ "jar": "fb28826b4eb20a53e9398576bb9e7a3215cf970e99a05d7ccc0422d5978fa915"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.navigation:navigation-ui:aar": {
+ "shasums": {
+ "jar": "d6edc08d69268967d11336bd8c2dce1f154f0ae8117be9874895f6974123ed20"
+ },
+ "version": "2.0.0"
+ },
+ "androidx.print:print:aar": {
+ "shasums": {
+ "jar": "1d5c7f3135a1bba661fc373fd72e11eb0a4adbb3396787826dd8e4190d5d9edd"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.profileinstaller:profileinstaller:aar": {
+ "shasums": {
+ "jar": "d85f562bc70f33595b46a893c22d64f5b4f856c19a02b1eb09aad00c3a2124ee"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.recyclerview:recyclerview:aar": {
+ "shasums": {
+ "jar": "f0d2b5a67d0a91ee1b1c73ef2b636a81f3563925ddd15a1d4e1c41ec28de7a4f"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.room:room-common": {
+ "shasums": {
+ "jar": "2b130dd4a1d3d91b6701ed33096d389f01c4fc1197a7acd6b91724ddc5acfc06"
+ },
+ "version": "2.2.5"
+ },
+ "androidx.room:room-runtime:aar": {
+ "shasums": {
+ "jar": "24a5549b796e43e337513d2908adac67f45350d9a90bca7e2e6120692140bb14"
+ },
+ "version": "2.2.5"
+ },
+ "androidx.savedstate:savedstate-ktx:aar": {
+ "shasums": {
+ "jar": "e44d61347463b0fafeeb649cbcc3d7109b2eb5e11d1522e986105170cdebbf68"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.savedstate:savedstate:aar": {
+ "shasums": {
+ "jar": "d60bbe44c2c08083a17c5dc678a6d6b4d0a2d664858016ab5c049cbea90a63b7"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.sqlite:sqlite-framework:aar": {
+ "shasums": {
+ "jar": "8673737fdb2efbad91aeaeed1927ebb29212d36a867d93b9639c8069019f8a1e"
+ },
+ "version": "2.1.0"
+ },
+ "androidx.sqlite:sqlite:aar": {
+ "shasums": {
+ "jar": "8341ff092d6060d62a07227f29237155fff36fb16f96c95fbd9a884e375db912"
+ },
+ "version": "2.1.0"
+ },
+ "androidx.startup:startup-runtime:aar": {
+ "shasums": {
+ "jar": "ff081d2db7dd28aec59f74934c514fbaf4ae5aac5258495fe10d612a3622f876"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.test.espresso:espresso-accessibility:aar": {
+ "shasums": {
+ "jar": "e2ee8b50081c0b578521d112808321f737f3bf1acce035fe7be0e26ef00b491f"
+ },
+ "version": "3.1.0"
+ },
+ "androidx.test.espresso:espresso-contrib:aar": {
+ "shasums": {
+ "jar": "277c292f02816b5e49051485b11e612c0ba7d36fc76b7dac955fe37766ec2832"
+ },
+ "version": "3.1.0"
+ },
+ "androidx.test.espresso:espresso-core:aar": {
+ "shasums": {
+ "jar": "acacf7cedb340ce4a3b4cccfe2f20606d9cf9d076a3f1a42e5c6b8ad33c403f0"
+ },
+ "version": "3.5.0-alpha07"
+ },
+ "androidx.test.espresso:espresso-idling-resource:aar": {
+ "shasums": {
+ "jar": "57a115f20680ad964c27919232a32bef46cadd272d92c07dca96262c7b850d61"
+ },
+ "version": "3.5.0-alpha07"
+ },
+ "androidx.test.espresso:espresso-intents:aar": {
+ "shasums": {
+ "jar": "6c252ea1221a7973301b62d1695d4d73cb1b7c0853ee2ffdb8274886148f0af6"
+ },
+ "version": "3.1.0"
+ },
+ "androidx.test.ext:junit:aar": {
+ "shasums": {
+ "jar": "6c6ab120c640bf16fcaae69cb83c144d0ed6b6298562be0ac35e37ed969c0409"
+ },
+ "version": "1.1.2"
+ },
+ "androidx.test.ext:truth:aar": {
+ "shasums": {
+ "jar": "d067a9bdd009b08d4230f8283cb4579a1183ef45bbfa169fd6d0f112d6c324f6"
+ },
+ "version": "1.4.0"
+ },
+ "androidx.test.services:storage:aar": {
+ "shasums": {
+ "jar": "4f5f36d1a7c354e806e6fc59292207bcb21d5621c95a2494ac192d4d32cae20c"
+ },
+ "version": "1.4.2-alpha04"
+ },
+ "androidx.test.uiautomator:uiautomator:aar": {
+ "shasums": {
+ "jar": "2838e9d961dbffefbbd229a2bd4f6f82ac4fb2462975862a9e75e9ed325a3197"
+ },
+ "version": "2.2.0"
+ },
+ "androidx.test:annotation:aar": {
+ "shasums": {
+ "jar": "c0754928effe1968c3a9a7b55d1dfc7ceb1e1e7c9f3f09f98afd42431f712492"
+ },
+ "version": "1.0.1-alpha01"
+ },
+ "androidx.test:core:aar": {
+ "shasums": {
+ "jar": "f4881b4cdb100c60ccd06ed932b240eb7b04bd2d98767b03b835a79bcb168147"
+ },
+ "version": "1.4.1-alpha07"
+ },
+ "androidx.test:monitor:aar": {
+ "shasums": {
+ "jar": "1addeea6bb9b9673a8adb42c9f385ffdb3833909a37aed66c93500eaf047a349"
+ },
+ "version": "1.6.0-alpha04"
+ },
+ "androidx.test:rules:aar": {
+ "shasums": {
+ "jar": "0c5c87df67b358c1a17765357138ea1d4bb58c61159ae635b4cb4dcaa3bb5986"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.test:runner:aar": {
+ "shasums": {
+ "jar": "ad24589f6d4c9cf4a17e82f7418cff71e8fd9850385b686d8f965c7f3e781642"
+ },
+ "version": "1.5.0-alpha04"
+ },
+ "androidx.tracing:tracing:aar": {
+ "shasums": {
+ "jar": "07b8b6139665b884a162eccf97891ca50f7f56831233bf25168ae04f7b568612"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.transition:transition:aar": {
+ "shasums": {
+ "jar": "a1e059b3bc0b43a58dec0efecdcaa89c82d2bca552ea5bacf6656c46e853157e"
+ },
+ "version": "1.2.0"
+ },
+ "androidx.vectordrawable:vectordrawable-animated:aar": {
+ "shasums": {
+ "jar": "76da2c502371d9c38054df5e2b248d00da87809ed058f3363eae87ce5e2403f8"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.vectordrawable:vectordrawable:aar": {
+ "shasums": {
+ "jar": "46fd633ac01b49b7fcabc263bf098c5a8b9e9a69774d234edcca04fb02df8e26"
+ },
+ "version": "1.1.0"
+ },
+ "androidx.versionedparcelable:versionedparcelable:aar": {
+ "shasums": {
+ "jar": "57e8d93260d18d5b9007c9eed3c64ad159de90c8609ebfc74a347cbd514535a4"
+ },
+ "version": "1.1.1"
+ },
+ "androidx.viewpager2:viewpager2:aar": {
+ "shasums": {
+ "jar": "e95c0031d4cc247cd48196c6287e58d2cee54d9c79b85afea7c90920330275af"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.viewpager:viewpager:aar": {
+ "shasums": {
+ "jar": "147af4e14a1984010d8f155e5e19d781f03c1d70dfed02a8e0d18428b8fc8682"
+ },
+ "version": "1.0.0"
+ },
+ "androidx.work:work-runtime-ktx:aar": {
+ "shasums": {
+ "jar": "290d2e9c1a22388b3f0c3dbc204a6176f8c49174126de884820befa83899f129"
+ },
+ "version": "2.4.0"
+ },
+ "androidx.work:work-runtime:aar": {
+ "shasums": {
+ "jar": "7801441cb973fb007ef311d3db35c3b3c9d011cef890357e7ca33890833354e5"
+ },
+ "version": "2.4.0"
+ },
+ "androidx.work:work-testing:aar": {
+ "shasums": {
+ "jar": "dc1d9f743c59ee08c605aa924fc20819b6a0b734338e0a95af1943c3cd806e23"
+ },
+ "version": "2.4.0"
+ },
+ "com.almworks.sqlite4java:sqlite4java": {
+ "shasums": {
+ "jar": "243a64470fda0e86a6fddeb0af4c7aa9426ce84e68cbfe18d75ee5da4b7e0b92"
+ },
+ "version": "1.0.392"
+ },
+ "com.android.databinding:baseLibrary": {
+ "shasums": {
+ "jar": "5e4f3b90995be63f3c8eeecce120c588a98c6aad3b54f60ad4c80b5418c4b012"
+ },
+ "version": "3.4.2"
+ },
+ "com.android.tools.analytics-library:protos": {
+ "shasums": {
+ "jar": "6695fe4be8c58274efbf0fa0ab9e465ceaf4f21792970d68d37591287ee7bed1"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.analytics-library:shared": {
+ "shasums": {
+ "jar": "4a7ee8aad5796e058a2f414993424155172689ac332cd1a999db861949e2e1de"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.analytics-library:tracker": {
+ "shasums": {
+ "jar": "ec43dbc6cf1e93f5999262b483cb6ec93b372010c06c3800c50d9fca903dd1c2"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.apkparser:apkanalyzer": {
+ "shasums": {
+ "jar": "be0f9e079fe166da36127b780de9ffcb297b511b642cc09c0dff75a2ee47c454"
+ },
+ "version": "30.0.4"
+ },
+ "com.android.tools.apkparser:binary-resources": {
+ "shasums": {
+ "jar": "c8fb8f656fe329375d4c669fc00bd396e6debd098a1304ab0189e54e6ab3f303"
+ },
+ "version": "30.0.4"
+ },
+ "com.android.tools.build.jetifier:jetifier-core": {
+ "shasums": {
+ "jar": "c9f8b016144cfb31c5aee92d47f34de23289167cac5e8ef68365b2dd05766f11"
+ },
+ "version": "1.0.0-beta04"
+ },
+ "com.android.tools.build:aapt2-proto": {
+ "shasums": {
+ "jar": "d5e2f3e1e1eb06224b6875f5e513c72a65182342745718160caf191d46a96664"
+ },
+ "version": "7.3.1-8691043"
+ },
+ "com.android.tools.build:builder-model": {
+ "shasums": {
+ "jar": "9737e0b1873180027f58e9902b2fc832e0ce22d36dd9d78fc93a5ca32b6ca5b1"
+ },
+ "version": "7.3.1"
+ },
+ "com.android.tools.build:manifest-merger": {
+ "shasums": {
+ "jar": "534ac50d45d1bbc80f4122c7fa221402442835029ef05ec056f4edf2776c8c9f"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.ddms:ddmlib": {
+ "shasums": {
+ "jar": "58c4db5a94a5f8c933409335f6657a92ff9c87488a271b260315fbd020c07fe0"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.external.com-intellij:intellij-core": {
+ "shasums": {
+ "jar": "8bb2aecfb8dd2208fe341a731ac44a9ec83f989c12449b82dff1eab493de0408"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.external.com-intellij:kotlin-compiler": {
+ "shasums": {
+ "jar": "ccdc9e1abfafdec71f4f93a3a2ad6230a1384925b06fc277d4ed921de5bb6fd8"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.external.org-jetbrains:uast": {
+ "shasums": {
+ "jar": "47bf3fc2a6a9aa09f728788e869033341abd9d8cdb9fc61087dfb7cd576076d8"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.layoutlib:layoutlib-api": {
+ "shasums": {
+ "jar": "7ffb2c13ac92e2d2d454c617ec537ad3b8868a987118c4d3c62018125d656707"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.lint:lint": {
+ "shasums": {
+ "jar": "685080782f6368cc68ac74db065b4c5c59d9c82599dc34be2ec39e425251b864"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.lint:lint-api": {
+ "shasums": {
+ "jar": "cc6ebd7a146226363aa38bbb4a10d3e329079ac3201dbfeb562605be691d482c"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.lint:lint-checks": {
+ "shasums": {
+ "jar": "a6a728be66b4e1cb61333f77f519f8213450989be0fbe125ff77e6241d07be8e"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools.lint:lint-model": {
+ "shasums": {
+ "jar": "4b6fc00a29c8dc716fb3a53b200af711318d2a8db5fa6c3d874b6d6d65e44541"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:annotations": {
+ "shasums": {
+ "jar": "77e5196bcafc283c5e987f0944f049eee0e68b532ebeb530d855f6f196db4f2a"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:common": {
+ "shasums": {
+ "jar": "559f1484222d8947ecf4d18538295be6d12ff2b74dc22c3c85922c7ba33678e9"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:dvlib": {
+ "shasums": {
+ "jar": "d4b141bd617afaf292dbd7c4f48b6b3a0b4244ded12b0e241e7bdf755db1597c"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:repository": {
+ "shasums": {
+ "jar": "a3bd11b434ccde5df90de77fd853361d99c150778cce5638d1ce25f820b9e243"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:sdk-common": {
+ "shasums": {
+ "jar": "fbe6b7dfb30b38ab1d17c5c6b660a8446ac2023fb0cfca3231126facedac2b7c"
+ },
+ "version": "30.3.1"
+ },
+ "com.android.tools:sdklib": {
+ "shasums": {
+ "jar": "57e147e5c3add5bfa1c53eb81aa24edbe2056fbd2210a00c9a71409ae498356b"
+ },
+ "version": "30.3.1"
+ },
+ "com.beust:jcommander": {
+ "shasums": {
+ "jar": "156be736199c990321d9ff77090b199629cfc9865e2d6c13f7cd291bb1641817"
+ },
+ "version": "1.64"
+ },
+ "com.crashlytics.sdk.android:answers:aar": {
+ "shasums": {
+ "jar": "5a05ddeda9f421b73727f4287a5d89e981a45e3feb7fac458cfddf29b97e3df8"
+ },
+ "version": "1.4.6"
+ },
+ "com.crashlytics.sdk.android:beta:aar": {
+ "shasums": {
+ "jar": "2a6b77374ebe6168588bd9116cdd66f60f7c151bd931b9a0f8b2012c06b1cd4d"
+ },
+ "version": "1.2.10"
+ },
+ "com.crashlytics.sdk.android:crashlytics-core:aar": {
+ "shasums": {
+ "jar": "4c055e1ad07fbe65a3e315bd27712be715962fb3c065d286a1d19f4f5db6768a"
+ },
+ "version": "2.6.7"
+ },
+ "com.crashlytics.sdk.android:crashlytics:aar": {
+ "shasums": {
+ "jar": "06d90c9d6693f302deae19f4cba67d724b44e8efcfc3c57308a78eead874dfeb"
+ },
+ "version": "2.9.8"
+ },
+ "com.github.bumptech.glide:annotations": {
+ "shasums": {
+ "jar": "d219d238006d824962176229d4708abcdddcfe342c6a18a5d0fa48d6f0479b3e"
+ },
+ "version": "4.11.0"
+ },
+ "com.github.bumptech.glide:compiler": {
+ "shasums": {
+ "jar": "a98cdf265c36261b1d523448b05c322ec290afa865946425eded6361980e8770"
+ },
+ "version": "4.11.0"
+ },
+ "com.github.bumptech.glide:disklrucache": {
+ "shasums": {
+ "jar": "d06775a5171b777aa3db031eb0dd4a1dbe3f00dda35b5574dfd953f6b0d5ef18"
+ },
+ "version": "4.11.0"
+ },
+ "com.github.bumptech.glide:gifdecoder:aar": {
+ "shasums": {
+ "jar": "197a1cd5b76855aa02b230c13974e293229b901dc2b96fab4315201e78baa804"
+ },
+ "version": "4.11.0"
+ },
+ "com.github.bumptech.glide:glide:aar": {
+ "shasums": {
+ "jar": "5c294e6a5f0f812cef876b8412954c1822da184af38e082a5b766e3c4f4fcd95"
+ },
+ "version": "4.11.0"
+ },
+ "com.github.bumptech.glide:mocks:aar": {
+ "shasums": {
+ "jar": "cf58b7972da6695ace6296fb3746535d30d41b422711a897c270d8480e3b055a"
+ },
+ "version": "4.11.0"
+ },
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": {
+ "shasums": {
+ "jar": "cdf16ef8f5b8023d003ce3cc1b0d51bda737762e2dab2fedf43d1c4292353f7f"
+ },
+ "version": "2.0"
+ },
+ "com.google.android.datatransport:transport-api:aar": {
+ "shasums": {
+ "jar": "576514f8b75d8ae32897f1b9b031f88b00465bf6e0996e227d09af688195f71e"
+ },
+ "version": "2.2.0"
+ },
+ "com.google.android.datatransport:transport-backend-cct:aar": {
+ "shasums": {
+ "jar": "6a2d99756c1fa634d3f14b4479257ac83d5d0fbf7fe5aa1db0a014df95ae217f"
+ },
+ "version": "2.3.0"
+ },
+ "com.google.android.datatransport:transport-runtime:aar": {
+ "shasums": {
+ "jar": "5e219672fe5a03f5b80c4d2211f39c2b0ceeb3988bfe1e8f1e033579dee20414"
+ },
+ "version": "2.2.3"
+ },
+ "com.google.android.flexbox:flexbox:aar": {
+ "shasums": {
+ "jar": "5e19500486fd7c8e2e8c7aad6bbba9c8d0ada7057c6b32b9b5c61439814e7574"
+ },
+ "version": "3.0.0"
+ },
+ "com.google.android.gms:play-services-ads-identifier:aar": {
+ "shasums": {
+ "jar": "b01c408c265b3aa171d19be86d7b8d4f3454f3085169a775690a6a85f57abb73"
+ },
+ "version": "17.0.0"
+ },
+ "com.google.android.gms:play-services-base:aar": {
+ "shasums": {
+ "jar": "2896d76f432be52167295bb9ce45ade25c310aeffc04d28cf8db6a15868e83de"
+ },
+ "version": "18.0.1"
+ },
+ "com.google.android.gms:play-services-basement:aar": {
+ "shasums": {
+ "jar": "55c1777467901a2d399f3252384c4976284aa35fddfd5995466dbeacb49f9dd6"
+ },
+ "version": "18.0.0"
+ },
+ "com.google.android.gms:play-services-measurement-api:aar": {
+ "shasums": {
+ "jar": "fde4cb8493409aa5130de84775eba9f967aaaf916512362987e1bd61b60babfc"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-measurement-base:aar": {
+ "shasums": {
+ "jar": "39fd34e7da8e822a93b64c66134e2479075c298588018d4f379c53b9eea1cf1e"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-measurement-impl:aar": {
+ "shasums": {
+ "jar": "d143f6d909619a0aa597ccc127713cd5e4b2eea38477521de739331bb791f3ec"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-measurement-sdk-api:aar": {
+ "shasums": {
+ "jar": "afff4861d76bc1f6c7527ae9c4c58c50d6d9e4668a3dc58b03cd77e508e305b3"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-measurement-sdk:aar": {
+ "shasums": {
+ "jar": "24c3c4085609a85debabc43718ac3049583b5452e4d34b2e8c9e620542631b30"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-measurement:aar": {
+ "shasums": {
+ "jar": "553f0b6fc6e44eed81bb5b7b4cb80719c05a244a394eb38ae91271871dcddf07"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.android.gms:play-services-stats:aar": {
+ "shasums": {
+ "jar": "e8ae5b40512b71e2258bfacd8cd3da398733aa4cde3b32d056093f832b83a6fe"
+ },
+ "version": "17.0.0"
+ },
+ "com.google.android.gms:play-services-tasks:aar": {
+ "shasums": {
+ "jar": "f106db48c6ccfa8e1315a7adc44aecd02ff7355eb3fa7dcdcba8c283a8eb1681"
+ },
+ "version": "18.0.1"
+ },
+ "com.google.android.gms:strict-version-matcher-plugin": {
+ "shasums": {
+ "jar": "0c1027a51198190386eae3f90adee9a30687e76da7589f06c79269fea4c7a4c0"
+ },
+ "version": "1.2.1"
+ },
+ "com.google.android.material:material:aar": {
+ "shasums": {
+ "jar": "cbf1e7d69fc236cdadcbd1ec5f6c0a1a41aca6ad1ef7f8481058956270ab1f0a"
+ },
+ "version": "1.3.0"
+ },
+ "com.google.android.play:integrity:aar": {
+ "shasums": {
+ "jar": "c44e46f3fa25c89840e5edcd76e203d61bba2bb7c2eae485856fbcc7d6fa411b"
+ },
+ "version": "1.0.1"
+ },
+ "com.google.android:annotations": {
+ "shasums": {
+ "jar": "ba734e1e84c09d615af6a09d33034b4f0442f8772dec120efb376d86a565ae15"
+ },
+ "version": "4.1.1.4"
+ },
+ "com.google.auto.service:auto-service-annotations": {
+ "shasums": {
+ "jar": "44752893119fdaf01b4c5ee74e46e5dab86f2dcda18114c562f877355c6ed26e"
+ },
+ "version": "1.0"
+ },
+ "com.google.auto.value:auto-value-annotations": {
+ "shasums": {
+ "jar": "37ec09b47d7ed35a99d13927db5c86fc9071f620f943ead5d757144698310852"
+ },
+ "version": "1.8.1"
+ },
+ "com.google.code.findbugs:jsr305": {
+ "shasums": {
+ "jar": "766ad2a0783f2687962c8ad74ceecc38a28b9f72a2d085ee438b7813e928d0c7"
+ },
+ "version": "3.0.2"
+ },
+ "com.google.code.gson:gson": {
+ "shasums": {
+ "jar": "d3999291855de495c94c743761b8ab5176cfeabe281a5ab0d8e8d45326fd703e"
+ },
+ "version": "2.8.9"
+ },
+ "com.google.dagger:dagger": {
+ "shasums": {
+ "jar": "bb0600d2dd9669cbd5a2e40e7d3fbc4692f57fb7d59509d26b380398e20f5739"
+ },
+ "version": "2.41"
+ },
+ "com.google.dagger:dagger-compiler": {
+ "shasums": {
+ "jar": "b53edab184655a0de6bacfb9551849de7b6bf0c688a4771321b4cf6f548ac80e"
+ },
+ "version": "2.41"
+ },
+ "com.google.dagger:dagger-producers": {
+ "shasums": {
+ "jar": "8fe89dc042654fdf38a5be19bfe7f1d61a512225495a9379d52e5c28bc3f4521"
+ },
+ "version": "2.41"
+ },
+ "com.google.dagger:dagger-spi": {
+ "shasums": {
+ "jar": "960d8a3ea526e53f4a47e025bce84c714cdec9b84d29fc29d348bbb58406d8ea"
+ },
+ "version": "2.41"
+ },
+ "com.google.devtools.ksp:symbol-processing-api": {
+ "shasums": {
+ "jar": "bf4a6875af46917174b087d03840456685e115954d926ce88fd04b9d2f254df3"
+ },
+ "version": "1.5.30-1.0.0"
+ },
+ "com.google.errorprone:error_prone_annotations": {
+ "shasums": {
+ "jar": "721cb91842b46fa056847d104d5225c8b8e1e8b62263b993051e1e5a0137b7ec"
+ },
+ "version": "2.11.0"
+ },
+ "com.google.errorprone:javac-shaded": {
+ "shasums": {
+ "jar": "65bfccf60986c47fbc17c9ebab0be626afc41741e0a6ec7109e0768817a36f30"
+ },
+ "version": "9-dev-r4023-3"
+ },
+ "com.google.firebase:firebase-analytics:aar": {
+ "shasums": {
+ "jar": "5c36ae943a719de1c598287370cb3ee1d27fd2dc9d0ada650de2b7f9a1dcac54"
+ },
+ "version": "17.5.0"
+ },
+ "com.google.firebase:firebase-annotations": {
+ "shasums": {
+ "jar": "0393478cf124721c7502ea76a28129a420c462fc4d5c0a4274db9e309785bd7e"
+ },
+ "version": "16.1.0"
+ },
+ "com.google.firebase:firebase-appcheck-debug:aar": {
+ "shasums": {
+ "jar": "544cff5ae13c1d2edcb2478c1d4ebb703d2d1a616f4e0bf261721aefc108ab4c"
+ },
+ "version": "16.0.0"
+ },
+ "com.google.firebase:firebase-appcheck-interop:aar": {
+ "shasums": {
+ "jar": "44b9133286fe4c550391cf55057b2748323c4052b68412df0f8c83efd6044824"
+ },
+ "version": "16.0.0"
+ },
+ "com.google.firebase:firebase-appcheck-playintegrity:aar": {
+ "shasums": {
+ "jar": "de9ca1700814a52272ad157654f1224c6b05da9c3da15121c4da23a5eca1ebda"
+ },
+ "version": "16.0.0"
+ },
+ "com.google.firebase:firebase-appcheck:aar": {
+ "shasums": {
+ "jar": "f6f093086af3af54797cc8f4070aad5b1e8fbb3e16ccbcfd0f02e7dd3e3c9448"
+ },
+ "version": "16.0.0"
+ },
+ "com.google.firebase:firebase-auth-interop:aar": {
+ "shasums": {
+ "jar": "64dd9a5c20b64d0e367f4731d11e8fd6ea816a89a4e44e4193c72eafb54264d3"
+ },
+ "version": "19.0.2"
+ },
+ "com.google.firebase:firebase-auth-ktx:aar": {
+ "shasums": {
+ "jar": "bd23f0077d8e85c8c57e06c06cdcccdc06a3de96facdd72fabd11159f01c4d4d"
+ },
+ "version": "19.3.1"
+ },
+ "com.google.firebase:firebase-auth:aar": {
+ "shasums": {
+ "jar": "0523401e4028729d1a882d2f787cd180bdf91bd12cb1d362453a770e6a2f72c1"
+ },
+ "version": "19.3.1"
+ },
+ "com.google.firebase:firebase-common-ktx:aar": {
+ "shasums": {
+ "jar": "32ef394eea17445d3460a11f7128ef412f9aa093cd00106e9cfbec363b17a2c1"
+ },
+ "version": "20.1.1"
+ },
+ "com.google.firebase:firebase-common:aar": {
+ "shasums": {
+ "jar": "1ab1a5054cb82395487fe0645dcfec6acc94efb9f4972fe717a8bff6905b8ecf"
+ },
+ "version": "20.1.1"
+ },
+ "com.google.firebase:firebase-components:aar": {
+ "shasums": {
+ "jar": "dd678b2e24dd9b3f570196c618b6ffba9ea59b232ae6dce1356b0629ecb6fbf7"
+ },
+ "version": "17.0.0"
+ },
+ "com.google.firebase:firebase-crashlytics:aar": {
+ "shasums": {
+ "jar": "635953640e1bbb277affadbc3e59b43f1c4dd07de79c8973b6341a756ad8b74b"
+ },
+ "version": "17.1.1"
+ },
+ "com.google.firebase:firebase-database-collection:aar": {
+ "shasums": {
+ "jar": "fb92604df35bf819e706432ff6e3ca9d4794cc85348d94c887622ba93b5450e0"
+ },
+ "version": "18.0.1"
+ },
+ "com.google.firebase:firebase-encoders-json:aar": {
+ "shasums": {
+ "jar": "24ce7c1cfda1d526b76b16437a2e7d0920d7176a377e0e30b2a7381341f22ea1"
+ },
+ "version": "16.1.0"
+ },
+ "com.google.firebase:firebase-firestore-ktx:aar": {
+ "shasums": {
+ "jar": "5c3ebeadfc1feed2fb20c3a974c9f108e2068833af1b9e532cda6a85cb37011f"
+ },
+ "version": "24.2.1"
+ },
+ "com.google.firebase:firebase-firestore:aar": {
+ "shasums": {
+ "jar": "e0f2b11b93e779f13e7fcc6a91724aeb071114959c55d19e7e0028c0a01003aa"
+ },
+ "version": "24.2.1"
+ },
+ "com.google.firebase:firebase-iid-interop:aar": {
+ "shasums": {
+ "jar": "b6f4ad581eb489370be3bf38a4bdabfc6ea3d4e716234c625a0f42516c53523c"
+ },
+ "version": "17.0.0"
+ },
+ "com.google.firebase:firebase-iid:aar": {
+ "shasums": {
+ "jar": "f1c174e75a24f298fbc0ed93dde29c997f29ca511d7e8a18dec068203553cf6b"
+ },
+ "version": "20.1.5"
+ },
+ "com.google.firebase:firebase-installations-interop:aar": {
+ "shasums": {
+ "jar": "d498fe20e7d2c65fc8f7124f1c1791d2828bebdf6bf06ab4cdee13e7fe9ccaa2"
+ },
+ "version": "16.0.0"
+ },
+ "com.google.firebase:firebase-installations:aar": {
+ "shasums": {
+ "jar": "0d0f88b3c3789d5fe1aa9a69bd5ab6c0e92036fcf34520775a0091e37268dd3f"
+ },
+ "version": "16.3.2"
+ },
+ "com.google.firebase:firebase-measurement-connector:aar": {
+ "shasums": {
+ "jar": "17e8b9b60ac0a79fcbed754d03d4b966cc5bb8837e79c2308bf2970f1d05700c"
+ },
+ "version": "18.0.0"
+ },
+ "com.google.firebase:protolite-well-known-types:aar": {
+ "shasums": {
+ "jar": "9ac16b795b44c4ba87937ba0a850260d393f9dc25ff469d52a7bad528daac986"
+ },
+ "version": "18.0.0"
+ },
+ "com.google.gms:google-services": {
+ "shasums": {
+ "jar": "d9668002ef7032deddf7dbf853b47e10e6722bbce1b318fe7d6a297e28a8dcae"
+ },
+ "version": "4.3.3"
+ },
+ "com.google.googlejavaformat:google-java-format": {
+ "shasums": {
+ "jar": "aa19ad7850fb85178aa22f2fddb163b84d6ce4d0035872f30d4408195ca1144e"
+ },
+ "version": "1.5"
+ },
+ "com.google.guava:failureaccess": {
+ "shasums": {
+ "jar": "a171ee4c734dd2da837e4b16be9df4661afab72a41adaf31eb84dfdaf936ca26"
+ },
+ "version": "1.0.1"
+ },
+ "com.google.guava:guava": {
+ "shasums": {
+ "jar": "d5be94d65e87bd219fb3193ad1517baa55a3b88fc91d21cf735826ab5af087b9"
+ },
+ "version": "31.0.1-jre"
+ },
+ "com.google.guava:listenablefuture": {
+ "shasums": {
+ "jar": "b372a037d4230aa57fbeffdef30fd6123f9c0c2db85d0aced00c91b974f33f99"
+ },
+ "version": "9999.0-empty-to-avoid-conflict-with-guava"
+ },
+ "com.google.j2objc:j2objc-annotations": {
+ "shasums": {
+ "jar": "21af30c92267bd6122c0e0b4d20cccb6641a37eaf956c6540ec471d584e64a7b"
+ },
+ "version": "1.3"
+ },
+ "com.google.jimfs:jimfs": {
+ "shasums": {
+ "jar": "c4828e28d7c0a930af9387510b3bada7daa5c04d7c25a75c7b8b081f1c257ddd"
+ },
+ "version": "1.1"
+ },
+ "com.google.protobuf:protobuf-java": {
+ "shasums": {
+ "jar": "4ac549b192694141958049f060a1c826a33342f619e108ced8c17d9877f5e3ed"
+ },
+ "version": "3.17.3"
+ },
+ "com.google.protobuf:protobuf-java-util": {
+ "shasums": {
+ "jar": "bf320ed076000e1d8c7cbf7601b056acaecab80f75b9a659b9f6398d0d7e3f79"
+ },
+ "version": "3.17.3"
+ },
+ "com.google.protobuf:protobuf-javalite": {
+ "shasums": {
+ "jar": "bfc598474392a015c050d34be38bb84eb3986809374eac437420d51680150e94"
+ },
+ "version": "3.19.2"
+ },
+ "com.google.truth.extensions:truth-liteproto-extension": {
+ "shasums": {
+ "jar": "71cce6284554e546d1b5ba48e310ee4b4050676f09fb0eced136d779284ff78d"
+ },
+ "version": "1.1.3"
+ },
+ "com.google.truth:truth": {
+ "shasums": {
+ "jar": "fc0b67782289a2aabfddfdf99eff1dcd5edc890d49143fcd489214b107b8f4f3"
+ },
+ "version": "1.1.3"
+ },
+ "com.googlecode.juniversalchardet:juniversalchardet": {
+ "shasums": {
+ "jar": "757bfe906193b8b651e79dc26cd67d6b55d0770a2cdfb0381591504f779d4a76"
+ },
+ "version": "1.0.3"
+ },
+ "com.ibm.icu:icu4j": {
+ "shasums": {
+ "jar": "e37a4467bac5cdeb02c5c4b8e5063d2f4e67b69e3c7df6d6b610f13185572bab"
+ },
+ "version": "53.1"
+ },
+ "com.squareup.moshi:moshi": {
+ "shasums": {
+ "jar": "bd004dd9ba175e603ad44420bf605250291b9b7bc6b9d9e916f5741ac8663307"
+ },
+ "version": "1.13.0"
+ },
+ "com.squareup.moshi:moshi-kotlin": {
+ "shasums": {
+ "jar": "a4967678345569919986c0d71ad59ae615745f708ae19fce30ba1e2bcb7f60cd"
+ },
+ "version": "1.13.0"
+ },
+ "com.squareup.moshi:moshi-kotlin-codegen": {
+ "shasums": {
+ "jar": "2cab2ee6ff25c12e2712bacbf170239335b3d4694398a5aeddb39484856fd1ae"
+ },
+ "version": "1.13.0"
+ },
+ "com.squareup.okhttp3:mockwebserver": {
+ "shasums": {
+ "jar": "d7d08b5096336d5b5a27d0e91bb2ebfa7dd54e48c3bb1e3cba15cc9bf16526b7"
+ },
+ "version": "4.7.2"
+ },
+ "com.squareup.okhttp3:okhttp": {
+ "shasums": {
+ "jar": "6b64ca1d2069751242984537d5de2cbe627ae000430f5117c47d8cb3d272facd"
+ },
+ "version": "4.7.2"
+ },
+ "com.squareup.okhttp:okhttp": {
+ "shasums": {
+ "jar": "88ac9fd1bb51f82bcc664cc1eb9c225c90dc4389d660231b4cc737bebfe7d0aa"
+ },
+ "version": "2.7.5"
+ },
+ "com.squareup.okio:okio": {
+ "shasums": {
+ "jar": "a27f091d34aa452e37227e2cfa85809f29012a8ef2501a9b5a125a978e4fcbc1"
+ },
+ "version": "2.10.0"
+ },
+ "com.squareup.retrofit2:converter-moshi": {
+ "shasums": {
+ "jar": "6bade0b754a7b8b7551e2208cb8227e697c2db553b8f12df6f1aa70c6f058600"
+ },
+ "version": "2.5.0"
+ },
+ "com.squareup.retrofit2:retrofit": {
+ "shasums": {
+ "jar": "e6ea1929c46852f5bec66ab3357da383476cef4e8d1deefdbf195b79cc4d6581"
+ },
+ "version": "2.9.0"
+ },
+ "com.squareup.retrofit2:retrofit-mock": {
+ "shasums": {
+ "jar": "00692755410b4367c7c12e6e4aadd3b1a28b5169e8961d94bc27ab36ece9bf29"
+ },
+ "version": "2.5.0"
+ },
+ "com.squareup:javapoet": {
+ "shasums": {
+ "jar": "4c7517e848a71b36d069d12bb3bf46a70fd4cda3105d822b0ed2e19c00b69291"
+ },
+ "version": "1.13.0"
+ },
+ "com.squareup:javawriter": {
+ "shasums": {
+ "jar": "f699823d0081f69cbb676c1845ea222e0ada79bc88a53e5d22d8bd02d328f57e"
+ },
+ "version": "2.1.1"
+ },
+ "com.squareup:kotlinpoet": {
+ "shasums": {
+ "jar": "336095fd910caeaebcc2f6998df6625a9a90a5fd9f2cfa215ac224b77f37fbc6"
+ },
+ "version": "1.10.2"
+ },
+ "com.sun.activation:javax.activation": {
+ "shasums": {
+ "jar": "993302b16cd7056f21e779cc577d175a810bb4900ef73cd8fbf2b50f928ba9ce"
+ },
+ "version": "1.2.0"
+ },
+ "com.sun.istack:istack-commons-runtime": {
+ "shasums": {
+ "jar": "4ffabb06be454a05e4398e20c77fa2b6308d4b88dfbef7ca30a76b5b7d5505ef"
+ },
+ "version": "3.0.8"
+ },
+ "com.sun.xml.fastinfoset:FastInfoset": {
+ "shasums": {
+ "jar": "056f3a1e144409f21ed16afc26805f58e9a21f3fce1543c42d400719d250c511"
+ },
+ "version": "1.2.16"
+ },
+ "commons-codec:commons-codec": {
+ "shasums": {
+ "jar": "4241dfa94e711d435f29a4604a3e2de5c4aa3c165e23bd066be6fc1fc4309569"
+ },
+ "version": "1.10"
+ },
+ "commons-io:commons-io": {
+ "shasums": {
+ "jar": "cc6a41dc3eaacc9e440a6bd0d2890b20d36b4ee408fe2d67122f328bb6e01581"
+ },
+ "version": "2.4"
+ },
+ "commons-logging:commons-logging": {
+ "shasums": {
+ "jar": "daddea1ea0be0f56978ab3006b8ac92834afeefbd9b7e4e6316fca57df0fa636"
+ },
+ "version": "1.2"
+ },
+ "io.fabric.sdk.android:fabric:aar": {
+ "shasums": {
+ "jar": "36df4b321ec95e31226ff5abaae73e66f3a99dedddbc2d03054c4e141c8aaa5c"
+ },
+ "version": "1.4.7"
+ },
+ "io.grpc:grpc-android:aar": {
+ "shasums": {
+ "jar": "5a2d9a295c6e77cb4e615ed4519edcae2432b7828cac2cc1a8ee798cffb43c9a"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-api": {
+ "shasums": {
+ "jar": "5d2bd58e4003e6b8440b3596c0809ef5c651594d62943edb459d5fa82273bd2f"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-context": {
+ "shasums": {
+ "jar": "97059fef9e325ecfcc30429921916ebaccd436cf5601af4d706ef1f613f5ea85"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-core": {
+ "shasums": {
+ "jar": "907dd75d9684dcd1e5664856e45aa05e072870af91796e635405f963f82431da"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-okhttp": {
+ "shasums": {
+ "jar": "ecd538b47b44b4638fa12b792ae2ac18c9b28c5d5a96595b1d3b75d1af424ac2"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-protobuf-lite": {
+ "shasums": {
+ "jar": "1e53b2f3d856ee83fe58f7b89a36180e00c79141fbc9752682d1fdb36bcb93be"
+ },
+ "version": "1.44.1"
+ },
+ "io.grpc:grpc-stub": {
+ "shasums": {
+ "jar": "c34e16c085568df0ca8b22d7fe1326999d5be192deb2ae057238ec0f7707a107"
+ },
+ "version": "1.44.1"
+ },
+ "io.perfmark:perfmark-api": {
+ "shasums": {
+ "jar": "c705b5c10c18ff3032b9e81742bc2f6b0e5607f6a6dfc0c8ad0cff75d4913042"
+ },
+ "version": "0.23.0"
+ },
+ "io.xlate:yaml-json": {
+ "shasums": {
+ "jar": "713e1d0c4f0f7c4c93a6b366b361dd1493f406cc532986784c884c205e049558"
+ },
+ "version": "0.1.0"
+ },
+ "jakarta.activation:jakarta.activation-api": {
+ "shasums": {
+ "jar": "8b0a0f52fa8b05c5431921a063ed866efaa41dadf2e3a7ee3e1961f2b0d9645b"
+ },
+ "version": "1.2.1"
+ },
+ "jakarta.json:jakarta.json-api": {
+ "shasums": {
+ "jar": "f2472507ad2cc12f2aef08a2f7a628cd1c3f855668a6dcb2aa9a30d9b909b998"
+ },
+ "version": "2.1.2"
+ },
+ "jakarta.xml.bind:jakarta.xml.bind-api": {
+ "shasums": {
+ "jar": "69156304079bdeed9fc0ae3b39389f19b3cc4ba4443bc80508995394ead742ea"
+ },
+ "version": "2.3.2"
+ },
+ "javax.annotation:javax.annotation-api": {
+ "shasums": {
+ "jar": "e04ba5195bcd555dc95650f7cc614d151e4bcd52d29a10b8aa2197f3ab89ab9b"
+ },
+ "version": "1.3.2"
+ },
+ "javax.inject:javax.inject": {
+ "shasums": {
+ "jar": "91c77044a50c481636c32d916fd89c9118a72195390452c81065080f957de7ff"
+ },
+ "version": "1"
+ },
+ "junit:junit": {
+ "shasums": {
+ "jar": "8e495b634469d64fb8acfa3495a065cbacc8a0fff55ce1e31007be4c16dc57d3"
+ },
+ "version": "4.13.2"
+ },
+ "net.bytebuddy:byte-buddy": {
+ "shasums": {
+ "jar": "5fcad05da791e9a22811c255a4a74b7ea094b7243d9dbf3e6fc578c8c94290ac"
+ },
+ "version": "1.10.20"
+ },
+ "net.bytebuddy:byte-buddy-agent": {
+ "shasums": {
+ "jar": "b592a6c43e752bf41659717956c57fbb790394d2ee5f8941876659f9c5c0e7e8"
+ },
+ "version": "1.10.20"
+ },
+ "net.java.dev.jna:jna": {
+ "shasums": {
+ "jar": "5557e235a8aa2f9766d5dc609d67948f2a8832c2d796cea9ef1d6cbe0b3b7eaf"
+ },
+ "version": "5.6.0"
+ },
+ "net.java.dev.jna:jna-platform": {
+ "shasums": {
+ "jar": "9ecea8bf2b1b39963939d18b70464eef60c508fed8820f9dcaba0c35518eabf7"
+ },
+ "version": "5.6.0"
+ },
+ "net.ltgt.gradle.incap:incap": {
+ "shasums": {
+ "jar": "b625b9806b0f1e4bc7a2e3457119488de3cd57ea20feedd513db070a573a4ffd"
+ },
+ "version": "0.2"
+ },
+ "net.sf.kxml:kxml2": {
+ "shasums": {
+ "jar": "f264dd9f79a1fde10ce5ecc53221eff24be4c9331c830b7d52f2f08a7b633de2"
+ },
+ "version": "2.3.0"
+ },
+ "nl.dionsegijn:konfetti:aar": {
+ "shasums": {
+ "jar": "a9beb9371e9c06c39eeff1ed052142a6ed6f0b28e3408230d8771867f9d817ba"
+ },
+ "version": "1.2.5"
+ },
+ "org.antlr:antlr4": {
+ "shasums": {
+ "jar": "a32de739cfdf515774e696f91aa9697d2e7731e5cb5045ca8a4b657f8b1b4fb4"
+ },
+ "version": "4.5.3"
+ },
+ "org.apache.commons:commons-compress": {
+ "shasums": {
+ "jar": "0aeb625c948c697ea7b205156e112363b59ed5e2551212cd4e460bdb72c7c06e"
+ },
+ "version": "1.20"
+ },
+ "org.apache.httpcomponents:httpclient": {
+ "shasums": {
+ "jar": "c03f813195e7a80e3608d0ddd8da80b21696a4c92a6a2298865bf149071551c7"
+ },
+ "version": "4.5.6"
+ },
+ "org.apache.httpcomponents:httpcore": {
+ "shasums": {
+ "jar": "e06e89d40943245fcfa39ec537cdbfce3762aecde8f9c597780d2b00c2b43424"
+ },
+ "version": "4.4.13"
+ },
+ "org.apache.httpcomponents:httpmime": {
+ "shasums": {
+ "jar": "0b2b1102c18d3c7e05a77214b9b7501a6f6056174ae5604e0e256776eda7553e"
+ },
+ "version": "4.5.6"
+ },
+ "org.bouncycastle:bcpkix-jdk15on": {
+ "shasums": {
+ "jar": "efbca754880ce3922ca47a43c1f0b72c45731450a0ef193b9db33bf4bb38ce5f"
+ },
+ "version": "1.67"
+ },
+ "org.bouncycastle:bcprov-jdk15on": {
+ "shasums": {
+ "jar": "f732a46c8de7e2232f2007c682a21d1f4cc8a8a0149b6b7bd6aa1afdc65a0f8d"
+ },
+ "version": "1.68"
+ },
+ "org.checkerframework:checker-compat-qual": {
+ "shasums": {
+ "jar": "11d134b245e9cacc474514d2d66b5b8618f8039a1465cdc55bbc0b34e0008b7a"
+ },
+ "version": "2.5.5"
+ },
+ "org.checkerframework:checker-qual": {
+ "shasums": {
+ "jar": "63d474e16948b0a5aabd12c18bdc3d6f47ac2efc4c7ee08da76dba4658138f95"
+ },
+ "version": "3.21.3"
+ },
+ "org.codehaus.mojo:animal-sniffer-annotations": {
+ "shasums": {
+ "jar": "e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d"
+ },
+ "version": "1.19"
+ },
+ "org.eclipse.parsson:parsson": {
+ "shasums": {
+ "jar": "0a0d5fef906ddbbddae6e894f6cf42e7b952d24952f1df09adb0a2426f496bf6"
+ },
+ "version": "1.1.2"
+ },
+ "org.glassfish.jaxb:jaxb-runtime": {
+ "shasums": {
+ "jar": "e6e0a1e89fb6ff786279e6a0082d5cef52dc2ebe67053d041800737652b4fd1b"
+ },
+ "version": "2.3.2"
+ },
+ "org.glassfish.jaxb:txw2": {
+ "shasums": {
+ "jar": "4a6a9f483388d461b81aa9a28c685b8b74c0597993bf1884b04eddbca95f48fe"
+ },
+ "version": "2.3.2"
+ },
+ "org.hamcrest:hamcrest-core": {
+ "shasums": {
+ "jar": "66fdef91e9739348df7a096aa384a5685f4e875584cce89386a7a47251c4d8e9"
+ },
+ "version": "1.3"
+ },
+ "org.hamcrest:hamcrest-integration": {
+ "shasums": {
+ "jar": "70f418efbb506c5155da5f9a5a33262ea08a9e4d7fea186aa9015c41a7224ac2"
+ },
+ "version": "1.3"
+ },
+ "org.hamcrest:hamcrest-library": {
+ "shasums": {
+ "jar": "711d64522f9ec410983bd310934296da134be4254a125080a0416ec178dfad1c"
+ },
+ "version": "1.3"
+ },
+ "org.jetbrains.intellij.deps:trove4j": {
+ "shasums": {
+ "jar": "affb7c85a3c87bdcf69ff1dbb84de11f63dc931293934bc08cd7ab18de083601"
+ },
+ "version": "1.0.20181211"
+ },
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable": {
+ "shasums": {
+ "jar": "d7b85448039e468daf3b9462a172244477fa3eb890f199ec77703992f36ade44"
+ },
+ "version": "1.5.0"
+ },
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable": {
+ "shasums": {
+ "jar": "bf32071706cf3c20580516b04d25a733c7a21db9cd9d04fc7060c00720bc91bc"
+ },
+ "version": "1.5.0"
+ },
+ "org.jetbrains.kotlin:kotlin-reflect": {
+ "shasums": {
+ "jar": "c6161884209221db7f5ddb031bb480a3c46bb90d5b65d7cc0167b149aaa9c494"
+ },
+ "version": "1.6.0"
+ },
+ "org.jetbrains.kotlin:kotlin-script-runtime": {
+ "shasums": {
+ "jar": "f2d45a350628bdfea25570c4c3f29198087e0f8cf53d87d928fb0da8a30c8fb7"
+ },
+ "version": "1.5.0"
+ },
+ "org.jetbrains.kotlin:kotlin-stdlib": {
+ "shasums": {
+ "jar": "739c526672bb337573b28f63afa8306eb088b0c3a0967f56d6c89f4a3012a492"
+ },
+ "version": "1.6.21"
+ },
+ "org.jetbrains.kotlin:kotlin-stdlib-common": {
+ "shasums": {
+ "jar": "183bec59cd9f3a14957b190e8c879cf1194bd1f106b0a7b6e1cbb8790d242363"
+ },
+ "version": "1.6.21"
+ },
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7": {
+ "shasums": {
+ "jar": "f1b0634dbb94172038463020bb2dd45ca26849f8ce29d625acb0f1569d11dbee"
+ },
+ "version": "1.6.21"
+ },
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8": {
+ "shasums": {
+ "jar": "dab45489b47736d59fce44b80676f1947a9b6bcab10fd60e878a83bd82a6954c"
+ },
+ "version": "1.6.21"
+ },
+ "org.jetbrains.kotlin:kotlin-test": {
+ "shasums": {
+ "jar": "1794237a1fc908d37adb2fa3d9739b883124571720ad285cfa81e74190e87ba9"
+ },
+ "version": "1.3.72"
+ },
+ "org.jetbrains.kotlin:kotlin-test-annotations-common": {
+ "shasums": {
+ "jar": "cadb25f8660392c1fbc7f9b2b1b9daa36469587b97bd30ba718d3bbaea71dfb3"
+ },
+ "version": "1.3.72"
+ },
+ "org.jetbrains.kotlin:kotlin-test-common": {
+ "shasums": {
+ "jar": "6b4abd7d7d1c07ab72c2318afec2f9b627b9e99a39767f597ac40cf7b1955b8a"
+ },
+ "version": "1.3.72"
+ },
+ "org.jetbrains.kotlin:kotlin-test-junit": {
+ "shasums": {
+ "jar": "d8266ebb919568ddc15c98d2790017f31240ac51936445fd8b27231d60fe4566"
+ },
+ "version": "1.3.72"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android": {
+ "shasums": {
+ "jar": "3fdc0eed5bc4b83ee9622774520a2db25470370eacd1581cac1e37704f095b00"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core": {
+ "shasums": {
+ "jar": "778851e73851b502e8366434bc9ec58371431890fb12b89e7edbf1732962c030"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": {
+ "shasums": {
+ "jar": "c24c8bb27bb320c4a93871501a7e5e0c61607638907b197aef675513d4c820be"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava": {
+ "shasums": {
+ "jar": "94deeee072e0f762a8a3ccc66b1762c5d96d55eca13cab4001f5b7588bb74390"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test": {
+ "shasums": {
+ "jar": "993eef7de86d59e99096fbc51b7df33f0cc8a3a655e195590765b7e51e4c0aaa"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": {
+ "shasums": {
+ "jar": "69d65e5fea41cbc0bb905d3ef6623a2348b931fd01b9f2c4a1751a372f2e476d"
+ },
+ "version": "1.6.4"
+ },
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm": {
+ "shasums": {
+ "jar": "fdaf7ba158465f6b6e9ce5762e0300fd681a976fbfeb5ed50fa5a2b26868cec8"
+ },
+ "version": "0.3.0"
+ },
+ "org.jetbrains:annotations": {
+ "shasums": {
+ "jar": "ace2a10dc8e2d5fd34925ecac03e4988b2c0f851650c94b8cef49ba1bd111478"
+ },
+ "version": "13.0"
+ },
+ "org.jvnet.staxex:stax-ex": {
+ "shasums": {
+ "jar": "20522549056e9e50aa35ef0b445a2e47a53d06be0b0a9467d704e2483ffb049a"
+ },
+ "version": "1.8.1"
+ },
+ "org.mockito.kotlin:mockito-kotlin": {
+ "shasums": {
+ "jar": "12995c7fdb8de84cf58fca31f1cd8810eeaa39e63c00e61ffcb2b49a4305f21f"
+ },
+ "version": "3.2.0"
+ },
+ "org.mockito:mockito-core": {
+ "shasums": {
+ "jar": "a1f64211407b8dc4cf80b16e07cc11aa9e5228d53dc4a5357326d66825f6a4ac"
+ },
+ "version": "3.9.0"
+ },
+ "org.objenesis:objenesis": {
+ "shasums": {
+ "jar": "03d960bd5aef03c653eb000413ada15eb77cdd2b8e4448886edf5692805e35f3"
+ },
+ "version": "3.2"
+ },
+ "org.ow2.asm:asm": {
+ "shasums": {
+ "jar": "b9d4fe4d71938df38839f0eca42aaaa64cf8b313d678da036f0cb3ca199b47f5"
+ },
+ "version": "9.2"
+ },
+ "org.ow2.asm:asm-analysis": {
+ "shasums": {
+ "jar": "878fbe521731c072d14d2d65b983b1beae6ad06fda0007b6a8bae81f73f433c4"
+ },
+ "version": "9.2"
+ },
+ "org.ow2.asm:asm-commons": {
+ "shasums": {
+ "jar": "be4ce53138a238bb522cd781cf91f3ba5ce2f6ca93ec62d46a162a127225e0a6"
+ },
+ "version": "9.2"
+ },
+ "org.ow2.asm:asm-tree": {
+ "shasums": {
+ "jar": "aabf9bd23091a4ebfc109c1f3ee7cf3e4b89f6ba2d3f51c5243f16b3cffae011"
+ },
+ "version": "9.2"
+ },
+ "org.ow2.asm:asm-util": {
+ "shasums": {
+ "jar": "ff5b3cd331ae8a9a804768280da98f50f424fef23dd3c788bb320e08c94ee598"
+ },
+ "version": "9.2"
+ },
+ "org.robolectric:annotations": {
+ "shasums": {
+ "jar": "e6b50343f492e3a6d8a5ddbfd886be685c946459146f1ea2934cd0dacd8f558b"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:junit": {
+ "shasums": {
+ "jar": "887adf35c2cfff04a3f40d15eaa1f9b2bdda3290068fb36a851dcba262c9e454"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:nativeruntime": {
+ "shasums": {
+ "jar": "2a19ea7935855831ccff605e5b07d2539d44fbd9741b767bdfd34b8b3a35d508"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:pluginapi": {
+ "shasums": {
+ "jar": "101dbd8b6a920a9bf21f6ca06ff68eb8e6dd7a887091c6d51488faa7ffea9b71"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:plugins-maven-dependency-resolver": {
+ "shasums": {
+ "jar": "a72c736098cfcbf806fabb8560fca4e518fee0bba3182f55ada86b291128d94c"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:resources": {
+ "shasums": {
+ "jar": "bfca8d227eafc738f9c4fcab08cc6251d1e876330d6cfd6b994bcfdf65894bba"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:robolectric": {
+ "shasums": {
+ "jar": "7b13241ae4af4719499da02bd1be8aacf9ff13e695df93a115d052a61da4d885"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:sandbox": {
+ "shasums": {
+ "jar": "a75c6d7ff0b6cd8862fece94a3c47f223f3f3db2d7f35a5ae696a967e76ff747"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:shadowapi": {
+ "shasums": {
+ "jar": "a5b845650d009ae0bc8c220b53a90939be1cb6192831553785ed165875db8e4d"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:shadows-framework": {
+ "shasums": {
+ "jar": "05a07bd6c5407999df9d84b73e1dcf016ae73c36b8f0bb53ca2e8c2bfb6d070d"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:utils": {
+ "shasums": {
+ "jar": "a3bf567dcf05ee9ebdba79cf6f9b9043460958b354d815e49394e00ad536fd99"
+ },
+ "version": "4.7"
+ },
+ "org.robolectric:utils-reflector": {
+ "shasums": {
+ "jar": "a18155366b0d8977f3a23b83c9d0150180c5d6a981f6df92ac9ea3018151eb3e"
+ },
+ "version": "4.7"
+ },
+ "org.smali:baksmali": {
+ "shasums": {
+ "jar": "1990932c4c8cf334a640e52c4bd0426e4abb2c2fc94f1803711ea8460c06de50"
+ },
+ "version": "2.2.4"
+ },
+ "org.smali:dexlib2": {
+ "shasums": {
+ "jar": "cb2677bfb66cfbc954e96e806ac6bda13051ad37754f9d1bcce38514e50e41e6"
+ },
+ "version": "2.2.4"
+ },
+ "org.smali:util": {
+ "shasums": {
+ "jar": "d7de146d2b6dc9d0b75cb6c7ff17ca68ef24049dc6038b84b5f6b22cd00ddd46"
+ },
+ "version": "2.2.4"
+ },
+ "org.snakeyaml:snakeyaml-engine": {
+ "shasums": {
+ "jar": "2652199af40c9aa2f1782400d2dfbbf4e5226208c4e05ddd4059c3d6d9cd1505"
+ },
+ "version": "2.6"
+ },
+ "xerces:xercesImpl": {
+ "shasums": {
+ "jar": "b50d3a4ca502faa4d1c838acb8aa9480446953421f7327e338c5dda3da5e76d0"
+ },
+ "version": "2.12.0"
+ },
+ "xml-apis:xml-apis": {
+ "shasums": {
+ "jar": "a840968176645684bb01aed376e067ab39614885f9eee44abe35a5f20ebe7fad"
+ },
+ "version": "1.4.01"
+ }
+ },
+ "dependencies": {
+ "androidx.activity:activity-compose:aar": [
+ "androidx.activity:activity-ktx:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.activity:activity-ktx:aar": [
+ "androidx.activity:activity:aar",
+ "androidx.core:core-ktx:aar",
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
+ "androidx.savedstate:savedstate-ktx:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.activity:activity:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.tracing:tracing:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.appcompat:appcompat-resources:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "androidx.vectordrawable:vectordrawable:aar"
+ ],
+ "androidx.appcompat:appcompat:aar": [
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.appcompat:appcompat-resources:aar",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.cursoradapter:cursoradapter:aar",
+ "androidx.drawerlayout:drawerlayout:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.savedstate:savedstate:aar"
+ ],
+ "androidx.arch.core:core-common": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.arch.core:core-runtime:aar": [
+ "androidx.annotation:annotation",
+ "androidx.arch.core:core-common"
+ ],
+ "androidx.arch.core:core-testing:aar": [
+ "androidx.annotation:annotation",
+ "androidx.arch.core:core-runtime:aar",
+ "junit:junit",
+ "org.mockito:mockito-core"
+ ],
+ "androidx.autofill:autofill:aar": [
+ "androidx.core:core:aar"
+ ],
+ "androidx.cardview:cardview:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.collection:collection": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.compose.animation:animation-core:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core"
+ ],
+ "androidx.compose.animation:animation:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.foundation:foundation-layout:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.foundation:foundation:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.material:material-icons-core:aar": [
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.material:material-ripple:aar": [
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.material:material:aar": [
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.material:material-icons-core:aar",
+ "androidx.compose.material:material-ripple:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.savedstate:savedstate:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.runtime:runtime-livedata:aar": [
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.runtime:runtime-saveable:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.runtime:runtime:aar": [
+ "androidx.annotation:annotation",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android"
+ ],
+ "androidx.compose.ui:ui-geometry:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.ui:ui-graphics:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.ui:ui-test-junit4:aar": [
+ "androidx.activity:activity-compose:aar",
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.ui:ui-test:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test.ext:junit:aar",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "junit:junit",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test"
+ ],
+ "androidx.compose.ui:ui-test:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test:monitor:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test"
+ ],
+ "androidx.compose.ui:ui-text:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.core:core:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "androidx.compose.ui:ui-unit:aar": [
+ "androidx.annotation:annotation",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.ui:ui-util:aar": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.compose.ui:ui:aar": [
+ "androidx.annotation:annotation",
+ "androidx.autofill:autofill:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.lifecycle:lifecycle-common-java8",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.profileinstaller:profileinstaller:aar",
+ "androidx.savedstate:savedstate:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core"
+ ],
+ "androidx.concurrent:concurrent-futures": [
+ "androidx.annotation:annotation",
+ "com.google.guava:listenablefuture"
+ ],
+ "androidx.constraintlayout:constraintlayout:aar": [
+ "androidx.appcompat:appcompat:aar",
+ "androidx.constraintlayout:constraintlayout-solver",
+ "androidx.core:core:aar"
+ ],
+ "androidx.coordinatorlayout:coordinatorlayout:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.customview:customview:aar"
+ ],
+ "androidx.core:core-ktx:aar": [
+ "androidx.annotation:annotation",
+ "androidx.core:core:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.core:core:aar": [
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.collection:collection",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.versionedparcelable:versionedparcelable:aar"
+ ],
+ "androidx.cursoradapter:cursoradapter:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.customview:customview:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar"
+ ],
+ "androidx.databinding:databinding-adapters:aar": [
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-runtime:aar"
+ ],
+ "androidx.databinding:databinding-compiler": [
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-compiler-common",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "commons-codec:commons-codec",
+ "commons-io:commons-io",
+ "org.antlr:antlr4",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "androidx.databinding:databinding-compiler-common": [
+ "androidx.databinding:databinding-common",
+ "com.android.databinding:baseLibrary",
+ "com.android.tools.build.jetifier:jetifier-core",
+ "com.android.tools:annotations",
+ "com.google.code.gson:gson",
+ "com.google.guava:guava",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "com.squareup:javapoet",
+ "commons-io:commons-io",
+ "org.antlr:antlr4",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "androidx.databinding:databinding-runtime:aar": [
+ "androidx.collection:collection",
+ "androidx.databinding:databinding-common",
+ "androidx.lifecycle:lifecycle-runtime:aar"
+ ],
+ "androidx.documentfile:documentfile:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.drawerlayout:drawerlayout:aar": [
+ "androidx.annotation:annotation",
+ "androidx.core:core:aar",
+ "androidx.customview:customview:aar"
+ ],
+ "androidx.dynamicanimation:dynamicanimation:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.legacy:legacy-support-core-utils:aar"
+ ],
+ "androidx.exifinterface:exifinterface:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.fragment:fragment:aar": [
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.loader:loader:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.viewpager:viewpager:aar"
+ ],
+ "androidx.interpolator:interpolator:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.legacy:legacy-support-core-utils:aar": [
+ "androidx.annotation:annotation",
+ "androidx.core:core:aar",
+ "androidx.documentfile:documentfile:aar",
+ "androidx.loader:loader:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "androidx.print:print:aar"
+ ],
+ "androidx.lifecycle:lifecycle-common": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.lifecycle:lifecycle-common-java8": [
+ "androidx.annotation:annotation",
+ "androidx.lifecycle:lifecycle-common"
+ ],
+ "androidx.lifecycle:lifecycle-extensions:aar": [
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-process:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar"
+ ],
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar": [
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.lifecycle:lifecycle-livedata-core:aar": [
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.lifecycle:lifecycle-common"
+ ],
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar": [
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core"
+ ],
+ "androidx.lifecycle:lifecycle-livedata:aar": [
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar"
+ ],
+ "androidx.lifecycle:lifecycle-process:aar": [
+ "androidx.lifecycle:lifecycle-runtime:aar"
+ ],
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar": [
+ "androidx.annotation:annotation",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android"
+ ],
+ "androidx.lifecycle:lifecycle-runtime:aar": [
+ "androidx.annotation:annotation",
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.lifecycle:lifecycle-common"
+ ],
+ "androidx.lifecycle:lifecycle-service:aar": [
+ "androidx.lifecycle:lifecycle-runtime:aar"
+ ],
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar": [
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android"
+ ],
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar": [
+ "androidx.annotation:annotation",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.savedstate:savedstate:aar"
+ ],
+ "androidx.lifecycle:lifecycle-viewmodel:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.loader:loader:aar": [
+ "androidx.annotation:annotation",
+ "androidx.core:core:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar"
+ ],
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.multidex:multidex-instrumentation:aar": [
+ "androidx.multidex:multidex:aar"
+ ],
+ "androidx.navigation:navigation-common-ktx:aar": [
+ "androidx.collection:collection",
+ "androidx.navigation:navigation-common:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.navigation:navigation-common:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar"
+ ],
+ "androidx.navigation:navigation-fragment-ktx:aar": [
+ "androidx.navigation:navigation-fragment:aar",
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.navigation:navigation-fragment:aar": [
+ "androidx.fragment:fragment:aar",
+ "androidx.navigation:navigation-runtime:aar"
+ ],
+ "androidx.navigation:navigation-runtime-ktx:aar": [
+ "androidx.navigation:navigation-common-ktx:aar",
+ "androidx.navigation:navigation-runtime:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.navigation:navigation-runtime:aar": [
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.navigation:navigation-common:aar"
+ ],
+ "androidx.navigation:navigation-ui-ktx:aar": [
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "androidx.navigation:navigation-ui:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.navigation:navigation-ui:aar": [
+ "androidx.navigation:navigation-runtime:aar",
+ "com.google.android.material:material:aar"
+ ],
+ "androidx.print:print:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.profileinstaller:profileinstaller:aar": [
+ "androidx.annotation:annotation",
+ "androidx.startup:startup-runtime:aar"
+ ],
+ "androidx.recyclerview:recyclerview:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.customview:customview:aar"
+ ],
+ "androidx.room:room-common": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.room:room-runtime:aar": [
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.room:room-common",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar"
+ ],
+ "androidx.savedstate:savedstate-ktx:aar": [
+ "androidx.savedstate:savedstate:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.savedstate:savedstate:aar": [
+ "androidx.annotation:annotation",
+ "androidx.arch.core:core-common",
+ "androidx.lifecycle:lifecycle-common"
+ ],
+ "androidx.sqlite:sqlite-framework:aar": [
+ "androidx.annotation:annotation",
+ "androidx.sqlite:sqlite:aar"
+ ],
+ "androidx.sqlite:sqlite:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.startup:startup-runtime:aar": [
+ "androidx.annotation:annotation",
+ "androidx.tracing:tracing:aar"
+ ],
+ "androidx.test.espresso:espresso-accessibility:aar": [
+ "androidx.test.espresso:espresso-core:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework"
+ ],
+ "androidx.test.espresso:espresso-contrib:aar": [
+ "androidx.core:core:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
+ "com.google.android.material:material:aar"
+ ],
+ "androidx.test.espresso:espresso-core:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:core:aar",
+ "androidx.test:runner:aar",
+ "com.google.code.findbugs:jsr305",
+ "com.squareup:javawriter",
+ "javax.inject:javax.inject",
+ "org.hamcrest:hamcrest-integration",
+ "org.hamcrest:hamcrest-library",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.test.espresso:espresso-intents:aar": [
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test:rules:aar"
+ ],
+ "androidx.test.ext:junit:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "junit:junit"
+ ],
+ "androidx.test.ext:truth:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test:core:aar",
+ "com.google.guava:guava",
+ "com.google.truth:truth"
+ ],
+ "androidx.test.services:storage:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test:annotation:aar",
+ "androidx.test:monitor:aar",
+ "com.google.code.findbugs:jsr305"
+ ],
+ "androidx.test:annotation:aar": [
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar"
+ ],
+ "androidx.test:core:aar": [
+ "androidx.annotation:annotation",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.test.services:storage:aar",
+ "androidx.test:monitor:aar",
+ "androidx.tracing:tracing:aar",
+ "com.google.guava:listenablefuture",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "androidx.test:monitor:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test:annotation:aar",
+ "androidx.tracing:tracing:aar"
+ ],
+ "androidx.test:rules:aar": [
+ "androidx.test:runner:aar"
+ ],
+ "androidx.test:runner:aar": [
+ "androidx.annotation:annotation",
+ "androidx.test.services:storage:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:monitor:aar",
+ "androidx.tracing:tracing:aar",
+ "junit:junit"
+ ],
+ "androidx.tracing:tracing:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "androidx.transition:transition:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar"
+ ],
+ "androidx.vectordrawable:vectordrawable-animated:aar": [
+ "androidx.collection:collection",
+ "androidx.interpolator:interpolator:aar",
+ "androidx.vectordrawable:vectordrawable:aar"
+ ],
+ "androidx.vectordrawable:vectordrawable:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar"
+ ],
+ "androidx.versionedparcelable:versionedparcelable:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection"
+ ],
+ "androidx.viewpager2:viewpager2:aar": [
+ "androidx.annotation:annotation",
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.recyclerview:recyclerview:aar"
+ ],
+ "androidx.viewpager:viewpager:aar": [
+ "androidx.annotation:annotation",
+ "androidx.core:core:aar",
+ "androidx.customview:customview:aar"
+ ],
+ "androidx.work:work-runtime-ktx:aar": [
+ "androidx.work:work-runtime:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android"
+ ],
+ "androidx.work:work-runtime:aar": [
+ "androidx.core:core:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.room:room-runtime:aar",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar",
+ "com.google.guava:listenablefuture"
+ ],
+ "androidx.work:work-testing:aar": [
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.room:room-runtime:aar",
+ "androidx.work:work-runtime-ktx:aar"
+ ],
+ "com.android.tools.analytics-library:protos": [
+ "com.google.protobuf:protobuf-java"
+ ],
+ "com.android.tools.analytics-library:shared": [
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.google.code.gson:gson",
+ "com.google.guava:guava",
+ "net.java.dev.jna:jna-platform",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.analytics-library:tracker": [
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.google.guava:guava",
+ "com.google.protobuf:protobuf-java",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.apkparser:apkanalyzer": [
+ "com.android.tools.apkparser:binary-resources",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "org.smali:baksmali",
+ "org.smali:dexlib2"
+ ],
+ "com.android.tools.apkparser:binary-resources": [
+ "com.android.tools:annotations",
+ "com.google.code.findbugs:jsr305",
+ "com.google.guava:guava"
+ ],
+ "com.android.tools.build.jetifier:jetifier-core": [
+ "com.google.code.gson:gson",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "com.android.tools.build:aapt2-proto": [
+ "com.google.protobuf:protobuf-java"
+ ],
+ "com.android.tools.build:builder-model": [
+ "com.android.tools:annotations",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.build:manifest-merger": [
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.google.code.gson:gson",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.ddms:ddmlib": [
+ "com.android.tools:common",
+ "com.google.protobuf:protobuf-java",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.external.com-intellij:intellij-core": [
+ "org.jetbrains.intellij.deps:trove4j"
+ ],
+ "com.android.tools.layoutlib:layoutlib-api": [
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains:annotations"
+ ],
+ "com.android.tools.lint:lint": [
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.analytics-library:tracker",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.google.guava:guava",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools.lint:lint-api": [
+ "com.android.tools.build:builder-model",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint-model",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.google.guava:guava",
+ "commons-io:commons-io",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-tree"
+ ],
+ "com.android.tools.lint:lint-checks": [
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.google.code.gson:gson",
+ "com.google.guava:guava",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.ow2.asm:asm-analysis"
+ ],
+ "com.android.tools.lint:lint-model": [
+ "com.android.tools.build:builder-model",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "net.sf.kxml:kxml2",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools:common": [
+ "com.android.tools:annotations",
+ "com.google.guava:guava",
+ "net.java.dev.jna:jna-platform",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools:dvlib": [
+ "com.android.tools:common"
+ ],
+ "com.android.tools:repository": [
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools:common",
+ "com.google.jimfs:jimfs",
+ "com.sun.activation:javax.activation",
+ "org.apache.commons:commons-compress",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.android.tools:sdk-common": [
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.build:aapt2-proto",
+ "com.android.tools.ddms:ddmlib",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools:common",
+ "com.android.tools:sdklib",
+ "com.google.code.gson:gson",
+ "com.google.guava:guava",
+ "com.google.protobuf:protobuf-java",
+ "javax.inject:javax.inject",
+ "net.sf.kxml:kxml2",
+ "org.bouncycastle:bcpkix-jdk15on",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "xerces:xercesImpl"
+ ],
+ "com.android.tools:sdklib": [
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools:common",
+ "com.android.tools:dvlib",
+ "com.android.tools:repository",
+ "com.google.code.gson:gson",
+ "org.apache.commons:commons-compress",
+ "org.apache.httpcomponents:httpcore",
+ "org.apache.httpcomponents:httpmime",
+ "org.glassfish.jaxb:jaxb-runtime"
+ ],
+ "com.crashlytics.sdk.android:answers:aar": [
+ "io.fabric.sdk.android:fabric:aar"
+ ],
+ "com.crashlytics.sdk.android:crashlytics-core:aar": [
+ "com.crashlytics.sdk.android:answers:aar",
+ "io.fabric.sdk.android:fabric:aar"
+ ],
+ "com.crashlytics.sdk.android:crashlytics:aar": [
+ "com.crashlytics.sdk.android:answers:aar",
+ "com.crashlytics.sdk.android:beta:aar",
+ "com.crashlytics.sdk.android:crashlytics-core:aar",
+ "io.fabric.sdk.android:fabric:aar"
+ ],
+ "com.github.bumptech.glide:compiler": [
+ "com.github.bumptech.glide:annotations"
+ ],
+ "com.github.bumptech.glide:gifdecoder:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "com.github.bumptech.glide:glide:aar": [
+ "androidx.exifinterface:exifinterface:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "com.github.bumptech.glide:annotations",
+ "com.github.bumptech.glide:disklrucache",
+ "com.github.bumptech.glide:gifdecoder:aar"
+ ],
+ "com.github.bumptech.glide:mocks:aar": [
+ "androidx.annotation:annotation",
+ "com.github.bumptech.glide:glide:aar",
+ "com.google.guava:guava"
+ ],
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": [
+ "org.hamcrest:hamcrest-core"
+ ],
+ "com.google.android.datatransport:transport-backend-cct:aar": [
+ "androidx.annotation:annotation",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.firebase:firebase-encoders-json:aar"
+ ],
+ "com.google.android.datatransport:transport-runtime:aar": [
+ "androidx.annotation:annotation",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.dagger:dagger"
+ ],
+ "com.google.android.flexbox:flexbox:aar": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "com.google.android.gms:play-services-ads-identifier:aar": [
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.android.gms:play-services-base:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.fragment:fragment:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar"
+ ],
+ "com.google.android.gms:play-services-basement:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.fragment:fragment:aar"
+ ],
+ "com.google.android.gms:play-services-measurement-api:aar": [
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-measurement-sdk-api:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar",
+ "com.google.firebase:firebase-measurement-connector:aar"
+ ],
+ "com.google.android.gms:play-services-measurement-base:aar": [
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.android.gms:play-services-measurement-impl:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-stats:aar"
+ ],
+ "com.google.android.gms:play-services-measurement-sdk-api:aar": [
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-base:aar"
+ ],
+ "com.google.android.gms:play-services-measurement-sdk:aar": [
+ "androidx.collection:collection",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar"
+ ],
+ "com.google.android.gms:play-services-measurement:aar": [
+ "androidx.collection:collection",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-stats:aar"
+ ],
+ "com.google.android.gms:play-services-stats:aar": [
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.android.gms:play-services-tasks:aar": [
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.android.gms:strict-version-matcher-plugin": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.guava:guava",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.google.android.material:material:aar": [
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.appcompat:appcompat:aar",
+ "androidx.cardview:cardview:aar",
+ "androidx.constraintlayout:constraintlayout:aar",
+ "androidx.coordinatorlayout:coordinatorlayout:aar",
+ "androidx.core:core:aar",
+ "androidx.dynamicanimation:dynamicanimation:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.transition:transition:aar",
+ "androidx.vectordrawable:vectordrawable:aar",
+ "androidx.viewpager2:viewpager2:aar"
+ ],
+ "com.google.android.play:integrity:aar": [
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar"
+ ],
+ "com.google.dagger:dagger": [
+ "javax.inject:javax.inject"
+ ],
+ "com.google.dagger:dagger-compiler": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-producers",
+ "com.google.dagger:dagger-spi",
+ "com.google.googlejavaformat:google-java-format",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.squareup:javapoet",
+ "javax.inject:javax.inject",
+ "net.ltgt.gradle.incap:incap",
+ "org.checkerframework:checker-compat-qual",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm"
+ ],
+ "com.google.dagger:dagger-producers": [
+ "com.google.dagger:dagger",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "javax.inject:javax.inject",
+ "org.checkerframework:checker-compat-qual"
+ ],
+ "com.google.dagger:dagger-spi": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-producers",
+ "com.google.devtools.ksp:symbol-processing-api",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.squareup:javapoet",
+ "javax.inject:javax.inject",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.google.devtools.ksp:symbol-processing-api": [
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.google.firebase:firebase-analytics:aar": [
+ "com.google.android.gms:play-services-measurement-api:aar",
+ "com.google.android.gms:play-services-measurement-sdk:aar",
+ "com.google.android.gms:play-services-measurement:aar"
+ ],
+ "com.google.firebase:firebase-appcheck-debug:aar": [
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-appcheck-interop:aar": [
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-appcheck-playintegrity:aar": [
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.android.play:integrity:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-appcheck:aar": [
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-auth-interop:aar": [
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-common:aar"
+ ],
+ "com.google.firebase:firebase-auth-ktx:aar": [
+ "com.google.firebase:firebase-auth:aar",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
+ ],
+ "com.google.firebase:firebase-auth:aar": [
+ "androidx.collection:collection",
+ "androidx.fragment:fragment:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-common-ktx:aar": [
+ "androidx.annotation:annotation",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
+ ],
+ "com.google.firebase:firebase-common:aar": [
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-components:aar"
+ ],
+ "com.google.firebase:firebase-components:aar": [
+ "androidx.annotation:annotation",
+ "com.google.firebase:firebase-annotations"
+ ],
+ "com.google.firebase:firebase-crashlytics:aar": [
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-backend-cct:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-encoders-json:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-iid:aar",
+ "com.google.firebase:firebase-measurement-connector:aar",
+ "com.squareup.okhttp3:okhttp"
+ ],
+ "com.google.firebase:firebase-database-collection:aar": [
+ "com.google.android.gms:play-services-base:aar"
+ ],
+ "com.google.firebase:firebase-encoders-json:aar": [
+ "androidx.annotation:annotation"
+ ],
+ "com.google.firebase:firebase-firestore-ktx:aar": [
+ "androidx.annotation:annotation",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-firestore:aar",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
+ ],
+ "com.google.firebase:firebase-firestore:aar": [
+ "androidx.annotation:annotation",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-database-collection:aar",
+ "com.google.firebase:protolite-well-known-types:aar",
+ "com.squareup.okhttp:okhttp",
+ "io.grpc:grpc-android:aar",
+ "io.grpc:grpc-okhttp",
+ "io.grpc:grpc-protobuf-lite",
+ "io.grpc:grpc-stub"
+ ],
+ "com.google.firebase:firebase-iid-interop:aar": [
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.firebase:firebase-iid:aar": [
+ "androidx.collection:collection",
+ "androidx.core:core:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-stats:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar"
+ ],
+ "com.google.firebase:firebase-installations-interop:aar": [
+ "com.google.android.gms:play-services-tasks:aar"
+ ],
+ "com.google.firebase:firebase-installations:aar": [
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-installations-interop:aar"
+ ],
+ "com.google.firebase:firebase-measurement-connector:aar": [
+ "com.google.android.gms:play-services-basement:aar"
+ ],
+ "com.google.firebase:protolite-well-known-types:aar": [
+ "com.google.protobuf:protobuf-javalite"
+ ],
+ "com.google.gms:google-services": [
+ "com.google.android.gms:strict-version-matcher-plugin",
+ "com.google.code.gson:gson",
+ "com.google.guava:guava"
+ ],
+ "com.google.googlejavaformat:google-java-format": [
+ "com.google.errorprone:javac-shaded",
+ "com.google.guava:guava"
+ ],
+ "com.google.guava:guava": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:failureaccess",
+ "com.google.guava:listenablefuture",
+ "com.google.j2objc:j2objc-annotations",
+ "org.checkerframework:checker-qual"
+ ],
+ "com.google.jimfs:jimfs": [
+ "com.google.guava:guava"
+ ],
+ "com.google.protobuf:protobuf-java-util": [
+ "com.google.code.gson:gson",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "com.google.protobuf:protobuf-java"
+ ],
+ "com.google.truth.extensions:truth-liteproto-extension": [
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "com.google.truth:truth",
+ "org.checkerframework:checker-qual"
+ ],
+ "com.google.truth:truth": [
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "junit:junit",
+ "org.checkerframework:checker-qual",
+ "org.ow2.asm:asm"
+ ],
+ "com.squareup.moshi:moshi": [
+ "com.squareup.okio:okio",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.squareup.moshi:moshi-kotlin": [
+ "com.squareup.moshi:moshi",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.squareup.moshi:moshi-kotlin-codegen": [
+ "com.google.auto.service:auto-service-annotations",
+ "com.google.guava:guava",
+ "com.squareup.moshi:moshi",
+ "com.squareup:kotlinpoet",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.ow2.asm:asm"
+ ],
+ "com.squareup.okhttp3:mockwebserver": [
+ "com.squareup.okhttp3:okhttp",
+ "junit:junit"
+ ],
+ "com.squareup.okhttp3:okhttp": [
+ "com.squareup.okio:okio",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "com.squareup.okhttp:okhttp": [
+ "com.squareup.okio:okio"
+ ],
+ "com.squareup.okio:okio": [
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "com.squareup.retrofit2:converter-moshi": [
+ "com.squareup.moshi:moshi",
+ "com.squareup.retrofit2:retrofit"
+ ],
+ "com.squareup.retrofit2:retrofit": [
+ "com.squareup.okhttp3:okhttp"
+ ],
+ "com.squareup.retrofit2:retrofit-mock": [
+ "com.squareup.retrofit2:retrofit"
+ ],
+ "com.squareup:kotlinpoet": [
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "com.sun.istack:istack-commons-runtime": [
+ "jakarta.activation:jakarta.activation-api"
+ ],
+ "io.grpc:grpc-android:aar": [
+ "com.google.guava:guava",
+ "io.grpc:grpc-core"
+ ],
+ "io.grpc:grpc-api": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "io.grpc:grpc-context"
+ ],
+ "io.grpc:grpc-core": [
+ "com.google.android:annotations",
+ "com.google.code.gson:gson",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "io.grpc:grpc-api",
+ "io.perfmark:perfmark-api",
+ "org.codehaus.mojo:animal-sniffer-annotations"
+ ],
+ "io.grpc:grpc-okhttp": [
+ "com.google.guava:guava",
+ "com.squareup.okhttp:okhttp",
+ "com.squareup.okio:okio",
+ "io.grpc:grpc-core",
+ "io.perfmark:perfmark-api"
+ ],
+ "io.grpc:grpc-protobuf-lite": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.guava:guava",
+ "com.google.protobuf:protobuf-javalite",
+ "io.grpc:grpc-api"
+ ],
+ "io.grpc:grpc-stub": [
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "io.grpc:grpc-api"
+ ],
+ "jakarta.xml.bind:jakarta.xml.bind-api": [
+ "jakarta.activation:jakarta.activation-api"
+ ],
+ "junit:junit": [
+ "org.hamcrest:hamcrest-core"
+ ],
+ "net.java.dev.jna:jna-platform": [
+ "net.java.dev.jna:jna"
+ ],
+ "nl.dionsegijn:konfetti:aar": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "org.apache.httpcomponents:httpclient": [
+ "commons-codec:commons-codec",
+ "commons-logging:commons-logging",
+ "org.apache.httpcomponents:httpcore"
+ ],
+ "org.apache.httpcomponents:httpmime": [
+ "org.apache.httpcomponents:httpclient"
+ ],
+ "org.bouncycastle:bcpkix-jdk15on": [
+ "org.bouncycastle:bcprov-jdk15on"
+ ],
+ "org.eclipse.parsson:parsson": [
+ "jakarta.json:jakarta.json-api"
+ ],
+ "org.glassfish.jaxb:jaxb-runtime": [
+ "com.sun.istack:istack-commons-runtime",
+ "com.sun.xml.fastinfoset:FastInfoset",
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api",
+ "org.glassfish.jaxb:txw2",
+ "org.jvnet.staxex:stax-ex"
+ ],
+ "org.hamcrest:hamcrest-integration": [
+ "org.hamcrest:hamcrest-library"
+ ],
+ "org.hamcrest:hamcrest-library": [
+ "org.hamcrest:hamcrest-core"
+ ],
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable": [
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-script-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "org.jetbrains.kotlin:kotlin-reflect": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains:annotations"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7"
+ ],
+ "org.jetbrains.kotlin:kotlin-test": [
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-test-common"
+ ],
+ "org.jetbrains.kotlin:kotlin-test-annotations-common": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "org.jetbrains.kotlin:kotlin-test-common": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common"
+ ],
+ "org.jetbrains.kotlin:kotlin-test-junit": [
+ "junit:junit",
+ "org.jetbrains.kotlin:kotlin-test",
+ "org.jetbrains.kotlin:kotlin-test-annotations-common"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android": [
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core": [
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava": [
+ "com.google.guava:guava",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test": [
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [
+ "org.jetbrains.kotlin:kotlin-stdlib"
+ ],
+ "org.jvnet.staxex:stax-ex": [
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api"
+ ],
+ "org.mockito.kotlin:mockito-kotlin": [
+ "org.mockito:mockito-core"
+ ],
+ "org.mockito:mockito-core": [
+ "net.bytebuddy:byte-buddy",
+ "net.bytebuddy:byte-buddy-agent",
+ "org.objenesis:objenesis"
+ ],
+ "org.ow2.asm:asm-analysis": [
+ "org.ow2.asm:asm-tree"
+ ],
+ "org.ow2.asm:asm-commons": [
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-tree"
+ ],
+ "org.ow2.asm:asm-tree": [
+ "org.ow2.asm:asm"
+ ],
+ "org.ow2.asm:asm-util": [
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-tree"
+ ],
+ "org.robolectric:junit": [
+ "org.robolectric:annotations",
+ "org.robolectric:pluginapi",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadowapi",
+ "org.robolectric:utils-reflector"
+ ],
+ "org.robolectric:nativeruntime": [
+ "com.google.guava:guava"
+ ],
+ "org.robolectric:pluginapi": [
+ "org.robolectric:annotations"
+ ],
+ "org.robolectric:plugins-maven-dependency-resolver": [
+ "com.google.guava:guava",
+ "org.robolectric:pluginapi",
+ "org.robolectric:utils"
+ ],
+ "org.robolectric:resources": [
+ "com.google.guava:guava",
+ "org.robolectric:annotations",
+ "org.robolectric:pluginapi",
+ "org.robolectric:utils"
+ ],
+ "org.robolectric:robolectric": [
+ "androidx.test:monitor:aar",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.robolectric:annotations",
+ "org.robolectric:junit",
+ "org.robolectric:pluginapi",
+ "org.robolectric:plugins-maven-dependency-resolver",
+ "org.robolectric:resources",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadows-framework",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector"
+ ],
+ "org.robolectric:sandbox": [
+ "com.google.guava:guava",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-commons",
+ "org.robolectric:annotations",
+ "org.robolectric:shadowapi",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector"
+ ],
+ "org.robolectric:shadowapi": [
+ "org.robolectric:annotations",
+ "org.robolectric:utils"
+ ],
+ "org.robolectric:shadows-framework": [
+ "androidx.annotation:annotation",
+ "androidx.test:monitor:aar",
+ "com.almworks.sqlite4java:sqlite4java",
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.errorprone:error_prone_annotations",
+ "com.ibm.icu:icu4j",
+ "org.robolectric:annotations",
+ "org.robolectric:nativeruntime",
+ "org.robolectric:pluginapi",
+ "org.robolectric:resources",
+ "org.robolectric:shadowapi",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector"
+ ],
+ "org.robolectric:utils": [
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.guava:guava",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "org.robolectric:annotations",
+ "org.robolectric:pluginapi"
+ ],
+ "org.robolectric:utils-reflector": [
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-commons",
+ "org.ow2.asm:asm-util",
+ "org.robolectric:utils"
+ ],
+ "org.smali:baksmali": [
+ "com.beust:jcommander",
+ "com.google.guava:guava",
+ "org.smali:dexlib2",
+ "org.smali:util"
+ ],
+ "org.smali:dexlib2": [
+ "com.google.code.findbugs:jsr305",
+ "com.google.guava:guava",
+ "org.smali:util"
+ ],
+ "org.smali:util": [
+ "com.beust:jcommander",
+ "com.google.code.findbugs:jsr305",
+ "com.google.guava:guava"
+ ],
+ "xerces:xercesImpl": [
+ "xml-apis:xml-apis"
+ ]
+ },
+ "packages": {
+ "androidx.annotation:annotation": [
+ "androidx.annotation"
+ ],
+ "androidx.arch.core:core-common": [
+ "androidx.arch.core.internal",
+ "androidx.arch.core.util"
+ ],
+ "androidx.collection:collection": [
+ "androidx.collection"
+ ],
+ "androidx.compose.compiler:compiler": [
+ "androidx.compose.compiler.plugins.kotlin",
+ "androidx.compose.compiler.plugins.kotlin.analysis",
+ "androidx.compose.compiler.plugins.kotlin.lower",
+ "androidx.compose.compiler.plugins.kotlin.lower.decoys"
+ ],
+ "androidx.concurrent:concurrent-futures": [
+ "androidx.concurrent.futures"
+ ],
+ "androidx.constraintlayout:constraintlayout-solver": [
+ "androidx.constraintlayout.solver",
+ "androidx.constraintlayout.solver.state",
+ "androidx.constraintlayout.solver.state.helpers",
+ "androidx.constraintlayout.solver.widgets",
+ "androidx.constraintlayout.solver.widgets.analyzer"
+ ],
+ "androidx.databinding:databinding-common": [
+ "androidx.databinding"
+ ],
+ "androidx.databinding:databinding-compiler": [
+ "android.databinding.annotationprocessor",
+ "android.databinding.tool",
+ "android.databinding.tool.expr",
+ "android.databinding.tool.reflection",
+ "android.databinding.tool.reflection.annotation",
+ "android.databinding.tool.solver",
+ "android.databinding.tool.store",
+ "android.databinding.tool.util",
+ "android.databinding.tool.writer"
+ ],
+ "androidx.databinding:databinding-compiler-common": [
+ "android.databinding.parser",
+ "android.databinding.tool",
+ "android.databinding.tool.expr",
+ "android.databinding.tool.ext",
+ "android.databinding.tool.processing",
+ "android.databinding.tool.processing.scopes",
+ "android.databinding.tool.store",
+ "android.databinding.tool.util",
+ "android.databinding.tool.writer"
+ ],
+ "androidx.lifecycle:lifecycle-common": [
+ "androidx.lifecycle"
+ ],
+ "androidx.lifecycle:lifecycle-common-java8": [
+ "androidx.lifecycle"
+ ],
+ "androidx.room:room-common": [
+ "androidx.room"
+ ],
+ "com.almworks.sqlite4java:sqlite4java": [
+ "com.almworks.sqlite4java",
+ "javolution.util.stripped"
+ ],
+ "com.android.databinding:baseLibrary": [
+ "android.databinding"
+ ],
+ "com.android.tools.analytics-library:protos": [
+ "com.android.tools.build.gradle.internal.profile",
+ "com.google.wireless.android.play.playlog.proto",
+ "com.google.wireless.android.sdk.stats"
+ ],
+ "com.android.tools.analytics-library:shared": [
+ "com.android.tools.analytics"
+ ],
+ "com.android.tools.analytics-library:tracker": [
+ "com.android.tools.analytics"
+ ],
+ "com.android.tools.apkparser:apkanalyzer": [
+ "com.android.tools.apk.analyzer",
+ "com.android.tools.apk.analyzer.dex",
+ "com.android.tools.apk.analyzer.dex.tree",
+ "com.android.tools.apk.analyzer.internal",
+ "com.android.tools.apk.analyzer.internal.rewriters"
+ ],
+ "com.android.tools.apkparser:binary-resources": [
+ "com.google.devrel.gmscore.tools.apk.arsc"
+ ],
+ "com.android.tools.build.jetifier:jetifier-core": [
+ "com.android.tools.build.jetifier.core",
+ "com.android.tools.build.jetifier.core.config",
+ "com.android.tools.build.jetifier.core.pom",
+ "com.android.tools.build.jetifier.core.proguard",
+ "com.android.tools.build.jetifier.core.rule",
+ "com.android.tools.build.jetifier.core.type",
+ "com.android.tools.build.jetifier.core.utils"
+ ],
+ "com.android.tools.build:aapt2-proto": [
+ "android.aapt.pb.internal",
+ "com.android.aapt"
+ ],
+ "com.android.tools.build:builder-model": [
+ "com.android.build",
+ "com.android.builder.model",
+ "com.android.builder.model.level2",
+ "com.android.builder.model.v2",
+ "com.android.builder.model.v2.dsl",
+ "com.android.builder.model.v2.ide",
+ "com.android.builder.model.v2.models",
+ "com.android.builder.model.v2.models.ndk"
+ ],
+ "com.android.tools.build:manifest-merger": [
+ "com.android.manifmerger"
+ ],
+ "com.android.tools.ddms:ddmlib": [
+ "com.android.commands.am",
+ "com.android.ddmlib",
+ "com.android.ddmlib.internal",
+ "com.android.ddmlib.internal.commands",
+ "com.android.ddmlib.internal.jdwp",
+ "com.android.ddmlib.internal.jdwp.chunkhandler",
+ "com.android.ddmlib.internal.jdwp.interceptor",
+ "com.android.ddmlib.jdwp",
+ "com.android.ddmlib.jdwp.packets",
+ "com.android.ddmlib.log",
+ "com.android.ddmlib.logcat",
+ "com.android.ddmlib.testrunner",
+ "com.android.ddmlib.utils",
+ "com.android.incfs.install",
+ "com.android.incfs.install.adb.ddmlib",
+ "com.android.server.adb.protos"
+ ],
+ "com.android.tools.external.com-intellij:intellij-core": [
+ "com.fasterxml.aalto",
+ "com.fasterxml.aalto.async",
+ "com.fasterxml.aalto.dom",
+ "com.fasterxml.aalto.evt",
+ "com.fasterxml.aalto.impl",
+ "com.fasterxml.aalto.in",
+ "com.fasterxml.aalto.io",
+ "com.fasterxml.aalto.out",
+ "com.fasterxml.aalto.sax",
+ "com.fasterxml.aalto.stax",
+ "com.fasterxml.aalto.util",
+ "com.intellij",
+ "com.intellij.codeInsight",
+ "com.intellij.codeInsight.completion",
+ "com.intellij.codeInsight.completion.proc",
+ "com.intellij.codeInsight.completion.scope",
+ "com.intellij.codeInsight.controlflow",
+ "com.intellij.codeInsight.controlflow.impl",
+ "com.intellij.codeInsight.daemon.impl",
+ "com.intellij.codeInsight.daemon.impl.analysis",
+ "com.intellij.codeInsight.documentation",
+ "com.intellij.codeInsight.folding",
+ "com.intellij.codeInsight.folding.impl",
+ "com.intellij.codeInsight.generation",
+ "com.intellij.codeInsight.highlighting",
+ "com.intellij.codeInsight.javadoc",
+ "com.intellij.codeInsight.runner",
+ "com.intellij.codeInspection",
+ "com.intellij.codeWithMe",
+ "com.intellij.concurrency",
+ "com.intellij.core",
+ "com.intellij.diagnostic",
+ "com.intellij.diagnostic.tracing",
+ "com.intellij.execution",
+ "com.intellij.execution.configurations",
+ "com.intellij.execution.filters",
+ "com.intellij.execution.process",
+ "com.intellij.execution.rmi",
+ "com.intellij.execution.rmi.ssl",
+ "com.intellij.extapi.psi",
+ "com.intellij.formatting",
+ "com.intellij.icons",
+ "com.intellij.ide",
+ "com.intellij.ide.fileTemplates",
+ "com.intellij.ide.highlighter",
+ "com.intellij.ide.highlighter.custom",
+ "com.intellij.ide.highlighter.custom.tokens",
+ "com.intellij.ide.lightEdit",
+ "com.intellij.ide.plugins",
+ "com.intellij.ide.plugins.cl",
+ "com.intellij.ide.util",
+ "com.intellij.indentation",
+ "com.intellij.injected.editor",
+ "com.intellij.jna",
+ "com.intellij.lang",
+ "com.intellij.lang.folding",
+ "com.intellij.lang.impl",
+ "com.intellij.lang.injection",
+ "com.intellij.lang.injection.general",
+ "com.intellij.lang.java",
+ "com.intellij.lang.java.beans",
+ "com.intellij.lang.java.lexer",
+ "com.intellij.lang.java.parser",
+ "com.intellij.lang.java.source",
+ "com.intellij.lang.jvm",
+ "com.intellij.lang.jvm.annotation",
+ "com.intellij.lang.jvm.facade",
+ "com.intellij.lang.jvm.source",
+ "com.intellij.lang.jvm.types",
+ "com.intellij.lang.jvm.util",
+ "com.intellij.lang.spi",
+ "com.intellij.lexer",
+ "com.intellij.mock",
+ "com.intellij.model",
+ "com.intellij.model.presentation",
+ "com.intellij.model.psi",
+ "com.intellij.model.psi.impl",
+ "com.intellij.model.search",
+ "com.intellij.navigation",
+ "com.intellij.notebook.editor",
+ "com.intellij.openapi",
+ "com.intellij.openapi.application",
+ "com.intellij.openapi.application.ex",
+ "com.intellij.openapi.application.impl",
+ "com.intellij.openapi.command",
+ "com.intellij.openapi.command.impl",
+ "com.intellij.openapi.command.undo",
+ "com.intellij.openapi.components",
+ "com.intellij.openapi.diagnostic",
+ "com.intellij.openapi.diff",
+ "com.intellij.openapi.diff.ex",
+ "com.intellij.openapi.diff.impl",
+ "com.intellij.openapi.diff.impl.fragments",
+ "com.intellij.openapi.diff.impl.highlighting",
+ "com.intellij.openapi.diff.impl.patch",
+ "com.intellij.openapi.diff.impl.processing",
+ "com.intellij.openapi.diff.impl.string",
+ "com.intellij.openapi.diff.impl.util",
+ "com.intellij.openapi.editor",
+ "com.intellij.openapi.editor.actionSystem",
+ "com.intellij.openapi.editor.colors",
+ "com.intellij.openapi.editor.event",
+ "com.intellij.openapi.editor.ex",
+ "com.intellij.openapi.editor.ex.util",
+ "com.intellij.openapi.editor.impl",
+ "com.intellij.openapi.editor.impl.event",
+ "com.intellij.openapi.editor.markup",
+ "com.intellij.openapi.extensions",
+ "com.intellij.openapi.extensions.impl",
+ "com.intellij.openapi.fileEditor",
+ "com.intellij.openapi.fileEditor.impl",
+ "com.intellij.openapi.fileTypes",
+ "com.intellij.openapi.fileTypes.ex",
+ "com.intellij.openapi.fileTypes.impl",
+ "com.intellij.openapi.module",
+ "com.intellij.openapi.module.impl",
+ "com.intellij.openapi.options",
+ "com.intellij.openapi.progress",
+ "com.intellij.openapi.progress.impl",
+ "com.intellij.openapi.progress.util",
+ "com.intellij.openapi.project",
+ "com.intellij.openapi.projectRoots",
+ "com.intellij.openapi.roots",
+ "com.intellij.openapi.roots.impl",
+ "com.intellij.openapi.startup",
+ "com.intellij.openapi.ui",
+ "com.intellij.openapi.util",
+ "com.intellij.openapi.util.io",
+ "com.intellij.openapi.util.io.win32",
+ "com.intellij.openapi.util.objectTree",
+ "com.intellij.openapi.util.registry",
+ "com.intellij.openapi.util.text",
+ "com.intellij.openapi.vfs",
+ "com.intellij.openapi.vfs.encoding",
+ "com.intellij.openapi.vfs.ex",
+ "com.intellij.openapi.vfs.ex.http",
+ "com.intellij.openapi.vfs.impl",
+ "com.intellij.openapi.vfs.impl.http",
+ "com.intellij.openapi.vfs.impl.jar",
+ "com.intellij.openapi.vfs.local",
+ "com.intellij.openapi.vfs.newvfs",
+ "com.intellij.openapi.vfs.newvfs.events",
+ "com.intellij.openapi.vfs.pointers",
+ "com.intellij.openapi.wm.ex",
+ "com.intellij.patterns",
+ "com.intellij.patterns.compiler",
+ "com.intellij.platform.util",
+ "com.intellij.platform.util.plugins",
+ "com.intellij.pom",
+ "com.intellij.pom.core.impl",
+ "com.intellij.pom.event",
+ "com.intellij.pom.impl",
+ "com.intellij.pom.java",
+ "com.intellij.pom.references",
+ "com.intellij.pom.tree",
+ "com.intellij.pom.tree.events",
+ "com.intellij.pom.tree.events.impl",
+ "com.intellij.pom.wrappers",
+ "com.intellij.psi",
+ "com.intellij.psi.augment",
+ "com.intellij.psi.codeStyle",
+ "com.intellij.psi.compiled",
+ "com.intellij.psi.controlFlow",
+ "com.intellij.psi.css",
+ "com.intellij.psi.filters",
+ "com.intellij.psi.filters.classes",
+ "com.intellij.psi.filters.element",
+ "com.intellij.psi.filters.position",
+ "com.intellij.psi.impl",
+ "com.intellij.psi.impl.cache",
+ "com.intellij.psi.impl.compiled",
+ "com.intellij.psi.impl.file",
+ "com.intellij.psi.impl.file.impl",
+ "com.intellij.psi.impl.java.stubs",
+ "com.intellij.psi.impl.java.stubs.impl",
+ "com.intellij.psi.impl.java.stubs.index",
+ "com.intellij.psi.impl.light",
+ "com.intellij.psi.impl.meta",
+ "com.intellij.psi.impl.search",
+ "com.intellij.psi.impl.smartPointers",
+ "com.intellij.psi.impl.source",
+ "com.intellij.psi.impl.source.codeStyle",
+ "com.intellij.psi.impl.source.javadoc",
+ "com.intellij.psi.impl.source.resolve",
+ "com.intellij.psi.impl.source.resolve.graphInference",
+ "com.intellij.psi.impl.source.resolve.graphInference.constraints",
+ "com.intellij.psi.impl.source.resolve.reference",
+ "com.intellij.psi.impl.source.resolve.reference.impl",
+ "com.intellij.psi.impl.source.resolve.reference.impl.manipulators",
+ "com.intellij.psi.impl.source.resolve.reference.impl.providers",
+ "com.intellij.psi.impl.source.tree",
+ "com.intellij.psi.impl.source.tree.injected",
+ "com.intellij.psi.impl.source.tree.java",
+ "com.intellij.psi.infos",
+ "com.intellij.psi.javadoc",
+ "com.intellij.psi.meta",
+ "com.intellij.psi.presentation.java",
+ "com.intellij.psi.scope",
+ "com.intellij.psi.scope.conflictResolvers",
+ "com.intellij.psi.scope.processor",
+ "com.intellij.psi.scope.util",
+ "com.intellij.psi.search",
+ "com.intellij.psi.search.impl",
+ "com.intellij.psi.search.searches",
+ "com.intellij.psi.stub",
+ "com.intellij.psi.stubs",
+ "com.intellij.psi.targets",
+ "com.intellij.psi.templateLanguages",
+ "com.intellij.psi.text",
+ "com.intellij.psi.tree",
+ "com.intellij.psi.tree.java",
+ "com.intellij.psi.util",
+ "com.intellij.refactoring.rename",
+ "com.intellij.refactoring.util",
+ "com.intellij.reference",
+ "com.intellij.security",
+ "com.intellij.serialization",
+ "com.intellij.serviceContainer",
+ "com.intellij.testFramework",
+ "com.intellij.testIntegration",
+ "com.intellij.ui",
+ "com.intellij.ui.icons",
+ "com.intellij.usageView",
+ "com.intellij.util",
+ "com.intellij.util.cls",
+ "com.intellij.util.codeInsight",
+ "com.intellij.util.concurrency",
+ "com.intellij.util.concurrency.annotations",
+ "com.intellij.util.containers",
+ "com.intellij.util.containers.hash",
+ "com.intellij.util.diff",
+ "com.intellij.util.download",
+ "com.intellij.util.download.impl",
+ "com.intellij.util.enumeration",
+ "com.intellij.util.execution",
+ "com.intellij.util.fmap",
+ "com.intellij.util.graph",
+ "com.intellij.util.graph.impl",
+ "com.intellij.util.indexing",
+ "com.intellij.util.indexing.containers",
+ "com.intellij.util.indexing.flavor",
+ "com.intellij.util.indexing.impl",
+ "com.intellij.util.indexing.impl.forward",
+ "com.intellij.util.io",
+ "com.intellij.util.io.externalizer",
+ "com.intellij.util.io.keyStorage",
+ "com.intellij.util.io.storage",
+ "com.intellij.util.io.zip",
+ "com.intellij.util.keyFMap",
+ "com.intellij.util.lang",
+ "com.intellij.util.lang.fastutil",
+ "com.intellij.util.loader",
+ "com.intellij.util.messages",
+ "com.intellij.util.messages.impl",
+ "com.intellij.util.pico",
+ "com.intellij.util.profiling",
+ "com.intellij.util.properties",
+ "com.intellij.util.ref",
+ "com.intellij.util.system",
+ "com.intellij.util.text",
+ "com.intellij.util.ui",
+ "com.intellij.util.xmlb",
+ "com.intellij.util.xmlb.annotations",
+ "com.intellij.xml",
+ "com.intellij.xml.util",
+ "com.sun.jna",
+ "com.sun.jna.internal",
+ "com.sun.jna.platform",
+ "com.sun.jna.platform.dnd",
+ "com.sun.jna.platform.linux",
+ "com.sun.jna.platform.mac",
+ "com.sun.jna.platform.unix",
+ "com.sun.jna.platform.unix.aix",
+ "com.sun.jna.platform.unix.solaris",
+ "com.sun.jna.platform.win32",
+ "com.sun.jna.platform.win32.COM",
+ "com.sun.jna.platform.win32.COM.tlb",
+ "com.sun.jna.platform.win32.COM.tlb.imp",
+ "com.sun.jna.platform.win32.COM.util",
+ "com.sun.jna.platform.win32.COM.util.annotation",
+ "com.sun.jna.platform.wince",
+ "com.sun.jna.ptr",
+ "com.sun.jna.win32",
+ "it.unimi.dsi.fastutil",
+ "it.unimi.dsi.fastutil.booleans",
+ "it.unimi.dsi.fastutil.bytes",
+ "it.unimi.dsi.fastutil.chars",
+ "it.unimi.dsi.fastutil.doubles",
+ "it.unimi.dsi.fastutil.floats",
+ "it.unimi.dsi.fastutil.ints",
+ "it.unimi.dsi.fastutil.io",
+ "it.unimi.dsi.fastutil.longs",
+ "it.unimi.dsi.fastutil.objects",
+ "it.unimi.dsi.fastutil.shorts",
+ "kotlinx.coroutines",
+ "kotlinx.coroutines.channels",
+ "kotlinx.coroutines.debug",
+ "kotlinx.coroutines.debug.internal",
+ "kotlinx.coroutines.flow",
+ "kotlinx.coroutines.flow.internal",
+ "kotlinx.coroutines.future",
+ "kotlinx.coroutines.internal",
+ "kotlinx.coroutines.intrinsics",
+ "kotlinx.coroutines.scheduling",
+ "kotlinx.coroutines.selects",
+ "kotlinx.coroutines.stream",
+ "kotlinx.coroutines.sync",
+ "kotlinx.coroutines.test",
+ "kotlinx.coroutines.time",
+ "net.jpountz.lz4",
+ "net.jpountz.util",
+ "net.jpountz.xxhash",
+ "net.n3.nanoxml",
+ "one.util.streamex",
+ "org.apache.commons.compress",
+ "org.apache.commons.compress.archivers",
+ "org.apache.commons.compress.archivers.ar",
+ "org.apache.commons.compress.archivers.arj",
+ "org.apache.commons.compress.archivers.cpio",
+ "org.apache.commons.compress.archivers.dump",
+ "org.apache.commons.compress.archivers.examples",
+ "org.apache.commons.compress.archivers.jar",
+ "org.apache.commons.compress.archivers.sevenz",
+ "org.apache.commons.compress.archivers.tar",
+ "org.apache.commons.compress.archivers.zip",
+ "org.apache.commons.compress.changes",
+ "org.apache.commons.compress.compressors",
+ "org.apache.commons.compress.compressors.brotli",
+ "org.apache.commons.compress.compressors.bzip2",
+ "org.apache.commons.compress.compressors.deflate",
+ "org.apache.commons.compress.compressors.deflate64",
+ "org.apache.commons.compress.compressors.gzip",
+ "org.apache.commons.compress.compressors.lz4",
+ "org.apache.commons.compress.compressors.lz77support",
+ "org.apache.commons.compress.compressors.lzma",
+ "org.apache.commons.compress.compressors.lzw",
+ "org.apache.commons.compress.compressors.pack200",
+ "org.apache.commons.compress.compressors.snappy",
+ "org.apache.commons.compress.compressors.xz",
+ "org.apache.commons.compress.compressors.z",
+ "org.apache.commons.compress.compressors.zstandard",
+ "org.apache.commons.compress.harmony.archive.internal.nls",
+ "org.apache.commons.compress.harmony.pack200",
+ "org.apache.commons.compress.harmony.unpack200",
+ "org.apache.commons.compress.harmony.unpack200.bytecode",
+ "org.apache.commons.compress.harmony.unpack200.bytecode.forms",
+ "org.apache.commons.compress.java.util.jar",
+ "org.apache.commons.compress.parallel",
+ "org.apache.commons.compress.utils",
+ "org.apache.log4j",
+ "org.apache.log4j.chainsaw",
+ "org.apache.log4j.config",
+ "org.apache.log4j.helpers",
+ "org.apache.log4j.jdbc",
+ "org.apache.log4j.jmx",
+ "org.apache.log4j.lf5",
+ "org.apache.log4j.lf5.util",
+ "org.apache.log4j.lf5.viewer",
+ "org.apache.log4j.lf5.viewer.categoryexplorer",
+ "org.apache.log4j.lf5.viewer.configure",
+ "org.apache.log4j.nt",
+ "org.apache.log4j.or",
+ "org.apache.log4j.or.jms",
+ "org.apache.log4j.or.sax",
+ "org.apache.log4j.pattern",
+ "org.apache.log4j.rewrite",
+ "org.apache.log4j.spi",
+ "org.apache.log4j.varia",
+ "org.apache.log4j.xml",
+ "org.apache.oro.io",
+ "org.apache.oro.text",
+ "org.apache.oro.text.awk",
+ "org.apache.oro.text.perl",
+ "org.apache.oro.text.regex",
+ "org.apache.oro.util",
+ "org.codehaus.stax2",
+ "org.codehaus.stax2.evt",
+ "org.codehaus.stax2.io",
+ "org.codehaus.stax2.osgi",
+ "org.codehaus.stax2.ri",
+ "org.codehaus.stax2.ri.dom",
+ "org.codehaus.stax2.ri.evt",
+ "org.codehaus.stax2.ri.typed",
+ "org.codehaus.stax2.typed",
+ "org.codehaus.stax2.util",
+ "org.codehaus.stax2.validation",
+ "org.intellij.lang.annotations",
+ "org.jdom",
+ "org.jdom.adapters",
+ "org.jdom.filter",
+ "org.jdom.filter2",
+ "org.jdom.input",
+ "org.jdom.input.sax",
+ "org.jdom.input.stax",
+ "org.jdom.internal",
+ "org.jdom.located",
+ "org.jdom.output",
+ "org.jdom.output.support",
+ "org.jdom.transform",
+ "org.jdom.util",
+ "org.jdom.xpath",
+ "org.jdom.xpath.jaxen",
+ "org.jdom.xpath.util",
+ "org.jetbrains.annotations",
+ "org.jetbrains.concurrency",
+ "org.jetbrains.ide",
+ "org.jetbrains.jps.model",
+ "org.jetbrains.jps.model.artifact",
+ "org.jetbrains.jps.model.artifact.elements",
+ "org.jetbrains.jps.model.artifact.elements.ex",
+ "org.jetbrains.jps.model.artifact.impl",
+ "org.jetbrains.jps.model.artifact.impl.elements",
+ "org.jetbrains.jps.model.ex",
+ "org.jetbrains.jps.model.fileTypes",
+ "org.jetbrains.jps.model.fileTypes.impl",
+ "org.jetbrains.jps.model.impl",
+ "org.jetbrains.jps.model.impl.runConfiguration",
+ "org.jetbrains.jps.model.jarRepository",
+ "org.jetbrains.jps.model.jarRepository.impl",
+ "org.jetbrains.jps.model.java",
+ "org.jetbrains.jps.model.java.compiler",
+ "org.jetbrains.jps.model.java.impl",
+ "org.jetbrains.jps.model.java.impl.compiler",
+ "org.jetbrains.jps.model.java.impl.runConfiguration",
+ "org.jetbrains.jps.model.java.runConfiguration",
+ "org.jetbrains.jps.model.library",
+ "org.jetbrains.jps.model.library.impl",
+ "org.jetbrains.jps.model.library.impl.sdk",
+ "org.jetbrains.jps.model.library.sdk",
+ "org.jetbrains.jps.model.module",
+ "org.jetbrains.jps.model.module.impl",
+ "org.jetbrains.jps.model.runConfiguration",
+ "org.jetbrains.jps.model.serialization",
+ "org.jetbrains.jps.plugin",
+ "org.jetbrains.jps.service",
+ "org.jetbrains.jps.service.impl",
+ "org.jetbrains.jps.util",
+ "org.jetbrains.org.objectweb.asm",
+ "org.jetbrains.org.objectweb.asm.commons",
+ "org.jetbrains.org.objectweb.asm.signature",
+ "org.jetbrains.org.objectweb.asm.tree",
+ "org.jetbrains.org.objectweb.asm.tree.analysis",
+ "org.jetbrains.org.objectweb.asm.util",
+ "org.picocontainer",
+ "org.picocontainer.defaults"
+ ],
+ "com.android.tools.external.com-intellij:kotlin-compiler": [
+ "com.google.gwt.dev.js",
+ "com.google.gwt.dev.js.parserExceptions",
+ "com.google.gwt.dev.js.rhino",
+ "com.intellij.util.io",
+ "javaslang",
+ "javaslang.collection",
+ "javaslang.concurrent",
+ "javaslang.control",
+ "javaslang.match",
+ "javaslang.match.annotation",
+ "javaslang.match.generator",
+ "javaslang.match.model",
+ "kotlin.script.dependencies",
+ "kotlin.script.experimental.annotations",
+ "kotlin.script.experimental.api",
+ "kotlin.script.experimental.dependencies",
+ "kotlin.script.experimental.host",
+ "kotlin.script.experimental.impl",
+ "kotlin.script.experimental.jvm",
+ "kotlin.script.experimental.jvm.compat",
+ "kotlin.script.experimental.jvm.impl",
+ "kotlin.script.experimental.jvm.util",
+ "kotlin.script.experimental.location",
+ "kotlin.script.experimental.util",
+ "kotlin.script.extensions",
+ "kotlin.script.templates",
+ "kotlin.script.templates.standard",
+ "net.rubygrapefruit.platform",
+ "net.rubygrapefruit.platform.internal",
+ "net.rubygrapefruit.platform.internal.jni",
+ "org.jetbrains.annotations",
+ "org.jetbrains.kotlin",
+ "org.jetbrains.kotlin.analyzer",
+ "org.jetbrains.kotlin.analyzer.common",
+ "org.jetbrains.kotlin.asJava",
+ "org.jetbrains.kotlin.asJava.builder",
+ "org.jetbrains.kotlin.asJava.classes",
+ "org.jetbrains.kotlin.asJava.elements",
+ "org.jetbrains.kotlin.asJava.finder",
+ "org.jetbrains.kotlin.backend.common",
+ "org.jetbrains.kotlin.backend.common.bridges",
+ "org.jetbrains.kotlin.backend.common.descriptors",
+ "org.jetbrains.kotlin.backend.common.extensions",
+ "org.jetbrains.kotlin.backend.common.ir",
+ "org.jetbrains.kotlin.backend.common.lower",
+ "org.jetbrains.kotlin.backend.common.lower.inline",
+ "org.jetbrains.kotlin.backend.common.lower.loops",
+ "org.jetbrains.kotlin.backend.common.lower.loops.handlers",
+ "org.jetbrains.kotlin.backend.common.lower.matchers",
+ "org.jetbrains.kotlin.backend.common.lower.optimizations",
+ "org.jetbrains.kotlin.backend.common.output",
+ "org.jetbrains.kotlin.backend.common.overrides",
+ "org.jetbrains.kotlin.backend.common.phaser",
+ "org.jetbrains.kotlin.backend.common.psi",
+ "org.jetbrains.kotlin.backend.common.serialization",
+ "org.jetbrains.kotlin.backend.common.serialization.encodings",
+ "org.jetbrains.kotlin.backend.common.serialization.linkerissues",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle.ir",
+ "org.jetbrains.kotlin.backend.common.serialization.metadata",
+ "org.jetbrains.kotlin.backend.common.serialization.metadata.impl",
+ "org.jetbrains.kotlin.backend.common.serialization.proto",
+ "org.jetbrains.kotlin.backend.common.serialization.signature",
+ "org.jetbrains.kotlin.backend.jvm",
+ "org.jetbrains.kotlin.backend.jvm.caches",
+ "org.jetbrains.kotlin.backend.jvm.codegen",
+ "org.jetbrains.kotlin.backend.jvm.intrinsics",
+ "org.jetbrains.kotlin.backend.jvm.ir",
+ "org.jetbrains.kotlin.backend.jvm.lower",
+ "org.jetbrains.kotlin.backend.jvm.lower.indy",
+ "org.jetbrains.kotlin.backend.jvm.mapping",
+ "org.jetbrains.kotlin.backend.jvm.metadata",
+ "org.jetbrains.kotlin.backend.jvm.serialization",
+ "org.jetbrains.kotlin.backend.jvm.serialization.proto",
+ "org.jetbrains.kotlin.build",
+ "org.jetbrains.kotlin.build.report",
+ "org.jetbrains.kotlin.build.report.metrics",
+ "org.jetbrains.kotlin.builtins",
+ "org.jetbrains.kotlin.builtins.functions",
+ "org.jetbrains.kotlin.builtins.jvm",
+ "org.jetbrains.kotlin.builtins.konan",
+ "org.jetbrains.kotlin.cfg",
+ "org.jetbrains.kotlin.cfg.pseudocode",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.eval",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.special",
+ "org.jetbrains.kotlin.cfg.pseudocodeTraverser",
+ "org.jetbrains.kotlin.cfg.variable",
+ "org.jetbrains.kotlin.checkers",
+ "org.jetbrains.kotlin.checkers.diagnostics",
+ "org.jetbrains.kotlin.checkers.diagnostics.factories",
+ "org.jetbrains.kotlin.checkers.utils",
+ "org.jetbrains.kotlin.cli.common",
+ "org.jetbrains.kotlin.cli.common.arguments",
+ "org.jetbrains.kotlin.cli.common.config",
+ "org.jetbrains.kotlin.cli.common.environment",
+ "org.jetbrains.kotlin.cli.common.extensions",
+ "org.jetbrains.kotlin.cli.common.fir",
+ "org.jetbrains.kotlin.cli.common.messages",
+ "org.jetbrains.kotlin.cli.common.modules",
+ "org.jetbrains.kotlin.cli.common.output",
+ "org.jetbrains.kotlin.cli.common.profiling",
+ "org.jetbrains.kotlin.cli.common.repl",
+ "org.jetbrains.kotlin.cli.js",
+ "org.jetbrains.kotlin.cli.js.dce",
+ "org.jetbrains.kotlin.cli.js.internal",
+ "org.jetbrains.kotlin.cli.jvm",
+ "org.jetbrains.kotlin.cli.jvm.compiler",
+ "org.jetbrains.kotlin.cli.jvm.compiler.jarfs",
+ "org.jetbrains.kotlin.cli.jvm.config",
+ "org.jetbrains.kotlin.cli.jvm.index",
+ "org.jetbrains.kotlin.cli.jvm.javac",
+ "org.jetbrains.kotlin.cli.jvm.modules",
+ "org.jetbrains.kotlin.cli.jvm.plugins",
+ "org.jetbrains.kotlin.cli.metadata",
+ "org.jetbrains.kotlin.codegen",
+ "org.jetbrains.kotlin.codegen.binding",
+ "org.jetbrains.kotlin.codegen.context",
+ "org.jetbrains.kotlin.codegen.coroutines",
+ "org.jetbrains.kotlin.codegen.extensions",
+ "org.jetbrains.kotlin.codegen.inline",
+ "org.jetbrains.kotlin.codegen.inline.coroutines",
+ "org.jetbrains.kotlin.codegen.intrinsics",
+ "org.jetbrains.kotlin.codegen.optimization",
+ "org.jetbrains.kotlin.codegen.optimization.boxing",
+ "org.jetbrains.kotlin.codegen.optimization.common",
+ "org.jetbrains.kotlin.codegen.optimization.fixStack",
+ "org.jetbrains.kotlin.codegen.optimization.nullCheck",
+ "org.jetbrains.kotlin.codegen.optimization.temporaryVals",
+ "org.jetbrains.kotlin.codegen.optimization.transformer",
+ "org.jetbrains.kotlin.codegen.pseudoInsns",
+ "org.jetbrains.kotlin.codegen.range",
+ "org.jetbrains.kotlin.codegen.range.comparison",
+ "org.jetbrains.kotlin.codegen.range.forLoop",
+ "org.jetbrains.kotlin.codegen.range.inExpression",
+ "org.jetbrains.kotlin.codegen.serialization",
+ "org.jetbrains.kotlin.codegen.signature",
+ "org.jetbrains.kotlin.codegen.state",
+ "org.jetbrains.kotlin.codegen.when",
+ "org.jetbrains.kotlin.compiler.plugin",
+ "org.jetbrains.kotlin.compilerRunner",
+ "org.jetbrains.kotlin.config",
+ "org.jetbrains.kotlin.container",
+ "org.jetbrains.kotlin.context",
+ "org.jetbrains.kotlin.contracts",
+ "org.jetbrains.kotlin.contracts.description",
+ "org.jetbrains.kotlin.contracts.description.expressions",
+ "org.jetbrains.kotlin.contracts.interpretation",
+ "org.jetbrains.kotlin.contracts.model",
+ "org.jetbrains.kotlin.contracts.model.functors",
+ "org.jetbrains.kotlin.contracts.model.structure",
+ "org.jetbrains.kotlin.contracts.model.visitors",
+ "org.jetbrains.kotlin.contracts.parsing",
+ "org.jetbrains.kotlin.contracts.parsing.effects",
+ "org.jetbrains.kotlin.coroutines",
+ "org.jetbrains.kotlin.daemon.client",
+ "org.jetbrains.kotlin.daemon.client.impls",
+ "org.jetbrains.kotlin.daemon.common",
+ "org.jetbrains.kotlin.descriptors",
+ "org.jetbrains.kotlin.descriptors.annotations",
+ "org.jetbrains.kotlin.descriptors.deserialization",
+ "org.jetbrains.kotlin.descriptors.impl",
+ "org.jetbrains.kotlin.descriptors.java",
+ "org.jetbrains.kotlin.descriptors.konan",
+ "org.jetbrains.kotlin.descriptors.konan.impl",
+ "org.jetbrains.kotlin.descriptors.runtime.components",
+ "org.jetbrains.kotlin.descriptors.runtime.structure",
+ "org.jetbrains.kotlin.descriptors.synthetic",
+ "org.jetbrains.kotlin.diagnostics",
+ "org.jetbrains.kotlin.diagnostics.impl",
+ "org.jetbrains.kotlin.diagnostics.rendering",
+ "org.jetbrains.kotlin.extensions",
+ "org.jetbrains.kotlin.extensions.internal",
+ "org.jetbrains.kotlin.fileClasses",
+ "org.jetbrains.kotlin.fir",
+ "org.jetbrains.kotlin.fir.analysis",
+ "org.jetbrains.kotlin.fir.analysis.cfa",
+ "org.jetbrains.kotlin.fir.analysis.cfa.util",
+ "org.jetbrains.kotlin.fir.analysis.checkers",
+ "org.jetbrains.kotlin.fir.analysis.checkers.cfa",
+ "org.jetbrains.kotlin.fir.analysis.checkers.context",
+ "org.jetbrains.kotlin.fir.analysis.checkers.declaration",
+ "org.jetbrains.kotlin.fir.analysis.checkers.expression",
+ "org.jetbrains.kotlin.fir.analysis.checkers.extended",
+ "org.jetbrains.kotlin.fir.analysis.checkers.syntax",
+ "org.jetbrains.kotlin.fir.analysis.checkers.type",
+ "org.jetbrains.kotlin.fir.analysis.collectors",
+ "org.jetbrains.kotlin.fir.analysis.collectors.components",
+ "org.jetbrains.kotlin.fir.analysis.diagnostics",
+ "org.jetbrains.kotlin.fir.analysis.diagnostics.jvm",
+ "org.jetbrains.kotlin.fir.analysis.extensions",
+ "org.jetbrains.kotlin.fir.analysis.jvm",
+ "org.jetbrains.kotlin.fir.analysis.jvm.checkers",
+ "org.jetbrains.kotlin.fir.analysis.jvm.checkers.declaration",
+ "org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression",
+ "org.jetbrains.kotlin.fir.backend",
+ "org.jetbrains.kotlin.fir.backend.evaluate",
+ "org.jetbrains.kotlin.fir.backend.generators",
+ "org.jetbrains.kotlin.fir.backend.jvm",
+ "org.jetbrains.kotlin.fir.builder",
+ "org.jetbrains.kotlin.fir.caches",
+ "org.jetbrains.kotlin.fir.checkers",
+ "org.jetbrains.kotlin.fir.contracts",
+ "org.jetbrains.kotlin.fir.contracts.builder",
+ "org.jetbrains.kotlin.fir.contracts.description",
+ "org.jetbrains.kotlin.fir.contracts.impl",
+ "org.jetbrains.kotlin.fir.declarations",
+ "org.jetbrains.kotlin.fir.declarations.builder",
+ "org.jetbrains.kotlin.fir.declarations.comparators",
+ "org.jetbrains.kotlin.fir.declarations.impl",
+ "org.jetbrains.kotlin.fir.declarations.synthetic",
+ "org.jetbrains.kotlin.fir.declarations.utils",
+ "org.jetbrains.kotlin.fir.descriptors",
+ "org.jetbrains.kotlin.fir.deserialization",
+ "org.jetbrains.kotlin.fir.diagnostics",
+ "org.jetbrains.kotlin.fir.expressions",
+ "org.jetbrains.kotlin.fir.expressions.builder",
+ "org.jetbrains.kotlin.fir.expressions.impl",
+ "org.jetbrains.kotlin.fir.extensions",
+ "org.jetbrains.kotlin.fir.extensions.predicate",
+ "org.jetbrains.kotlin.fir.impl",
+ "org.jetbrains.kotlin.fir.java",
+ "org.jetbrains.kotlin.fir.java.declarations",
+ "org.jetbrains.kotlin.fir.java.deserialization",
+ "org.jetbrains.kotlin.fir.java.enhancement",
+ "org.jetbrains.kotlin.fir.java.scopes",
+ "org.jetbrains.kotlin.fir.java.symbols",
+ "org.jetbrains.kotlin.fir.lazy",
+ "org.jetbrains.kotlin.fir.pipeline",
+ "org.jetbrains.kotlin.fir.references",
+ "org.jetbrains.kotlin.fir.references.builder",
+ "org.jetbrains.kotlin.fir.references.impl",
+ "org.jetbrains.kotlin.fir.resolve",
+ "org.jetbrains.kotlin.fir.resolve.calls",
+ "org.jetbrains.kotlin.fir.resolve.calls.jvm",
+ "org.jetbrains.kotlin.fir.resolve.calls.tower",
+ "org.jetbrains.kotlin.fir.resolve.dfa",
+ "org.jetbrains.kotlin.fir.resolve.dfa.cfg",
+ "org.jetbrains.kotlin.fir.resolve.dfa.contracts",
+ "org.jetbrains.kotlin.fir.resolve.diagnostics",
+ "org.jetbrains.kotlin.fir.resolve.inference",
+ "org.jetbrains.kotlin.fir.resolve.inference.model",
+ "org.jetbrains.kotlin.fir.resolve.providers",
+ "org.jetbrains.kotlin.fir.resolve.providers.impl",
+ "org.jetbrains.kotlin.fir.resolve.scopes",
+ "org.jetbrains.kotlin.fir.resolve.substitution",
+ "org.jetbrains.kotlin.fir.resolve.transformers",
+ "org.jetbrains.kotlin.fir.resolve.transformers.body.resolve",
+ "org.jetbrains.kotlin.fir.resolve.transformers.contracts",
+ "org.jetbrains.kotlin.fir.resolve.transformers.plugin",
+ "org.jetbrains.kotlin.fir.scopes",
+ "org.jetbrains.kotlin.fir.scopes.impl",
+ "org.jetbrains.kotlin.fir.scopes.jvm",
+ "org.jetbrains.kotlin.fir.serialization",
+ "org.jetbrains.kotlin.fir.serialization.constant",
+ "org.jetbrains.kotlin.fir.session",
+ "org.jetbrains.kotlin.fir.session.environment",
+ "org.jetbrains.kotlin.fir.signaturer",
+ "org.jetbrains.kotlin.fir.symbols",
+ "org.jetbrains.kotlin.fir.symbols.impl",
+ "org.jetbrains.kotlin.fir.types",
+ "org.jetbrains.kotlin.fir.types.builder",
+ "org.jetbrains.kotlin.fir.types.impl",
+ "org.jetbrains.kotlin.fir.types.jvm",
+ "org.jetbrains.kotlin.fir.util",
+ "org.jetbrains.kotlin.fir.utils",
+ "org.jetbrains.kotlin.fir.visitors",
+ "org.jetbrains.kotlin.frontend.di",
+ "org.jetbrains.kotlin.frontend.java.di",
+ "org.jetbrains.kotlin.frontend.js.di",
+ "org.jetbrains.kotlin.idea",
+ "org.jetbrains.kotlin.idea.references",
+ "org.jetbrains.kotlin.incremental",
+ "org.jetbrains.kotlin.incremental.components",
+ "org.jetbrains.kotlin.incremental.js",
+ "org.jetbrains.kotlin.incremental.storage",
+ "org.jetbrains.kotlin.inline",
+ "org.jetbrains.kotlin.ir",
+ "org.jetbrains.kotlin.ir.backend.jvm",
+ "org.jetbrains.kotlin.ir.backend.jvm.serialization",
+ "org.jetbrains.kotlin.ir.builders",
+ "org.jetbrains.kotlin.ir.builders.declarations",
+ "org.jetbrains.kotlin.ir.declarations",
+ "org.jetbrains.kotlin.ir.declarations.impl",
+ "org.jetbrains.kotlin.ir.declarations.lazy",
+ "org.jetbrains.kotlin.ir.declarations.persistent",
+ "org.jetbrains.kotlin.ir.declarations.persistent.carriers",
+ "org.jetbrains.kotlin.ir.descriptors",
+ "org.jetbrains.kotlin.ir.expressions",
+ "org.jetbrains.kotlin.ir.expressions.impl",
+ "org.jetbrains.kotlin.ir.expressions.persistent",
+ "org.jetbrains.kotlin.ir.interpreter",
+ "org.jetbrains.kotlin.ir.interpreter.builtins",
+ "org.jetbrains.kotlin.ir.interpreter.checker",
+ "org.jetbrains.kotlin.ir.interpreter.exceptions",
+ "org.jetbrains.kotlin.ir.interpreter.intrinsics",
+ "org.jetbrains.kotlin.ir.interpreter.proxy",
+ "org.jetbrains.kotlin.ir.interpreter.proxy.reflection",
+ "org.jetbrains.kotlin.ir.interpreter.stack",
+ "org.jetbrains.kotlin.ir.interpreter.state",
+ "org.jetbrains.kotlin.ir.interpreter.state.reflection",
+ "org.jetbrains.kotlin.ir.linkage",
+ "org.jetbrains.kotlin.ir.overrides",
+ "org.jetbrains.kotlin.ir.serialization",
+ "org.jetbrains.kotlin.ir.symbols",
+ "org.jetbrains.kotlin.ir.symbols.impl",
+ "org.jetbrains.kotlin.ir.types",
+ "org.jetbrains.kotlin.ir.types.impl",
+ "org.jetbrains.kotlin.ir.util",
+ "org.jetbrains.kotlin.ir.visitors",
+ "org.jetbrains.kotlin.js",
+ "org.jetbrains.kotlin.js.analyze",
+ "org.jetbrains.kotlin.js.analyzer",
+ "org.jetbrains.kotlin.js.backend",
+ "org.jetbrains.kotlin.js.backend.ast",
+ "org.jetbrains.kotlin.js.backend.ast.metadata",
+ "org.jetbrains.kotlin.js.common",
+ "org.jetbrains.kotlin.js.config",
+ "org.jetbrains.kotlin.js.coroutine",
+ "org.jetbrains.kotlin.js.descriptorUtils",
+ "org.jetbrains.kotlin.js.facade",
+ "org.jetbrains.kotlin.js.facade.exceptions",
+ "org.jetbrains.kotlin.js.inline",
+ "org.jetbrains.kotlin.js.inline.clean",
+ "org.jetbrains.kotlin.js.inline.context",
+ "org.jetbrains.kotlin.js.inline.util",
+ "org.jetbrains.kotlin.js.inline.util.collectors",
+ "org.jetbrains.kotlin.js.inline.util.rewriters",
+ "org.jetbrains.kotlin.js.naming",
+ "org.jetbrains.kotlin.js.parser",
+ "org.jetbrains.kotlin.js.parser.sourcemaps",
+ "org.jetbrains.kotlin.js.patterns",
+ "org.jetbrains.kotlin.js.patterns.typePredicates",
+ "org.jetbrains.kotlin.js.resolve",
+ "org.jetbrains.kotlin.js.resolve.diagnostics",
+ "org.jetbrains.kotlin.js.sourceMap",
+ "org.jetbrains.kotlin.js.translate.callTranslator",
+ "org.jetbrains.kotlin.js.translate.context",
+ "org.jetbrains.kotlin.js.translate.context.generator",
+ "org.jetbrains.kotlin.js.translate.declaration",
+ "org.jetbrains.kotlin.js.translate.expression",
+ "org.jetbrains.kotlin.js.translate.extensions",
+ "org.jetbrains.kotlin.js.translate.general",
+ "org.jetbrains.kotlin.js.translate.initializer",
+ "org.jetbrains.kotlin.js.translate.intrinsic",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions.basic",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions.factories",
+ "org.jetbrains.kotlin.js.translate.intrinsic.objects",
+ "org.jetbrains.kotlin.js.translate.intrinsic.operation",
+ "org.jetbrains.kotlin.js.translate.operation",
+ "org.jetbrains.kotlin.js.translate.reference",
+ "org.jetbrains.kotlin.js.translate.test",
+ "org.jetbrains.kotlin.js.translate.utils",
+ "org.jetbrains.kotlin.js.translate.utils.jsAstUtils",
+ "org.jetbrains.kotlin.js.translate.utils.mutator",
+ "org.jetbrains.kotlin.js.util",
+ "org.jetbrains.kotlin.kapt3.diagnostic",
+ "org.jetbrains.kotlin.kdoc.lexer",
+ "org.jetbrains.kotlin.kdoc.parser",
+ "org.jetbrains.kotlin.kdoc.psi.api",
+ "org.jetbrains.kotlin.kdoc.psi.impl",
+ "org.jetbrains.kotlin.konan",
+ "org.jetbrains.kotlin.konan.file",
+ "org.jetbrains.kotlin.konan.library",
+ "org.jetbrains.kotlin.konan.properties",
+ "org.jetbrains.kotlin.konan.target",
+ "org.jetbrains.kotlin.konan.util",
+ "org.jetbrains.kotlin.lexer",
+ "org.jetbrains.kotlin.library",
+ "org.jetbrains.kotlin.library.encodings",
+ "org.jetbrains.kotlin.library.impl",
+ "org.jetbrains.kotlin.library.metadata",
+ "org.jetbrains.kotlin.library.resolver",
+ "org.jetbrains.kotlin.library.resolver.impl",
+ "org.jetbrains.kotlin.load.java",
+ "org.jetbrains.kotlin.load.java.components",
+ "org.jetbrains.kotlin.load.java.descriptors",
+ "org.jetbrains.kotlin.load.java.lazy",
+ "org.jetbrains.kotlin.load.java.lazy.descriptors",
+ "org.jetbrains.kotlin.load.java.lazy.types",
+ "org.jetbrains.kotlin.load.java.sam",
+ "org.jetbrains.kotlin.load.java.sources",
+ "org.jetbrains.kotlin.load.java.structure",
+ "org.jetbrains.kotlin.load.java.structure.impl",
+ "org.jetbrains.kotlin.load.java.structure.impl.classFiles",
+ "org.jetbrains.kotlin.load.java.typeEnhancement",
+ "org.jetbrains.kotlin.load.kotlin",
+ "org.jetbrains.kotlin.load.kotlin.header",
+ "org.jetbrains.kotlin.load.kotlin.incremental",
+ "org.jetbrains.kotlin.load.kotlin.incremental.components",
+ "org.jetbrains.kotlin.metadata",
+ "org.jetbrains.kotlin.metadata.builtins",
+ "org.jetbrains.kotlin.metadata.deserialization",
+ "org.jetbrains.kotlin.metadata.java",
+ "org.jetbrains.kotlin.metadata.js",
+ "org.jetbrains.kotlin.metadata.jvm",
+ "org.jetbrains.kotlin.metadata.jvm.deserialization",
+ "org.jetbrains.kotlin.metadata.jvm.serialization",
+ "org.jetbrains.kotlin.metadata.serialization",
+ "org.jetbrains.kotlin.modules",
+ "org.jetbrains.kotlin.name",
+ "org.jetbrains.kotlin.parsing",
+ "org.jetbrains.kotlin.platform",
+ "org.jetbrains.kotlin.platform.js",
+ "org.jetbrains.kotlin.platform.jvm",
+ "org.jetbrains.kotlin.platform.konan",
+ "org.jetbrains.kotlin.preloading",
+ "org.jetbrains.kotlin.preloading.instrumentation",
+ "org.jetbrains.kotlin.preloading.instrumentation.annotations",
+ "org.jetbrains.kotlin.progress",
+ "org.jetbrains.kotlin.progress.experimental",
+ "org.jetbrains.kotlin.protobuf",
+ "org.jetbrains.kotlin.psi",
+ "org.jetbrains.kotlin.psi.addRemoveModifier",
+ "org.jetbrains.kotlin.psi.codeFragmentUtil",
+ "org.jetbrains.kotlin.psi.debugText",
+ "org.jetbrains.kotlin.psi.findDocComment",
+ "org.jetbrains.kotlin.psi.psiUtil",
+ "org.jetbrains.kotlin.psi.stubs",
+ "org.jetbrains.kotlin.psi.stubs.elements",
+ "org.jetbrains.kotlin.psi.stubs.impl",
+ "org.jetbrains.kotlin.psi.synthetics",
+ "org.jetbrains.kotlin.psi.typeRefHelpers",
+ "org.jetbrains.kotlin.psi2ir",
+ "org.jetbrains.kotlin.psi2ir.generators",
+ "org.jetbrains.kotlin.psi2ir.generators.fragments",
+ "org.jetbrains.kotlin.psi2ir.intermediate",
+ "org.jetbrains.kotlin.psi2ir.preprocessing",
+ "org.jetbrains.kotlin.psi2ir.transformations",
+ "org.jetbrains.kotlin.renderer",
+ "org.jetbrains.kotlin.resolve",
+ "org.jetbrains.kotlin.resolve.annotations",
+ "org.jetbrains.kotlin.resolve.bindingContextUtil",
+ "org.jetbrains.kotlin.resolve.calls",
+ "org.jetbrains.kotlin.resolve.calls.callUtil",
+ "org.jetbrains.kotlin.resolve.calls.checkers",
+ "org.jetbrains.kotlin.resolve.calls.components",
+ "org.jetbrains.kotlin.resolve.calls.components.candidate",
+ "org.jetbrains.kotlin.resolve.calls.context",
+ "org.jetbrains.kotlin.resolve.calls.inference",
+ "org.jetbrains.kotlin.resolve.calls.inference.components",
+ "org.jetbrains.kotlin.resolve.calls.inference.constraintPosition",
+ "org.jetbrains.kotlin.resolve.calls.inference.model",
+ "org.jetbrains.kotlin.resolve.calls.model",
+ "org.jetbrains.kotlin.resolve.calls.results",
+ "org.jetbrains.kotlin.resolve.calls.smartcasts",
+ "org.jetbrains.kotlin.resolve.calls.tasks",
+ "org.jetbrains.kotlin.resolve.calls.tower",
+ "org.jetbrains.kotlin.resolve.calls.util",
+ "org.jetbrains.kotlin.resolve.checkers",
+ "org.jetbrains.kotlin.resolve.constants",
+ "org.jetbrains.kotlin.resolve.constants.evaluate",
+ "org.jetbrains.kotlin.resolve.deprecation",
+ "org.jetbrains.kotlin.resolve.descriptorUtil",
+ "org.jetbrains.kotlin.resolve.diagnostics",
+ "org.jetbrains.kotlin.resolve.extensions",
+ "org.jetbrains.kotlin.resolve.inline",
+ "org.jetbrains.kotlin.resolve.jvm",
+ "org.jetbrains.kotlin.resolve.jvm.annotations",
+ "org.jetbrains.kotlin.resolve.jvm.checkers",
+ "org.jetbrains.kotlin.resolve.jvm.diagnostics",
+ "org.jetbrains.kotlin.resolve.jvm.extensions",
+ "org.jetbrains.kotlin.resolve.jvm.jvmSignature",
+ "org.jetbrains.kotlin.resolve.jvm.kotlinSignature",
+ "org.jetbrains.kotlin.resolve.jvm.modules",
+ "org.jetbrains.kotlin.resolve.jvm.multiplatform",
+ "org.jetbrains.kotlin.resolve.jvm.platform",
+ "org.jetbrains.kotlin.resolve.konan.diagnostics",
+ "org.jetbrains.kotlin.resolve.konan.platform",
+ "org.jetbrains.kotlin.resolve.lazy",
+ "org.jetbrains.kotlin.resolve.lazy.data",
+ "org.jetbrains.kotlin.resolve.lazy.declarations",
+ "org.jetbrains.kotlin.resolve.lazy.descriptors",
+ "org.jetbrains.kotlin.resolve.multiplatform",
+ "org.jetbrains.kotlin.resolve.references",
+ "org.jetbrains.kotlin.resolve.repl",
+ "org.jetbrains.kotlin.resolve.sam",
+ "org.jetbrains.kotlin.resolve.scopes",
+ "org.jetbrains.kotlin.resolve.scopes.receivers",
+ "org.jetbrains.kotlin.resolve.scopes.synthetic",
+ "org.jetbrains.kotlin.resolve.scopes.utils",
+ "org.jetbrains.kotlin.resolve.source",
+ "org.jetbrains.kotlin.resolve.typeBinding",
+ "org.jetbrains.kotlin.scripting",
+ "org.jetbrains.kotlin.scripting.compiler.plugin",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.definitions",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.dependencies",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.extensions",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.impl",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.repl",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.repl.configuration",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.repl.messages",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.repl.reader",
+ "org.jetbrains.kotlin.scripting.compiler.plugin.repl.writer",
+ "org.jetbrains.kotlin.scripting.configuration",
+ "org.jetbrains.kotlin.scripting.definitions",
+ "org.jetbrains.kotlin.scripting.extensions",
+ "org.jetbrains.kotlin.scripting.resolve",
+ "org.jetbrains.kotlin.serialization",
+ "org.jetbrains.kotlin.serialization.builtins",
+ "org.jetbrains.kotlin.serialization.deserialization",
+ "org.jetbrains.kotlin.serialization.deserialization.builtins",
+ "org.jetbrains.kotlin.serialization.deserialization.descriptors",
+ "org.jetbrains.kotlin.serialization.js",
+ "org.jetbrains.kotlin.serialization.js.ast",
+ "org.jetbrains.kotlin.serialization.konan",
+ "org.jetbrains.kotlin.serialization.konan.impl",
+ "org.jetbrains.kotlin.storage",
+ "org.jetbrains.kotlin.synthetic",
+ "org.jetbrains.kotlin.type",
+ "org.jetbrains.kotlin.types",
+ "org.jetbrains.kotlin.types.checker",
+ "org.jetbrains.kotlin.types.error",
+ "org.jetbrains.kotlin.types.expressions",
+ "org.jetbrains.kotlin.types.expressions.typeInfoFactory",
+ "org.jetbrains.kotlin.types.expressions.unqualifiedSuper",
+ "org.jetbrains.kotlin.types.model",
+ "org.jetbrains.kotlin.types.typeUtil",
+ "org.jetbrains.kotlin.types.typesApproximation",
+ "org.jetbrains.kotlin.util",
+ "org.jetbrains.kotlin.util.capitalizeDecapitalize",
+ "org.jetbrains.kotlin.util.collectionUtils",
+ "org.jetbrains.kotlin.util.javaslang",
+ "org.jetbrains.kotlin.util.slicedMap",
+ "org.jetbrains.kotlin.utils",
+ "org.jetbrains.kotlin.utils.addToStdlib",
+ "org.jetbrains.kotlin.utils.concurrent.block",
+ "org.jetbrains.kotlin.utils.fileUtils",
+ "org.jetbrains.kotlin.utils.intellij",
+ "org.jetbrains.kotlin.utils.kapt",
+ "org.jetbrains.kotlin.utils.repl",
+ "org.jetbrains.kotlin.utils.strings",
+ "org.jetbrains.kotlin.wasm.ir",
+ "org.jetbrains.kotlin.wasm.ir.convertors"
+ ],
+ "com.android.tools.external.org-jetbrains:uast": [
+ "com.intellij.patterns.uast",
+ "com.intellij.psi",
+ "org.jetbrains.uast",
+ "org.jetbrains.uast.analysis",
+ "org.jetbrains.uast.evaluation",
+ "org.jetbrains.uast.expressions",
+ "org.jetbrains.uast.generate",
+ "org.jetbrains.uast.internal",
+ "org.jetbrains.uast.java",
+ "org.jetbrains.uast.java.analysis",
+ "org.jetbrains.uast.java.declarations",
+ "org.jetbrains.uast.java.expressions",
+ "org.jetbrains.uast.java.generate",
+ "org.jetbrains.uast.java.internal",
+ "org.jetbrains.uast.java.kinds",
+ "org.jetbrains.uast.kotlin",
+ "org.jetbrains.uast.kotlin.analysis",
+ "org.jetbrains.uast.kotlin.evaluation",
+ "org.jetbrains.uast.kotlin.internal",
+ "org.jetbrains.uast.kotlin.kinds",
+ "org.jetbrains.uast.kotlin.psi",
+ "org.jetbrains.uast.psi",
+ "org.jetbrains.uast.util",
+ "org.jetbrains.uast.values",
+ "org.jetbrains.uast.visitor"
+ ],
+ "com.android.tools.layoutlib:layoutlib-api": [
+ "com.android.ide.common.rendering.api",
+ "com.android.resources"
+ ],
+ "com.android.tools.lint:lint": [
+ "com.android.tools.lint",
+ "com.android.tools.lint.gradle"
+ ],
+ "com.android.tools.lint:lint-api": [
+ "com.android.tools.lint.client.api",
+ "com.android.tools.lint.detector.api",
+ "com.android.tools.lint.detector.api.interprocedural",
+ "com.android.tools.lint.helpers"
+ ],
+ "com.android.tools.lint:lint-checks": [
+ "com.android.tools.lint.checks"
+ ],
+ "com.android.tools.lint:lint-model": [
+ "com.android.tools.lint.model"
+ ],
+ "com.android.tools:annotations": [
+ "com.android.annotations",
+ "com.android.annotations.concurrency"
+ ],
+ "com.android.tools:common": [
+ "com.android",
+ "com.android.ide.common.blame",
+ "com.android.io",
+ "com.android.prefs",
+ "com.android.resources",
+ "com.android.sdklib",
+ "com.android.support",
+ "com.android.testing.utils",
+ "com.android.tools.proguard",
+ "com.android.utils",
+ "com.android.utils.concurrency",
+ "com.android.utils.cxx",
+ "com.android.utils.reflection",
+ "com.android.xml"
+ ],
+ "com.android.tools:dvlib": [
+ "com.android.dvlib"
+ ],
+ "com.android.tools:repository": [
+ "com.android.repository",
+ "com.android.repository.api",
+ "com.android.repository.impl.downloader",
+ "com.android.repository.impl.generated.generic.v1",
+ "com.android.repository.impl.generated.generic.v2",
+ "com.android.repository.impl.generated.v1",
+ "com.android.repository.impl.generated.v2",
+ "com.android.repository.impl.installer",
+ "com.android.repository.impl.manager",
+ "com.android.repository.impl.meta",
+ "com.android.repository.impl.sources",
+ "com.android.repository.impl.sources.generated.v1",
+ "com.android.repository.io",
+ "com.android.repository.util"
+ ],
+ "com.android.tools:sdk-common": [
+ "com.android.ide.common.attribution",
+ "com.android.ide.common.blame",
+ "com.android.ide.common.blame.parser",
+ "com.android.ide.common.blame.parser.aapt",
+ "com.android.ide.common.blame.parser.util",
+ "com.android.ide.common.build",
+ "com.android.ide.common.build.filebasedproperties.module",
+ "com.android.ide.common.build.filebasedproperties.variant",
+ "com.android.ide.common.caching",
+ "com.android.ide.common.fonts",
+ "com.android.ide.common.internal",
+ "com.android.ide.common.process",
+ "com.android.ide.common.rendering",
+ "com.android.ide.common.repository",
+ "com.android.ide.common.resources",
+ "com.android.ide.common.resources.configuration",
+ "com.android.ide.common.resources.sampledata",
+ "com.android.ide.common.resources.usage",
+ "com.android.ide.common.sdk",
+ "com.android.ide.common.signing",
+ "com.android.ide.common.symbols",
+ "com.android.ide.common.util",
+ "com.android.ide.common.vectordrawable",
+ "com.android.ide.common.workers",
+ "com.android.ide.common.xml",
+ "com.android.instantapp.provision",
+ "com.android.instantapp.run",
+ "com.android.instantapp.sdk",
+ "com.android.instantapp.utils",
+ "com.android.projectmodel",
+ "wireless.android.instantapps.sdk"
+ ],
+ "com.android.tools:sdklib": [
+ "com.android.sdklib",
+ "com.android.sdklib.devices",
+ "com.android.sdklib.internal.avd",
+ "com.android.sdklib.internal.build",
+ "com.android.sdklib.internal.project",
+ "com.android.sdklib.repository",
+ "com.android.sdklib.repository.generated.addon.v1",
+ "com.android.sdklib.repository.generated.addon.v2",
+ "com.android.sdklib.repository.generated.addon.v3",
+ "com.android.sdklib.repository.generated.common.v1",
+ "com.android.sdklib.repository.generated.common.v2",
+ "com.android.sdklib.repository.generated.common.v3",
+ "com.android.sdklib.repository.generated.repository.v1",
+ "com.android.sdklib.repository.generated.repository.v2",
+ "com.android.sdklib.repository.generated.repository.v3",
+ "com.android.sdklib.repository.generated.sysimg.v1",
+ "com.android.sdklib.repository.generated.sysimg.v2",
+ "com.android.sdklib.repository.generated.sysimg.v3",
+ "com.android.sdklib.repository.installer",
+ "com.android.sdklib.repository.legacy",
+ "com.android.sdklib.repository.legacy.descriptors",
+ "com.android.sdklib.repository.legacy.io",
+ "com.android.sdklib.repository.legacy.local",
+ "com.android.sdklib.repository.legacy.remote",
+ "com.android.sdklib.repository.legacy.remote.internal",
+ "com.android.sdklib.repository.legacy.remote.internal.archives",
+ "com.android.sdklib.repository.legacy.remote.internal.packages",
+ "com.android.sdklib.repository.legacy.remote.internal.sources",
+ "com.android.sdklib.repository.meta",
+ "com.android.sdklib.repository.sources",
+ "com.android.sdklib.repository.sources.generated.v1",
+ "com.android.sdklib.repository.sources.generated.v2",
+ "com.android.sdklib.repository.sources.generated.v3",
+ "com.android.sdklib.repository.sources.generated.v4",
+ "com.android.sdklib.repository.sources.generated.v5",
+ "com.android.sdklib.repository.targets",
+ "com.android.sdklib.tool",
+ "com.android.sdklib.tool.sdkmanager",
+ "com.android.sdklib.util"
+ ],
+ "com.beust:jcommander": [
+ "com.beust.jcommander",
+ "com.beust.jcommander.converters",
+ "com.beust.jcommander.defaultprovider",
+ "com.beust.jcommander.internal",
+ "com.beust.jcommander.validators"
+ ],
+ "com.github.bumptech.glide:annotations": [
+ "com.bumptech.glide.annotation",
+ "com.bumptech.glide.annotation.compiler"
+ ],
+ "com.github.bumptech.glide:compiler": [
+ "com.bumptech.glide.annotation.compiler",
+ "com.bumptech.glide.repackaged.com.google.common.base",
+ "com.bumptech.glide.repackaged.com.google.common.collect",
+ "com.bumptech.glide.repackaged.com.squareup.javapoet"
+ ],
+ "com.github.bumptech.glide:disklrucache": [
+ "com.bumptech.glide.disklrucache"
+ ],
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework": [
+ "com.google.android.apps.common.testing.accessibility.framework",
+ "com.google.android.apps.common.testing.accessibility.framework.integrations",
+ "com.google.android.apps.common.testing.accessibility.framework.integrations.espresso",
+ "com.googlecode.eyesfree.compat",
+ "com.googlecode.eyesfree.utils"
+ ],
+ "com.google.android.gms:strict-version-matcher-plugin": [
+ "com.google.android.gms",
+ "com.google.android.gms.dependencies"
+ ],
+ "com.google.android:annotations": [
+ "android.annotation"
+ ],
+ "com.google.auto.service:auto-service-annotations": [
+ "com.google.auto.service"
+ ],
+ "com.google.auto.value:auto-value-annotations": [
+ "com.google.auto.value",
+ "com.google.auto.value.extension.memoized",
+ "com.google.auto.value.extension.serializable",
+ "com.google.auto.value.extension.toprettystring"
+ ],
+ "com.google.code.findbugs:jsr305": [
+ "javax.annotation",
+ "javax.annotation.concurrent",
+ "javax.annotation.meta"
+ ],
+ "com.google.code.gson:gson": [
+ "com.google.gson",
+ "com.google.gson.annotations",
+ "com.google.gson.internal",
+ "com.google.gson.internal.bind",
+ "com.google.gson.internal.bind.util",
+ "com.google.gson.internal.reflect",
+ "com.google.gson.internal.sql",
+ "com.google.gson.reflect",
+ "com.google.gson.stream"
+ ],
+ "com.google.dagger:dagger": [
+ "dagger",
+ "dagger.assisted",
+ "dagger.internal",
+ "dagger.multibindings"
+ ],
+ "com.google.dagger:dagger-compiler": [
+ "dagger.internal.codegen",
+ "dagger.internal.codegen.base",
+ "dagger.internal.codegen.binding",
+ "dagger.internal.codegen.bindinggraphvalidation",
+ "dagger.internal.codegen.compileroption",
+ "dagger.internal.codegen.componentgenerator",
+ "dagger.internal.codegen.javapoet",
+ "dagger.internal.codegen.kotlin",
+ "dagger.internal.codegen.langmodel",
+ "dagger.internal.codegen.validation",
+ "dagger.internal.codegen.writing"
+ ],
+ "com.google.dagger:dagger-producers": [
+ "dagger.producers",
+ "dagger.producers.internal",
+ "dagger.producers.monitoring",
+ "dagger.producers.monitoring.internal"
+ ],
+ "com.google.dagger:dagger-spi": [
+ "dagger.internal.codegen.extension",
+ "dagger.internal.codegen.xprocessing",
+ "dagger.model",
+ "dagger.spi",
+ "dagger.spi.model",
+ "dagger.spi.shaded.androidx.room.compiler.processing",
+ "dagger.spi.shaded.androidx.room.compiler.processing.compat",
+ "dagger.spi.shaded.androidx.room.compiler.processing.javac",
+ "dagger.spi.shaded.androidx.room.compiler.processing.javac.kotlin",
+ "dagger.spi.shaded.androidx.room.compiler.processing.ksp",
+ "dagger.spi.shaded.androidx.room.compiler.processing.ksp.synthetic",
+ "dagger.spi.shaded.androidx.room.compiler.processing.util",
+ "dagger.spi.shaded.auto.common"
+ ],
+ "com.google.devtools.ksp:symbol-processing-api": [
+ "com.google.devtools.ksp",
+ "com.google.devtools.ksp.processing",
+ "com.google.devtools.ksp.symbol",
+ "com.google.devtools.ksp.visitor"
+ ],
+ "com.google.errorprone:error_prone_annotations": [
+ "com.google.errorprone.annotations",
+ "com.google.errorprone.annotations.concurrent"
+ ],
+ "com.google.errorprone:javac-shaded": [
+ "org.openjdk.javax.annotation.processing",
+ "org.openjdk.javax.lang.model",
+ "org.openjdk.javax.lang.model.element",
+ "org.openjdk.javax.lang.model.type",
+ "org.openjdk.javax.lang.model.util",
+ "org.openjdk.javax.tools",
+ "org.openjdk.source.doctree",
+ "org.openjdk.source.tree",
+ "org.openjdk.source.util",
+ "org.openjdk.tools.doclint",
+ "org.openjdk.tools.doclint.resources",
+ "org.openjdk.tools.javac",
+ "org.openjdk.tools.javac.api",
+ "org.openjdk.tools.javac.code",
+ "org.openjdk.tools.javac.comp",
+ "org.openjdk.tools.javac.file",
+ "org.openjdk.tools.javac.jvm",
+ "org.openjdk.tools.javac.main",
+ "org.openjdk.tools.javac.model",
+ "org.openjdk.tools.javac.parser",
+ "org.openjdk.tools.javac.platform",
+ "org.openjdk.tools.javac.processing",
+ "org.openjdk.tools.javac.resources",
+ "org.openjdk.tools.javac.tree",
+ "org.openjdk.tools.javac.util",
+ "org.openjdk.tools.javah",
+ "org.openjdk.tools.javah.resources",
+ "org.openjdk.tools.sjavac",
+ "org.openjdk.tools.sjavac.client",
+ "org.openjdk.tools.sjavac.comp",
+ "org.openjdk.tools.sjavac.comp.dependencies",
+ "org.openjdk.tools.sjavac.options",
+ "org.openjdk.tools.sjavac.pubapi",
+ "org.openjdk.tools.sjavac.server",
+ "org.openjdk.tools.sjavac.server.log"
+ ],
+ "com.google.firebase:firebase-annotations": [
+ "com.google.firebase.annotations"
+ ],
+ "com.google.gms:google-services": [
+ "com.google.gms.googleservices"
+ ],
+ "com.google.googlejavaformat:google-java-format": [
+ "com.google.googlejavaformat",
+ "com.google.googlejavaformat.java",
+ "com.google.googlejavaformat.java.filer",
+ "com.google.googlejavaformat.java.javadoc"
+ ],
+ "com.google.guava:failureaccess": [
+ "com.google.common.util.concurrent.internal"
+ ],
+ "com.google.guava:guava": [
+ "com.google.common.annotations",
+ "com.google.common.base",
+ "com.google.common.base.internal",
+ "com.google.common.cache",
+ "com.google.common.collect",
+ "com.google.common.escape",
+ "com.google.common.eventbus",
+ "com.google.common.graph",
+ "com.google.common.hash",
+ "com.google.common.html",
+ "com.google.common.io",
+ "com.google.common.math",
+ "com.google.common.net",
+ "com.google.common.primitives",
+ "com.google.common.reflect",
+ "com.google.common.util.concurrent",
+ "com.google.common.xml",
+ "com.google.thirdparty.publicsuffix"
+ ],
+ "com.google.j2objc:j2objc-annotations": [
+ "com.google.j2objc.annotations"
+ ],
+ "com.google.jimfs:jimfs": [
+ "com.google.common.jimfs"
+ ],
+ "com.google.protobuf:protobuf-java": [
+ "com.google.protobuf",
+ "com.google.protobuf.compiler"
+ ],
+ "com.google.protobuf:protobuf-java-util": [
+ "com.google.protobuf.util"
+ ],
+ "com.google.protobuf:protobuf-javalite": [
+ "com.google.protobuf"
+ ],
+ "com.google.truth.extensions:truth-liteproto-extension": [
+ "com.google.common.truth.extensions.proto"
+ ],
+ "com.google.truth:truth": [
+ "com.google.common.truth"
+ ],
+ "com.googlecode.juniversalchardet:juniversalchardet": [
+ "org.mozilla.universalchardet",
+ "org.mozilla.universalchardet.prober",
+ "org.mozilla.universalchardet.prober.contextanalysis",
+ "org.mozilla.universalchardet.prober.distributionanalysis",
+ "org.mozilla.universalchardet.prober.sequence",
+ "org.mozilla.universalchardet.prober.statemachine"
+ ],
+ "com.ibm.icu:icu4j": [
+ "com.ibm.icu.impl",
+ "com.ibm.icu.impl.coll",
+ "com.ibm.icu.impl.data",
+ "com.ibm.icu.impl.duration",
+ "com.ibm.icu.impl.duration.impl",
+ "com.ibm.icu.impl.locale",
+ "com.ibm.icu.lang",
+ "com.ibm.icu.math",
+ "com.ibm.icu.text",
+ "com.ibm.icu.util"
+ ],
+ "com.squareup.moshi:moshi": [
+ "com.squareup.moshi",
+ "com.squareup.moshi.internal"
+ ],
+ "com.squareup.moshi:moshi-kotlin": [
+ "com.squareup.moshi",
+ "com.squareup.moshi.kotlin.reflect"
+ ],
+ "com.squareup.moshi:moshi-kotlin-codegen": [
+ "com.squareup.moshi.kotlin.codegen.api",
+ "com.squareup.moshi.kotlin.codegen.apt",
+ "com.squareup.moshi.kotlin.codegen.ksp",
+ "com.squareup.moshi.kotlinpoet.metadata",
+ "com.squareup.moshi.kotlinpoet.metadata.classinspectors",
+ "com.squareup.moshi.kotlinpoet.metadata.specs",
+ "com.squareup.moshi.kotlinx.metadata",
+ "com.squareup.moshi.kotlinx.metadata.impl",
+ "com.squareup.moshi.kotlinx.metadata.impl.extensions",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.builtins",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.deserialization",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.deserialization",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.jvm.serialization",
+ "com.squareup.moshi.kotlinx.metadata.internal.metadata.serialization",
+ "com.squareup.moshi.kotlinx.metadata.internal.protobuf",
+ "com.squareup.moshi.kotlinx.metadata.jvm",
+ "com.squareup.moshi.kotlinx.metadata.jvm.impl",
+ "shadow.com.google.auto.common",
+ "shadow.com.squareup.kotlinpoet.ksp"
+ ],
+ "com.squareup.okhttp3:mockwebserver": [
+ "okhttp3.internal.duplex",
+ "okhttp3.mockwebserver",
+ "okhttp3.mockwebserver.internal.duplex"
+ ],
+ "com.squareup.okhttp3:okhttp": [
+ "okhttp3",
+ "okhttp3.internal",
+ "okhttp3.internal.authenticator",
+ "okhttp3.internal.cache",
+ "okhttp3.internal.cache2",
+ "okhttp3.internal.concurrent",
+ "okhttp3.internal.connection",
+ "okhttp3.internal.http",
+ "okhttp3.internal.http1",
+ "okhttp3.internal.http2",
+ "okhttp3.internal.io",
+ "okhttp3.internal.platform",
+ "okhttp3.internal.platform.android",
+ "okhttp3.internal.proxy",
+ "okhttp3.internal.publicsuffix",
+ "okhttp3.internal.tls",
+ "okhttp3.internal.ws"
+ ],
+ "com.squareup.okhttp:okhttp": [
+ "com.squareup.okhttp",
+ "com.squareup.okhttp.internal",
+ "com.squareup.okhttp.internal.framed",
+ "com.squareup.okhttp.internal.http",
+ "com.squareup.okhttp.internal.io",
+ "com.squareup.okhttp.internal.tls"
+ ],
+ "com.squareup.okio:okio": [
+ "okio",
+ "okio.internal"
+ ],
+ "com.squareup.retrofit2:converter-moshi": [
+ "retrofit2.converter.moshi"
+ ],
+ "com.squareup.retrofit2:retrofit": [
+ "retrofit2",
+ "retrofit2.http",
+ "retrofit2.internal"
+ ],
+ "com.squareup.retrofit2:retrofit-mock": [
+ "retrofit2.mock"
+ ],
+ "com.squareup:javapoet": [
+ "com.squareup.javapoet"
+ ],
+ "com.squareup:javawriter": [
+ "com.squareup.javawriter"
+ ],
+ "com.squareup:kotlinpoet": [
+ "com.squareup.kotlinpoet",
+ "com.squareup.kotlinpoet.jvm",
+ "com.squareup.kotlinpoet.tags"
+ ],
+ "com.sun.activation:javax.activation": [
+ "com.sun.activation.registries",
+ "com.sun.activation.viewers",
+ "javax.activation"
+ ],
+ "com.sun.istack:istack-commons-runtime": [
+ "com.sun.istack",
+ "com.sun.istack.localization",
+ "com.sun.istack.logging"
+ ],
+ "com.sun.xml.fastinfoset:FastInfoset": [
+ "com.sun.xml.fastinfoset",
+ "com.sun.xml.fastinfoset.algorithm",
+ "com.sun.xml.fastinfoset.alphabet",
+ "com.sun.xml.fastinfoset.dom",
+ "com.sun.xml.fastinfoset.org.apache.xerces.util",
+ "com.sun.xml.fastinfoset.sax",
+ "com.sun.xml.fastinfoset.stax",
+ "com.sun.xml.fastinfoset.stax.events",
+ "com.sun.xml.fastinfoset.stax.factory",
+ "com.sun.xml.fastinfoset.stax.util",
+ "com.sun.xml.fastinfoset.tools",
+ "com.sun.xml.fastinfoset.util",
+ "com.sun.xml.fastinfoset.vocab",
+ "org.jvnet.fastinfoset",
+ "org.jvnet.fastinfoset.sax",
+ "org.jvnet.fastinfoset.sax.helpers",
+ "org.jvnet.fastinfoset.stax"
+ ],
+ "commons-codec:commons-codec": [
+ "org.apache.commons.codec",
+ "org.apache.commons.codec.binary",
+ "org.apache.commons.codec.digest",
+ "org.apache.commons.codec.language",
+ "org.apache.commons.codec.language.bm",
+ "org.apache.commons.codec.net"
+ ],
+ "commons-io:commons-io": [
+ "org.apache.commons.io",
+ "org.apache.commons.io.comparator",
+ "org.apache.commons.io.filefilter",
+ "org.apache.commons.io.input",
+ "org.apache.commons.io.monitor",
+ "org.apache.commons.io.output"
+ ],
+ "commons-logging:commons-logging": [
+ "org.apache.commons.logging",
+ "org.apache.commons.logging.impl"
+ ],
+ "io.grpc:grpc-api": [
+ "io.grpc"
+ ],
+ "io.grpc:grpc-context": [
+ "io.grpc"
+ ],
+ "io.grpc:grpc-core": [
+ "io.grpc.inprocess",
+ "io.grpc.internal",
+ "io.grpc.util"
+ ],
+ "io.grpc:grpc-okhttp": [
+ "io.grpc.okhttp",
+ "io.grpc.okhttp.internal",
+ "io.grpc.okhttp.internal.framed"
+ ],
+ "io.grpc:grpc-protobuf-lite": [
+ "io.grpc.protobuf.lite"
+ ],
+ "io.grpc:grpc-stub": [
+ "io.grpc.stub",
+ "io.grpc.stub.annotations"
+ ],
+ "io.perfmark:perfmark-api": [
+ "io.perfmark"
+ ],
+ "io.xlate:yaml-json": [
+ "io.xlate.yamljson"
+ ],
+ "jakarta.activation:jakarta.activation-api": [
+ "javax.activation"
+ ],
+ "jakarta.json:jakarta.json-api": [
+ "jakarta.json",
+ "jakarta.json.spi",
+ "jakarta.json.stream"
+ ],
+ "jakarta.xml.bind:jakarta.xml.bind-api": [
+ "javax.xml.bind",
+ "javax.xml.bind.annotation",
+ "javax.xml.bind.annotation.adapters",
+ "javax.xml.bind.attachment",
+ "javax.xml.bind.helpers",
+ "javax.xml.bind.util"
+ ],
+ "javax.annotation:javax.annotation-api": [
+ "javax.annotation",
+ "javax.annotation.security",
+ "javax.annotation.sql"
+ ],
+ "javax.inject:javax.inject": [
+ "javax.inject"
+ ],
+ "junit:junit": [
+ "junit.extensions",
+ "junit.framework",
+ "junit.runner",
+ "junit.textui",
+ "org.junit",
+ "org.junit.experimental",
+ "org.junit.experimental.categories",
+ "org.junit.experimental.max",
+ "org.junit.experimental.results",
+ "org.junit.experimental.runners",
+ "org.junit.experimental.theories",
+ "org.junit.experimental.theories.internal",
+ "org.junit.experimental.theories.suppliers",
+ "org.junit.function",
+ "org.junit.internal",
+ "org.junit.internal.builders",
+ "org.junit.internal.management",
+ "org.junit.internal.matchers",
+ "org.junit.internal.requests",
+ "org.junit.internal.runners",
+ "org.junit.internal.runners.model",
+ "org.junit.internal.runners.rules",
+ "org.junit.internal.runners.statements",
+ "org.junit.matchers",
+ "org.junit.rules",
+ "org.junit.runner",
+ "org.junit.runner.manipulation",
+ "org.junit.runner.notification",
+ "org.junit.runners",
+ "org.junit.runners.model",
+ "org.junit.runners.parameterized",
+ "org.junit.validator"
+ ],
+ "net.bytebuddy:byte-buddy": [
+ "net.bytebuddy",
+ "net.bytebuddy.agent.builder",
+ "net.bytebuddy.asm",
+ "net.bytebuddy.build",
+ "net.bytebuddy.description",
+ "net.bytebuddy.description.annotation",
+ "net.bytebuddy.description.enumeration",
+ "net.bytebuddy.description.field",
+ "net.bytebuddy.description.method",
+ "net.bytebuddy.description.modifier",
+ "net.bytebuddy.description.type",
+ "net.bytebuddy.dynamic",
+ "net.bytebuddy.dynamic.loading",
+ "net.bytebuddy.dynamic.scaffold",
+ "net.bytebuddy.dynamic.scaffold.inline",
+ "net.bytebuddy.dynamic.scaffold.subclass",
+ "net.bytebuddy.implementation",
+ "net.bytebuddy.implementation.attribute",
+ "net.bytebuddy.implementation.auxiliary",
+ "net.bytebuddy.implementation.bind",
+ "net.bytebuddy.implementation.bind.annotation",
+ "net.bytebuddy.implementation.bytecode",
+ "net.bytebuddy.implementation.bytecode.assign",
+ "net.bytebuddy.implementation.bytecode.assign.primitive",
+ "net.bytebuddy.implementation.bytecode.assign.reference",
+ "net.bytebuddy.implementation.bytecode.collection",
+ "net.bytebuddy.implementation.bytecode.constant",
+ "net.bytebuddy.implementation.bytecode.member",
+ "net.bytebuddy.jar.asm",
+ "net.bytebuddy.jar.asm.commons",
+ "net.bytebuddy.jar.asm.signature",
+ "net.bytebuddy.matcher",
+ "net.bytebuddy.pool",
+ "net.bytebuddy.utility",
+ "net.bytebuddy.utility.privilege",
+ "net.bytebuddy.utility.visitor"
+ ],
+ "net.bytebuddy:byte-buddy-agent": [
+ "net.bytebuddy.agent"
+ ],
+ "net.java.dev.jna:jna": [
+ "com.sun.jna",
+ "com.sun.jna.internal",
+ "com.sun.jna.ptr",
+ "com.sun.jna.win32"
+ ],
+ "net.java.dev.jna:jna-platform": [
+ "com.sun.jna.platform",
+ "com.sun.jna.platform.dnd",
+ "com.sun.jna.platform.linux",
+ "com.sun.jna.platform.mac",
+ "com.sun.jna.platform.unix",
+ "com.sun.jna.platform.unix.solaris",
+ "com.sun.jna.platform.win32",
+ "com.sun.jna.platform.win32.COM",
+ "com.sun.jna.platform.win32.COM.tlb",
+ "com.sun.jna.platform.win32.COM.tlb.imp",
+ "com.sun.jna.platform.win32.COM.util",
+ "com.sun.jna.platform.win32.COM.util.annotation",
+ "com.sun.jna.platform.wince"
+ ],
+ "net.ltgt.gradle.incap:incap": [
+ "net.ltgt.gradle.incap"
+ ],
+ "net.sf.kxml:kxml2": [
+ "org.kxml2.io",
+ "org.kxml2.kdom",
+ "org.kxml2.wap",
+ "org.kxml2.wap.syncml",
+ "org.kxml2.wap.wml",
+ "org.kxml2.wap.wv",
+ "org.xmlpull.v1"
+ ],
+ "org.antlr:antlr4": [
+ "org.abego.treelayout",
+ "org.abego.treelayout.internal.util",
+ "org.abego.treelayout.internal.util.java.lang",
+ "org.abego.treelayout.internal.util.java.lang.string",
+ "org.abego.treelayout.internal.util.java.util",
+ "org.abego.treelayout.util",
+ "org.antlr.runtime",
+ "org.antlr.runtime.debug",
+ "org.antlr.runtime.misc",
+ "org.antlr.runtime.tree",
+ "org.antlr.v4",
+ "org.antlr.v4.analysis",
+ "org.antlr.v4.automata",
+ "org.antlr.v4.codegen",
+ "org.antlr.v4.codegen.model",
+ "org.antlr.v4.codegen.model.chunk",
+ "org.antlr.v4.codegen.model.decl",
+ "org.antlr.v4.codegen.target",
+ "org.antlr.v4.gui",
+ "org.antlr.v4.misc",
+ "org.antlr.v4.parse",
+ "org.antlr.v4.runtime",
+ "org.antlr.v4.runtime.atn",
+ "org.antlr.v4.runtime.dfa",
+ "org.antlr.v4.runtime.misc",
+ "org.antlr.v4.runtime.tree",
+ "org.antlr.v4.runtime.tree.pattern",
+ "org.antlr.v4.runtime.tree.xpath",
+ "org.antlr.v4.semantics",
+ "org.antlr.v4.tool",
+ "org.antlr.v4.tool.ast",
+ "org.stringtemplate.v4",
+ "org.stringtemplate.v4.compiler",
+ "org.stringtemplate.v4.debug",
+ "org.stringtemplate.v4.gui",
+ "org.stringtemplate.v4.misc"
+ ],
+ "org.apache.commons:commons-compress": [
+ "org.apache.commons.compress",
+ "org.apache.commons.compress.archivers",
+ "org.apache.commons.compress.archivers.ar",
+ "org.apache.commons.compress.archivers.arj",
+ "org.apache.commons.compress.archivers.cpio",
+ "org.apache.commons.compress.archivers.dump",
+ "org.apache.commons.compress.archivers.examples",
+ "org.apache.commons.compress.archivers.jar",
+ "org.apache.commons.compress.archivers.sevenz",
+ "org.apache.commons.compress.archivers.tar",
+ "org.apache.commons.compress.archivers.zip",
+ "org.apache.commons.compress.changes",
+ "org.apache.commons.compress.compressors",
+ "org.apache.commons.compress.compressors.brotli",
+ "org.apache.commons.compress.compressors.bzip2",
+ "org.apache.commons.compress.compressors.deflate",
+ "org.apache.commons.compress.compressors.deflate64",
+ "org.apache.commons.compress.compressors.gzip",
+ "org.apache.commons.compress.compressors.lz4",
+ "org.apache.commons.compress.compressors.lz77support",
+ "org.apache.commons.compress.compressors.lzma",
+ "org.apache.commons.compress.compressors.lzw",
+ "org.apache.commons.compress.compressors.pack200",
+ "org.apache.commons.compress.compressors.snappy",
+ "org.apache.commons.compress.compressors.xz",
+ "org.apache.commons.compress.compressors.z",
+ "org.apache.commons.compress.compressors.zstandard",
+ "org.apache.commons.compress.parallel",
+ "org.apache.commons.compress.utils"
+ ],
+ "org.apache.httpcomponents:httpclient": [
+ "org.apache.http.auth",
+ "org.apache.http.auth.params",
+ "org.apache.http.client",
+ "org.apache.http.client.config",
+ "org.apache.http.client.entity",
+ "org.apache.http.client.methods",
+ "org.apache.http.client.params",
+ "org.apache.http.client.protocol",
+ "org.apache.http.client.utils",
+ "org.apache.http.conn",
+ "org.apache.http.conn.params",
+ "org.apache.http.conn.routing",
+ "org.apache.http.conn.scheme",
+ "org.apache.http.conn.socket",
+ "org.apache.http.conn.ssl",
+ "org.apache.http.conn.util",
+ "org.apache.http.cookie",
+ "org.apache.http.cookie.params",
+ "org.apache.http.impl.auth",
+ "org.apache.http.impl.client",
+ "org.apache.http.impl.conn",
+ "org.apache.http.impl.conn.tsccm",
+ "org.apache.http.impl.cookie",
+ "org.apache.http.impl.execchain"
+ ],
+ "org.apache.httpcomponents:httpcore": [
+ "org.apache.http",
+ "org.apache.http.annotation",
+ "org.apache.http.concurrent",
+ "org.apache.http.config",
+ "org.apache.http.entity",
+ "org.apache.http.impl",
+ "org.apache.http.impl.bootstrap",
+ "org.apache.http.impl.entity",
+ "org.apache.http.impl.io",
+ "org.apache.http.impl.pool",
+ "org.apache.http.io",
+ "org.apache.http.message",
+ "org.apache.http.params",
+ "org.apache.http.pool",
+ "org.apache.http.protocol",
+ "org.apache.http.ssl",
+ "org.apache.http.util"
+ ],
+ "org.apache.httpcomponents:httpmime": [
+ "org.apache.http.entity.mime",
+ "org.apache.http.entity.mime.content"
+ ],
+ "org.bouncycastle:bcpkix-jdk15on": [
+ "org.bouncycastle.cert",
+ "org.bouncycastle.cert.bc",
+ "org.bouncycastle.cert.cmp",
+ "org.bouncycastle.cert.crmf",
+ "org.bouncycastle.cert.crmf.bc",
+ "org.bouncycastle.cert.crmf.jcajce",
+ "org.bouncycastle.cert.dane",
+ "org.bouncycastle.cert.dane.fetcher",
+ "org.bouncycastle.cert.jcajce",
+ "org.bouncycastle.cert.ocsp",
+ "org.bouncycastle.cert.ocsp.jcajce",
+ "org.bouncycastle.cert.path",
+ "org.bouncycastle.cert.path.validations",
+ "org.bouncycastle.cert.selector",
+ "org.bouncycastle.cert.selector.jcajce",
+ "org.bouncycastle.cmc",
+ "org.bouncycastle.cms",
+ "org.bouncycastle.cms.bc",
+ "org.bouncycastle.cms.jcajce",
+ "org.bouncycastle.dvcs",
+ "org.bouncycastle.eac",
+ "org.bouncycastle.eac.jcajce",
+ "org.bouncycastle.eac.operator",
+ "org.bouncycastle.eac.operator.jcajce",
+ "org.bouncycastle.est",
+ "org.bouncycastle.est.jcajce",
+ "org.bouncycastle.mime",
+ "org.bouncycastle.mime.encoding",
+ "org.bouncycastle.mime.smime",
+ "org.bouncycastle.mozilla",
+ "org.bouncycastle.mozilla.jcajce",
+ "org.bouncycastle.openssl",
+ "org.bouncycastle.openssl.bc",
+ "org.bouncycastle.openssl.jcajce",
+ "org.bouncycastle.operator",
+ "org.bouncycastle.operator.bc",
+ "org.bouncycastle.operator.jcajce",
+ "org.bouncycastle.pkcs",
+ "org.bouncycastle.pkcs.bc",
+ "org.bouncycastle.pkcs.jcajce",
+ "org.bouncycastle.pkix",
+ "org.bouncycastle.pkix.jcajce",
+ "org.bouncycastle.tsp",
+ "org.bouncycastle.tsp.cms",
+ "org.bouncycastle.voms"
+ ],
+ "org.bouncycastle:bcprov-jdk15on": [
+ "org.bouncycastle",
+ "org.bouncycastle.asn1",
+ "org.bouncycastle.asn1.anssi",
+ "org.bouncycastle.asn1.bc",
+ "org.bouncycastle.asn1.bsi",
+ "org.bouncycastle.asn1.cmc",
+ "org.bouncycastle.asn1.cmp",
+ "org.bouncycastle.asn1.cms",
+ "org.bouncycastle.asn1.cms.ecc",
+ "org.bouncycastle.asn1.crmf",
+ "org.bouncycastle.asn1.cryptlib",
+ "org.bouncycastle.asn1.cryptopro",
+ "org.bouncycastle.asn1.dvcs",
+ "org.bouncycastle.asn1.eac",
+ "org.bouncycastle.asn1.edec",
+ "org.bouncycastle.asn1.esf",
+ "org.bouncycastle.asn1.ess",
+ "org.bouncycastle.asn1.est",
+ "org.bouncycastle.asn1.gm",
+ "org.bouncycastle.asn1.gnu",
+ "org.bouncycastle.asn1.iana",
+ "org.bouncycastle.asn1.icao",
+ "org.bouncycastle.asn1.isara",
+ "org.bouncycastle.asn1.isismtt",
+ "org.bouncycastle.asn1.isismtt.ocsp",
+ "org.bouncycastle.asn1.isismtt.x509",
+ "org.bouncycastle.asn1.iso",
+ "org.bouncycastle.asn1.kisa",
+ "org.bouncycastle.asn1.microsoft",
+ "org.bouncycastle.asn1.misc",
+ "org.bouncycastle.asn1.mozilla",
+ "org.bouncycastle.asn1.nist",
+ "org.bouncycastle.asn1.nsri",
+ "org.bouncycastle.asn1.ntt",
+ "org.bouncycastle.asn1.ocsp",
+ "org.bouncycastle.asn1.oiw",
+ "org.bouncycastle.asn1.pkcs",
+ "org.bouncycastle.asn1.rosstandart",
+ "org.bouncycastle.asn1.sec",
+ "org.bouncycastle.asn1.smime",
+ "org.bouncycastle.asn1.teletrust",
+ "org.bouncycastle.asn1.tsp",
+ "org.bouncycastle.asn1.ua",
+ "org.bouncycastle.asn1.util",
+ "org.bouncycastle.asn1.x500",
+ "org.bouncycastle.asn1.x500.style",
+ "org.bouncycastle.asn1.x509",
+ "org.bouncycastle.asn1.x509.qualified",
+ "org.bouncycastle.asn1.x509.sigi",
+ "org.bouncycastle.asn1.x9",
+ "org.bouncycastle.crypto",
+ "org.bouncycastle.crypto.agreement",
+ "org.bouncycastle.crypto.agreement.jpake",
+ "org.bouncycastle.crypto.agreement.kdf",
+ "org.bouncycastle.crypto.agreement.srp",
+ "org.bouncycastle.crypto.commitments",
+ "org.bouncycastle.crypto.digests",
+ "org.bouncycastle.crypto.ec",
+ "org.bouncycastle.crypto.encodings",
+ "org.bouncycastle.crypto.engines",
+ "org.bouncycastle.crypto.examples",
+ "org.bouncycastle.crypto.generators",
+ "org.bouncycastle.crypto.io",
+ "org.bouncycastle.crypto.kems",
+ "org.bouncycastle.crypto.macs",
+ "org.bouncycastle.crypto.modes",
+ "org.bouncycastle.crypto.modes.gcm",
+ "org.bouncycastle.crypto.modes.kgcm",
+ "org.bouncycastle.crypto.paddings",
+ "org.bouncycastle.crypto.params",
+ "org.bouncycastle.crypto.parsers",
+ "org.bouncycastle.crypto.prng",
+ "org.bouncycastle.crypto.prng.drbg",
+ "org.bouncycastle.crypto.signers",
+ "org.bouncycastle.crypto.util",
+ "org.bouncycastle.i18n",
+ "org.bouncycastle.i18n.filter",
+ "org.bouncycastle.iana",
+ "org.bouncycastle.its.asn1",
+ "org.bouncycastle.jcajce",
+ "org.bouncycastle.jcajce.interfaces",
+ "org.bouncycastle.jcajce.io",
+ "org.bouncycastle.jcajce.provider.asymmetric",
+ "org.bouncycastle.jcajce.provider.asymmetric.dh",
+ "org.bouncycastle.jcajce.provider.asymmetric.dsa",
+ "org.bouncycastle.jcajce.provider.asymmetric.dstu",
+ "org.bouncycastle.jcajce.provider.asymmetric.ec",
+ "org.bouncycastle.jcajce.provider.asymmetric.ecgost",
+ "org.bouncycastle.jcajce.provider.asymmetric.ecgost12",
+ "org.bouncycastle.jcajce.provider.asymmetric.edec",
+ "org.bouncycastle.jcajce.provider.asymmetric.elgamal",
+ "org.bouncycastle.jcajce.provider.asymmetric.gost",
+ "org.bouncycastle.jcajce.provider.asymmetric.ies",
+ "org.bouncycastle.jcajce.provider.asymmetric.rsa",
+ "org.bouncycastle.jcajce.provider.asymmetric.util",
+ "org.bouncycastle.jcajce.provider.asymmetric.x509",
+ "org.bouncycastle.jcajce.provider.config",
+ "org.bouncycastle.jcajce.provider.digest",
+ "org.bouncycastle.jcajce.provider.drbg",
+ "org.bouncycastle.jcajce.provider.keystore",
+ "org.bouncycastle.jcajce.provider.keystore.bc",
+ "org.bouncycastle.jcajce.provider.keystore.bcfks",
+ "org.bouncycastle.jcajce.provider.keystore.pkcs12",
+ "org.bouncycastle.jcajce.provider.symmetric",
+ "org.bouncycastle.jcajce.provider.symmetric.util",
+ "org.bouncycastle.jcajce.provider.util",
+ "org.bouncycastle.jcajce.spec",
+ "org.bouncycastle.jcajce.util",
+ "org.bouncycastle.jce",
+ "org.bouncycastle.jce.exception",
+ "org.bouncycastle.jce.interfaces",
+ "org.bouncycastle.jce.netscape",
+ "org.bouncycastle.jce.provider",
+ "org.bouncycastle.jce.spec",
+ "org.bouncycastle.math",
+ "org.bouncycastle.math.ec",
+ "org.bouncycastle.math.ec.custom.djb",
+ "org.bouncycastle.math.ec.custom.gm",
+ "org.bouncycastle.math.ec.custom.sec",
+ "org.bouncycastle.math.ec.endo",
+ "org.bouncycastle.math.ec.rfc7748",
+ "org.bouncycastle.math.ec.rfc8032",
+ "org.bouncycastle.math.ec.tools",
+ "org.bouncycastle.math.field",
+ "org.bouncycastle.math.raw",
+ "org.bouncycastle.pqc.asn1",
+ "org.bouncycastle.pqc.crypto",
+ "org.bouncycastle.pqc.crypto.gmss",
+ "org.bouncycastle.pqc.crypto.gmss.util",
+ "org.bouncycastle.pqc.crypto.lms",
+ "org.bouncycastle.pqc.crypto.mceliece",
+ "org.bouncycastle.pqc.crypto.newhope",
+ "org.bouncycastle.pqc.crypto.qtesla",
+ "org.bouncycastle.pqc.crypto.rainbow",
+ "org.bouncycastle.pqc.crypto.rainbow.util",
+ "org.bouncycastle.pqc.crypto.sphincs",
+ "org.bouncycastle.pqc.crypto.util",
+ "org.bouncycastle.pqc.crypto.xmss",
+ "org.bouncycastle.pqc.jcajce.interfaces",
+ "org.bouncycastle.pqc.jcajce.provider",
+ "org.bouncycastle.pqc.jcajce.provider.gmss",
+ "org.bouncycastle.pqc.jcajce.provider.lms",
+ "org.bouncycastle.pqc.jcajce.provider.mceliece",
+ "org.bouncycastle.pqc.jcajce.provider.newhope",
+ "org.bouncycastle.pqc.jcajce.provider.qtesla",
+ "org.bouncycastle.pqc.jcajce.provider.rainbow",
+ "org.bouncycastle.pqc.jcajce.provider.sphincs",
+ "org.bouncycastle.pqc.jcajce.provider.util",
+ "org.bouncycastle.pqc.jcajce.provider.xmss",
+ "org.bouncycastle.pqc.jcajce.spec",
+ "org.bouncycastle.pqc.math.linearalgebra",
+ "org.bouncycastle.util",
+ "org.bouncycastle.util.encoders",
+ "org.bouncycastle.util.io",
+ "org.bouncycastle.util.io.pem",
+ "org.bouncycastle.util.test",
+ "org.bouncycastle.x509",
+ "org.bouncycastle.x509.extension",
+ "org.bouncycastle.x509.util"
+ ],
+ "org.checkerframework:checker-compat-qual": [
+ "org.checkerframework.checker.nullness.compatqual"
+ ],
+ "org.checkerframework:checker-qual": [
+ "org.checkerframework.checker.builder.qual",
+ "org.checkerframework.checker.calledmethods.qual",
+ "org.checkerframework.checker.compilermsgs.qual",
+ "org.checkerframework.checker.fenum.qual",
+ "org.checkerframework.checker.formatter.qual",
+ "org.checkerframework.checker.guieffect.qual",
+ "org.checkerframework.checker.i18n.qual",
+ "org.checkerframework.checker.i18nformatter.qual",
+ "org.checkerframework.checker.index.qual",
+ "org.checkerframework.checker.initialization.qual",
+ "org.checkerframework.checker.interning.qual",
+ "org.checkerframework.checker.lock.qual",
+ "org.checkerframework.checker.mustcall.qual",
+ "org.checkerframework.checker.nullness.qual",
+ "org.checkerframework.checker.optional.qual",
+ "org.checkerframework.checker.propkey.qual",
+ "org.checkerframework.checker.regex.qual",
+ "org.checkerframework.checker.signature.qual",
+ "org.checkerframework.checker.signedness.qual",
+ "org.checkerframework.checker.tainting.qual",
+ "org.checkerframework.checker.units.qual",
+ "org.checkerframework.common.aliasing.qual",
+ "org.checkerframework.common.initializedfields.qual",
+ "org.checkerframework.common.reflection.qual",
+ "org.checkerframework.common.returnsreceiver.qual",
+ "org.checkerframework.common.subtyping.qual",
+ "org.checkerframework.common.util.report.qual",
+ "org.checkerframework.common.value.qual",
+ "org.checkerframework.dataflow.qual",
+ "org.checkerframework.framework.qual"
+ ],
+ "org.codehaus.mojo:animal-sniffer-annotations": [
+ "org.codehaus.mojo.animal_sniffer"
+ ],
+ "org.eclipse.parsson:parsson": [
+ "org.eclipse.parsson",
+ "org.eclipse.parsson.api"
+ ],
+ "org.glassfish.jaxb:jaxb-runtime": [
+ "com.sun.xml.bind",
+ "com.sun.xml.bind.annotation",
+ "com.sun.xml.bind.api",
+ "com.sun.xml.bind.api.impl",
+ "com.sun.xml.bind.marshaller",
+ "com.sun.xml.bind.unmarshaller",
+ "com.sun.xml.bind.util",
+ "com.sun.xml.bind.v2",
+ "com.sun.xml.bind.v2.bytecode",
+ "com.sun.xml.bind.v2.model.annotation",
+ "com.sun.xml.bind.v2.model.core",
+ "com.sun.xml.bind.v2.model.impl",
+ "com.sun.xml.bind.v2.model.nav",
+ "com.sun.xml.bind.v2.model.runtime",
+ "com.sun.xml.bind.v2.model.util",
+ "com.sun.xml.bind.v2.runtime",
+ "com.sun.xml.bind.v2.runtime.output",
+ "com.sun.xml.bind.v2.runtime.property",
+ "com.sun.xml.bind.v2.runtime.reflect",
+ "com.sun.xml.bind.v2.runtime.reflect.opt",
+ "com.sun.xml.bind.v2.runtime.unmarshaller",
+ "com.sun.xml.bind.v2.schemagen",
+ "com.sun.xml.bind.v2.schemagen.episode",
+ "com.sun.xml.bind.v2.schemagen.xmlschema",
+ "com.sun.xml.bind.v2.util"
+ ],
+ "org.glassfish.jaxb:txw2": [
+ "com.sun.xml.txw2",
+ "com.sun.xml.txw2.annotation",
+ "com.sun.xml.txw2.output"
+ ],
+ "org.hamcrest:hamcrest-core": [
+ "org.hamcrest",
+ "org.hamcrest.core",
+ "org.hamcrest.internal"
+ ],
+ "org.hamcrest:hamcrest-integration": [
+ "org.hamcrest",
+ "org.hamcrest.integration"
+ ],
+ "org.hamcrest:hamcrest-library": [
+ "org.hamcrest",
+ "org.hamcrest.beans",
+ "org.hamcrest.collection",
+ "org.hamcrest.number",
+ "org.hamcrest.object",
+ "org.hamcrest.text",
+ "org.hamcrest.xml"
+ ],
+ "org.jetbrains.intellij.deps:trove4j": [
+ "gnu.trove",
+ "gnu.trove.decorator"
+ ],
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable": [
+ "javaslang",
+ "javaslang.collection",
+ "javaslang.concurrent",
+ "javaslang.control",
+ "javaslang.match",
+ "javaslang.match.annotation",
+ "javaslang.match.generator",
+ "javaslang.match.model",
+ "org.jetbrains.concurrency",
+ "org.jetbrains.ide",
+ "org.jetbrains.jps.model.java.impl",
+ "org.jetbrains.kotlin",
+ "org.jetbrains.kotlin.analyzer",
+ "org.jetbrains.kotlin.analyzer.common",
+ "org.jetbrains.kotlin.asJava",
+ "org.jetbrains.kotlin.asJava.builder",
+ "org.jetbrains.kotlin.asJava.classes",
+ "org.jetbrains.kotlin.asJava.elements",
+ "org.jetbrains.kotlin.asJava.finder",
+ "org.jetbrains.kotlin.backend.common",
+ "org.jetbrains.kotlin.backend.common.bridges",
+ "org.jetbrains.kotlin.backend.common.descriptors",
+ "org.jetbrains.kotlin.backend.common.extensions",
+ "org.jetbrains.kotlin.backend.common.ir",
+ "org.jetbrains.kotlin.backend.common.lower",
+ "org.jetbrains.kotlin.backend.common.lower.inline",
+ "org.jetbrains.kotlin.backend.common.lower.loops",
+ "org.jetbrains.kotlin.backend.common.lower.loops.handlers",
+ "org.jetbrains.kotlin.backend.common.lower.matchers",
+ "org.jetbrains.kotlin.backend.common.lower.optimizations",
+ "org.jetbrains.kotlin.backend.common.output",
+ "org.jetbrains.kotlin.backend.common.overrides",
+ "org.jetbrains.kotlin.backend.common.phaser",
+ "org.jetbrains.kotlin.backend.common.serialization",
+ "org.jetbrains.kotlin.backend.common.serialization.encodings",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle.descriptor",
+ "org.jetbrains.kotlin.backend.common.serialization.mangle.ir",
+ "org.jetbrains.kotlin.backend.common.serialization.metadata",
+ "org.jetbrains.kotlin.backend.common.serialization.metadata.impl",
+ "org.jetbrains.kotlin.backend.common.serialization.proto",
+ "org.jetbrains.kotlin.backend.common.serialization.signature",
+ "org.jetbrains.kotlin.backend.jvm",
+ "org.jetbrains.kotlin.backend.jvm.codegen",
+ "org.jetbrains.kotlin.backend.jvm.descriptors",
+ "org.jetbrains.kotlin.backend.jvm.intrinsics",
+ "org.jetbrains.kotlin.backend.jvm.ir",
+ "org.jetbrains.kotlin.backend.jvm.lower",
+ "org.jetbrains.kotlin.backend.jvm.lower.indy",
+ "org.jetbrains.kotlin.backend.jvm.lower.inlineclasses",
+ "org.jetbrains.kotlin.backend.jvm.serialization",
+ "org.jetbrains.kotlin.backend.wasm",
+ "org.jetbrains.kotlin.backend.wasm.ir2wasm",
+ "org.jetbrains.kotlin.backend.wasm.lower",
+ "org.jetbrains.kotlin.backend.wasm.utils",
+ "org.jetbrains.kotlin.build",
+ "org.jetbrains.kotlin.build.report",
+ "org.jetbrains.kotlin.build.report.metrics",
+ "org.jetbrains.kotlin.builtins",
+ "org.jetbrains.kotlin.builtins.functions",
+ "org.jetbrains.kotlin.builtins.jvm",
+ "org.jetbrains.kotlin.builtins.konan",
+ "org.jetbrains.kotlin.cfg",
+ "org.jetbrains.kotlin.cfg.pseudocode",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.eval",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.jumps",
+ "org.jetbrains.kotlin.cfg.pseudocode.instructions.special",
+ "org.jetbrains.kotlin.cfg.pseudocodeTraverser",
+ "org.jetbrains.kotlin.cfg.variable",
+ "org.jetbrains.kotlin.checkers",
+ "org.jetbrains.kotlin.checkers.diagnostics",
+ "org.jetbrains.kotlin.checkers.diagnostics.factories",
+ "org.jetbrains.kotlin.checkers.utils",
+ "org.jetbrains.kotlin.cli.common",
+ "org.jetbrains.kotlin.cli.common.arguments",
+ "org.jetbrains.kotlin.cli.common.config",
+ "org.jetbrains.kotlin.cli.common.environment",
+ "org.jetbrains.kotlin.cli.common.extensions",
+ "org.jetbrains.kotlin.cli.common.messages",
+ "org.jetbrains.kotlin.cli.common.modules",
+ "org.jetbrains.kotlin.cli.common.output",
+ "org.jetbrains.kotlin.cli.common.profiling",
+ "org.jetbrains.kotlin.cli.common.repl",
+ "org.jetbrains.kotlin.cli.js",
+ "org.jetbrains.kotlin.cli.js.dce",
+ "org.jetbrains.kotlin.cli.js.internal",
+ "org.jetbrains.kotlin.cli.jvm",
+ "org.jetbrains.kotlin.cli.jvm.compiler",
+ "org.jetbrains.kotlin.cli.jvm.config",
+ "org.jetbrains.kotlin.cli.jvm.index",
+ "org.jetbrains.kotlin.cli.jvm.javac",
+ "org.jetbrains.kotlin.cli.jvm.modules",
+ "org.jetbrains.kotlin.cli.jvm.plugins",
+ "org.jetbrains.kotlin.cli.metadata",
+ "org.jetbrains.kotlin.codegen",
+ "org.jetbrains.kotlin.codegen.binding",
+ "org.jetbrains.kotlin.codegen.context",
+ "org.jetbrains.kotlin.codegen.coroutines",
+ "org.jetbrains.kotlin.codegen.extensions",
+ "org.jetbrains.kotlin.codegen.inline",
+ "org.jetbrains.kotlin.codegen.inline.coroutines",
+ "org.jetbrains.kotlin.codegen.intrinsics",
+ "org.jetbrains.kotlin.codegen.optimization",
+ "org.jetbrains.kotlin.codegen.optimization.boxing",
+ "org.jetbrains.kotlin.codegen.optimization.common",
+ "org.jetbrains.kotlin.codegen.optimization.fixStack",
+ "org.jetbrains.kotlin.codegen.optimization.nullCheck",
+ "org.jetbrains.kotlin.codegen.optimization.transformer",
+ "org.jetbrains.kotlin.codegen.pseudoInsns",
+ "org.jetbrains.kotlin.codegen.range",
+ "org.jetbrains.kotlin.codegen.range.comparison",
+ "org.jetbrains.kotlin.codegen.range.forLoop",
+ "org.jetbrains.kotlin.codegen.range.inExpression",
+ "org.jetbrains.kotlin.codegen.serialization",
+ "org.jetbrains.kotlin.codegen.signature",
+ "org.jetbrains.kotlin.codegen.state",
+ "org.jetbrains.kotlin.codegen.when",
+ "org.jetbrains.kotlin.com.google.common.base",
+ "org.jetbrains.kotlin.com.google.common.collect",
+ "org.jetbrains.kotlin.com.google.common.graph",
+ "org.jetbrains.kotlin.com.google.common.hash",
+ "org.jetbrains.kotlin.com.google.common.math",
+ "org.jetbrains.kotlin.com.google.common.primitives",
+ "org.jetbrains.kotlin.com.google.common.util.concurrent",
+ "org.jetbrains.kotlin.com.google.gwt.dev.js",
+ "org.jetbrains.kotlin.com.google.gwt.dev.js.parserExceptions",
+ "org.jetbrains.kotlin.com.google.gwt.dev.js.rhino",
+ "org.jetbrains.kotlin.com.intellij",
+ "org.jetbrains.kotlin.com.intellij.codeInsight",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.completion.scope",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.daemon.impl.analysis",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.folding",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.folding.impl",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.javadoc",
+ "org.jetbrains.kotlin.com.intellij.codeInsight.runner",
+ "org.jetbrains.kotlin.com.intellij.codeWithMe",
+ "org.jetbrains.kotlin.com.intellij.concurrency",
+ "org.jetbrains.kotlin.com.intellij.core",
+ "org.jetbrains.kotlin.com.intellij.diagnostic",
+ "org.jetbrains.kotlin.com.intellij.extapi.psi",
+ "org.jetbrains.kotlin.com.intellij.formatting",
+ "org.jetbrains.kotlin.com.intellij.icons",
+ "org.jetbrains.kotlin.com.intellij.ide",
+ "org.jetbrains.kotlin.com.intellij.ide.highlighter",
+ "org.jetbrains.kotlin.com.intellij.ide.plugins",
+ "org.jetbrains.kotlin.com.intellij.ide.util",
+ "org.jetbrains.kotlin.com.intellij.injected.editor",
+ "org.jetbrains.kotlin.com.intellij.jna",
+ "org.jetbrains.kotlin.com.intellij.lang",
+ "org.jetbrains.kotlin.com.intellij.lang.folding",
+ "org.jetbrains.kotlin.com.intellij.lang.impl",
+ "org.jetbrains.kotlin.com.intellij.lang.injection",
+ "org.jetbrains.kotlin.com.intellij.lang.java",
+ "org.jetbrains.kotlin.com.intellij.lang.java.beans",
+ "org.jetbrains.kotlin.com.intellij.lang.java.lexer",
+ "org.jetbrains.kotlin.com.intellij.lang.java.parser",
+ "org.jetbrains.kotlin.com.intellij.lang.jvm",
+ "org.jetbrains.kotlin.com.intellij.lang.jvm.annotation",
+ "org.jetbrains.kotlin.com.intellij.lang.jvm.facade",
+ "org.jetbrains.kotlin.com.intellij.lang.jvm.types",
+ "org.jetbrains.kotlin.com.intellij.lexer",
+ "org.jetbrains.kotlin.com.intellij.mock",
+ "org.jetbrains.kotlin.com.intellij.model",
+ "org.jetbrains.kotlin.com.intellij.model.psi",
+ "org.jetbrains.kotlin.com.intellij.navigation",
+ "org.jetbrains.kotlin.com.intellij.openapi",
+ "org.jetbrains.kotlin.com.intellij.openapi.application",
+ "org.jetbrains.kotlin.com.intellij.openapi.application.ex",
+ "org.jetbrains.kotlin.com.intellij.openapi.application.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.command",
+ "org.jetbrains.kotlin.com.intellij.openapi.command.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.command.undo",
+ "org.jetbrains.kotlin.com.intellij.openapi.components",
+ "org.jetbrains.kotlin.com.intellij.openapi.diagnostic",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.actionSystem",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.colors",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.event",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.ex",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.impl.event",
+ "org.jetbrains.kotlin.com.intellij.openapi.editor.markup",
+ "org.jetbrains.kotlin.com.intellij.openapi.extensions",
+ "org.jetbrains.kotlin.com.intellij.openapi.extensions.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.fileEditor",
+ "org.jetbrains.kotlin.com.intellij.openapi.fileEditor.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.fileTypes",
+ "org.jetbrains.kotlin.com.intellij.openapi.module",
+ "org.jetbrains.kotlin.com.intellij.openapi.progress",
+ "org.jetbrains.kotlin.com.intellij.openapi.progress.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.progress.util",
+ "org.jetbrains.kotlin.com.intellij.openapi.project",
+ "org.jetbrains.kotlin.com.intellij.openapi.projectRoots",
+ "org.jetbrains.kotlin.com.intellij.openapi.roots",
+ "org.jetbrains.kotlin.com.intellij.openapi.roots.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.ui",
+ "org.jetbrains.kotlin.com.intellij.openapi.util",
+ "org.jetbrains.kotlin.com.intellij.openapi.util.io",
+ "org.jetbrains.kotlin.com.intellij.openapi.util.io.win32",
+ "org.jetbrains.kotlin.com.intellij.openapi.util.objectTree",
+ "org.jetbrains.kotlin.com.intellij.openapi.util.registry",
+ "org.jetbrains.kotlin.com.intellij.openapi.util.text",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.encoding",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.ex",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.local",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.newvfs.events",
+ "org.jetbrains.kotlin.com.intellij.openapi.vfs.pointers",
+ "org.jetbrains.kotlin.com.intellij.openapi.wm.ex",
+ "org.jetbrains.kotlin.com.intellij.patterns",
+ "org.jetbrains.kotlin.com.intellij.patterns.compiler",
+ "org.jetbrains.kotlin.com.intellij.pom",
+ "org.jetbrains.kotlin.com.intellij.pom.event",
+ "org.jetbrains.kotlin.com.intellij.pom.impl",
+ "org.jetbrains.kotlin.com.intellij.pom.java",
+ "org.jetbrains.kotlin.com.intellij.pom.tree",
+ "org.jetbrains.kotlin.com.intellij.pom.tree.events",
+ "org.jetbrains.kotlin.com.intellij.pom.tree.events.impl",
+ "org.jetbrains.kotlin.com.intellij.psi",
+ "org.jetbrains.kotlin.com.intellij.psi.augment",
+ "org.jetbrains.kotlin.com.intellij.psi.codeStyle",
+ "org.jetbrains.kotlin.com.intellij.psi.compiled",
+ "org.jetbrains.kotlin.com.intellij.psi.controlFlow",
+ "org.jetbrains.kotlin.com.intellij.psi.css",
+ "org.jetbrains.kotlin.com.intellij.psi.filters",
+ "org.jetbrains.kotlin.com.intellij.psi.filters.classes",
+ "org.jetbrains.kotlin.com.intellij.psi.filters.element",
+ "org.jetbrains.kotlin.com.intellij.psi.filters.position",
+ "org.jetbrains.kotlin.com.intellij.psi.impl",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.cache",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.compiled",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.file",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.file.impl",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.impl",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.java.stubs.index",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.light",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.meta",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.search",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.smartPointers",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.codeStyle",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.javadoc",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.graphInference.constraints",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.manipulators",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.resolve.reference.impl.providers",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.injected",
+ "org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.java",
+ "org.jetbrains.kotlin.com.intellij.psi.infos",
+ "org.jetbrains.kotlin.com.intellij.psi.javadoc",
+ "org.jetbrains.kotlin.com.intellij.psi.meta",
+ "org.jetbrains.kotlin.com.intellij.psi.presentation.java",
+ "org.jetbrains.kotlin.com.intellij.psi.scope",
+ "org.jetbrains.kotlin.com.intellij.psi.scope.conflictResolvers",
+ "org.jetbrains.kotlin.com.intellij.psi.scope.processor",
+ "org.jetbrains.kotlin.com.intellij.psi.scope.util",
+ "org.jetbrains.kotlin.com.intellij.psi.search",
+ "org.jetbrains.kotlin.com.intellij.psi.search.searches",
+ "org.jetbrains.kotlin.com.intellij.psi.stub",
+ "org.jetbrains.kotlin.com.intellij.psi.stubs",
+ "org.jetbrains.kotlin.com.intellij.psi.targets",
+ "org.jetbrains.kotlin.com.intellij.psi.templateLanguages",
+ "org.jetbrains.kotlin.com.intellij.psi.text",
+ "org.jetbrains.kotlin.com.intellij.psi.tree",
+ "org.jetbrains.kotlin.com.intellij.psi.tree.java",
+ "org.jetbrains.kotlin.com.intellij.psi.util",
+ "org.jetbrains.kotlin.com.intellij.reference",
+ "org.jetbrains.kotlin.com.intellij.serialization",
+ "org.jetbrains.kotlin.com.intellij.serviceContainer",
+ "org.jetbrains.kotlin.com.intellij.testFramework",
+ "org.jetbrains.kotlin.com.intellij.ui",
+ "org.jetbrains.kotlin.com.intellij.ui.icons",
+ "org.jetbrains.kotlin.com.intellij.util",
+ "org.jetbrains.kotlin.com.intellij.util.cls",
+ "org.jetbrains.kotlin.com.intellij.util.codeInsight",
+ "org.jetbrains.kotlin.com.intellij.util.concurrency",
+ "org.jetbrains.kotlin.com.intellij.util.containers",
+ "org.jetbrains.kotlin.com.intellij.util.containers.hash",
+ "org.jetbrains.kotlin.com.intellij.util.diff",
+ "org.jetbrains.kotlin.com.intellij.util.exception",
+ "org.jetbrains.kotlin.com.intellij.util.execution",
+ "org.jetbrains.kotlin.com.intellij.util.graph",
+ "org.jetbrains.kotlin.com.intellij.util.graph.impl",
+ "org.jetbrains.kotlin.com.intellij.util.indexing",
+ "org.jetbrains.kotlin.com.intellij.util.io",
+ "org.jetbrains.kotlin.com.intellij.util.io.keyStorage",
+ "org.jetbrains.kotlin.com.intellij.util.keyFMap",
+ "org.jetbrains.kotlin.com.intellij.util.lang",
+ "org.jetbrains.kotlin.com.intellij.util.loader",
+ "org.jetbrains.kotlin.com.intellij.util.messages",
+ "org.jetbrains.kotlin.com.intellij.util.messages.impl",
+ "org.jetbrains.kotlin.com.intellij.util.pico",
+ "org.jetbrains.kotlin.com.intellij.util.ref",
+ "org.jetbrains.kotlin.com.intellij.util.text",
+ "org.jetbrains.kotlin.com.intellij.util.xmlb",
+ "org.jetbrains.kotlin.com.intellij.util.xmlb.annotations",
+ "org.jetbrains.kotlin.com.intellij.xml.util",
+ "org.jetbrains.kotlin.compiler.plugin",
+ "org.jetbrains.kotlin.compilerRunner",
+ "org.jetbrains.kotlin.config",
+ "org.jetbrains.kotlin.container",
+ "org.jetbrains.kotlin.context",
+ "org.jetbrains.kotlin.contracts",
+ "org.jetbrains.kotlin.contracts.description",
+ "org.jetbrains.kotlin.contracts.description.expressions",
+ "org.jetbrains.kotlin.contracts.interpretation",
+ "org.jetbrains.kotlin.contracts.model",
+ "org.jetbrains.kotlin.contracts.model.functors",
+ "org.jetbrains.kotlin.contracts.model.structure",
+ "org.jetbrains.kotlin.contracts.model.visitors",
+ "org.jetbrains.kotlin.contracts.parsing",
+ "org.jetbrains.kotlin.contracts.parsing.effects",
+ "org.jetbrains.kotlin.coroutines",
+ "org.jetbrains.kotlin.descriptors",
+ "org.jetbrains.kotlin.descriptors.annotations",
+ "org.jetbrains.kotlin.descriptors.deserialization",
+ "org.jetbrains.kotlin.descriptors.impl",
+ "org.jetbrains.kotlin.descriptors.java",
+ "org.jetbrains.kotlin.descriptors.konan",
+ "org.jetbrains.kotlin.descriptors.konan.impl",
+ "org.jetbrains.kotlin.descriptors.runtime.components",
+ "org.jetbrains.kotlin.descriptors.runtime.structure",
+ "org.jetbrains.kotlin.descriptors.synthetic",
+ "org.jetbrains.kotlin.diagnostics",
+ "org.jetbrains.kotlin.diagnostics.rendering",
+ "org.jetbrains.kotlin.extensions",
+ "org.jetbrains.kotlin.extensions.internal",
+ "org.jetbrains.kotlin.fileClasses",
+ "org.jetbrains.kotlin.fir",
+ "org.jetbrains.kotlin.fir.analysis",
+ "org.jetbrains.kotlin.fir.analysis.cfa",
+ "org.jetbrains.kotlin.fir.analysis.checkers",
+ "org.jetbrains.kotlin.fir.analysis.checkers.cfa",
+ "org.jetbrains.kotlin.fir.analysis.checkers.context",
+ "org.jetbrains.kotlin.fir.analysis.checkers.declaration",
+ "org.jetbrains.kotlin.fir.analysis.checkers.expression",
+ "org.jetbrains.kotlin.fir.analysis.checkers.extended",
+ "org.jetbrains.kotlin.fir.analysis.collectors",
+ "org.jetbrains.kotlin.fir.analysis.collectors.components",
+ "org.jetbrains.kotlin.fir.analysis.diagnostics",
+ "org.jetbrains.kotlin.fir.analysis.extensions",
+ "org.jetbrains.kotlin.fir.backend",
+ "org.jetbrains.kotlin.fir.backend.evaluate",
+ "org.jetbrains.kotlin.fir.backend.generators",
+ "org.jetbrains.kotlin.fir.backend.jvm",
+ "org.jetbrains.kotlin.fir.builder",
+ "org.jetbrains.kotlin.fir.caches",
+ "org.jetbrains.kotlin.fir.checkers",
+ "org.jetbrains.kotlin.fir.contracts",
+ "org.jetbrains.kotlin.fir.contracts.builder",
+ "org.jetbrains.kotlin.fir.contracts.description",
+ "org.jetbrains.kotlin.fir.contracts.impl",
+ "org.jetbrains.kotlin.fir.declarations",
+ "org.jetbrains.kotlin.fir.declarations.builder",
+ "org.jetbrains.kotlin.fir.declarations.impl",
+ "org.jetbrains.kotlin.fir.declarations.synthetic",
+ "org.jetbrains.kotlin.fir.descriptors",
+ "org.jetbrains.kotlin.fir.deserialization",
+ "org.jetbrains.kotlin.fir.diagnostics",
+ "org.jetbrains.kotlin.fir.expressions",
+ "org.jetbrains.kotlin.fir.expressions.builder",
+ "org.jetbrains.kotlin.fir.expressions.impl",
+ "org.jetbrains.kotlin.fir.extensions",
+ "org.jetbrains.kotlin.fir.extensions.predicate",
+ "org.jetbrains.kotlin.fir.impl",
+ "org.jetbrains.kotlin.fir.java",
+ "org.jetbrains.kotlin.fir.java.declarations",
+ "org.jetbrains.kotlin.fir.java.deserialization",
+ "org.jetbrains.kotlin.fir.java.enhancement",
+ "org.jetbrains.kotlin.fir.java.scopes",
+ "org.jetbrains.kotlin.fir.lazy",
+ "org.jetbrains.kotlin.fir.lightTree",
+ "org.jetbrains.kotlin.fir.lightTree.converter",
+ "org.jetbrains.kotlin.fir.lightTree.fir",
+ "org.jetbrains.kotlin.fir.lightTree.fir.modifier",
+ "org.jetbrains.kotlin.fir.references",
+ "org.jetbrains.kotlin.fir.references.builder",
+ "org.jetbrains.kotlin.fir.references.impl",
+ "org.jetbrains.kotlin.fir.resolve",
+ "org.jetbrains.kotlin.fir.resolve.calls",
+ "org.jetbrains.kotlin.fir.resolve.calls.jvm",
+ "org.jetbrains.kotlin.fir.resolve.calls.tower",
+ "org.jetbrains.kotlin.fir.resolve.dfa",
+ "org.jetbrains.kotlin.fir.resolve.dfa.cfg",
+ "org.jetbrains.kotlin.fir.resolve.dfa.contracts",
+ "org.jetbrains.kotlin.fir.resolve.diagnostics",
+ "org.jetbrains.kotlin.fir.resolve.inference",
+ "org.jetbrains.kotlin.fir.resolve.inference.model",
+ "org.jetbrains.kotlin.fir.resolve.providers",
+ "org.jetbrains.kotlin.fir.resolve.providers.impl",
+ "org.jetbrains.kotlin.fir.resolve.scopes",
+ "org.jetbrains.kotlin.fir.resolve.substitution",
+ "org.jetbrains.kotlin.fir.resolve.transformers",
+ "org.jetbrains.kotlin.fir.resolve.transformers.body.resolve",
+ "org.jetbrains.kotlin.fir.resolve.transformers.contracts",
+ "org.jetbrains.kotlin.fir.resolve.transformers.plugin",
+ "org.jetbrains.kotlin.fir.scopes",
+ "org.jetbrains.kotlin.fir.scopes.impl",
+ "org.jetbrains.kotlin.fir.scopes.jvm",
+ "org.jetbrains.kotlin.fir.serialization",
+ "org.jetbrains.kotlin.fir.serialization.constant",
+ "org.jetbrains.kotlin.fir.session",
+ "org.jetbrains.kotlin.fir.signaturer",
+ "org.jetbrains.kotlin.fir.symbols",
+ "org.jetbrains.kotlin.fir.symbols.impl",
+ "org.jetbrains.kotlin.fir.types",
+ "org.jetbrains.kotlin.fir.types.builder",
+ "org.jetbrains.kotlin.fir.types.impl",
+ "org.jetbrains.kotlin.fir.types.jvm",
+ "org.jetbrains.kotlin.fir.utils",
+ "org.jetbrains.kotlin.fir.visitors",
+ "org.jetbrains.kotlin.frontend.di",
+ "org.jetbrains.kotlin.frontend.java.di",
+ "org.jetbrains.kotlin.frontend.js.di",
+ "org.jetbrains.kotlin.idea",
+ "org.jetbrains.kotlin.incremental",
+ "org.jetbrains.kotlin.incremental.components",
+ "org.jetbrains.kotlin.incremental.js",
+ "org.jetbrains.kotlin.incremental.multiproject",
+ "org.jetbrains.kotlin.incremental.parsing",
+ "org.jetbrains.kotlin.incremental.snapshots",
+ "org.jetbrains.kotlin.incremental.storage",
+ "org.jetbrains.kotlin.incremental.util",
+ "org.jetbrains.kotlin.inline",
+ "org.jetbrains.kotlin.ir",
+ "org.jetbrains.kotlin.ir.backend.js",
+ "org.jetbrains.kotlin.ir.backend.js.export",
+ "org.jetbrains.kotlin.ir.backend.js.ir",
+ "org.jetbrains.kotlin.ir.backend.js.lower",
+ "org.jetbrains.kotlin.ir.backend.js.lower.calls",
+ "org.jetbrains.kotlin.ir.backend.js.lower.cleanup",
+ "org.jetbrains.kotlin.ir.backend.js.lower.coroutines",
+ "org.jetbrains.kotlin.ir.backend.js.lower.inline",
+ "org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir",
+ "org.jetbrains.kotlin.ir.backend.js.transformers.irToJs",
+ "org.jetbrains.kotlin.ir.backend.js.utils",
+ "org.jetbrains.kotlin.ir.backend.jvm",
+ "org.jetbrains.kotlin.ir.backend.jvm.serialization",
+ "org.jetbrains.kotlin.ir.builders",
+ "org.jetbrains.kotlin.ir.builders.declarations",
+ "org.jetbrains.kotlin.ir.declarations",
+ "org.jetbrains.kotlin.ir.declarations.impl",
+ "org.jetbrains.kotlin.ir.declarations.lazy",
+ "org.jetbrains.kotlin.ir.declarations.persistent",
+ "org.jetbrains.kotlin.ir.declarations.persistent.carriers",
+ "org.jetbrains.kotlin.ir.descriptors",
+ "org.jetbrains.kotlin.ir.expressions",
+ "org.jetbrains.kotlin.ir.expressions.impl",
+ "org.jetbrains.kotlin.ir.expressions.persistent",
+ "org.jetbrains.kotlin.ir.interpreter",
+ "org.jetbrains.kotlin.ir.interpreter.builtins",
+ "org.jetbrains.kotlin.ir.interpreter.exceptions",
+ "org.jetbrains.kotlin.ir.interpreter.intrinsics",
+ "org.jetbrains.kotlin.ir.interpreter.stack",
+ "org.jetbrains.kotlin.ir.interpreter.state",
+ "org.jetbrains.kotlin.ir.linkage",
+ "org.jetbrains.kotlin.ir.overrides",
+ "org.jetbrains.kotlin.ir.symbols",
+ "org.jetbrains.kotlin.ir.symbols.impl",
+ "org.jetbrains.kotlin.ir.types",
+ "org.jetbrains.kotlin.ir.types.impl",
+ "org.jetbrains.kotlin.ir.util",
+ "org.jetbrains.kotlin.ir.visitors",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.booleans",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.bytes",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.chars",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.doubles",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.floats",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.ints",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.longs",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.objects",
+ "org.jetbrains.kotlin.it.unimi.dsi.fastutil.shorts",
+ "org.jetbrains.kotlin.javac",
+ "org.jetbrains.kotlin.javac.components",
+ "org.jetbrains.kotlin.javac.resolve",
+ "org.jetbrains.kotlin.javac.wrappers.symbols",
+ "org.jetbrains.kotlin.javac.wrappers.trees",
+ "org.jetbrains.kotlin.javax.inject",
+ "org.jetbrains.kotlin.js",
+ "org.jetbrains.kotlin.js.analyze",
+ "org.jetbrains.kotlin.js.analyzer",
+ "org.jetbrains.kotlin.js.backend",
+ "org.jetbrains.kotlin.js.backend.ast",
+ "org.jetbrains.kotlin.js.backend.ast.metadata",
+ "org.jetbrains.kotlin.js.common",
+ "org.jetbrains.kotlin.js.config",
+ "org.jetbrains.kotlin.js.coroutine",
+ "org.jetbrains.kotlin.js.dce",
+ "org.jetbrains.kotlin.js.descriptorUtils",
+ "org.jetbrains.kotlin.js.facade",
+ "org.jetbrains.kotlin.js.facade.exceptions",
+ "org.jetbrains.kotlin.js.inline",
+ "org.jetbrains.kotlin.js.inline.clean",
+ "org.jetbrains.kotlin.js.inline.context",
+ "org.jetbrains.kotlin.js.inline.util",
+ "org.jetbrains.kotlin.js.inline.util.collectors",
+ "org.jetbrains.kotlin.js.inline.util.rewriters",
+ "org.jetbrains.kotlin.js.naming",
+ "org.jetbrains.kotlin.js.parser",
+ "org.jetbrains.kotlin.js.parser.sourcemaps",
+ "org.jetbrains.kotlin.js.patterns",
+ "org.jetbrains.kotlin.js.patterns.typePredicates",
+ "org.jetbrains.kotlin.js.resolve",
+ "org.jetbrains.kotlin.js.resolve.diagnostics",
+ "org.jetbrains.kotlin.js.sourceMap",
+ "org.jetbrains.kotlin.js.translate.callTranslator",
+ "org.jetbrains.kotlin.js.translate.context",
+ "org.jetbrains.kotlin.js.translate.context.generator",
+ "org.jetbrains.kotlin.js.translate.declaration",
+ "org.jetbrains.kotlin.js.translate.expression",
+ "org.jetbrains.kotlin.js.translate.extensions",
+ "org.jetbrains.kotlin.js.translate.general",
+ "org.jetbrains.kotlin.js.translate.initializer",
+ "org.jetbrains.kotlin.js.translate.intrinsic",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions.basic",
+ "org.jetbrains.kotlin.js.translate.intrinsic.functions.factories",
+ "org.jetbrains.kotlin.js.translate.intrinsic.objects",
+ "org.jetbrains.kotlin.js.translate.intrinsic.operation",
+ "org.jetbrains.kotlin.js.translate.operation",
+ "org.jetbrains.kotlin.js.translate.reference",
+ "org.jetbrains.kotlin.js.translate.test",
+ "org.jetbrains.kotlin.js.translate.utils",
+ "org.jetbrains.kotlin.js.translate.utils.jsAstUtils",
+ "org.jetbrains.kotlin.js.translate.utils.mutator",
+ "org.jetbrains.kotlin.js.util",
+ "org.jetbrains.kotlin.kapt3.diagnostic",
+ "org.jetbrains.kotlin.kdoc.lexer",
+ "org.jetbrains.kotlin.kdoc.parser",
+ "org.jetbrains.kotlin.kdoc.psi.api",
+ "org.jetbrains.kotlin.kdoc.psi.impl",
+ "org.jetbrains.kotlin.konan",
+ "org.jetbrains.kotlin.konan.file",
+ "org.jetbrains.kotlin.konan.library",
+ "org.jetbrains.kotlin.konan.properties",
+ "org.jetbrains.kotlin.konan.target",
+ "org.jetbrains.kotlin.konan.util",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableList",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.immutableMap",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedMap",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable.implementations.persistentOrderedSet",
+ "org.jetbrains.kotlin.kotlinx.collections.immutable.internal",
+ "org.jetbrains.kotlin.lexer",
+ "org.jetbrains.kotlin.library",
+ "org.jetbrains.kotlin.library.impl",
+ "org.jetbrains.kotlin.library.metadata",
+ "org.jetbrains.kotlin.library.resolver",
+ "org.jetbrains.kotlin.library.resolver.impl",
+ "org.jetbrains.kotlin.load.java",
+ "org.jetbrains.kotlin.load.java.components",
+ "org.jetbrains.kotlin.load.java.descriptors",
+ "org.jetbrains.kotlin.load.java.lazy",
+ "org.jetbrains.kotlin.load.java.lazy.descriptors",
+ "org.jetbrains.kotlin.load.java.lazy.types",
+ "org.jetbrains.kotlin.load.java.sam",
+ "org.jetbrains.kotlin.load.java.sources",
+ "org.jetbrains.kotlin.load.java.structure",
+ "org.jetbrains.kotlin.load.java.structure.impl",
+ "org.jetbrains.kotlin.load.java.structure.impl.classFiles",
+ "org.jetbrains.kotlin.load.java.typeEnhancement",
+ "org.jetbrains.kotlin.load.kotlin",
+ "org.jetbrains.kotlin.load.kotlin.header",
+ "org.jetbrains.kotlin.load.kotlin.incremental",
+ "org.jetbrains.kotlin.load.kotlin.incremental.components",
+ "org.jetbrains.kotlin.metadata",
+ "org.jetbrains.kotlin.metadata.builtins",
+ "org.jetbrains.kotlin.metadata.deserialization",
+ "org.jetbrains.kotlin.metadata.java",
+ "org.jetbrains.kotlin.metadata.js",
+ "org.jetbrains.kotlin.metadata.jvm",
+ "org.jetbrains.kotlin.metadata.jvm.deserialization",
+ "org.jetbrains.kotlin.metadata.jvm.serialization",
+ "org.jetbrains.kotlin.metadata.serialization",
+ "org.jetbrains.kotlin.modules",
+ "org.jetbrains.kotlin.name",
+ "org.jetbrains.kotlin.net.jpountz.lz4",
+ "org.jetbrains.kotlin.net.jpountz.util",
+ "org.jetbrains.kotlin.net.jpountz.xxhash",
+ "org.jetbrains.kotlin.one.util.streamex",
+ "org.jetbrains.kotlin.org.apache.log4j",
+ "org.jetbrains.kotlin.org.fusesource.hawtjni.runtime",
+ "org.jetbrains.kotlin.org.fusesource.jansi",
+ "org.jetbrains.kotlin.org.fusesource.jansi.internal",
+ "org.jetbrains.kotlin.org.jdom",
+ "org.jetbrains.kotlin.org.jdom.filter",
+ "org.jetbrains.kotlin.org.jdom.filter2",
+ "org.jetbrains.kotlin.org.jdom.internal",
+ "org.jetbrains.kotlin.org.jdom.output",
+ "org.jetbrains.kotlin.org.jdom.output.support",
+ "org.jetbrains.kotlin.org.jline.keymap",
+ "org.jetbrains.kotlin.org.jline.reader",
+ "org.jetbrains.kotlin.org.jline.reader.impl",
+ "org.jetbrains.kotlin.org.jline.reader.impl.history",
+ "org.jetbrains.kotlin.org.jline.terminal",
+ "org.jetbrains.kotlin.org.jline.terminal.impl",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jansi",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.freebsd",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.linux",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.osx",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jansi.win",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna.freebsd",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna.linux",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna.osx",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna.solaris",
+ "org.jetbrains.kotlin.org.jline.terminal.impl.jna.win",
+ "org.jetbrains.kotlin.org.jline.terminal.spi",
+ "org.jetbrains.kotlin.org.jline.utils",
+ "org.jetbrains.kotlin.org.picocontainer",
+ "org.jetbrains.kotlin.org.picocontainer.defaults",
+ "org.jetbrains.kotlin.parsing",
+ "org.jetbrains.kotlin.platform",
+ "org.jetbrains.kotlin.platform.js",
+ "org.jetbrains.kotlin.platform.jvm",
+ "org.jetbrains.kotlin.platform.konan",
+ "org.jetbrains.kotlin.progress",
+ "org.jetbrains.kotlin.progress.experimental",
+ "org.jetbrains.kotlin.protobuf",
+ "org.jetbrains.kotlin.psi",
+ "org.jetbrains.kotlin.psi.addRemoveModifier",
+ "org.jetbrains.kotlin.psi.codeFragmentUtil",
+ "org.jetbrains.kotlin.psi.debugText",
+ "org.jetbrains.kotlin.psi.findDocComment",
+ "org.jetbrains.kotlin.psi.psiUtil",
+ "org.jetbrains.kotlin.psi.stubs",
+ "org.jetbrains.kotlin.psi.stubs.elements",
+ "org.jetbrains.kotlin.psi.stubs.impl",
+ "org.jetbrains.kotlin.psi.synthetics",
+ "org.jetbrains.kotlin.psi.typeRefHelpers",
+ "org.jetbrains.kotlin.psi2ir",
+ "org.jetbrains.kotlin.psi2ir.generators",
+ "org.jetbrains.kotlin.psi2ir.intermediate",
+ "org.jetbrains.kotlin.psi2ir.transformations",
+ "org.jetbrains.kotlin.renderer",
+ "org.jetbrains.kotlin.resolve",
+ "org.jetbrains.kotlin.resolve.annotations",
+ "org.jetbrains.kotlin.resolve.bindingContextUtil",
+ "org.jetbrains.kotlin.resolve.calls",
+ "org.jetbrains.kotlin.resolve.calls.callResolverUtil",
+ "org.jetbrains.kotlin.resolve.calls.callUtil",
+ "org.jetbrains.kotlin.resolve.calls.checkers",
+ "org.jetbrains.kotlin.resolve.calls.components",
+ "org.jetbrains.kotlin.resolve.calls.context",
+ "org.jetbrains.kotlin.resolve.calls.inference",
+ "org.jetbrains.kotlin.resolve.calls.inference.components",
+ "org.jetbrains.kotlin.resolve.calls.inference.constraintPosition",
+ "org.jetbrains.kotlin.resolve.calls.inference.model",
+ "org.jetbrains.kotlin.resolve.calls.model",
+ "org.jetbrains.kotlin.resolve.calls.resolvedCallUtil",
+ "org.jetbrains.kotlin.resolve.calls.results",
+ "org.jetbrains.kotlin.resolve.calls.smartcasts",
+ "org.jetbrains.kotlin.resolve.calls.tasks",
+ "org.jetbrains.kotlin.resolve.calls.tower",
+ "org.jetbrains.kotlin.resolve.calls.util",
+ "org.jetbrains.kotlin.resolve.checkers",
+ "org.jetbrains.kotlin.resolve.constants",
+ "org.jetbrains.kotlin.resolve.constants.evaluate",
+ "org.jetbrains.kotlin.resolve.deprecation",
+ "org.jetbrains.kotlin.resolve.descriptorUtil",
+ "org.jetbrains.kotlin.resolve.diagnostics",
+ "org.jetbrains.kotlin.resolve.extensions",
+ "org.jetbrains.kotlin.resolve.inline",
+ "org.jetbrains.kotlin.resolve.jvm",
+ "org.jetbrains.kotlin.resolve.jvm.annotations",
+ "org.jetbrains.kotlin.resolve.jvm.checkers",
+ "org.jetbrains.kotlin.resolve.jvm.diagnostics",
+ "org.jetbrains.kotlin.resolve.jvm.extensions",
+ "org.jetbrains.kotlin.resolve.jvm.jvmSignature",
+ "org.jetbrains.kotlin.resolve.jvm.kotlinSignature",
+ "org.jetbrains.kotlin.resolve.jvm.modules",
+ "org.jetbrains.kotlin.resolve.jvm.multiplatform",
+ "org.jetbrains.kotlin.resolve.jvm.platform",
+ "org.jetbrains.kotlin.resolve.konan.diagnostics",
+ "org.jetbrains.kotlin.resolve.konan.platform",
+ "org.jetbrains.kotlin.resolve.lazy",
+ "org.jetbrains.kotlin.resolve.lazy.data",
+ "org.jetbrains.kotlin.resolve.lazy.declarations",
+ "org.jetbrains.kotlin.resolve.lazy.descriptors",
+ "org.jetbrains.kotlin.resolve.multiplatform",
+ "org.jetbrains.kotlin.resolve.repl",
+ "org.jetbrains.kotlin.resolve.sam",
+ "org.jetbrains.kotlin.resolve.scopes",
+ "org.jetbrains.kotlin.resolve.scopes.receivers",
+ "org.jetbrains.kotlin.resolve.scopes.synthetic",
+ "org.jetbrains.kotlin.resolve.scopes.utils",
+ "org.jetbrains.kotlin.resolve.source",
+ "org.jetbrains.kotlin.resolve.typeBinding",
+ "org.jetbrains.kotlin.serialization",
+ "org.jetbrains.kotlin.serialization.builtins",
+ "org.jetbrains.kotlin.serialization.deserialization",
+ "org.jetbrains.kotlin.serialization.deserialization.builtins",
+ "org.jetbrains.kotlin.serialization.deserialization.descriptors",
+ "org.jetbrains.kotlin.serialization.js",
+ "org.jetbrains.kotlin.serialization.js.ast",
+ "org.jetbrains.kotlin.serialization.konan",
+ "org.jetbrains.kotlin.serialization.konan.impl",
+ "org.jetbrains.kotlin.storage",
+ "org.jetbrains.kotlin.synthetic",
+ "org.jetbrains.kotlin.type",
+ "org.jetbrains.kotlin.types",
+ "org.jetbrains.kotlin.types.checker",
+ "org.jetbrains.kotlin.types.error",
+ "org.jetbrains.kotlin.types.expressions",
+ "org.jetbrains.kotlin.types.expressions.typeInfoFactory",
+ "org.jetbrains.kotlin.types.expressions.unqualifiedSuper",
+ "org.jetbrains.kotlin.types.model",
+ "org.jetbrains.kotlin.types.refinement",
+ "org.jetbrains.kotlin.types.typeUtil",
+ "org.jetbrains.kotlin.types.typesApproximation",
+ "org.jetbrains.kotlin.util",
+ "org.jetbrains.kotlin.util.capitalizeDecapitalize",
+ "org.jetbrains.kotlin.util.collectionUtils",
+ "org.jetbrains.kotlin.util.javaslang",
+ "org.jetbrains.kotlin.util.slicedMap",
+ "org.jetbrains.kotlin.utils",
+ "org.jetbrains.kotlin.utils.addToStdlib",
+ "org.jetbrains.kotlin.utils.concurrent.block",
+ "org.jetbrains.kotlin.utils.fileUtils",
+ "org.jetbrains.kotlin.utils.intellij",
+ "org.jetbrains.kotlin.utils.kapt",
+ "org.jetbrains.kotlin.utils.repl",
+ "org.jetbrains.kotlin.utils.strings",
+ "org.jetbrains.kotlin.wasm.ir",
+ "org.jetbrains.kotlin.wasm.ir.convertors",
+ "org.jetbrains.org.objectweb.asm",
+ "org.jetbrains.org.objectweb.asm.commons",
+ "org.jetbrains.org.objectweb.asm.signature",
+ "org.jetbrains.org.objectweb.asm.tree",
+ "org.jetbrains.org.objectweb.asm.tree.analysis",
+ "org.jetbrains.org.objectweb.asm.util"
+ ],
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable": [
+ "org.jetbrains.kotlin.daemon",
+ "org.jetbrains.kotlin.daemon.common",
+ "org.jetbrains.kotlin.daemon.experimental",
+ "org.jetbrains.kotlin.daemon.report",
+ "org.jetbrains.kotlin.daemon.report.experimental"
+ ],
+ "org.jetbrains.kotlin:kotlin-reflect": [
+ "kotlin.reflect.full",
+ "kotlin.reflect.jvm",
+ "kotlin.reflect.jvm.internal",
+ "kotlin.reflect.jvm.internal.calls",
+ "kotlin.reflect.jvm.internal.impl",
+ "kotlin.reflect.jvm.internal.impl.builtins",
+ "kotlin.reflect.jvm.internal.impl.builtins.functions",
+ "kotlin.reflect.jvm.internal.impl.builtins.jvm",
+ "kotlin.reflect.jvm.internal.impl.descriptors",
+ "kotlin.reflect.jvm.internal.impl.descriptors.annotations",
+ "kotlin.reflect.jvm.internal.impl.descriptors.deserialization",
+ "kotlin.reflect.jvm.internal.impl.descriptors.impl",
+ "kotlin.reflect.jvm.internal.impl.descriptors.java",
+ "kotlin.reflect.jvm.internal.impl.descriptors.runtime.components",
+ "kotlin.reflect.jvm.internal.impl.descriptors.runtime.structure",
+ "kotlin.reflect.jvm.internal.impl.incremental",
+ "kotlin.reflect.jvm.internal.impl.incremental.components",
+ "kotlin.reflect.jvm.internal.impl.load.java",
+ "kotlin.reflect.jvm.internal.impl.load.java.components",
+ "kotlin.reflect.jvm.internal.impl.load.java.descriptors",
+ "kotlin.reflect.jvm.internal.impl.load.java.lazy",
+ "kotlin.reflect.jvm.internal.impl.load.java.lazy.descriptors",
+ "kotlin.reflect.jvm.internal.impl.load.java.lazy.types",
+ "kotlin.reflect.jvm.internal.impl.load.java.sources",
+ "kotlin.reflect.jvm.internal.impl.load.java.structure",
+ "kotlin.reflect.jvm.internal.impl.load.java.typeEnhancement",
+ "kotlin.reflect.jvm.internal.impl.load.kotlin",
+ "kotlin.reflect.jvm.internal.impl.load.kotlin.header",
+ "kotlin.reflect.jvm.internal.impl.metadata",
+ "kotlin.reflect.jvm.internal.impl.metadata.builtins",
+ "kotlin.reflect.jvm.internal.impl.metadata.deserialization",
+ "kotlin.reflect.jvm.internal.impl.metadata.jvm",
+ "kotlin.reflect.jvm.internal.impl.metadata.jvm.deserialization",
+ "kotlin.reflect.jvm.internal.impl.name",
+ "kotlin.reflect.jvm.internal.impl.platform",
+ "kotlin.reflect.jvm.internal.impl.protobuf",
+ "kotlin.reflect.jvm.internal.impl.renderer",
+ "kotlin.reflect.jvm.internal.impl.resolve",
+ "kotlin.reflect.jvm.internal.impl.resolve.calls.inference",
+ "kotlin.reflect.jvm.internal.impl.resolve.constants",
+ "kotlin.reflect.jvm.internal.impl.resolve.deprecation",
+ "kotlin.reflect.jvm.internal.impl.resolve.descriptorUtil",
+ "kotlin.reflect.jvm.internal.impl.resolve.jvm",
+ "kotlin.reflect.jvm.internal.impl.resolve.sam",
+ "kotlin.reflect.jvm.internal.impl.resolve.scopes",
+ "kotlin.reflect.jvm.internal.impl.resolve.scopes.receivers",
+ "kotlin.reflect.jvm.internal.impl.serialization",
+ "kotlin.reflect.jvm.internal.impl.serialization.deserialization",
+ "kotlin.reflect.jvm.internal.impl.serialization.deserialization.builtins",
+ "kotlin.reflect.jvm.internal.impl.serialization.deserialization.descriptors",
+ "kotlin.reflect.jvm.internal.impl.storage",
+ "kotlin.reflect.jvm.internal.impl.types",
+ "kotlin.reflect.jvm.internal.impl.types.checker",
+ "kotlin.reflect.jvm.internal.impl.types.error",
+ "kotlin.reflect.jvm.internal.impl.types.model",
+ "kotlin.reflect.jvm.internal.impl.types.typeUtil",
+ "kotlin.reflect.jvm.internal.impl.types.typesApproximation",
+ "kotlin.reflect.jvm.internal.impl.util",
+ "kotlin.reflect.jvm.internal.impl.util.capitalizeDecapitalize",
+ "kotlin.reflect.jvm.internal.impl.util.collectionUtils",
+ "kotlin.reflect.jvm.internal.impl.utils",
+ "kotlin.reflect.jvm.internal.pcollections"
+ ],
+ "org.jetbrains.kotlin:kotlin-script-runtime": [
+ "kotlin.script.dependencies",
+ "kotlin.script.experimental.dependencies",
+ "kotlin.script.experimental.location",
+ "kotlin.script.extensions",
+ "kotlin.script.templates",
+ "kotlin.script.templates.standard"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib": [
+ "kotlin",
+ "kotlin.annotation",
+ "kotlin.collections",
+ "kotlin.collections.builders",
+ "kotlin.collections.unsigned",
+ "kotlin.comparisons",
+ "kotlin.concurrent",
+ "kotlin.contracts",
+ "kotlin.coroutines",
+ "kotlin.coroutines.cancellation",
+ "kotlin.coroutines.intrinsics",
+ "kotlin.coroutines.jvm.internal",
+ "kotlin.experimental",
+ "kotlin.internal",
+ "kotlin.io",
+ "kotlin.js",
+ "kotlin.jvm",
+ "kotlin.jvm.functions",
+ "kotlin.jvm.internal",
+ "kotlin.jvm.internal.markers",
+ "kotlin.jvm.internal.unsafe",
+ "kotlin.math",
+ "kotlin.properties",
+ "kotlin.random",
+ "kotlin.ranges",
+ "kotlin.reflect",
+ "kotlin.sequences",
+ "kotlin.system",
+ "kotlin.text",
+ "kotlin.time"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7": [
+ "kotlin.internal.jdk7",
+ "kotlin.io.path",
+ "kotlin.jdk7"
+ ],
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8": [
+ "kotlin.collections.jdk8",
+ "kotlin.internal.jdk8",
+ "kotlin.jvm.jdk8",
+ "kotlin.random.jdk8",
+ "kotlin.streams.jdk8",
+ "kotlin.text.jdk8",
+ "kotlin.time.jdk8"
+ ],
+ "org.jetbrains.kotlin:kotlin-test": [
+ "kotlin.test"
+ ],
+ "org.jetbrains.kotlin:kotlin-test-junit": [
+ "kotlin.test.junit",
+ "kotlin.test.junit.annotations"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android": [
+ "kotlinx.coroutines.android"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm": [
+ "kotlinx.coroutines",
+ "kotlinx.coroutines.channels",
+ "kotlinx.coroutines.debug",
+ "kotlinx.coroutines.debug.internal",
+ "kotlinx.coroutines.flow",
+ "kotlinx.coroutines.flow.internal",
+ "kotlinx.coroutines.internal",
+ "kotlinx.coroutines.intrinsics",
+ "kotlinx.coroutines.scheduling",
+ "kotlinx.coroutines.selects",
+ "kotlinx.coroutines.sync"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava": [
+ "kotlinx.coroutines.guava"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm": [
+ "kotlinx.coroutines.test",
+ "kotlinx.coroutines.test.internal"
+ ],
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm": [
+ "kotlinx.metadata",
+ "kotlinx.metadata.impl",
+ "kotlinx.metadata.impl.extensions",
+ "kotlinx.metadata.internal.metadata",
+ "kotlinx.metadata.internal.metadata.builtins",
+ "kotlinx.metadata.internal.metadata.deserialization",
+ "kotlinx.metadata.internal.metadata.jvm",
+ "kotlinx.metadata.internal.metadata.jvm.deserialization",
+ "kotlinx.metadata.internal.metadata.jvm.serialization",
+ "kotlinx.metadata.internal.metadata.serialization",
+ "kotlinx.metadata.internal.protobuf",
+ "kotlinx.metadata.jvm",
+ "kotlinx.metadata.jvm.impl"
+ ],
+ "org.jetbrains:annotations": [
+ "org.intellij.lang.annotations",
+ "org.jetbrains.annotations"
+ ],
+ "org.jvnet.staxex:stax-ex": [
+ "org.jvnet.staxex",
+ "org.jvnet.staxex.util"
+ ],
+ "org.mockito.kotlin:mockito-kotlin": [
+ "org.mockito.kotlin",
+ "org.mockito.kotlin.internal"
+ ],
+ "org.mockito:mockito-core": [
+ "org.mockito",
+ "org.mockito.codegen",
+ "org.mockito.configuration",
+ "org.mockito.creation.instance",
+ "org.mockito.exceptions.base",
+ "org.mockito.exceptions.misusing",
+ "org.mockito.exceptions.stacktrace",
+ "org.mockito.exceptions.verification",
+ "org.mockito.exceptions.verification.junit",
+ "org.mockito.exceptions.verification.opentest4j",
+ "org.mockito.hamcrest",
+ "org.mockito.internal",
+ "org.mockito.internal.configuration",
+ "org.mockito.internal.configuration.injection",
+ "org.mockito.internal.configuration.injection.filter",
+ "org.mockito.internal.configuration.injection.scanner",
+ "org.mockito.internal.configuration.plugins",
+ "org.mockito.internal.creation",
+ "org.mockito.internal.creation.bytebuddy",
+ "org.mockito.internal.creation.instance",
+ "org.mockito.internal.creation.settings",
+ "org.mockito.internal.creation.util",
+ "org.mockito.internal.debugging",
+ "org.mockito.internal.exceptions",
+ "org.mockito.internal.exceptions.stacktrace",
+ "org.mockito.internal.exceptions.util",
+ "org.mockito.internal.framework",
+ "org.mockito.internal.hamcrest",
+ "org.mockito.internal.handler",
+ "org.mockito.internal.invocation",
+ "org.mockito.internal.invocation.finder",
+ "org.mockito.internal.invocation.mockref",
+ "org.mockito.internal.junit",
+ "org.mockito.internal.junit.util",
+ "org.mockito.internal.listeners",
+ "org.mockito.internal.matchers",
+ "org.mockito.internal.matchers.apachecommons",
+ "org.mockito.internal.matchers.text",
+ "org.mockito.internal.progress",
+ "org.mockito.internal.reporting",
+ "org.mockito.internal.runners",
+ "org.mockito.internal.runners.util",
+ "org.mockito.internal.session",
+ "org.mockito.internal.stubbing",
+ "org.mockito.internal.stubbing.answers",
+ "org.mockito.internal.stubbing.defaultanswers",
+ "org.mockito.internal.util",
+ "org.mockito.internal.util.collections",
+ "org.mockito.internal.util.concurrent",
+ "org.mockito.internal.util.io",
+ "org.mockito.internal.util.reflection",
+ "org.mockito.internal.verification",
+ "org.mockito.internal.verification.api",
+ "org.mockito.internal.verification.argumentmatching",
+ "org.mockito.internal.verification.checkers",
+ "org.mockito.invocation",
+ "org.mockito.junit",
+ "org.mockito.listeners",
+ "org.mockito.mock",
+ "org.mockito.plugins",
+ "org.mockito.quality",
+ "org.mockito.runners",
+ "org.mockito.session",
+ "org.mockito.stubbing",
+ "org.mockito.verification"
+ ],
+ "org.objenesis:objenesis": [
+ "org.objenesis",
+ "org.objenesis.instantiator",
+ "org.objenesis.instantiator.android",
+ "org.objenesis.instantiator.annotations",
+ "org.objenesis.instantiator.basic",
+ "org.objenesis.instantiator.gcj",
+ "org.objenesis.instantiator.perc",
+ "org.objenesis.instantiator.sun",
+ "org.objenesis.instantiator.util",
+ "org.objenesis.strategy"
+ ],
+ "org.ow2.asm:asm": [
+ "org.objectweb.asm",
+ "org.objectweb.asm.signature"
+ ],
+ "org.ow2.asm:asm-analysis": [
+ "org.objectweb.asm.tree.analysis"
+ ],
+ "org.ow2.asm:asm-commons": [
+ "org.objectweb.asm.commons"
+ ],
+ "org.ow2.asm:asm-tree": [
+ "org.objectweb.asm.tree"
+ ],
+ "org.ow2.asm:asm-util": [
+ "org.objectweb.asm.util"
+ ],
+ "org.robolectric:annotations": [
+ "org.robolectric.annotation",
+ "org.robolectric.annotation.experimental",
+ "org.robolectric.annotation.internal",
+ "org.robolectric.shadow.api"
+ ],
+ "org.robolectric:junit": [
+ "org.robolectric.internal"
+ ],
+ "org.robolectric:nativeruntime": [
+ "org.robolectric.nativeruntime"
+ ],
+ "org.robolectric:pluginapi": [
+ "org.robolectric.internal.dependency",
+ "org.robolectric.pluginapi",
+ "org.robolectric.pluginapi.config",
+ "org.robolectric.pluginapi.perf"
+ ],
+ "org.robolectric:plugins-maven-dependency-resolver": [
+ "org.robolectric",
+ "org.robolectric.internal.dependency"
+ ],
+ "org.robolectric:resources": [
+ "org.robolectric",
+ "org.robolectric.manifest",
+ "org.robolectric.res",
+ "org.robolectric.res.android",
+ "org.robolectric.res.builder"
+ ],
+ "org.robolectric:robolectric": [
+ "org.robolectric",
+ "org.robolectric.android",
+ "org.robolectric.android.internal",
+ "org.robolectric.internal",
+ "org.robolectric.internal.dependency",
+ "org.robolectric.junit.rules",
+ "org.robolectric.plugins",
+ "org.robolectric.util"
+ ],
+ "org.robolectric:sandbox": [
+ "org.robolectric.config",
+ "org.robolectric.fakes",
+ "org.robolectric.interceptors",
+ "org.robolectric.internal.bytecode",
+ "org.robolectric.sandbox",
+ "org.robolectric.util"
+ ],
+ "org.robolectric:shadowapi": [
+ "org.robolectric.annotation.internal",
+ "org.robolectric.config",
+ "org.robolectric.internal",
+ "org.robolectric.shadow.api",
+ "org.robolectric.util"
+ ],
+ "org.robolectric:shadows-framework": [
+ "android.media",
+ "android.webkit",
+ "org.robolectric",
+ "org.robolectric.android",
+ "org.robolectric.android.controller",
+ "org.robolectric.android.internal",
+ "org.robolectric.android.util.concurrent",
+ "org.robolectric.fakes",
+ "org.robolectric.shadows",
+ "org.robolectric.shadows.util"
+ ],
+ "org.robolectric:utils": [
+ "org.robolectric",
+ "org.robolectric.util",
+ "org.robolectric.util.inject"
+ ],
+ "org.robolectric:utils-reflector": [
+ "org.robolectric.util.reflector"
+ ],
+ "org.smali:baksmali": [
+ "org.jf.baksmali",
+ "org.jf.baksmali.Adaptors",
+ "org.jf.baksmali.Adaptors.Debug",
+ "org.jf.baksmali.Adaptors.EncodedValue",
+ "org.jf.baksmali.Adaptors.Format",
+ "org.jf.baksmali.Renderers"
+ ],
+ "org.smali:dexlib2": [
+ "org.jf.dexlib2",
+ "org.jf.dexlib2.analysis",
+ "org.jf.dexlib2.analysis.reflection",
+ "org.jf.dexlib2.analysis.reflection.util",
+ "org.jf.dexlib2.analysis.util",
+ "org.jf.dexlib2.base",
+ "org.jf.dexlib2.base.reference",
+ "org.jf.dexlib2.base.value",
+ "org.jf.dexlib2.builder",
+ "org.jf.dexlib2.builder.debug",
+ "org.jf.dexlib2.builder.instruction",
+ "org.jf.dexlib2.dexbacked",
+ "org.jf.dexlib2.dexbacked.instruction",
+ "org.jf.dexlib2.dexbacked.raw",
+ "org.jf.dexlib2.dexbacked.raw.util",
+ "org.jf.dexlib2.dexbacked.reference",
+ "org.jf.dexlib2.dexbacked.util",
+ "org.jf.dexlib2.dexbacked.value",
+ "org.jf.dexlib2.iface",
+ "org.jf.dexlib2.iface.debug",
+ "org.jf.dexlib2.iface.instruction",
+ "org.jf.dexlib2.iface.instruction.formats",
+ "org.jf.dexlib2.iface.reference",
+ "org.jf.dexlib2.iface.value",
+ "org.jf.dexlib2.immutable",
+ "org.jf.dexlib2.immutable.debug",
+ "org.jf.dexlib2.immutable.instruction",
+ "org.jf.dexlib2.immutable.reference",
+ "org.jf.dexlib2.immutable.util",
+ "org.jf.dexlib2.immutable.value",
+ "org.jf.dexlib2.rewriter",
+ "org.jf.dexlib2.util",
+ "org.jf.dexlib2.writer",
+ "org.jf.dexlib2.writer.builder",
+ "org.jf.dexlib2.writer.io",
+ "org.jf.dexlib2.writer.pool",
+ "org.jf.dexlib2.writer.util"
+ ],
+ "org.smali:util": [
+ "org.jf.util",
+ "org.jf.util.jcommander"
+ ],
+ "org.snakeyaml:snakeyaml-engine": [
+ "org.snakeyaml.engine.external.com.google.gdata.util.common.base",
+ "org.snakeyaml.engine.v2.api",
+ "org.snakeyaml.engine.v2.api.lowlevel",
+ "org.snakeyaml.engine.v2.comments",
+ "org.snakeyaml.engine.v2.common",
+ "org.snakeyaml.engine.v2.composer",
+ "org.snakeyaml.engine.v2.constructor",
+ "org.snakeyaml.engine.v2.constructor.core",
+ "org.snakeyaml.engine.v2.constructor.json",
+ "org.snakeyaml.engine.v2.emitter",
+ "org.snakeyaml.engine.v2.env",
+ "org.snakeyaml.engine.v2.events",
+ "org.snakeyaml.engine.v2.exceptions",
+ "org.snakeyaml.engine.v2.nodes",
+ "org.snakeyaml.engine.v2.parser",
+ "org.snakeyaml.engine.v2.representer",
+ "org.snakeyaml.engine.v2.resolver",
+ "org.snakeyaml.engine.v2.scanner",
+ "org.snakeyaml.engine.v2.schema",
+ "org.snakeyaml.engine.v2.serializer",
+ "org.snakeyaml.engine.v2.tokens"
+ ],
+ "xerces:xercesImpl": [
+ "org.apache.html.dom",
+ "org.apache.wml",
+ "org.apache.wml.dom",
+ "org.apache.xerces.dom",
+ "org.apache.xerces.dom.events",
+ "org.apache.xerces.dom3.as",
+ "org.apache.xerces.impl",
+ "org.apache.xerces.impl.dtd",
+ "org.apache.xerces.impl.dtd.models",
+ "org.apache.xerces.impl.dv",
+ "org.apache.xerces.impl.dv.dtd",
+ "org.apache.xerces.impl.dv.util",
+ "org.apache.xerces.impl.dv.xs",
+ "org.apache.xerces.impl.io",
+ "org.apache.xerces.impl.msg",
+ "org.apache.xerces.impl.validation",
+ "org.apache.xerces.impl.xpath",
+ "org.apache.xerces.impl.xpath.regex",
+ "org.apache.xerces.impl.xs",
+ "org.apache.xerces.impl.xs.identity",
+ "org.apache.xerces.impl.xs.models",
+ "org.apache.xerces.impl.xs.opti",
+ "org.apache.xerces.impl.xs.traversers",
+ "org.apache.xerces.impl.xs.util",
+ "org.apache.xerces.jaxp",
+ "org.apache.xerces.jaxp.datatype",
+ "org.apache.xerces.jaxp.validation",
+ "org.apache.xerces.parsers",
+ "org.apache.xerces.stax",
+ "org.apache.xerces.stax.events",
+ "org.apache.xerces.util",
+ "org.apache.xerces.xinclude",
+ "org.apache.xerces.xni",
+ "org.apache.xerces.xni.grammars",
+ "org.apache.xerces.xni.parser",
+ "org.apache.xerces.xpointer",
+ "org.apache.xerces.xs",
+ "org.apache.xerces.xs.datatypes",
+ "org.apache.xml.serialize",
+ "org.w3c.dom.html"
+ ],
+ "xml-apis:xml-apis": [
+ "javax.xml",
+ "javax.xml.datatype",
+ "javax.xml.namespace",
+ "javax.xml.parsers",
+ "javax.xml.stream",
+ "javax.xml.stream.events",
+ "javax.xml.stream.util",
+ "javax.xml.transform",
+ "javax.xml.transform.dom",
+ "javax.xml.transform.sax",
+ "javax.xml.transform.stax",
+ "javax.xml.transform.stream",
+ "javax.xml.validation",
+ "javax.xml.xpath",
+ "org.apache.xmlcommons",
+ "org.w3c.dom",
+ "org.w3c.dom.bootstrap",
+ "org.w3c.dom.css",
+ "org.w3c.dom.events",
+ "org.w3c.dom.html",
+ "org.w3c.dom.ls",
+ "org.w3c.dom.ranges",
+ "org.w3c.dom.stylesheets",
+ "org.w3c.dom.traversal",
+ "org.w3c.dom.views",
+ "org.w3c.dom.xpath",
+ "org.xml.sax",
+ "org.xml.sax.ext",
+ "org.xml.sax.helpers"
+ ]
+ },
+ "repositories": {
+ "https://maven.google.com/": [
+ "androidx.activity:activity-compose:aar",
+ "androidx.activity:activity-ktx:aar",
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.appcompat:appcompat-resources:aar",
+ "androidx.appcompat:appcompat:aar",
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.arch.core:core-testing:aar",
+ "androidx.autofill:autofill:aar",
+ "androidx.cardview:cardview:aar",
+ "androidx.collection:collection",
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.compiler:compiler",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.material:material-icons-core:aar",
+ "androidx.compose.material:material-ripple:aar",
+ "androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-test-junit4:aar",
+ "androidx.compose.ui:ui-test:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.constraintlayout:constraintlayout-solver",
+ "androidx.constraintlayout:constraintlayout:aar",
+ "androidx.coordinatorlayout:coordinatorlayout:aar",
+ "androidx.core:core-ktx:aar",
+ "androidx.core:core:aar",
+ "androidx.cursoradapter:cursoradapter:aar",
+ "androidx.customview:customview:aar",
+ "androidx.databinding:databinding-adapters:aar",
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-compiler",
+ "androidx.databinding:databinding-compiler-common",
+ "androidx.databinding:databinding-runtime:aar",
+ "androidx.documentfile:documentfile:aar",
+ "androidx.drawerlayout:drawerlayout:aar",
+ "androidx.dynamicanimation:dynamicanimation:aar",
+ "androidx.exifinterface:exifinterface:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.interpolator:interpolator:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-common-java8",
+ "androidx.lifecycle:lifecycle-extensions:aar",
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-process:aar",
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.loader:loader:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "androidx.multidex:multidex-instrumentation:aar",
+ "androidx.multidex:multidex:aar",
+ "androidx.navigation:navigation-common-ktx:aar",
+ "androidx.navigation:navigation-common:aar",
+ "androidx.navigation:navigation-fragment-ktx:aar",
+ "androidx.navigation:navigation-fragment:aar",
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "androidx.navigation:navigation-runtime:aar",
+ "androidx.navigation:navigation-ui-ktx:aar",
+ "androidx.navigation:navigation-ui:aar",
+ "androidx.print:print:aar",
+ "androidx.profileinstaller:profileinstaller:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.room:room-common",
+ "androidx.room:room-runtime:aar",
+ "androidx.savedstate:savedstate-ktx:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar",
+ "androidx.startup:startup-runtime:aar",
+ "androidx.test.espresso:espresso-accessibility:aar",
+ "androidx.test.espresso:espresso-contrib:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test.espresso:espresso-intents:aar",
+ "androidx.test.ext:junit:aar",
+ "androidx.test.ext:truth:aar",
+ "androidx.test.services:storage:aar",
+ "androidx.test.uiautomator:uiautomator:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "androidx.test:rules:aar",
+ "androidx.test:runner:aar",
+ "androidx.tracing:tracing:aar",
+ "androidx.transition:transition:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "androidx.vectordrawable:vectordrawable:aar",
+ "androidx.versionedparcelable:versionedparcelable:aar",
+ "androidx.viewpager2:viewpager2:aar",
+ "androidx.viewpager:viewpager:aar",
+ "androidx.work:work-runtime-ktx:aar",
+ "androidx.work:work-runtime:aar",
+ "androidx.work:work-testing:aar",
+ "com.almworks.sqlite4java:sqlite4java",
+ "com.android.databinding:baseLibrary",
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.analytics-library:tracker",
+ "com.android.tools.apkparser:apkanalyzer",
+ "com.android.tools.apkparser:binary-resources",
+ "com.android.tools.build.jetifier:jetifier-core",
+ "com.android.tools.build:aapt2-proto",
+ "com.android.tools.build:builder-model",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.ddms:ddmlib",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools.lint:lint-model",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.android.tools:dvlib",
+ "com.android.tools:repository",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.beust:jcommander",
+ "com.crashlytics.sdk.android:answers:aar",
+ "com.crashlytics.sdk.android:beta:aar",
+ "com.crashlytics.sdk.android:crashlytics-core:aar",
+ "com.crashlytics.sdk.android:crashlytics:aar",
+ "com.github.bumptech.glide:annotations",
+ "com.github.bumptech.glide:compiler",
+ "com.github.bumptech.glide:disklrucache",
+ "com.github.bumptech.glide:gifdecoder:aar",
+ "com.github.bumptech.glide:glide:aar",
+ "com.github.bumptech.glide:mocks:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-backend-cct:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.android.flexbox:flexbox:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-api:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-measurement-sdk-api:aar",
+ "com.google.android.gms:play-services-measurement-sdk:aar",
+ "com.google.android.gms:play-services-measurement:aar",
+ "com.google.android.gms:play-services-stats:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.android.gms:strict-version-matcher-plugin",
+ "com.google.android.material:material:aar",
+ "com.google.android.play:integrity:aar",
+ "com.google.android:annotations",
+ "com.google.auto.service:auto-service-annotations",
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.code.findbugs:jsr305",
+ "com.google.code.gson:gson",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-compiler",
+ "com.google.dagger:dagger-producers",
+ "com.google.dagger:dagger-spi",
+ "com.google.devtools.ksp:symbol-processing-api",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.errorprone:javac-shaded",
+ "com.google.firebase:firebase-analytics:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-appcheck-debug:aar",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-appcheck-playintegrity:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-auth-ktx:aar",
+ "com.google.firebase:firebase-auth:aar",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-crashlytics:aar",
+ "com.google.firebase:firebase-database-collection:aar",
+ "com.google.firebase:firebase-encoders-json:aar",
+ "com.google.firebase:firebase-firestore-ktx:aar",
+ "com.google.firebase:firebase-firestore:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-iid:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar",
+ "com.google.firebase:firebase-measurement-connector:aar",
+ "com.google.firebase:protolite-well-known-types:aar",
+ "com.google.gms:google-services",
+ "com.google.googlejavaformat:google-java-format",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.google.guava:listenablefuture",
+ "com.google.j2objc:j2objc-annotations",
+ "com.google.jimfs:jimfs",
+ "com.google.protobuf:protobuf-java",
+ "com.google.protobuf:protobuf-java-util",
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.truth.extensions:truth-liteproto-extension",
+ "com.google.truth:truth",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "com.ibm.icu:icu4j",
+ "com.squareup.moshi:moshi",
+ "com.squareup.moshi:moshi-kotlin",
+ "com.squareup.moshi:moshi-kotlin-codegen",
+ "com.squareup.okhttp3:mockwebserver",
+ "com.squareup.okhttp3:okhttp",
+ "com.squareup.okhttp:okhttp",
+ "com.squareup.okio:okio",
+ "com.squareup.retrofit2:converter-moshi",
+ "com.squareup.retrofit2:retrofit",
+ "com.squareup.retrofit2:retrofit-mock",
+ "com.squareup:javapoet",
+ "com.squareup:javawriter",
+ "com.squareup:kotlinpoet",
+ "com.sun.activation:javax.activation",
+ "com.sun.istack:istack-commons-runtime",
+ "com.sun.xml.fastinfoset:FastInfoset",
+ "commons-codec:commons-codec",
+ "commons-io:commons-io",
+ "commons-logging:commons-logging",
+ "io.fabric.sdk.android:fabric:aar",
+ "io.grpc:grpc-android:aar",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-core",
+ "io.grpc:grpc-okhttp",
+ "io.grpc:grpc-protobuf-lite",
+ "io.grpc:grpc-stub",
+ "io.perfmark:perfmark-api",
+ "io.xlate:yaml-json",
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.json:jakarta.json-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "junit:junit",
+ "net.bytebuddy:byte-buddy",
+ "net.bytebuddy:byte-buddy-agent",
+ "net.java.dev.jna:jna",
+ "net.java.dev.jna:jna-platform",
+ "net.ltgt.gradle.incap:incap",
+ "net.sf.kxml:kxml2",
+ "nl.dionsegijn:konfetti:aar",
+ "org.antlr:antlr4",
+ "org.apache.commons:commons-compress",
+ "org.apache.httpcomponents:httpclient",
+ "org.apache.httpcomponents:httpcore",
+ "org.apache.httpcomponents:httpmime",
+ "org.bouncycastle:bcpkix-jdk15on",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.checkerframework:checker-compat-qual",
+ "org.checkerframework:checker-qual",
+ "org.codehaus.mojo:animal-sniffer-annotations",
+ "org.eclipse.parsson:parsson",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.glassfish.jaxb:txw2",
+ "org.hamcrest:hamcrest-core",
+ "org.hamcrest:hamcrest-integration",
+ "org.hamcrest:hamcrest-library",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable",
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-script-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlin:kotlin-test",
+ "org.jetbrains.kotlin:kotlin-test-annotations-common",
+ "org.jetbrains.kotlin:kotlin-test-common",
+ "org.jetbrains.kotlin:kotlin-test-junit",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
+ "org.jetbrains:annotations",
+ "org.jvnet.staxex:stax-ex",
+ "org.mockito.kotlin:mockito-kotlin",
+ "org.mockito:mockito-core",
+ "org.objenesis:objenesis",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-commons",
+ "org.ow2.asm:asm-tree",
+ "org.ow2.asm:asm-util",
+ "org.robolectric:annotations",
+ "org.robolectric:junit",
+ "org.robolectric:nativeruntime",
+ "org.robolectric:pluginapi",
+ "org.robolectric:plugins-maven-dependency-resolver",
+ "org.robolectric:resources",
+ "org.robolectric:robolectric",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadowapi",
+ "org.robolectric:shadows-framework",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector",
+ "org.smali:baksmali",
+ "org.smali:dexlib2",
+ "org.smali:util",
+ "org.snakeyaml:snakeyaml-engine",
+ "xerces:xercesImpl",
+ "xml-apis:xml-apis"
+ ],
+ "https://repo1.maven.org/maven2/": [
+ "androidx.activity:activity-compose:aar",
+ "androidx.activity:activity-ktx:aar",
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.appcompat:appcompat-resources:aar",
+ "androidx.appcompat:appcompat:aar",
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.arch.core:core-testing:aar",
+ "androidx.autofill:autofill:aar",
+ "androidx.cardview:cardview:aar",
+ "androidx.collection:collection",
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.compiler:compiler",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.material:material-icons-core:aar",
+ "androidx.compose.material:material-ripple:aar",
+ "androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-test-junit4:aar",
+ "androidx.compose.ui:ui-test:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.constraintlayout:constraintlayout-solver",
+ "androidx.constraintlayout:constraintlayout:aar",
+ "androidx.coordinatorlayout:coordinatorlayout:aar",
+ "androidx.core:core-ktx:aar",
+ "androidx.core:core:aar",
+ "androidx.cursoradapter:cursoradapter:aar",
+ "androidx.customview:customview:aar",
+ "androidx.databinding:databinding-adapters:aar",
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-compiler",
+ "androidx.databinding:databinding-compiler-common",
+ "androidx.databinding:databinding-runtime:aar",
+ "androidx.documentfile:documentfile:aar",
+ "androidx.drawerlayout:drawerlayout:aar",
+ "androidx.dynamicanimation:dynamicanimation:aar",
+ "androidx.exifinterface:exifinterface:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.interpolator:interpolator:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-common-java8",
+ "androidx.lifecycle:lifecycle-extensions:aar",
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-process:aar",
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.loader:loader:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "androidx.multidex:multidex-instrumentation:aar",
+ "androidx.multidex:multidex:aar",
+ "androidx.navigation:navigation-common-ktx:aar",
+ "androidx.navigation:navigation-common:aar",
+ "androidx.navigation:navigation-fragment-ktx:aar",
+ "androidx.navigation:navigation-fragment:aar",
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "androidx.navigation:navigation-runtime:aar",
+ "androidx.navigation:navigation-ui-ktx:aar",
+ "androidx.navigation:navigation-ui:aar",
+ "androidx.print:print:aar",
+ "androidx.profileinstaller:profileinstaller:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.room:room-common",
+ "androidx.room:room-runtime:aar",
+ "androidx.savedstate:savedstate-ktx:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar",
+ "androidx.startup:startup-runtime:aar",
+ "androidx.test.espresso:espresso-accessibility:aar",
+ "androidx.test.espresso:espresso-contrib:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test.espresso:espresso-intents:aar",
+ "androidx.test.ext:junit:aar",
+ "androidx.test.ext:truth:aar",
+ "androidx.test.services:storage:aar",
+ "androidx.test.uiautomator:uiautomator:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "androidx.test:rules:aar",
+ "androidx.test:runner:aar",
+ "androidx.tracing:tracing:aar",
+ "androidx.transition:transition:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "androidx.vectordrawable:vectordrawable:aar",
+ "androidx.versionedparcelable:versionedparcelable:aar",
+ "androidx.viewpager2:viewpager2:aar",
+ "androidx.viewpager:viewpager:aar",
+ "androidx.work:work-runtime-ktx:aar",
+ "androidx.work:work-runtime:aar",
+ "androidx.work:work-testing:aar",
+ "com.almworks.sqlite4java:sqlite4java",
+ "com.android.databinding:baseLibrary",
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.analytics-library:tracker",
+ "com.android.tools.apkparser:apkanalyzer",
+ "com.android.tools.apkparser:binary-resources",
+ "com.android.tools.build.jetifier:jetifier-core",
+ "com.android.tools.build:aapt2-proto",
+ "com.android.tools.build:builder-model",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.ddms:ddmlib",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools.lint:lint-model",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.android.tools:dvlib",
+ "com.android.tools:repository",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.beust:jcommander",
+ "com.crashlytics.sdk.android:answers:aar",
+ "com.crashlytics.sdk.android:beta:aar",
+ "com.crashlytics.sdk.android:crashlytics-core:aar",
+ "com.crashlytics.sdk.android:crashlytics:aar",
+ "com.github.bumptech.glide:annotations",
+ "com.github.bumptech.glide:compiler",
+ "com.github.bumptech.glide:disklrucache",
+ "com.github.bumptech.glide:gifdecoder:aar",
+ "com.github.bumptech.glide:glide:aar",
+ "com.github.bumptech.glide:mocks:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-backend-cct:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.android.flexbox:flexbox:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-api:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-measurement-sdk-api:aar",
+ "com.google.android.gms:play-services-measurement-sdk:aar",
+ "com.google.android.gms:play-services-measurement:aar",
+ "com.google.android.gms:play-services-stats:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.android.gms:strict-version-matcher-plugin",
+ "com.google.android.material:material:aar",
+ "com.google.android.play:integrity:aar",
+ "com.google.android:annotations",
+ "com.google.auto.service:auto-service-annotations",
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.code.findbugs:jsr305",
+ "com.google.code.gson:gson",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-compiler",
+ "com.google.dagger:dagger-producers",
+ "com.google.dagger:dagger-spi",
+ "com.google.devtools.ksp:symbol-processing-api",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.errorprone:javac-shaded",
+ "com.google.firebase:firebase-analytics:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-appcheck-debug:aar",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-appcheck-playintegrity:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-auth-ktx:aar",
+ "com.google.firebase:firebase-auth:aar",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-crashlytics:aar",
+ "com.google.firebase:firebase-database-collection:aar",
+ "com.google.firebase:firebase-encoders-json:aar",
+ "com.google.firebase:firebase-firestore-ktx:aar",
+ "com.google.firebase:firebase-firestore:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-iid:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar",
+ "com.google.firebase:firebase-measurement-connector:aar",
+ "com.google.firebase:protolite-well-known-types:aar",
+ "com.google.gms:google-services",
+ "com.google.googlejavaformat:google-java-format",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.google.guava:listenablefuture",
+ "com.google.j2objc:j2objc-annotations",
+ "com.google.jimfs:jimfs",
+ "com.google.protobuf:protobuf-java",
+ "com.google.protobuf:protobuf-java-util",
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.truth.extensions:truth-liteproto-extension",
+ "com.google.truth:truth",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "com.ibm.icu:icu4j",
+ "com.squareup.moshi:moshi",
+ "com.squareup.moshi:moshi-kotlin",
+ "com.squareup.moshi:moshi-kotlin-codegen",
+ "com.squareup.okhttp3:mockwebserver",
+ "com.squareup.okhttp3:okhttp",
+ "com.squareup.okhttp:okhttp",
+ "com.squareup.okio:okio",
+ "com.squareup.retrofit2:converter-moshi",
+ "com.squareup.retrofit2:retrofit",
+ "com.squareup.retrofit2:retrofit-mock",
+ "com.squareup:javapoet",
+ "com.squareup:javawriter",
+ "com.squareup:kotlinpoet",
+ "com.sun.activation:javax.activation",
+ "com.sun.istack:istack-commons-runtime",
+ "com.sun.xml.fastinfoset:FastInfoset",
+ "commons-codec:commons-codec",
+ "commons-io:commons-io",
+ "commons-logging:commons-logging",
+ "io.fabric.sdk.android:fabric:aar",
+ "io.grpc:grpc-android:aar",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-core",
+ "io.grpc:grpc-okhttp",
+ "io.grpc:grpc-protobuf-lite",
+ "io.grpc:grpc-stub",
+ "io.perfmark:perfmark-api",
+ "io.xlate:yaml-json",
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.json:jakarta.json-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "junit:junit",
+ "net.bytebuddy:byte-buddy",
+ "net.bytebuddy:byte-buddy-agent",
+ "net.java.dev.jna:jna",
+ "net.java.dev.jna:jna-platform",
+ "net.ltgt.gradle.incap:incap",
+ "net.sf.kxml:kxml2",
+ "nl.dionsegijn:konfetti:aar",
+ "org.antlr:antlr4",
+ "org.apache.commons:commons-compress",
+ "org.apache.httpcomponents:httpclient",
+ "org.apache.httpcomponents:httpcore",
+ "org.apache.httpcomponents:httpmime",
+ "org.bouncycastle:bcpkix-jdk15on",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.checkerframework:checker-compat-qual",
+ "org.checkerframework:checker-qual",
+ "org.codehaus.mojo:animal-sniffer-annotations",
+ "org.eclipse.parsson:parsson",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.glassfish.jaxb:txw2",
+ "org.hamcrest:hamcrest-core",
+ "org.hamcrest:hamcrest-integration",
+ "org.hamcrest:hamcrest-library",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable",
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-script-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlin:kotlin-test",
+ "org.jetbrains.kotlin:kotlin-test-annotations-common",
+ "org.jetbrains.kotlin:kotlin-test-common",
+ "org.jetbrains.kotlin:kotlin-test-junit",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
+ "org.jetbrains:annotations",
+ "org.jvnet.staxex:stax-ex",
+ "org.mockito.kotlin:mockito-kotlin",
+ "org.mockito:mockito-core",
+ "org.objenesis:objenesis",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-commons",
+ "org.ow2.asm:asm-tree",
+ "org.ow2.asm:asm-util",
+ "org.robolectric:annotations",
+ "org.robolectric:junit",
+ "org.robolectric:nativeruntime",
+ "org.robolectric:pluginapi",
+ "org.robolectric:plugins-maven-dependency-resolver",
+ "org.robolectric:resources",
+ "org.robolectric:robolectric",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadowapi",
+ "org.robolectric:shadows-framework",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector",
+ "org.smali:baksmali",
+ "org.smali:dexlib2",
+ "org.smali:util",
+ "org.snakeyaml:snakeyaml-engine",
+ "xerces:xercesImpl",
+ "xml-apis:xml-apis"
+ ],
+ "https://oss.sonatype.org/content/repositories/snapshots/": [
+ "androidx.activity:activity-compose:aar",
+ "androidx.activity:activity-ktx:aar",
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.appcompat:appcompat-resources:aar",
+ "androidx.appcompat:appcompat:aar",
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.arch.core:core-testing:aar",
+ "androidx.autofill:autofill:aar",
+ "androidx.cardview:cardview:aar",
+ "androidx.collection:collection",
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.compiler:compiler",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.material:material-icons-core:aar",
+ "androidx.compose.material:material-ripple:aar",
+ "androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-test-junit4:aar",
+ "androidx.compose.ui:ui-test:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.constraintlayout:constraintlayout-solver",
+ "androidx.constraintlayout:constraintlayout:aar",
+ "androidx.coordinatorlayout:coordinatorlayout:aar",
+ "androidx.core:core-ktx:aar",
+ "androidx.core:core:aar",
+ "androidx.cursoradapter:cursoradapter:aar",
+ "androidx.customview:customview:aar",
+ "androidx.databinding:databinding-adapters:aar",
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-compiler",
+ "androidx.databinding:databinding-compiler-common",
+ "androidx.databinding:databinding-runtime:aar",
+ "androidx.documentfile:documentfile:aar",
+ "androidx.drawerlayout:drawerlayout:aar",
+ "androidx.dynamicanimation:dynamicanimation:aar",
+ "androidx.exifinterface:exifinterface:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.interpolator:interpolator:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-common-java8",
+ "androidx.lifecycle:lifecycle-extensions:aar",
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-process:aar",
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.loader:loader:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "androidx.multidex:multidex-instrumentation:aar",
+ "androidx.multidex:multidex:aar",
+ "androidx.navigation:navigation-common-ktx:aar",
+ "androidx.navigation:navigation-common:aar",
+ "androidx.navigation:navigation-fragment-ktx:aar",
+ "androidx.navigation:navigation-fragment:aar",
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "androidx.navigation:navigation-runtime:aar",
+ "androidx.navigation:navigation-ui-ktx:aar",
+ "androidx.navigation:navigation-ui:aar",
+ "androidx.print:print:aar",
+ "androidx.profileinstaller:profileinstaller:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.room:room-common",
+ "androidx.room:room-runtime:aar",
+ "androidx.savedstate:savedstate-ktx:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar",
+ "androidx.startup:startup-runtime:aar",
+ "androidx.test.espresso:espresso-accessibility:aar",
+ "androidx.test.espresso:espresso-contrib:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test.espresso:espresso-intents:aar",
+ "androidx.test.ext:junit:aar",
+ "androidx.test.ext:truth:aar",
+ "androidx.test.services:storage:aar",
+ "androidx.test.uiautomator:uiautomator:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "androidx.test:rules:aar",
+ "androidx.test:runner:aar",
+ "androidx.tracing:tracing:aar",
+ "androidx.transition:transition:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "androidx.vectordrawable:vectordrawable:aar",
+ "androidx.versionedparcelable:versionedparcelable:aar",
+ "androidx.viewpager2:viewpager2:aar",
+ "androidx.viewpager:viewpager:aar",
+ "androidx.work:work-runtime-ktx:aar",
+ "androidx.work:work-runtime:aar",
+ "androidx.work:work-testing:aar",
+ "com.almworks.sqlite4java:sqlite4java",
+ "com.android.databinding:baseLibrary",
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.analytics-library:tracker",
+ "com.android.tools.apkparser:apkanalyzer",
+ "com.android.tools.apkparser:binary-resources",
+ "com.android.tools.build.jetifier:jetifier-core",
+ "com.android.tools.build:aapt2-proto",
+ "com.android.tools.build:builder-model",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.ddms:ddmlib",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools.lint:lint-model",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.android.tools:dvlib",
+ "com.android.tools:repository",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.beust:jcommander",
+ "com.crashlytics.sdk.android:answers:aar",
+ "com.crashlytics.sdk.android:beta:aar",
+ "com.crashlytics.sdk.android:crashlytics-core:aar",
+ "com.crashlytics.sdk.android:crashlytics:aar",
+ "com.github.bumptech.glide:annotations",
+ "com.github.bumptech.glide:compiler",
+ "com.github.bumptech.glide:disklrucache",
+ "com.github.bumptech.glide:gifdecoder:aar",
+ "com.github.bumptech.glide:glide:aar",
+ "com.github.bumptech.glide:mocks:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-backend-cct:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.android.flexbox:flexbox:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-api:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-measurement-sdk-api:aar",
+ "com.google.android.gms:play-services-measurement-sdk:aar",
+ "com.google.android.gms:play-services-measurement:aar",
+ "com.google.android.gms:play-services-stats:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.android.gms:strict-version-matcher-plugin",
+ "com.google.android.material:material:aar",
+ "com.google.android.play:integrity:aar",
+ "com.google.android:annotations",
+ "com.google.auto.service:auto-service-annotations",
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.code.findbugs:jsr305",
+ "com.google.code.gson:gson",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-compiler",
+ "com.google.dagger:dagger-producers",
+ "com.google.dagger:dagger-spi",
+ "com.google.devtools.ksp:symbol-processing-api",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.errorprone:javac-shaded",
+ "com.google.firebase:firebase-analytics:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-appcheck-debug:aar",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-appcheck-playintegrity:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-auth-ktx:aar",
+ "com.google.firebase:firebase-auth:aar",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-crashlytics:aar",
+ "com.google.firebase:firebase-database-collection:aar",
+ "com.google.firebase:firebase-encoders-json:aar",
+ "com.google.firebase:firebase-firestore-ktx:aar",
+ "com.google.firebase:firebase-firestore:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-iid:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar",
+ "com.google.firebase:firebase-measurement-connector:aar",
+ "com.google.firebase:protolite-well-known-types:aar",
+ "com.google.gms:google-services",
+ "com.google.googlejavaformat:google-java-format",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.google.guava:listenablefuture",
+ "com.google.j2objc:j2objc-annotations",
+ "com.google.jimfs:jimfs",
+ "com.google.protobuf:protobuf-java",
+ "com.google.protobuf:protobuf-java-util",
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.truth.extensions:truth-liteproto-extension",
+ "com.google.truth:truth",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "com.ibm.icu:icu4j",
+ "com.squareup.moshi:moshi",
+ "com.squareup.moshi:moshi-kotlin",
+ "com.squareup.moshi:moshi-kotlin-codegen",
+ "com.squareup.okhttp3:mockwebserver",
+ "com.squareup.okhttp3:okhttp",
+ "com.squareup.okhttp:okhttp",
+ "com.squareup.okio:okio",
+ "com.squareup.retrofit2:converter-moshi",
+ "com.squareup.retrofit2:retrofit",
+ "com.squareup.retrofit2:retrofit-mock",
+ "com.squareup:javapoet",
+ "com.squareup:javawriter",
+ "com.squareup:kotlinpoet",
+ "com.sun.activation:javax.activation",
+ "com.sun.istack:istack-commons-runtime",
+ "com.sun.xml.fastinfoset:FastInfoset",
+ "commons-codec:commons-codec",
+ "commons-io:commons-io",
+ "commons-logging:commons-logging",
+ "io.fabric.sdk.android:fabric:aar",
+ "io.grpc:grpc-android:aar",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-core",
+ "io.grpc:grpc-okhttp",
+ "io.grpc:grpc-protobuf-lite",
+ "io.grpc:grpc-stub",
+ "io.perfmark:perfmark-api",
+ "io.xlate:yaml-json",
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.json:jakarta.json-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "junit:junit",
+ "net.bytebuddy:byte-buddy",
+ "net.bytebuddy:byte-buddy-agent",
+ "net.java.dev.jna:jna",
+ "net.java.dev.jna:jna-platform",
+ "net.ltgt.gradle.incap:incap",
+ "net.sf.kxml:kxml2",
+ "nl.dionsegijn:konfetti:aar",
+ "org.antlr:antlr4",
+ "org.apache.commons:commons-compress",
+ "org.apache.httpcomponents:httpclient",
+ "org.apache.httpcomponents:httpcore",
+ "org.apache.httpcomponents:httpmime",
+ "org.bouncycastle:bcpkix-jdk15on",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.checkerframework:checker-compat-qual",
+ "org.checkerframework:checker-qual",
+ "org.codehaus.mojo:animal-sniffer-annotations",
+ "org.eclipse.parsson:parsson",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.glassfish.jaxb:txw2",
+ "org.hamcrest:hamcrest-core",
+ "org.hamcrest:hamcrest-integration",
+ "org.hamcrest:hamcrest-library",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable",
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-script-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlin:kotlin-test",
+ "org.jetbrains.kotlin:kotlin-test-annotations-common",
+ "org.jetbrains.kotlin:kotlin-test-common",
+ "org.jetbrains.kotlin:kotlin-test-junit",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
+ "org.jetbrains:annotations",
+ "org.jvnet.staxex:stax-ex",
+ "org.mockito.kotlin:mockito-kotlin",
+ "org.mockito:mockito-core",
+ "org.objenesis:objenesis",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-commons",
+ "org.ow2.asm:asm-tree",
+ "org.ow2.asm:asm-util",
+ "org.robolectric:annotations",
+ "org.robolectric:junit",
+ "org.robolectric:nativeruntime",
+ "org.robolectric:pluginapi",
+ "org.robolectric:plugins-maven-dependency-resolver",
+ "org.robolectric:resources",
+ "org.robolectric:robolectric",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadowapi",
+ "org.robolectric:shadows-framework",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector",
+ "org.smali:baksmali",
+ "org.smali:dexlib2",
+ "org.smali:util",
+ "org.snakeyaml:snakeyaml-engine",
+ "xerces:xercesImpl",
+ "xml-apis:xml-apis"
+ ],
+ "https://maven.fabric.io/public/": [
+ "androidx.activity:activity-compose:aar",
+ "androidx.activity:activity-ktx:aar",
+ "androidx.activity:activity:aar",
+ "androidx.annotation:annotation",
+ "androidx.annotation:annotation-experimental:aar",
+ "androidx.appcompat:appcompat-resources:aar",
+ "androidx.appcompat:appcompat:aar",
+ "androidx.arch.core:core-common",
+ "androidx.arch.core:core-runtime:aar",
+ "androidx.arch.core:core-testing:aar",
+ "androidx.autofill:autofill:aar",
+ "androidx.cardview:cardview:aar",
+ "androidx.collection:collection",
+ "androidx.compose.animation:animation-core:aar",
+ "androidx.compose.animation:animation:aar",
+ "androidx.compose.compiler:compiler",
+ "androidx.compose.foundation:foundation-layout:aar",
+ "androidx.compose.foundation:foundation:aar",
+ "androidx.compose.material:material-icons-core:aar",
+ "androidx.compose.material:material-ripple:aar",
+ "androidx.compose.material:material:aar",
+ "androidx.compose.runtime:runtime-livedata:aar",
+ "androidx.compose.runtime:runtime-saveable:aar",
+ "androidx.compose.runtime:runtime:aar",
+ "androidx.compose.ui:ui-geometry:aar",
+ "androidx.compose.ui:ui-graphics:aar",
+ "androidx.compose.ui:ui-test-junit4:aar",
+ "androidx.compose.ui:ui-test:aar",
+ "androidx.compose.ui:ui-text:aar",
+ "androidx.compose.ui:ui-unit:aar",
+ "androidx.compose.ui:ui-util:aar",
+ "androidx.compose.ui:ui:aar",
+ "androidx.concurrent:concurrent-futures",
+ "androidx.constraintlayout:constraintlayout-solver",
+ "androidx.constraintlayout:constraintlayout:aar",
+ "androidx.coordinatorlayout:coordinatorlayout:aar",
+ "androidx.core:core-ktx:aar",
+ "androidx.core:core:aar",
+ "androidx.cursoradapter:cursoradapter:aar",
+ "androidx.customview:customview:aar",
+ "androidx.databinding:databinding-adapters:aar",
+ "androidx.databinding:databinding-common",
+ "androidx.databinding:databinding-compiler",
+ "androidx.databinding:databinding-compiler-common",
+ "androidx.databinding:databinding-runtime:aar",
+ "androidx.documentfile:documentfile:aar",
+ "androidx.drawerlayout:drawerlayout:aar",
+ "androidx.dynamicanimation:dynamicanimation:aar",
+ "androidx.exifinterface:exifinterface:aar",
+ "androidx.fragment:fragment:aar",
+ "androidx.interpolator:interpolator:aar",
+ "androidx.legacy:legacy-support-core-utils:aar",
+ "androidx.lifecycle:lifecycle-common",
+ "androidx.lifecycle:lifecycle-common-java8",
+ "androidx.lifecycle:lifecycle-extensions:aar",
+ "androidx.lifecycle:lifecycle-livedata-core-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata-core:aar",
+ "androidx.lifecycle:lifecycle-livedata-ktx:aar",
+ "androidx.lifecycle:lifecycle-livedata:aar",
+ "androidx.lifecycle:lifecycle-process:aar",
+ "androidx.lifecycle:lifecycle-runtime-ktx:aar",
+ "androidx.lifecycle:lifecycle-runtime:aar",
+ "androidx.lifecycle:lifecycle-service:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-ktx:aar",
+ "androidx.lifecycle:lifecycle-viewmodel-savedstate:aar",
+ "androidx.lifecycle:lifecycle-viewmodel:aar",
+ "androidx.loader:loader:aar",
+ "androidx.localbroadcastmanager:localbroadcastmanager:aar",
+ "androidx.multidex:multidex-instrumentation:aar",
+ "androidx.multidex:multidex:aar",
+ "androidx.navigation:navigation-common-ktx:aar",
+ "androidx.navigation:navigation-common:aar",
+ "androidx.navigation:navigation-fragment-ktx:aar",
+ "androidx.navigation:navigation-fragment:aar",
+ "androidx.navigation:navigation-runtime-ktx:aar",
+ "androidx.navigation:navigation-runtime:aar",
+ "androidx.navigation:navigation-ui-ktx:aar",
+ "androidx.navigation:navigation-ui:aar",
+ "androidx.print:print:aar",
+ "androidx.profileinstaller:profileinstaller:aar",
+ "androidx.recyclerview:recyclerview:aar",
+ "androidx.room:room-common",
+ "androidx.room:room-runtime:aar",
+ "androidx.savedstate:savedstate-ktx:aar",
+ "androidx.savedstate:savedstate:aar",
+ "androidx.sqlite:sqlite-framework:aar",
+ "androidx.sqlite:sqlite:aar",
+ "androidx.startup:startup-runtime:aar",
+ "androidx.test.espresso:espresso-accessibility:aar",
+ "androidx.test.espresso:espresso-contrib:aar",
+ "androidx.test.espresso:espresso-core:aar",
+ "androidx.test.espresso:espresso-idling-resource:aar",
+ "androidx.test.espresso:espresso-intents:aar",
+ "androidx.test.ext:junit:aar",
+ "androidx.test.ext:truth:aar",
+ "androidx.test.services:storage:aar",
+ "androidx.test.uiautomator:uiautomator:aar",
+ "androidx.test:annotation:aar",
+ "androidx.test:core:aar",
+ "androidx.test:monitor:aar",
+ "androidx.test:rules:aar",
+ "androidx.test:runner:aar",
+ "androidx.tracing:tracing:aar",
+ "androidx.transition:transition:aar",
+ "androidx.vectordrawable:vectordrawable-animated:aar",
+ "androidx.vectordrawable:vectordrawable:aar",
+ "androidx.versionedparcelable:versionedparcelable:aar",
+ "androidx.viewpager2:viewpager2:aar",
+ "androidx.viewpager:viewpager:aar",
+ "androidx.work:work-runtime-ktx:aar",
+ "androidx.work:work-runtime:aar",
+ "androidx.work:work-testing:aar",
+ "com.almworks.sqlite4java:sqlite4java",
+ "com.android.databinding:baseLibrary",
+ "com.android.tools.analytics-library:protos",
+ "com.android.tools.analytics-library:shared",
+ "com.android.tools.analytics-library:tracker",
+ "com.android.tools.apkparser:apkanalyzer",
+ "com.android.tools.apkparser:binary-resources",
+ "com.android.tools.build.jetifier:jetifier-core",
+ "com.android.tools.build:aapt2-proto",
+ "com.android.tools.build:builder-model",
+ "com.android.tools.build:manifest-merger",
+ "com.android.tools.ddms:ddmlib",
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint",
+ "com.android.tools.lint:lint-api",
+ "com.android.tools.lint:lint-checks",
+ "com.android.tools.lint:lint-model",
+ "com.android.tools:annotations",
+ "com.android.tools:common",
+ "com.android.tools:dvlib",
+ "com.android.tools:repository",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "com.beust:jcommander",
+ "com.crashlytics.sdk.android:answers:aar",
+ "com.crashlytics.sdk.android:beta:aar",
+ "com.crashlytics.sdk.android:crashlytics-core:aar",
+ "com.crashlytics.sdk.android:crashlytics:aar",
+ "com.github.bumptech.glide:annotations",
+ "com.github.bumptech.glide:compiler",
+ "com.github.bumptech.glide:disklrucache",
+ "com.github.bumptech.glide:gifdecoder:aar",
+ "com.github.bumptech.glide:glide:aar",
+ "com.github.bumptech.glide:mocks:aar",
+ "com.google.android.apps.common.testing.accessibility.framework:accessibility-test-framework",
+ "com.google.android.datatransport:transport-api:aar",
+ "com.google.android.datatransport:transport-backend-cct:aar",
+ "com.google.android.datatransport:transport-runtime:aar",
+ "com.google.android.flexbox:flexbox:aar",
+ "com.google.android.gms:play-services-ads-identifier:aar",
+ "com.google.android.gms:play-services-base:aar",
+ "com.google.android.gms:play-services-basement:aar",
+ "com.google.android.gms:play-services-measurement-api:aar",
+ "com.google.android.gms:play-services-measurement-base:aar",
+ "com.google.android.gms:play-services-measurement-impl:aar",
+ "com.google.android.gms:play-services-measurement-sdk-api:aar",
+ "com.google.android.gms:play-services-measurement-sdk:aar",
+ "com.google.android.gms:play-services-measurement:aar",
+ "com.google.android.gms:play-services-stats:aar",
+ "com.google.android.gms:play-services-tasks:aar",
+ "com.google.android.gms:strict-version-matcher-plugin",
+ "com.google.android.material:material:aar",
+ "com.google.android.play:integrity:aar",
+ "com.google.android:annotations",
+ "com.google.auto.service:auto-service-annotations",
+ "com.google.auto.value:auto-value-annotations",
+ "com.google.code.findbugs:jsr305",
+ "com.google.code.gson:gson",
+ "com.google.dagger:dagger",
+ "com.google.dagger:dagger-compiler",
+ "com.google.dagger:dagger-producers",
+ "com.google.dagger:dagger-spi",
+ "com.google.devtools.ksp:symbol-processing-api",
+ "com.google.errorprone:error_prone_annotations",
+ "com.google.errorprone:javac-shaded",
+ "com.google.firebase:firebase-analytics:aar",
+ "com.google.firebase:firebase-annotations",
+ "com.google.firebase:firebase-appcheck-debug:aar",
+ "com.google.firebase:firebase-appcheck-interop:aar",
+ "com.google.firebase:firebase-appcheck-playintegrity:aar",
+ "com.google.firebase:firebase-appcheck:aar",
+ "com.google.firebase:firebase-auth-interop:aar",
+ "com.google.firebase:firebase-auth-ktx:aar",
+ "com.google.firebase:firebase-auth:aar",
+ "com.google.firebase:firebase-common-ktx:aar",
+ "com.google.firebase:firebase-common:aar",
+ "com.google.firebase:firebase-components:aar",
+ "com.google.firebase:firebase-crashlytics:aar",
+ "com.google.firebase:firebase-database-collection:aar",
+ "com.google.firebase:firebase-encoders-json:aar",
+ "com.google.firebase:firebase-firestore-ktx:aar",
+ "com.google.firebase:firebase-firestore:aar",
+ "com.google.firebase:firebase-iid-interop:aar",
+ "com.google.firebase:firebase-iid:aar",
+ "com.google.firebase:firebase-installations-interop:aar",
+ "com.google.firebase:firebase-installations:aar",
+ "com.google.firebase:firebase-measurement-connector:aar",
+ "com.google.firebase:protolite-well-known-types:aar",
+ "com.google.gms:google-services",
+ "com.google.googlejavaformat:google-java-format",
+ "com.google.guava:failureaccess",
+ "com.google.guava:guava",
+ "com.google.guava:listenablefuture",
+ "com.google.j2objc:j2objc-annotations",
+ "com.google.jimfs:jimfs",
+ "com.google.protobuf:protobuf-java",
+ "com.google.protobuf:protobuf-java-util",
+ "com.google.protobuf:protobuf-javalite",
+ "com.google.truth.extensions:truth-liteproto-extension",
+ "com.google.truth:truth",
+ "com.googlecode.juniversalchardet:juniversalchardet",
+ "com.ibm.icu:icu4j",
+ "com.squareup.moshi:moshi",
+ "com.squareup.moshi:moshi-kotlin",
+ "com.squareup.moshi:moshi-kotlin-codegen",
+ "com.squareup.okhttp3:mockwebserver",
+ "com.squareup.okhttp3:okhttp",
+ "com.squareup.okhttp:okhttp",
+ "com.squareup.okio:okio",
+ "com.squareup.retrofit2:converter-moshi",
+ "com.squareup.retrofit2:retrofit",
+ "com.squareup.retrofit2:retrofit-mock",
+ "com.squareup:javapoet",
+ "com.squareup:javawriter",
+ "com.squareup:kotlinpoet",
+ "com.sun.activation:javax.activation",
+ "com.sun.istack:istack-commons-runtime",
+ "com.sun.xml.fastinfoset:FastInfoset",
+ "commons-codec:commons-codec",
+ "commons-io:commons-io",
+ "commons-logging:commons-logging",
+ "io.fabric.sdk.android:fabric:aar",
+ "io.grpc:grpc-android:aar",
+ "io.grpc:grpc-api",
+ "io.grpc:grpc-context",
+ "io.grpc:grpc-core",
+ "io.grpc:grpc-okhttp",
+ "io.grpc:grpc-protobuf-lite",
+ "io.grpc:grpc-stub",
+ "io.perfmark:perfmark-api",
+ "io.xlate:yaml-json",
+ "jakarta.activation:jakarta.activation-api",
+ "jakarta.json:jakarta.json-api",
+ "jakarta.xml.bind:jakarta.xml.bind-api",
+ "javax.annotation:javax.annotation-api",
+ "javax.inject:javax.inject",
+ "junit:junit",
+ "net.bytebuddy:byte-buddy",
+ "net.bytebuddy:byte-buddy-agent",
+ "net.java.dev.jna:jna",
+ "net.java.dev.jna:jna-platform",
+ "net.ltgt.gradle.incap:incap",
+ "net.sf.kxml:kxml2",
+ "nl.dionsegijn:konfetti:aar",
+ "org.antlr:antlr4",
+ "org.apache.commons:commons-compress",
+ "org.apache.httpcomponents:httpclient",
+ "org.apache.httpcomponents:httpcore",
+ "org.apache.httpcomponents:httpmime",
+ "org.bouncycastle:bcpkix-jdk15on",
+ "org.bouncycastle:bcprov-jdk15on",
+ "org.checkerframework:checker-compat-qual",
+ "org.checkerframework:checker-qual",
+ "org.codehaus.mojo:animal-sniffer-annotations",
+ "org.eclipse.parsson:parsson",
+ "org.glassfish.jaxb:jaxb-runtime",
+ "org.glassfish.jaxb:txw2",
+ "org.hamcrest:hamcrest-core",
+ "org.hamcrest:hamcrest-integration",
+ "org.hamcrest:hamcrest-library",
+ "org.jetbrains.intellij.deps:trove4j",
+ "org.jetbrains.kotlin:kotlin-compiler-embeddable",
+ "org.jetbrains.kotlin:kotlin-daemon-embeddable",
+ "org.jetbrains.kotlin:kotlin-reflect",
+ "org.jetbrains.kotlin:kotlin-script-runtime",
+ "org.jetbrains.kotlin:kotlin-stdlib",
+ "org.jetbrains.kotlin:kotlin-stdlib-common",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk7",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.jetbrains.kotlin:kotlin-test",
+ "org.jetbrains.kotlin:kotlin-test-annotations-common",
+ "org.jetbrains.kotlin:kotlin-test-common",
+ "org.jetbrains.kotlin:kotlin-test-junit",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-android",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-guava",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test",
+ "org.jetbrains.kotlinx:kotlinx-coroutines-test-jvm",
+ "org.jetbrains.kotlinx:kotlinx-metadata-jvm",
+ "org.jetbrains:annotations",
+ "org.jvnet.staxex:stax-ex",
+ "org.mockito.kotlin:mockito-kotlin",
+ "org.mockito:mockito-core",
+ "org.objenesis:objenesis",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-analysis",
+ "org.ow2.asm:asm-commons",
+ "org.ow2.asm:asm-tree",
+ "org.ow2.asm:asm-util",
+ "org.robolectric:annotations",
+ "org.robolectric:junit",
+ "org.robolectric:nativeruntime",
+ "org.robolectric:pluginapi",
+ "org.robolectric:plugins-maven-dependency-resolver",
+ "org.robolectric:resources",
+ "org.robolectric:robolectric",
+ "org.robolectric:sandbox",
+ "org.robolectric:shadowapi",
+ "org.robolectric:shadows-framework",
+ "org.robolectric:utils",
+ "org.robolectric:utils-reflector",
+ "org.smali:baksmali",
+ "org.smali:dexlib2",
+ "org.smali:util",
+ "org.snakeyaml:snakeyaml-engine",
+ "xerces:xercesImpl",
+ "xml-apis:xml-apis"
+ ]
+ },
+ "version": "2"
+}
From 8dbe1ec1c6f45bec18f6478c8b3ee2412c696ec1 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 1 Jul 2025 13:21:56 +0300
Subject: [PATCH 30/43] address reviewer comment.
---
.../app/profile/ConfirmDataResetDialog.kt | 8 ++-----
.../app/profile/ForgotAdminPinDialog.kt | 12 +++-------
.../profile/PinPasswordActivityPresenter.kt | 23 ++++++++++++++-----
3 files changed, 22 insertions(+), 21 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
index 405e8a3b7f7..3e328caa4f1 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
@@ -34,14 +34,10 @@ fun ConfirmDataResetDialog(
dismissOnClickOutside = false,
dismissOnBackPress = false
),
- onDismissRequest = {
- onDismissRequest()
- },
+ onDismissRequest = { onDismissRequest() },
dismissButton = {
TextButton(
- onClick = {
- onDismissRequest()
- }
+ onClick = { onDismissRequest() }
) {
Text(stringResource(R.string.admin_confirm_app_wipe_negative_button_text))
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
index de1d8c6a0ae..ea290847929 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
@@ -32,23 +32,17 @@ fun ForgotAdminPinDialog(
dismissOnClickOutside = false,
dismissOnBackPress = false
),
- onDismissRequest = {
- onDismissRequest()
- },
+ onDismissRequest = { onDismissRequest() },
dismissButton = {
TextButton(
- onClick = {
- onDismissRequest()
- }
+ onClick = { onDismissRequest() }
) {
Text(stringResource(R.string.profile_login_forgot_pin_dialog_cancel_button))
}
},
confirmButton = {
TextButton(
- onClick = {
- onConfirmation()
- }
+ onClick = { onConfirmation() }
) {
Text(stringResource(R.string.profile_login_forgot_pin_dialog_reset_button, appName))
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
index 333d0b0cc5d..792a966b2fd 100644
--- a/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/PinPasswordActivityPresenter.kt
@@ -138,21 +138,32 @@ class PinPasswordActivityPresenter @Inject constructor(
}
binding.forgotPin.setOnClickListener {
- if (pinViewModel.isAdmin.get()!!) {
+ val isAdmin = pinViewModel.isAdmin.get() ?: false
+ if (isAdmin) {
showAdminForgotPin()
} else {
val previousFrag =
activity.supportFragmentManager.findFragmentByTag(TAG_ADMIN_SETTINGS_DIALOG)
if (previousFrag != null) {
- activity.supportFragmentManager.beginTransaction().remove(previousFrag).commitNow()
+ activity.supportFragmentManager.beginTransaction()
+ .remove(previousFrag)
+ .commitNow()
+ }
+
+ val nameValue = pinViewModel.name.get()
+
+ if (adminPin != null && nameValue != null) {
+ val dialogFragment = AdminSettingsDialogFragment
+ .newInstance(adminPin, profileId, nameValue)
+ dialogFragment.showNow(
+ activity.supportFragmentManager,
+ TAG_ADMIN_SETTINGS_DIALOG
+ )
}
- val dialogFragment = AdminSettingsDialogFragment
- .newInstance(adminPin!!, profileId, pinViewModel.name.get()!!)
- dialogFragment.showNow(activity.supportFragmentManager, TAG_ADMIN_SETTINGS_DIALOG)
}
}
- if (pinViewModel.showAdminPinForgotPasswordPopUp.get()!!) {
+ if (pinViewModel.showAdminPinForgotPasswordPopUp.get() == true) {
showAdminForgotPin()
}
}
From 92efbaf27a68f6686ad92f1c66c9894a0f5b1015 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 1 Jul 2025 13:22:17 +0300
Subject: [PATCH 31/43] Revert unrelated changed
---
.../java/org/oppia/android/util/parser/html/HtmlParser.kt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
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 3656b7d4c21..9ca68350767 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
@@ -13,12 +13,12 @@ import android.view.View
import android.widget.TextView
import androidx.core.text.util.LinkifyCompat
import androidx.core.view.ViewCompat
+import javax.inject.Inject
import org.oppia.android.util.locale.OppiaLocale
import org.oppia.android.util.logging.ConsoleLogger
import org.oppia.android.util.parser.image.UrlImageParser
import org.oppia.android.util.platformparameter.CacheLatexRendering
import org.oppia.android.util.platformparameter.PlatformParameterValue
-import javax.inject.Inject
/** Html Parser to parse custom Oppia tags with Android-compatible versions. */
class HtmlParser private constructor(
@@ -179,7 +179,7 @@ class HtmlParser private constructor(
private fun trimSpannable(spannable: SpannableStringBuilder): SpannableStringBuilder {
val trimmedText = spannable.toString()
val trimStart = if (trimmedText.startsWith("\n")) 1 else 0
- val trimEnd = if (trimmedText.length > 1 && trimmedText.endsWith("\n")) 1 else 0
+ val trimEnd = if (trimmedText.length > 1 && trimmedText.endsWith("\n")) 2 else 0
return spannable.delete(0, trimStart).delete(spannable.length - trimEnd, spannable.length)
}
From 99eeafb3ea89c52c3a1a05189cf255c8db59b239 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 1 Jul 2025 14:26:54 +0300
Subject: [PATCH 32/43] fix tests
---
.../app/profile/ProfileLoginFragmentTest.kt | 74 +++++++++++++++----
.../android/util/parser/html/HtmlParser.kt | 2 +-
2 files changed, 62 insertions(+), 14 deletions(-)
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 380cb6bad3f..f074fd5ac45 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -138,13 +138,10 @@ class ProfileLoginFragmentTest {
@Inject lateinit var editTextInputAction: EditTextInputAction
private lateinit var scenario: ActivityScenario
- private lateinit var appName: String
@Before
fun setUp() {
Intents.init()
- setUpTestApplicationComponent()
- appName = context.getString(R.string.app_name)
}
@After
@@ -155,6 +152,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_allTextViewsHaveCorrectContent() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -172,6 +170,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onConfigChange_profileNameIsRetained() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
onView(isRoot()).perform(orientationLandscape())
@@ -184,6 +183,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_adminProfile_fivePinInputBoxesAreDisplayed() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -202,6 +202,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_learnerProfile_threePinInputBoxesAreDisplayed() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -220,6 +221,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_onLaunch_errorMessageDoesNotShow() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -231,6 +233,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterTwoDigits_doesNotTriggerLogin() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -258,7 +261,9 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterThreeDigits_triggersLoginAndOpensHomeScreen() {
+ TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
+ setUpTestApplicationComponentWithoutFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -275,7 +280,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_classroomsEnabled_enterCorrectThreeDigits_opensClassroomsScreen() {
- TestPlatformParameterModule.forceEnableMultipleClassrooms(true)
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -292,6 +297,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdmin_enterWrongThreeDigits_showsErrorMessage() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -308,6 +314,7 @@ class ProfileLoginFragmentTest {
}
fun testFragment_adminProfile_enterFourDigits_doesNotTriggerLogin() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -345,7 +352,9 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminProfile_enterCorrectFiveDigits_triggersLoginAndOpensHomeScreen() {
+ TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
+ setUpTestApplicationComponentWithoutFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -362,7 +371,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminProfile_classroomsEnabled_enterFiveDigits_opensClassroomScreen() {
- TestPlatformParameterModule.forceEnableMultipleClassrooms(true)
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -379,6 +388,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminProfile_enterWrongFiveDigits_showsErrorMessage() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -396,6 +406,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminUser_clickForgotPin_opensAdminForgotPinDialogFlow() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -412,7 +423,10 @@ class ProfileLoginFragmentTest {
composeRule
.onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_message, appName)
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_message,
+ context.getString(R.string.app_name)
+ )
)
.assertIsDisplayed()
@@ -424,13 +438,17 @@ class ProfileLoginFragmentTest {
composeRule
.onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
.assertIsDisplayed()
}
@Test
fun testFragment_adminUser_openForgotPin_clickCancel_dismissesTheDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -453,6 +471,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminUser_openForgotPin_clickResetData_opensAdminResetPinDialogFlow() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -461,7 +480,10 @@ class ProfileLoginFragmentTest {
composeRule
.onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
.assertIsDisplayed()
.performClick()
@@ -471,12 +493,20 @@ class ProfileLoginFragmentTest {
.assertIsDisplayed()
composeRule
- .onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_title, appName))
+ .onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_title,
+ context.getString(R.string.app_name)
+ )
+ )
.assertIsDisplayed()
composeRule
.onNodeWithText(
- context.getString(R.string.admin_confirm_app_wipe_message, appName)
+ context.getString(
+ R.string.admin_confirm_app_wipe_message,
+ context.getString(R.string.app_name)
+ )
)
.assertIsDisplayed()
@@ -495,6 +525,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminUser_declineDataReset_dismissesTheDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -507,7 +538,10 @@ class ProfileLoginFragmentTest {
composeRule
.onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
.performClick()
@@ -527,6 +561,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_adminUser_confirmDataReset_closesTheApp() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -539,7 +574,10 @@ class ProfileLoginFragmentTest {
composeRule
.onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_reset_button, appName)
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
.performClick()
@@ -560,6 +598,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdminUser_clickForgotPin_opensNonAdminForgotPinDialogFlow() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -575,6 +614,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdminUser_forgotPinDialog_clickCancel_dismissesTheDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -594,6 +634,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdminUser_enterWrongAdminPin_showsWrongAdminPinError() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
scenario = launch(ProfileLoginActivity::class.java)
testCoroutineDispatchers.runCurrent()
@@ -618,6 +659,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.initializeProfiles()
val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
scenario = launch(
@@ -645,6 +687,7 @@ class ProfileLoginFragmentTest {
@Test
fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.initializeProfiles()
val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
scenario = launch(
@@ -681,8 +724,13 @@ class ProfileLoginFragmentTest {
.check(matches(isDisplayed()))
}
- private fun setUpTestApplicationComponent() {
+ private fun setUpTestApplicationComponentWithFeatureFlags() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
+ TestPlatformParameterModule.forceEnableMultipleClassrooms(true)
+ ApplicationProvider.getApplicationContext().inject(this)
+ }
+
+ private fun setUpTestApplicationComponentWithoutFeatureFlags() {
ApplicationProvider.getApplicationContext().inject(this)
}
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 9ca68350767..9a3823c5249 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
@@ -13,12 +13,12 @@ import android.view.View
import android.widget.TextView
import androidx.core.text.util.LinkifyCompat
import androidx.core.view.ViewCompat
-import javax.inject.Inject
import org.oppia.android.util.locale.OppiaLocale
import org.oppia.android.util.logging.ConsoleLogger
import org.oppia.android.util.parser.image.UrlImageParser
import org.oppia.android.util.platformparameter.CacheLatexRendering
import org.oppia.android.util.platformparameter.PlatformParameterValue
+import javax.inject.Inject
/** Html Parser to parse custom Oppia tags with Android-compatible versions. */
class HtmlParser private constructor(
From f6c3ce44def3dff7d76f61ca57026000013ae013 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 1 Jul 2025 16:14:29 +0300
Subject: [PATCH 33/43] Repin dependencies
---
third_party/maven_install.json | 181 ++++++++++++++++++++++++++++++++-
1 file changed, 179 insertions(+), 2 deletions(-)
diff --git a/third_party/maven_install.json b/third_party/maven_install.json
index 43da957b38c..2adb4c66733 100755
--- a/third_party/maven_install.json
+++ b/third_party/maven_install.json
@@ -1,7 +1,7 @@
{
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
- "__INPUT_ARTIFACTS_HASH": -32092749,
- "__RESOLVED_ARTIFACTS_HASH": 945869759,
+ "__INPUT_ARTIFACTS_HASH": 1109677027,
+ "__RESOLVED_ARTIFACTS_HASH": 568452267,
"conflict_resolution": {
"androidx.annotation:annotation:1.1.0": "androidx.annotation:annotation:1.2.0",
"androidx.constraintlayout:constraintlayout:1.1.3": "androidx.constraintlayout:constraintlayout:2.0.1",
@@ -815,6 +815,12 @@
},
"version": "30.3.1"
},
+ "com.android.tools.lint:lint-tests": {
+ "shasums": {
+ "jar": "c614f85b7ee779c3dde79fe12f94b67e42afee49af920771a505c12114d678d7"
+ },
+ "version": "30.3.1"
+ },
"com.android.tools:annotations": {
"shasums": {
"jar": "77e5196bcafc283c5e987f0944f049eee0e68b532ebeb530d855f6f196db4f2a"
@@ -1631,6 +1637,12 @@
},
"version": "3.21.3"
},
+ "org.codehaus.groovy:groovy": {
+ "shasums": {
+ "jar": "77bf86897f295f8cae2e1f46b1eca109f487ba81b66ef24a2b6dcba1eb7d6ce7"
+ },
+ "version": "3.0.9"
+ },
"org.codehaus.mojo:animal-sniffer-annotations": {
"shasums": {
"jar": "e67ec27ceeaf13ab5d54cf5fdbcc544c41b4db8d02d9f006678cca2c7c13ee9d"
@@ -2732,6 +2744,23 @@
"net.sf.kxml:kxml2",
"org.jetbrains.kotlin:kotlin-stdlib-jdk8"
],
+ "com.android.tools.lint:lint-tests": [
+ "com.android.tools.external.com-intellij:intellij-core",
+ "com.android.tools.external.com-intellij:kotlin-compiler",
+ "com.android.tools.external.org-jetbrains:uast",
+ "com.android.tools.layoutlib:layoutlib-api",
+ "com.android.tools.lint:lint",
+ "com.android.tools:common",
+ "com.android.tools:sdk-common",
+ "com.android.tools:sdklib",
+ "junit:junit",
+ "net.sf.kxml:kxml2",
+ "org.codehaus.groovy:groovy",
+ "org.jetbrains.kotlin:kotlin-stdlib-jdk8",
+ "org.mockito:mockito-core",
+ "org.ow2.asm:asm",
+ "org.ow2.asm:asm-tree"
+ ],
"com.android.tools:common": [
"com.android.tools:annotations",
"com.google.guava:guava",
@@ -4638,6 +4667,9 @@
"com.android.tools.lint:lint-model": [
"com.android.tools.lint.model"
],
+ "com.android.tools.lint:lint-tests": [
+ "com.android.tools.lint.checks.infrastructure"
+ ],
"com.android.tools:annotations": [
"com.android.annotations",
"com.android.annotations.concurrency"
@@ -5634,6 +5666,143 @@
"org.checkerframework.dataflow.qual",
"org.checkerframework.framework.qual"
],
+ "org.codehaus.groovy:groovy": [
+ "groovy.beans",
+ "groovy.cli",
+ "groovy.cli.internal",
+ "groovy.grape",
+ "groovy.inspect",
+ "groovy.io",
+ "groovy.lang",
+ "groovy.lang.groovydoc",
+ "groovy.namespace",
+ "groovy.security",
+ "groovy.time",
+ "groovy.transform",
+ "groovy.transform.builder",
+ "groovy.transform.options",
+ "groovy.transform.stc",
+ "groovy.ui",
+ "groovy.util",
+ "groovy.util.logging",
+ "groovy.xml",
+ "groovyjarjarantlr",
+ "groovyjarjarantlr.ASdebug",
+ "groovyjarjarantlr.actions.cpp",
+ "groovyjarjarantlr.actions.csharp",
+ "groovyjarjarantlr.actions.java",
+ "groovyjarjarantlr.actions.python",
+ "groovyjarjarantlr.build",
+ "groovyjarjarantlr.collections",
+ "groovyjarjarantlr.collections.impl",
+ "groovyjarjarantlr.debug",
+ "groovyjarjarantlr.debug.misc",
+ "groovyjarjarantlr.preprocessor",
+ "groovyjarjarantlr4.runtime",
+ "groovyjarjarantlr4.runtime.debug",
+ "groovyjarjarantlr4.runtime.misc",
+ "groovyjarjarantlr4.runtime.tree",
+ "groovyjarjarantlr4.v4",
+ "groovyjarjarantlr4.v4.analysis",
+ "groovyjarjarantlr4.v4.automata",
+ "groovyjarjarantlr4.v4.codegen",
+ "groovyjarjarantlr4.v4.codegen.model",
+ "groovyjarjarantlr4.v4.codegen.model.chunk",
+ "groovyjarjarantlr4.v4.codegen.model.decl",
+ "groovyjarjarantlr4.v4.codegen.target",
+ "groovyjarjarantlr4.v4.gui",
+ "groovyjarjarantlr4.v4.misc",
+ "groovyjarjarantlr4.v4.parse",
+ "groovyjarjarantlr4.v4.runtime",
+ "groovyjarjarantlr4.v4.runtime.atn",
+ "groovyjarjarantlr4.v4.runtime.dfa",
+ "groovyjarjarantlr4.v4.runtime.misc",
+ "groovyjarjarantlr4.v4.runtime.tree",
+ "groovyjarjarantlr4.v4.runtime.tree.pattern",
+ "groovyjarjarantlr4.v4.runtime.tree.xpath",
+ "groovyjarjarantlr4.v4.semantics",
+ "groovyjarjarantlr4.v4.tool",
+ "groovyjarjarantlr4.v4.tool.ast",
+ "groovyjarjarantlr4.v4.unicode",
+ "groovyjarjarasm.asm",
+ "groovyjarjarasm.asm.commons",
+ "groovyjarjarasm.asm.signature",
+ "groovyjarjarasm.asm.tree",
+ "groovyjarjarasm.asm.util",
+ "groovyjarjarpicocli",
+ "org.apache.groovy.antlr",
+ "org.apache.groovy.ast.tools",
+ "org.apache.groovy.internal.metaclass",
+ "org.apache.groovy.internal.util",
+ "org.apache.groovy.io",
+ "org.apache.groovy.lang.annotation",
+ "org.apache.groovy.metaclass",
+ "org.apache.groovy.parser.antlr4",
+ "org.apache.groovy.parser.antlr4.internal",
+ "org.apache.groovy.parser.antlr4.internal.atnmanager",
+ "org.apache.groovy.parser.antlr4.util",
+ "org.apache.groovy.plugin",
+ "org.apache.groovy.util",
+ "org.apache.groovy.util.concurrent",
+ "org.apache.groovy.util.concurrent.concurrentlinkedhashmap",
+ "org.codehaus.groovy",
+ "org.codehaus.groovy.antlr",
+ "org.codehaus.groovy.antlr.java",
+ "org.codehaus.groovy.antlr.parser",
+ "org.codehaus.groovy.antlr.treewalker",
+ "org.codehaus.groovy.ast",
+ "org.codehaus.groovy.ast.builder",
+ "org.codehaus.groovy.ast.decompiled",
+ "org.codehaus.groovy.ast.expr",
+ "org.codehaus.groovy.ast.stmt",
+ "org.codehaus.groovy.ast.tools",
+ "org.codehaus.groovy.classgen",
+ "org.codehaus.groovy.classgen.asm",
+ "org.codehaus.groovy.classgen.asm.indy",
+ "org.codehaus.groovy.classgen.asm.indy.sc",
+ "org.codehaus.groovy.classgen.asm.sc",
+ "org.codehaus.groovy.classgen.asm.util",
+ "org.codehaus.groovy.control",
+ "org.codehaus.groovy.control.customizers",
+ "org.codehaus.groovy.control.customizers.builder",
+ "org.codehaus.groovy.control.io",
+ "org.codehaus.groovy.control.messages",
+ "org.codehaus.groovy.plugin",
+ "org.codehaus.groovy.reflection",
+ "org.codehaus.groovy.reflection.android",
+ "org.codehaus.groovy.reflection.stdclasses",
+ "org.codehaus.groovy.reflection.v7",
+ "org.codehaus.groovy.runtime",
+ "org.codehaus.groovy.runtime.callsite",
+ "org.codehaus.groovy.runtime.dgmimpl",
+ "org.codehaus.groovy.runtime.dgmimpl.arrays",
+ "org.codehaus.groovy.runtime.m12n",
+ "org.codehaus.groovy.runtime.memoize",
+ "org.codehaus.groovy.runtime.metaclass",
+ "org.codehaus.groovy.runtime.powerassert",
+ "org.codehaus.groovy.runtime.typehandling",
+ "org.codehaus.groovy.runtime.wrappers",
+ "org.codehaus.groovy.syntax",
+ "org.codehaus.groovy.tools",
+ "org.codehaus.groovy.tools.ast",
+ "org.codehaus.groovy.tools.gse",
+ "org.codehaus.groovy.tools.javac",
+ "org.codehaus.groovy.tools.shell",
+ "org.codehaus.groovy.tools.shell.util",
+ "org.codehaus.groovy.transform",
+ "org.codehaus.groovy.transform.sc",
+ "org.codehaus.groovy.transform.sc.transformers",
+ "org.codehaus.groovy.transform.stc",
+ "org.codehaus.groovy.transform.tailrec",
+ "org.codehaus.groovy.transform.trait",
+ "org.codehaus.groovy.util",
+ "org.codehaus.groovy.vmplugin",
+ "org.codehaus.groovy.vmplugin.v5",
+ "org.codehaus.groovy.vmplugin.v6",
+ "org.codehaus.groovy.vmplugin.v7",
+ "org.codehaus.groovy.vmplugin.v8",
+ "org.codehaus.groovy.vmplugin.v9"
+ ],
"org.codehaus.mojo:animal-sniffer-annotations": [
"org.codehaus.mojo.animal_sniffer"
],
@@ -7071,6 +7240,7 @@
"com.android.tools.lint:lint-api",
"com.android.tools.lint:lint-checks",
"com.android.tools.lint:lint-model",
+ "com.android.tools.lint:lint-tests",
"com.android.tools:annotations",
"com.android.tools:common",
"com.android.tools:dvlib",
@@ -7207,6 +7377,7 @@
"org.bouncycastle:bcprov-jdk15on",
"org.checkerframework:checker-compat-qual",
"org.checkerframework:checker-qual",
+ "org.codehaus.groovy:groovy",
"org.codehaus.mojo:animal-sniffer-annotations",
"org.eclipse.parsson:parsson",
"org.glassfish.jaxb:jaxb-runtime",
@@ -7396,6 +7567,7 @@
"com.android.tools.lint:lint-api",
"com.android.tools.lint:lint-checks",
"com.android.tools.lint:lint-model",
+ "com.android.tools.lint:lint-tests",
"com.android.tools:annotations",
"com.android.tools:common",
"com.android.tools:dvlib",
@@ -7532,6 +7704,7 @@
"org.bouncycastle:bcprov-jdk15on",
"org.checkerframework:checker-compat-qual",
"org.checkerframework:checker-qual",
+ "org.codehaus.groovy:groovy",
"org.codehaus.mojo:animal-sniffer-annotations",
"org.eclipse.parsson:parsson",
"org.glassfish.jaxb:jaxb-runtime",
@@ -7721,6 +7894,7 @@
"com.android.tools.lint:lint-api",
"com.android.tools.lint:lint-checks",
"com.android.tools.lint:lint-model",
+ "com.android.tools.lint:lint-tests",
"com.android.tools:annotations",
"com.android.tools:common",
"com.android.tools:dvlib",
@@ -7857,6 +8031,7 @@
"org.bouncycastle:bcprov-jdk15on",
"org.checkerframework:checker-compat-qual",
"org.checkerframework:checker-qual",
+ "org.codehaus.groovy:groovy",
"org.codehaus.mojo:animal-sniffer-annotations",
"org.eclipse.parsson:parsson",
"org.glassfish.jaxb:jaxb-runtime",
@@ -8046,6 +8221,7 @@
"com.android.tools.lint:lint-api",
"com.android.tools.lint:lint-checks",
"com.android.tools.lint:lint-model",
+ "com.android.tools.lint:lint-tests",
"com.android.tools:annotations",
"com.android.tools:common",
"com.android.tools:dvlib",
@@ -8182,6 +8358,7 @@
"org.bouncycastle:bcprov-jdk15on",
"org.checkerframework:checker-compat-qual",
"org.checkerframework:checker-qual",
+ "org.codehaus.groovy:groovy",
"org.codehaus.mojo:animal-sniffer-annotations",
"org.eclipse.parsson:parsson",
"org.glassfish.jaxb:jaxb-runtime",
From 4b42e6457daba52cd940bf6c267124d808da13aa Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Thu, 3 Jul 2025 23:53:03 +0300
Subject: [PATCH 34/43] Exempt files from coverage.
---
scripts/assets/test_file_exemptions.textproto | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto
index 6b3ccbe8986..dfbfcf08583 100644
--- a/scripts/assets/test_file_exemptions.textproto
+++ b/scripts/assets/test_file_exemptions.textproto
@@ -1954,10 +1954,18 @@ test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileItemViewModel.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivity.kt"
+ source_file_is_incompatible_with_code_coverage: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt"
test_file_not_required: true
}
+test_file_exemption {
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragment.kt"
+ source_file_is_incompatible_with_code_coverage: true
+}
test_file_exemption {
exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt"
test_file_not_required: true
From da39e88725135baa0a7c95b123e42b06faf16165 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 4 Jul 2025 00:23:47 +0300
Subject: [PATCH 35/43] Address reviewer comments
---
...PinDialog.kt => AdminPinRecoveryDialog.kt} | 6 ++---
...alog.kt => DataResetConfirmationDialog.kt} | 10 +++----
.../profile/ProfileLoginActivityPresenter.kt | 1 -
.../profile/ProfileLoginFragmentPresenter.kt | 25 +++++++----------
.../res/layout/profile_login_activity.xml | 13 +++------
.../res/layout/profile_login_fragment.xml | 12 +++------
.../app/profile/ProfileLoginFragmentTest.kt | 27 ++++++++++---------
7 files changed, 38 insertions(+), 56 deletions(-)
rename app/src/main/java/org/oppia/android/app/profile/{ForgotAdminPinDialog.kt => AdminPinRecoveryDialog.kt} (89%)
rename app/src/main/java/org/oppia/android/app/profile/{ConfirmDataResetDialog.kt => DataResetConfirmationDialog.kt} (80%)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
similarity index 89%
rename from app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
rename to app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
index ea290847929..c8297d9c179 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
@@ -11,11 +11,11 @@ import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
/** Test tag for the admin's forgot pin dialog. */
-const val ADMIN_FORGOT_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_forgot_pin"
+const val ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG = "TEST_TAG.admin_forgot_pin"
/** Composable that represents the admin's forgot pin dialog. */
@Composable
-fun ForgotAdminPinDialog(
+fun AdminPinRecoveryDialog(
onDismissRequest: () -> Unit,
onConfirmation: () -> Unit
) {
@@ -47,6 +47,6 @@ fun ForgotAdminPinDialog(
Text(stringResource(R.string.profile_login_forgot_pin_dialog_reset_button, appName))
}
},
- modifier = Modifier.testTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ modifier = Modifier.testTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
similarity index 80%
rename from app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
rename to app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
index 3e328caa4f1..ad087850941 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
@@ -10,12 +10,12 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
-/** Test tag for the confirm reset pin dialog. */
-const val ADMIN_RESET_PIN_DIALOG_TEST_TAG = "TEST_TAG.admin_reset_pin"
+/** Test tag for the confirm reset app data dialog. */
+const val DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG = "TEST_TAG.admin_reset_app_data"
-/** Composable that represents the admin's reset pin confirmation dialog. */
+/** Composable that represents the admin's reset app data confirmation dialog. */
@Composable
-fun ConfirmDataResetDialog(
+fun DataResetConfirmationDialog(
onDismissRequest: () -> Unit,
deleteAppData: () -> Unit
) {
@@ -54,6 +54,6 @@ fun ConfirmDataResetDialog(
)
}
},
- modifier = Modifier.testTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ modifier = Modifier.testTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
index 0e2197112db..dd397e4e961 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -42,7 +42,6 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
/** Handles showing the [ResetPinDialogFragment]. */
fun handleRouteToResetPinDialog(profileId: ProfileId, profileName: String) {
-
val adminPinDialog = fragmentManager.findFragmentByTag(TAG_VALIDATE_ADMIN_PIN_DIALOG)
as DialogFragment
adminPinDialog.dismiss()
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index c1a4ce7b755..828ae8040d2 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -372,6 +372,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
Profile by adminProfileLiveData.observeAsState(initial = Profile.getDefaultInstance())
val adminPin = adminProfile.pin
val openForgotPinDialog = remember { mutableStateOf(false) }
+ val openConfirmationDialog = remember { mutableStateOf(false) }
TextButton(
modifier = Modifier.testTag(FORGOT_PIN_TEST_TAG),
@@ -389,28 +390,20 @@ class ProfileLoginFragmentPresenter @Inject constructor(
if (openForgotPinDialog.value) {
if (profileType == ProfileType.SUPERVISOR) {
- ForgotAdminPinDialogFlow(openForgotPinDialog)
+ AdminPinRecoveryDialog(
+ onDismissRequest = { openForgotPinDialog.value = false },
+ onConfirmation = {
+ openForgotPinDialog.value = false
+ openConfirmationDialog.value = true
+ }
+ )
} else {
showResetNonAdminPinFlow(adminPin, openForgotPinDialog, profileId, profileName)
}
}
- }
-
- @Composable
- private fun ForgotAdminPinDialogFlow(openForgotPinDialog: MutableState) {
- val openConfirmationDialog = remember { mutableStateOf(false) }
-
- if (openForgotPinDialog.value) {
- ForgotAdminPinDialog(
- onDismissRequest = { openForgotPinDialog.value = false },
- onConfirmation = {
- openConfirmationDialog.value = true
- }
- )
- }
if (openConfirmationDialog.value) {
- ConfirmDataResetDialog(
+ DataResetConfirmationDialog(
onDismissRequest = { openConfirmationDialog.value = false },
deleteAppData = { deleteAppData() }
)
diff --git a/app/src/main/res/layout/profile_login_activity.xml b/app/src/main/res/layout/profile_login_activity.xml
index 066cb57c9b8..bebfd542bf0 100644
--- a/app/src/main/res/layout/profile_login_activity.xml
+++ b/app/src/main/res/layout/profile_login_activity.xml
@@ -1,12 +1,7 @@
-
-
-
-
+ android:layout_weight="1"
+ android:orientation="vertical" />
diff --git a/app/src/main/res/layout/profile_login_fragment.xml b/app/src/main/res/layout/profile_login_fragment.xml
index 01f37a9c9a8..a61abd85ce7 100644
--- a/app/src/main/res/layout/profile_login_fragment.xml
+++ b/app/src/main/res/layout/profile_login_fragment.xml
@@ -1,15 +1,9 @@
-
-
-
-
+ android:background="@color/component_color_shared_screen_primary_background_color" />
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index f074fd5ac45..4308b651e5f 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -126,9 +126,7 @@ import javax.inject.Singleton
qualifiers = "port-xxhdpi"
)
class ProfileLoginFragmentTest {
- @get:Rule
- val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
-
+ @get:Rule val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
@get:Rule val oppiaTestRule = OppiaTestRule()
@Inject lateinit var context: Context
@Inject lateinit var profileTestHelper: ProfileTestHelper
@@ -413,7 +411,7 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -455,7 +453,7 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -465,12 +463,12 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
.assertDoesNotExist()
}
@Test
- fun testFragment_adminUser_openForgotPin_clickResetData_opensAdminResetPinDialogFlow() {
+ fun testFragment_adminUser_forgotPin_clickResetData_opensResetDataDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
scenario = launch(ProfileLoginActivity::class.java)
@@ -488,7 +486,10 @@ class ProfileLoginFragmentTest {
.assertIsDisplayed()
.performClick()
- composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
+
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -532,7 +533,7 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -545,7 +546,7 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -555,7 +556,7 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
.assertDoesNotExist()
}
@@ -568,7 +569,7 @@ class ProfileLoginFragmentTest {
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_FORGOT_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
@@ -581,7 +582,7 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(ADMIN_RESET_PIN_DIALOG_TEST_TAG)
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
.assertExists()
.assertIsDisplayed()
From d9cd074893e8dfab809264f0c75b8c10d28e408f Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Fri, 4 Jul 2025 00:23:59 +0300
Subject: [PATCH 36/43] Fix coverage failures
---
scripts/assets/test_file_exemptions.textproto | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/assets/test_file_exemptions.textproto b/scripts/assets/test_file_exemptions.textproto
index dfbfcf08583..9088d760fef 100644
--- a/scripts/assets/test_file_exemptions.textproto
+++ b/scripts/assets/test_file_exemptions.textproto
@@ -1899,7 +1899,7 @@ test_file_exemption {
test_file_not_required: true
}
test_file_exemption {
- exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ConfirmDataResetDialog.kt"
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt"
test_file_not_required: true
}
test_file_exemption {
@@ -1907,7 +1907,7 @@ test_file_exemption {
test_file_not_required: true
}
test_file_exemption {
- exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/ForgotAdminPinDialog.kt"
+ exempted_file_path: "app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt"
test_file_not_required: true
}
test_file_exemption {
From 7a2928ab5047385a2cbb6ac52456ee824330690c Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 26 Aug 2025 00:04:56 +0300
Subject: [PATCH 37/43] Use use {} block for scenario
---
.../res/layout/profile_login_fragment.xml | 10 +-
.../app/profile/ProfileLoginFragmentTest.kt | 675 ++++++++++--------
2 files changed, 384 insertions(+), 301 deletions(-)
diff --git a/app/src/main/res/layout/profile_login_fragment.xml b/app/src/main/res/layout/profile_login_fragment.xml
index a61abd85ce7..91f21d1dbad 100644
--- a/app/src/main/res/layout/profile_login_fragment.xml
+++ b/app/src/main/res/layout/profile_login_fragment.xml
@@ -1,9 +1,9 @@
-
+
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 4308b651e5f..941113a7149 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -22,6 +22,7 @@ import androidx.test.espresso.assertion.ViewAssertions.doesNotExist
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.Intents.times
import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent
import androidx.test.espresso.matcher.RootMatchers.isDialog
import androidx.test.espresso.matcher.ViewMatchers.isDisplayed
@@ -31,6 +32,7 @@ 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.Matchers.not
import org.junit.After
import org.junit.Before
import org.junit.Rule
@@ -126,14 +128,29 @@ import javax.inject.Singleton
qualifiers = "port-xxhdpi"
)
class ProfileLoginFragmentTest {
- @get:Rule val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
- @get:Rule val oppiaTestRule = OppiaTestRule()
- @Inject lateinit var context: Context
- @Inject lateinit var profileTestHelper: ProfileTestHelper
- @Inject lateinit var profileManagementController: ProfileManagementController
- @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
- @get:Rule val composeRule = createEmptyComposeRule()
- @Inject lateinit var editTextInputAction: EditTextInputAction
+ @get:Rule
+ val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+
+ @get:Rule
+ val oppiaTestRule = OppiaTestRule()
+
+ @Inject
+ lateinit var context: Context
+
+ @Inject
+ lateinit var profileTestHelper: ProfileTestHelper
+
+ @Inject
+ lateinit var profileManagementController: ProfileManagementController
+
+ @Inject
+ lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+
+ @get:Rule
+ val composeRule = createEmptyComposeRule()
+
+ @Inject
+ lateinit var editTextInputAction: EditTextInputAction
private lateinit var scenario: ActivityScenario
@@ -152,109 +169,119 @@ class ProfileLoginFragmentTest {
fun testFragment_onLaunch_allTextViewsHaveCorrectContent() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(GREETING_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
- .assertIsDisplayed()
- composeRule.onNodeWithTag(PROMPT_TEST_TAG).assertIsDisplayed()
- .assertTextContains(context.getString(R.string.profile_login_activity_enter_pin_prompt))
- .assertIsDisplayed()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_forgot_pin_text))
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(GREETING_TEST_TAG)
+ .assertTextContains(
+ context.getString(R.string.profile_login_activity_greeting_text, "Admin")
+ )
+ composeRule.onNodeWithTag(PROMPT_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_enter_pin_prompt))
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_forgot_pin_text))
+ }
}
@Test
fun testFragment_onConfigChange_profileNameIsRetained() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- onView(isRoot()).perform(orientationLandscape())
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ onView(isRoot()).perform(orientationLandscape())
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(GREETING_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(GREETING_TEST_TAG)
+ .assertTextContains(
+ context.getString(R.string.profile_login_activity_greeting_text, "Admin")
+ )
+ }
}
@Test
fun testFragment_onLaunch_adminProfile_fivePinInputBoxesAreDisplayed() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- repeat(5) { index ->
+ repeat(5) { index ->
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
+ .assertIsDisplayed()
+ }
+
+ // Ensure there's no 6th box
composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
- .assertIsDisplayed()
+ .onNodeWithTag("pin_box_5", useUnmergedTree = true)
+ .assertDoesNotExist()
}
-
- // Ensure there's no 6th box
- composeRule
- .onNodeWithTag("pin_box_5", useUnmergedTree = true)
- .assertDoesNotExist()
}
@Test
fun testFragment_onLaunch_learnerProfile_threePinInputBoxesAreDisplayed() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+
+ repeat(3) { index ->
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
+ .assertIsDisplayed()
+ }
- repeat(3) { index ->
+ // Ensure there's no 4th box
composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + index, useUnmergedTree = true)
- .assertIsDisplayed()
+ .onNodeWithTag("pin_box_3", useUnmergedTree = true)
+ .assertDoesNotExist()
}
-
- // Ensure there's no 4th box
- composeRule
- .onNodeWithTag("pin_box_3", useUnmergedTree = true)
- .assertDoesNotExist()
}
@Test
fun testFragment_onLaunch_errorMessageDoesNotShow() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertDoesNotExist()
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertDoesNotExist()
+ }
}
@Test
fun testFragment_nonAdmin_enterTwoDigits_doesNotTriggerLogin() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("12")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("12")
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
- .assertContentDescriptionEquals("1")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
+ .assertContentDescriptionEquals("1")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
- .assertContentDescriptionEquals("2")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
+ .assertContentDescriptionEquals("2")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
- .assertContentDescriptionEquals("")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
+ .assertContentDescriptionEquals("")
+ .assertIsDisplayed()
+
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name), times(0))
+ }
}
@Test
@@ -263,89 +290,94 @@ class ProfileLoginFragmentTest {
TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
setUpTestApplicationComponentWithoutFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("123")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("123")
- testCoroutineDispatchers.runCurrent()
+ testCoroutineDispatchers.runCurrent()
- intended(hasComponent(HomeActivity::class.java.name))
+ intended(hasComponent(HomeActivity::class.java.name))
+ }
}
@Test
fun testFragment_nonAdmin_classroomsEnabled_enterCorrectThreeDigits_opensClassroomsScreen() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("123")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("123")
- testCoroutineDispatchers.runCurrent()
+ testCoroutineDispatchers.runCurrent()
- intended(hasComponent(ClassroomListActivity::class.java.name))
+ intended(hasComponent(ClassroomListActivity::class.java.name))
+ }
}
@Test
fun testFragment_nonAdmin_enterWrongThreeDigits_showsErrorMessage() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("111")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("111")
- composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ }
}
fun testFragment_adminProfile_enterFourDigits_doesNotTriggerLogin() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("1234")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("1234")
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
- .assertContentDescriptionEquals("1")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 0, useUnmergedTree = true)
+ .assertContentDescriptionEquals("1")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
- .assertContentDescriptionEquals("2")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 1, useUnmergedTree = true)
+ .assertContentDescriptionEquals("2")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
- .assertContentDescriptionEquals("3")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 2, useUnmergedTree = true)
+ .assertContentDescriptionEquals("3")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 3, useUnmergedTree = true)
- .assertContentDescriptionEquals("4")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 3, useUnmergedTree = true)
+ .assertContentDescriptionEquals("4")
+ .assertIsDisplayed()
- composeRule
- .onNodeWithTag(PIN_BOX_TEST_TAG + 4, useUnmergedTree = true)
- .assertContentDescriptionEquals("")
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_BOX_TEST_TAG + 4, useUnmergedTree = true)
+ .assertContentDescriptionEquals("")
+ .assertIsDisplayed()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name), times(0))
+ }
}
@Test
@@ -354,290 +386,315 @@ class ProfileLoginFragmentTest {
TestPlatformParameterModule.forceEnableMultipleClassrooms(false)
setUpTestApplicationComponentWithoutFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("12345")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("12345")
- testCoroutineDispatchers.runCurrent()
+ testCoroutineDispatchers.runCurrent()
- intended(hasComponent(HomeActivity::class.java.name))
+ intended(hasComponent(HomeActivity::class.java.name))
+ }
}
@Test
fun testFragment_adminProfile_classroomsEnabled_enterFiveDigits_opensClassroomScreen() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("12345")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("12345")
- testCoroutineDispatchers.runCurrent()
+ testCoroutineDispatchers.runCurrent()
- intended(hasComponent(ClassroomListActivity::class.java.name))
+ intended(hasComponent(ClassroomListActivity::class.java.name))
+ }
}
@Test
fun testFragment_adminProfile_enterWrongFiveDigits_showsErrorMessage() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule
- .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
- .performClick()
- .performTextInput("22222")
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("22222")
- composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ }
}
@Test
fun testFragment_adminUser_clickForgotPin_opensAdminForgotPinDialogFlow() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.profile_login_forgot_pin_dialog_message,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_message,
+ context.getString(R.string.app_name)
+ )
)
- )
- .assertIsDisplayed()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button)
- )
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button))
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.profile_login_forgot_pin_dialog_reset_button,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
- )
- .assertIsDisplayed()
+ .assertIsDisplayed()
+ }
}
@Test
fun testFragment_adminUser_openForgotPin_clickCancel_dismissesTheDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button)
- )
- .performClick()
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button))
+ .performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertDoesNotExist()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
+ }
}
@Test
fun testFragment_adminUser_forgotPin_clickResetData_opensResetDataDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.profile_login_forgot_pin_dialog_reset_button,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
- )
- .assertIsDisplayed()
- .performClick()
+ .assertIsDisplayed()
+ .performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertDoesNotExist()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.admin_confirm_app_wipe_title,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_title,
+ context.getString(R.string.app_name)
+ )
)
- )
- .assertIsDisplayed()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.admin_confirm_app_wipe_message,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_message, context.getString(R.string.app_name)
+ )
)
- )
- .assertIsDisplayed()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.admin_confirm_app_wipe_negative_button_text)
- )
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_negative_button_text))
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.admin_confirm_app_wipe_positive_button_text)
- )
- .assertIsDisplayed()
+ composeRule
+ .onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_positive_button_text))
+ .assertIsDisplayed()
+ }
}
@Test
fun testFragment_adminUser_declineDataReset_dismissesTheDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use { scenario ->
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.profile_login_forgot_pin_dialog_reset_button,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
- )
- .performClick()
+ .performClick()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.admin_confirm_app_wipe_negative_button_text)
- )
- .performClick()
+ composeRule
+ .onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_negative_button_text))
+ .performClick()
+
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ .assertDoesNotExist()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertDoesNotExist()
+ scenario.onActivity { assertThat(it.isFinishing).isFalse() }
+ }
}
@Test
fun testFragment_adminUser_confirmDataReset_closesTheApp() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addOnlyAdminProfile()
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use { scenario ->
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.profile_login_forgot_pin_dialog_reset_button,
- context.getString(R.string.app_name)
+ composeRule
+ .onNodeWithText(
+ context.getString(
+ R.string.profile_login_forgot_pin_dialog_reset_button,
+ context.getString(R.string.app_name)
+ )
)
- )
- .performClick()
+ .performClick()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ .assertExists()
+ .assertIsDisplayed()
- composeRule
- .onNodeWithText(
- context.getString(R.string.admin_confirm_app_wipe_positive_button_text)
- )
- .performClick()
+ composeRule
+ .onNodeWithText(
+ context.getString(R.string.admin_confirm_app_wipe_positive_button_text)
+ )
+ .performClick()
- testCoroutineDispatchers.runCurrent()
+ testCoroutineDispatchers.runCurrent()
- assertThat(scenario.result.resultCode).isEqualTo(Activity.RESULT_CANCELED)
+ assertThat(scenario.result.resultCode).isEqualTo(Activity.RESULT_CANCELED)
+ }
}
@Test
fun testFragment_nonAdminUser_clickForgotPin_opensNonAdminForgotPinDialogFlow() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.waitForIdle()
+ composeRule.waitForIdle()
- onView(withText(context.getString(R.string.admin_settings_heading)))
- .inRoot(isDialog())
- .check(matches(isDisplayed()))
+ onView(withText(context.getString(R.string.admin_settings_heading)))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ }
}
@Test
fun testFragment_nonAdminUser_forgotPinDialog_clickCancel_dismissesTheDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
- testCoroutineDispatchers.runCurrent()
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
- composeRule.waitForIdle()
+ composeRule.waitForIdle()
- onView(withText(context.getString(R.string.admin_settings_cancel)))
- .inRoot(isDialog())
- .check(matches(isDisplayed()))
- .perform(click())
+ onView(withText(context.getString(R.string.admin_settings_cancel)))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ .perform(click())
- onView(withText(context.getString(R.string.admin_settings_heading)))
- .check(doesNotExist())
+ onView(withText(context.getString(R.string.admin_settings_heading)))
+ .check(doesNotExist())
+ }
}
@Test
fun testFragment_nonAdminUser_enterWrongAdminPin_showsWrongAdminPinError() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.addMoreProfiles(1)
- scenario = launch(ProfileLoginActivity::class.java)
+ launch(ProfileLoginActivity::class.java).use {
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+
+ composeRule.waitForIdle()
+
+ onView(withId(R.id.admin_settings_input_pin_edit_text))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ .perform(editTextInputAction.appendText("1111"), closeSoftKeyboard())
+
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
+ .perform(click())
+
+ onView(withText(context.getString(R.string.admin_settings_incorrect)))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ }
+ }
+
+ @Test
+ fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
+ setUpTestApplicationComponentWithFeatureFlags()
+ profileTestHelper.initializeProfiles()
+ val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
+ scenario = launch(
+ ProfileLoginActivity.createProfileLoginActivityIntent(context, currentUserProfileId)
+ )
testCoroutineDispatchers.runCurrent()
composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
@@ -647,19 +704,19 @@ class ProfileLoginFragmentTest {
onView(withId(R.id.admin_settings_input_pin_edit_text))
.inRoot(isDialog())
.check(matches(isDisplayed()))
- .perform(editTextInputAction.appendText("1111"), closeSoftKeyboard())
+ .perform(editTextInputAction.appendText("12345"), closeSoftKeyboard())
onView(withText(context.getString(R.string.admin_settings_submit)))
.inRoot(isDialog())
.perform(click())
- onView(withText(context.getString(R.string.admin_settings_incorrect)))
+ onView(withId(R.id.reset_pin_input_pin))
.inRoot(isDialog())
.check(matches(isDisplayed()))
}
@Test
- fun testFragment_nonAdminUser_enterCorrectAdminPin_opensPinResetDialog() {
+ fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.initializeProfiles()
val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
@@ -681,13 +738,24 @@ class ProfileLoginFragmentTest {
.inRoot(isDialog())
.perform(click())
- onView(withId(R.id.reset_pin_input_pin))
+ onView(withId(R.id.reset_pin_input_pin_edit_text))
+ .inRoot(isDialog())
+ .check(matches(isDisplayed()))
+ .perform(editTextInputAction.appendText("111"), closeSoftKeyboard())
+
+ onView(withText(context.getString(R.string.admin_settings_submit)))
+ .inRoot(isDialog())
+ .perform(click())
+
+ testCoroutineDispatchers.runCurrent()
+
+ onView(withText(context.getString(R.string.profile_login_reset_pin_success_dialog_message)))
.inRoot(isDialog())
.check(matches(isDisplayed()))
}
@Test
- fun testFragment_nonAdminUser_enterAndSubmitNewPin_opensSuccessDialog() {
+ fun testFragment_nonAdminUser_resetPin_canLogInWithNewPin() {
setUpTestApplicationComponentWithFeatureFlags()
profileTestHelper.initializeProfiles()
val currentUserProfileId = ProfileId.newBuilder().setInternalId(1).build()
@@ -723,6 +791,21 @@ class ProfileLoginFragmentTest {
onView(withText(context.getString(R.string.profile_login_reset_pin_success_dialog_message)))
.inRoot(isDialog())
.check(matches(isDisplayed()))
+
+ onView(withText(context.getString(R.string.profile_login_reset_pin_success_dialog_close)))
+ .inRoot(isDialog())
+ .perform(click())
+
+ testCoroutineDispatchers.runCurrent()
+
+ composeRule
+ .onNodeWithTag(PIN_INPUT_TEST_TAG, useUnmergedTree = true)
+ .performClick()
+ .performTextInput("111")
+
+ testCoroutineDispatchers.runCurrent()
+
+ intended(hasComponent(ClassroomListActivity::class.java.name))
}
private fun setUpTestApplicationComponentWithFeatureFlags() {
From cc2b32fee2118cdcb5259adc75534cb88ddefda9 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 26 Aug 2025 01:02:54 +0300
Subject: [PATCH 38/43] Remove test tags
---
.../app/profile/AdminPinRecoveryDialog.kt | 6 +-
.../profile/DataResetConfirmationDialog.kt | 6 +-
.../profile/ProfileLoginFragmentPresenter.kt | 36 ++--
.../app/profile/ProfileLoginFragmentTest.kt | 168 ++++++++++--------
4 files changed, 106 insertions(+), 110 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
index c8297d9c179..f884400b1ee 100644
--- a/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
@@ -10,9 +10,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
-/** Test tag for the admin's forgot pin dialog. */
-const val ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG = "TEST_TAG.admin_forgot_pin"
-
/** Composable that represents the admin's forgot pin dialog. */
@Composable
fun AdminPinRecoveryDialog(
@@ -46,7 +43,6 @@ fun AdminPinRecoveryDialog(
) {
Text(stringResource(R.string.profile_login_forgot_pin_dialog_reset_button, appName))
}
- },
- modifier = Modifier.testTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ }
)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
index ad087850941..01042fca5cf 100644
--- a/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
@@ -10,9 +10,6 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
-/** Test tag for the confirm reset app data dialog. */
-const val DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG = "TEST_TAG.admin_reset_app_data"
-
/** Composable that represents the admin's reset app data confirmation dialog. */
@Composable
fun DataResetConfirmationDialog(
@@ -53,7 +50,6 @@ fun DataResetConfirmationDialog(
)
)
}
- },
- modifier = Modifier.testTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ }
)
}
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 828ae8040d2..4fcd292ad88 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -71,21 +71,9 @@ import org.oppia.android.util.platformparameter.EnableMultipleClassrooms
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject
-/** Test tag for the greeting text. */
-const val GREETING_TEST_TAG = "TEST_TAG.greeting"
-
-/** Test tag for the prompt. */
-const val PROMPT_TEST_TAG = "TEST_TAG.prompt"
-
/** Test tag for the pin input boxes. */
const val PIN_INPUT_TEST_TAG = "TEST_TAG.input"
-/** Test tag for the pin error text. */
-const val PIN_ERROR_TEST_TAG = "TEST_TAG.error"
-
-/** Test tag for the forgot pin button. */
-const val FORGOT_PIN_TEST_TAG = "TEST_TAG.forgot_pin"
-
/** Test tag for the forgot pin button. */
const val PIN_BOX_TEST_TAG = "TEST_TAG.pin_box_"
@@ -227,10 +215,12 @@ class ProfileLoginFragmentPresenter @Inject constructor(
.observe(fragment) {
if (it is AsyncResult.Success) {
activity.startActivity(
- if (enableMultipleClassrooms.value)
+ if (enableMultipleClassrooms.value) {
ClassroomListActivity.createClassroomListActivity(activity, profileId)
- else
+ }
+ else {
HomeActivity.createHomeActivity(activity, profileId)
+ }
)
activity.finish()
}
@@ -247,8 +237,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
fontSize = 24.sp,
fontWeight = FontWeight.Bold,
color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
- ),
- modifier = Modifier.testTag(GREETING_TEST_TAG),
+ )
)
Spacer(modifier = Modifier.height(16.dp))
@@ -261,8 +250,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
style = TextStyle(
fontSize = 16.sp,
color = colorResource(id = R.color.component_color_profile_login_primary_text_color)
- ),
- modifier = Modifier.testTag(PROMPT_TEST_TAG)
+ )
)
}
@@ -309,12 +297,14 @@ class ProfileLoginFragmentPresenter @Inject constructor(
.aspectRatio(0.7F)
.border(
width = if (isFocused) 2.dp else 1.dp,
- color = if (isFocused)
+ color = if (isFocused) {
colorResource(id = R.color.component_color_profile_login_shared_primary_color)
- else
+ }
+ else {
colorResource(
id = R.color.component_color_profile_login_unfocused_outline_color
- ),
+ )
+ },
shape = RoundedCornerShape(4.dp)
)
.background(
@@ -343,8 +333,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
style = TextStyle(
fontSize = 14.sp,
color = colorResource(id = R.color.component_color_shared_error_color)
- ),
- modifier = Modifier.testTag(PIN_ERROR_TEST_TAG)
+ )
)
LaunchedEffect(true) {
@@ -375,7 +364,6 @@ class ProfileLoginFragmentPresenter @Inject constructor(
val openConfirmationDialog = remember { mutableStateOf(false) }
TextButton(
- modifier = Modifier.testTag(FORGOT_PIN_TEST_TAG),
onClick = { openForgotPinDialog.value = true }
) {
Text(
diff --git a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
index 941113a7149..8117c1c21e1 100644
--- a/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
+++ b/app/src/sharedTest/java/org/oppia/android/app/profile/ProfileLoginFragmentTest.kt
@@ -6,7 +6,6 @@ import android.content.Context
import androidx.appcompat.app.AppCompatActivity
import androidx.compose.ui.test.assertContentDescriptionEquals
import androidx.compose.ui.test.assertIsDisplayed
-import androidx.compose.ui.test.assertTextContains
import androidx.compose.ui.test.junit4.createEmptyComposeRule
import androidx.compose.ui.test.onNodeWithTag
import androidx.compose.ui.test.onNodeWithText
@@ -128,29 +127,14 @@ import javax.inject.Singleton
qualifiers = "port-xxhdpi"
)
class ProfileLoginFragmentTest {
- @get:Rule
- val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
-
- @get:Rule
- val oppiaTestRule = OppiaTestRule()
-
- @Inject
- lateinit var context: Context
-
- @Inject
- lateinit var profileTestHelper: ProfileTestHelper
-
- @Inject
- lateinit var profileManagementController: ProfileManagementController
-
- @Inject
- lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
-
- @get:Rule
- val composeRule = createEmptyComposeRule()
-
- @Inject
- lateinit var editTextInputAction: EditTextInputAction
+ @get:Rule val initializeDefaultLocaleRule = InitializeDefaultLocaleRule()
+ @get:Rule val oppiaTestRule = OppiaTestRule()
+ @Inject lateinit var context: Context
+ @Inject lateinit var profileTestHelper: ProfileTestHelper
+ @Inject lateinit var profileManagementController: ProfileManagementController
+ @Inject lateinit var testCoroutineDispatchers: TestCoroutineDispatchers
+ @get:Rule val composeRule = createEmptyComposeRule()
+ @Inject lateinit var editTextInputAction: EditTextInputAction
private lateinit var scenario: ActivityScenario
@@ -172,14 +156,14 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(GREETING_TEST_TAG)
- .assertTextContains(
- context.getString(R.string.profile_login_activity_greeting_text, "Admin")
- )
- composeRule.onNodeWithTag(PROMPT_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_enter_pin_prompt))
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_forgot_pin_text))
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
+ .assertIsDisplayed()
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_activity_enter_pin_prompt))
+ .assertIsDisplayed()
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_activity_forgot_pin_text))
+ .assertIsDisplayed()
}
}
@@ -191,10 +175,9 @@ class ProfileLoginFragmentTest {
onView(isRoot()).perform(orientationLandscape())
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(GREETING_TEST_TAG)
- .assertTextContains(
- context.getString(R.string.profile_login_activity_greeting_text, "Admin")
- )
+ composeRule
+ .onNodeWithText(context.getString(R.string.profile_login_activity_greeting_text, "Admin"))
+ .assertIsDisplayed()
}
}
@@ -246,7 +229,7 @@ class ProfileLoginFragmentTest {
testCoroutineDispatchers.runCurrent()
composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
+ .onNodeWithText(context.getString(R.string.profile_login_activity_pin_error))
.assertDoesNotExist()
}
}
@@ -335,8 +318,8 @@ class ProfileLoginFragmentTest {
.performTextInput("111")
composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ .onNodeWithText(context.getString(R.string.profile_login_activity_pin_error))
+ .assertIsDisplayed()
}
}
@@ -431,8 +414,8 @@ class ProfileLoginFragmentTest {
.performTextInput("22222")
composeRule
- .onNodeWithTag(PIN_ERROR_TEST_TAG)
- .assertTextContains(context.getString(R.string.profile_login_activity_pin_error))
+ .onNodeWithText(context.getString(R.string.profile_login_activity_pin_error))
+ .assertIsDisplayed()
}
}
@@ -443,14 +426,12 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
-
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
- .assertExists()
- .assertIsDisplayed()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
- composeRule
- .onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertIsDisplayed()
composeRule
@@ -484,16 +465,19 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertIsDisplayed()
composeRule
.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_cancel_button))
.performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertDoesNotExist()
}
}
@@ -505,7 +489,10 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule
.onNodeWithText(
@@ -517,19 +504,15 @@ class ProfileLoginFragmentTest {
.assertIsDisplayed()
.performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertDoesNotExist()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertIsDisplayed()
-
- composeRule
- .onNodeWithText(
- context.getString(
- R.string.admin_confirm_app_wipe_title,
- context.getString(R.string.app_name)
- )
+ composeRule.onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_title,
+ context.getString(R.string.app_name)
)
+ )
.assertIsDisplayed()
composeRule
@@ -557,9 +540,12 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use { scenario ->
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertIsDisplayed()
composeRule
@@ -571,14 +557,18 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
- .assertIsDisplayed()
+ composeRule.onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_title,
+ context.getString(R.string.app_name)
+ )
+ )
composeRule
.onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_negative_button_text))
.performClick()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.admin_confirm_app_wipe_title))
.assertDoesNotExist()
scenario.onActivity { assertThat(it.isFinishing).isFalse() }
@@ -592,9 +582,12 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use { scenario ->
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
- composeRule.onNodeWithTag(ADMIN_PIN_RECOVERY_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(context.getString(R.string.profile_login_forgot_pin_dialog_title))
.assertExists()
.assertIsDisplayed()
@@ -607,7 +600,12 @@ class ProfileLoginFragmentTest {
)
.performClick()
- composeRule.onNodeWithTag(DATA_RESET_CONFIRMATION_DIALOG_TEST_TAG)
+ composeRule.onNodeWithText(
+ context.getString(
+ R.string.admin_confirm_app_wipe_title,
+ context.getString(R.string.app_name)
+ )
+ )
.assertExists()
.assertIsDisplayed()
@@ -630,7 +628,10 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
@@ -647,7 +648,10 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
@@ -668,7 +672,10 @@ class ProfileLoginFragmentTest {
launch(ProfileLoginActivity::class.java).use {
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
@@ -697,7 +704,10 @@ class ProfileLoginFragmentTest {
)
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
@@ -725,7 +735,10 @@ class ProfileLoginFragmentTest {
)
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
@@ -764,7 +777,10 @@ class ProfileLoginFragmentTest {
)
testCoroutineDispatchers.runCurrent()
- composeRule.onNodeWithTag(FORGOT_PIN_TEST_TAG).performClick()
+ composeRule.onNodeWithText(
+ context.getString(R.string.profile_login_activity_forgot_pin_text)
+ )
+ .performClick()
composeRule.waitForIdle()
From 3ff1286387dd223b55d3cbf3e3a2b0278741e27b Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Tue, 26 Aug 2025 01:26:11 +0300
Subject: [PATCH 39/43] Add lint exemption
---
.../org/oppia/android/app/profile/AdminPinRecoveryDialog.kt | 2 --
.../android/app/profile/DataResetConfirmationDialog.kt | 2 --
.../android/app/profile/ProfileLoginFragmentPresenter.kt | 6 ++----
scripts/assets/android_lint_exemptions.textproto | 4 ++++
4 files changed, 6 insertions(+), 8 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
index f884400b1ee..ca36c9b2968 100644
--- a/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/AdminPinRecoveryDialog.kt
@@ -4,8 +4,6 @@ import androidx.compose.material.AlertDialog
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
diff --git a/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
index 01042fca5cf..dad6196121d 100644
--- a/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/DataResetConfirmationDialog.kt
@@ -4,8 +4,6 @@ import androidx.compose.material.AlertDialog
import androidx.compose.material.Text
import androidx.compose.material.TextButton
import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.window.DialogProperties
import org.oppia.android.app.ui.R
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 4fcd292ad88..dcac0119836 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -217,8 +217,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
activity.startActivity(
if (enableMultipleClassrooms.value) {
ClassroomListActivity.createClassroomListActivity(activity, profileId)
- }
- else {
+ } else {
HomeActivity.createHomeActivity(activity, profileId)
}
)
@@ -299,8 +298,7 @@ class ProfileLoginFragmentPresenter @Inject constructor(
width = if (isFocused) 2.dp else 1.dp,
color = if (isFocused) {
colorResource(id = R.color.component_color_profile_login_shared_primary_color)
- }
- else {
+ } else {
colorResource(
id = R.color.component_color_profile_login_unfocused_outline_color
)
diff --git a/scripts/assets/android_lint_exemptions.textproto b/scripts/assets/android_lint_exemptions.textproto
index 9c78dadf536..3028df7189d 100644
--- a/scripts/assets/android_lint_exemptions.textproto
+++ b/scripts/assets/android_lint_exemptions.textproto
@@ -1798,6 +1798,10 @@ android_lint_exemption: {
exempted_file_path: "app/src/main/res/layout/profile_list_sync_status_item.xml"
lint_issue_id: UNUSED_RESOURCES
}
+android_lint_exemption: {
+ exempted_file_path: "app/src/main/res/layout/profile_login_fragment.xml"
+ lint_issue_id: UNUSED_RESOURCES
+}
android_lint_exemption: {
exempted_file_path: "app/src/main/res/layout/profile_progress_fragment.xml"
lint_issue_id: UNUSED_RESOURCES
From 50f62cdfd86f371dc6aabfd132d01eef85ae2c36 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 1 Sep 2025 17:59:46 +0300
Subject: [PATCH 40/43] Add comments explaining test tag usage
---
.../app/profile/ProfileLoginFragmentPresenter.kt | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index dcac0119836..2a9bf0a6b18 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -71,10 +71,21 @@ import org.oppia.android.util.platformparameter.EnableMultipleClassrooms
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject
-/** Test tag for the pin input boxes. */
+/** Test tag for the pin input field's container.
+ *
+ * It is generally a bad practice to customize something that affects the real production behavior
+ * of a component for test-specific reasons, but in this case, TEST_TAG has been chosen as a last
+ * resort because this Composable does not contain any other useful modifiers that we can use to
+ * identify it in a test run.
+ */
const val PIN_INPUT_TEST_TAG = "TEST_TAG.input"
-/** Test tag for the forgot pin button. */
+/** Test tag for the forgot pin button.
+ *
+ * Similar to [PIN_INPUT_TEST_TAG], we are adding a TEST_TAG modifier to the PIN boxes which are
+ * dynamically generated and do not contain text when created that can be used to match them in
+ * tests.
+ */
const val PIN_BOX_TEST_TAG = "TEST_TAG.pin_box_"
/** The presenter for [ProfileLoginFragment]. */
From f8670b96098e9b29ab6bd9f629c69aae8f644f4f Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 1 Sep 2025 18:25:15 +0300
Subject: [PATCH 41/43] fix kdoc formatting
---
.../android/app/profile/ProfileLoginFragmentPresenter.kt | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
index 2a9bf0a6b18..ec5364c475f 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginFragmentPresenter.kt
@@ -71,7 +71,8 @@ import org.oppia.android.util.platformparameter.EnableMultipleClassrooms
import org.oppia.android.util.platformparameter.PlatformParameterValue
import javax.inject.Inject
-/** Test tag for the pin input field's container.
+/**
+ * Test tag for the pin input field's container.
*
* It is generally a bad practice to customize something that affects the real production behavior
* of a component for test-specific reasons, but in this case, TEST_TAG has been chosen as a last
@@ -80,7 +81,8 @@ import javax.inject.Inject
*/
const val PIN_INPUT_TEST_TAG = "TEST_TAG.input"
-/** Test tag for the forgot pin button.
+/**
+ * Test tag for the forgot pin button.
*
* Similar to [PIN_INPUT_TEST_TAG], we are adding a TEST_TAG modifier to the PIN boxes which are
* dynamically generated and do not contain text when created that can be used to match them in
From 99ef626d139afdae6e723af0b5f48e6778fbf734 Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 8 Sep 2025 02:05:49 +0300
Subject: [PATCH 42/43] add comment
---
.../android/app/profile/ProfileLoginActivityPresenter.kt | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
index dd397e4e961..7ef11cd189e 100644
--- a/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
+++ b/app/src/main/java/org/oppia/android/app/profile/ProfileLoginActivityPresenter.kt
@@ -46,8 +46,6 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
as DialogFragment
adminPinDialog.dismiss()
- fragmentManager.executePendingTransactions()
-
val resetPinDialog = ResetPinDialogFragment.newInstance(profileId.internalId, profileName)
resetPinDialog.showNow(fragmentManager, TAG_ADMIN_RESET_PIN_DIALOG)
@@ -59,6 +57,9 @@ class ProfileLoginActivityPresenter @Inject constructor(private val activity: Ap
as DialogFragment
resetPinDialog.dismiss()
+ // Before showing the success dialog, we need to force all pending transactions to complete
+ // immediately, since there is a series of dialogs leading to one another. This helps prevent
+ // stacking of dialogs and errors.
fragmentManager.executePendingTransactions()
showSuccessDialog()
From 1373660e5a2a596e877105b7a9af63fe2fa0f5ce Mon Sep 17 00:00:00 2001
From: adhiamboperes
Date: Mon, 8 Sep 2025 03:21:19 +0300
Subject: [PATCH 43/43] Remove duplicate tests
---
.../app/profile/ProfileChooserFragmentTest.kt | 56 +------------------
1 file changed, 2 insertions(+), 54 deletions(-)
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 a6e89c8113a..46d5e571a74 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
@@ -396,7 +396,7 @@ class ProfileChooserFragmentTest {
}
@Test
- fun testMigrateProfiles_onboardingV2_clickLearnerWithPin_checkOpensIntroActivity() {
+ fun testMigrateProfiles_onboardingV2_clickLearnerWithPin_checkOpensProfileLoginActivity() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
setUpTestApplicationComponent()
profileTestHelper.initializeProfiles(autoLogIn = true)
@@ -409,7 +409,7 @@ class ProfileChooserFragmentTest {
position = 1
)
).perform(click())
- intended(hasComponent(PinPasswordActivity::class.java.name))
+ intended(hasComponent(ProfileLoginActivity::class.java.name))
}
}
@@ -1454,58 +1454,6 @@ class ProfileChooserFragmentTest {
}
}
- @Test
- fun testFragment_enableOnboardingV2_clickNonAdminProfileWithPin_checkOpensPinPasswordActivity() {
- TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
- setUpTestApplicationComponent()
- profileTestHelper.addOnlyAdminProfile()
- profileTestHelper.addMoreProfiles(1)
-
- launch(ProfileChooserActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(
- atPosition(
- recyclerViewId = R.id.profiles_list,
- position = 1
- )
- ).perform(click())
-
- testCoroutineDispatchers.runCurrent()
-
- intended(hasComponent(PinPasswordActivity::class.java.name))
- }
- }
-
- @Test
- fun testFragment_clickNonAdminProfileWithoutPin_userNotOnboarded_checkOpensIntroActivity() {
- TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)
- setUpTestApplicationComponent()
- profileTestHelper.addOnlyAdminProfile()
- profileManagementController.addProfile(
- name = "Learner",
- pin = "",
- avatarImagePath = null,
- allowDownloadAccess = true,
- colorRgb = -10710042,
- isAdmin = false
- )
- profileTestHelper.markProfileOnboardingStarted(testProfileId1)
-
- launch(ProfileChooserActivity::class.java).use {
- testCoroutineDispatchers.runCurrent()
- onView(
- atPosition(
- recyclerViewId = R.id.profiles_list,
- position = 1
- )
- ).perform(click())
-
- testCoroutineDispatchers.runCurrent()
-
- intended(hasComponent(IntroActivity::class.java.name))
- }
- }
-
@Test
fun testFragment_clickLearnerWithoutPin_alreadyOnboarded_checkOpensHomeActivity() {
TestPlatformParameterModule.forceEnableOnboardingFlowV2(true)