Repository: chrisbanes/tivi
Branch: main
Commit: a0c62c2c763c
Files: 902
Total size: 12.0 MB
Directory structure:
gitextract_kj3p27ku/
├── .editorconfig
├── .gitattributes
├── .github/
│ ├── scripts/
│ │ └── mac-disk-cleanup.sh
│ └── workflows/
│ ├── baseline-profile.yml
│ ├── build.yml
│ ├── gradle-wrapper.yaml
│ └── todo.yml
├── .gitignore
├── .idea/
│ ├── checkstyle-idea.xml
│ ├── codeStyles/
│ │ ├── Project.xml
│ │ └── codeStyleConfig.xml
│ ├── copyright/
│ │ ├── Chris_Banes_Apache_v2.xml
│ │ ├── Google_Apache_v2_0.xml
│ │ └── profiles_settings.xml
│ ├── dictionaries/
│ │ ├── chris.xml
│ │ └── chrisbanes.xml
│ ├── encodings.xml
│ ├── inspectionProfiles/
│ │ ├── ktlint.xml
│ │ └── profiles_settings.xml
│ ├── kotlinc.xml
│ └── vcs.xml
├── .ruby-version
├── .swiftlint.yml
├── .xcode-version
├── Gemfile
├── LICENSE
├── README.md
├── android-app/
│ ├── app/
│ │ ├── benchmark-rules.pro
│ │ ├── build.gradle.kts
│ │ ├── proguard-rules-chucker.pro
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── androidTest/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ ├── screenshots/
│ │ │ │ └── Screenshots.kt
│ │ │ └── test/
│ │ │ └── smoke/
│ │ │ └── SmokeTest.kt
│ │ ├── debug/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── res/
│ │ │ └── values/
│ │ │ ├── colors.xml
│ │ │ └── strings.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── generated/
│ │ │ │ └── baselineProfiles/
│ │ │ │ ├── baseline-prof.txt
│ │ │ │ └── startup-prof.txt
│ │ │ ├── kotlin/
│ │ │ │ └── app/
│ │ │ │ └── tivi/
│ │ │ │ ├── TiviActivity.kt
│ │ │ │ ├── TiviApplication.kt
│ │ │ │ └── home/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── drawable-anydpi-v26/
│ │ │ │ ├── ic_launcher_background.xml
│ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── strings.xml
│ │ │ │ ├── sys_ui.xml
│ │ │ │ └── themes.xml
│ │ │ ├── values-night/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── sys_ui.xml
│ │ │ │ └── themes.xml
│ │ │ ├── values-notnight-v27/
│ │ │ │ └── sys_ui.xml
│ │ │ ├── values-v29/
│ │ │ │ └── themes.xml
│ │ │ └── xml/
│ │ │ ├── backup_rules.xml
│ │ │ └── data_extraction_rules.xml
│ │ └── qa/
│ │ └── res/
│ │ └── values/
│ │ └── leak_canary.xml
│ ├── benchmark/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── main/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── benchmark/
│ │ ├── BaselineProfileGenerator.kt
│ │ ├── StartupBenchmark.kt
│ │ └── Utils.kt
│ └── common-test/
│ ├── build.gradle.kts
│ └── src/
│ └── main/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── app/
│ └── test/
│ └── AppScenarios.kt
├── api/
│ ├── tmdb/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── tmdb/
│ │ │ ├── TmdbComponent.kt
│ │ │ ├── TmdbImageSizes.kt
│ │ │ ├── TmdbImageUrlProvider.kt
│ │ │ ├── TmdbInitializer.kt
│ │ │ ├── TmdbManager.kt
│ │ │ └── TmdbOAuthInfo.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── tmdb/
│ │ │ └── TmdbPlatformComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── tmdb/
│ │ └── TmdbPlatformComponent.kt
│ └── trakt/
│ ├── build.gradle.kts
│ └── src/
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── trakt/
│ │ ├── Anticipated.kt
│ │ ├── TiviTrakt.kt
│ │ └── TraktComponent.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── trakt/
│ │ └── TraktPlatformComponent.kt
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── trakt/
│ └── TraktPlatformComponent.kt
├── art/
│ ├── theme-baseline.sketch
│ └── tivi-art.sketch
├── build.gradle.kts
├── common/
│ ├── imageloading/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── imageloading/
│ │ │ └── ImageLoadingPlatformComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── imageloading/
│ │ │ ├── EpisodeImageModelInterceptor.kt
│ │ │ ├── HideArtworkInterceptor.kt
│ │ │ ├── ImageLoader.kt
│ │ │ ├── ImageLoaderCleanupInitializer.kt
│ │ │ ├── ImageLoadingComponent.kt
│ │ │ ├── SeasonImageModelInterceptor.kt
│ │ │ ├── ShowImageModelInterceptor.kt
│ │ │ └── TmdbImageEntityCoilInterceptor.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── imageloading/
│ │ │ └── ImageLoadingPlatformComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── common/
│ │ └── imageloading/
│ │ └── ImageLoadingPlatformComponent.kt
│ └── ui/
│ ├── circuit/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ ├── EventSink.kt
│ │ ├── navigation/
│ │ │ ├── DeepLinker.kt
│ │ │ └── LocalNavigator.kt
│ │ └── overlays/
│ │ ├── BottomSheetOverlay.kt
│ │ └── DialogOverlay.kt
│ ├── compose/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── compose/
│ │ │ ├── Coil.kt
│ │ │ ├── ColorExtractor.android.kt
│ │ │ ├── ReportDrawnWhen.kt
│ │ │ ├── theme/
│ │ │ │ └── Platform.kt
│ │ │ └── ui/
│ │ │ └── Icon.android.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── compose/
│ │ │ ├── ColorExtractor.kt
│ │ │ ├── EntryGrid.kt
│ │ │ ├── HazeScaffold.kt
│ │ │ ├── Layout.kt
│ │ │ ├── LazyList.kt
│ │ │ ├── LazyPagingExtensions.kt
│ │ │ ├── LogCompositions.kt
│ │ │ ├── Modifier.kt
│ │ │ ├── NestedScaffold.kt
│ │ │ ├── ReportDrawnWhen.kt
│ │ │ ├── RetainedCoroutineScope.kt
│ │ │ ├── TiviCompositionLocals.kt
│ │ │ ├── TiviPreferenceExtensions.kt
│ │ │ ├── UiMessage.kt
│ │ │ ├── WindowSizeClass.kt
│ │ │ ├── theme/
│ │ │ │ ├── Color.kt
│ │ │ │ ├── Platform.kt
│ │ │ │ ├── Shape.kt
│ │ │ │ ├── Theme.kt
│ │ │ │ └── Type.kt
│ │ │ └── ui/
│ │ │ ├── AppBar.kt
│ │ │ ├── AutoSizedCircularProgressIndicator.kt
│ │ │ ├── Backdrop.kt
│ │ │ ├── BackdropCard.kt
│ │ │ ├── Clickable.kt
│ │ │ ├── DateTimeDialogs.kt
│ │ │ ├── DateTimeTextFields.kt
│ │ │ ├── Empty.kt
│ │ │ ├── ExpandingSummary.kt
│ │ │ ├── GradientScrim.kt
│ │ │ ├── Icon.kt
│ │ │ ├── IconButtonScrim.kt
│ │ │ ├── Image.kt
│ │ │ ├── LoadingButton.kt
│ │ │ ├── PaddingValues.kt
│ │ │ ├── Position.kt
│ │ │ ├── PosterCard.kt
│ │ │ ├── Preference.kt
│ │ │ ├── RefreshButton.kt
│ │ │ ├── SearchTextField.kt
│ │ │ ├── SortChip.kt
│ │ │ ├── SortMenuPopup.kt
│ │ │ ├── Surface.kt
│ │ │ ├── UserProfileButton.kt
│ │ │ └── WindowInsets.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── compose/
│ │ │ ├── Coil.kt
│ │ │ ├── ColorExtractor.ios.kt
│ │ │ ├── ReportDrawnWhen.kt
│ │ │ ├── theme/
│ │ │ │ └── Platform.kt
│ │ │ └── ui/
│ │ │ ├── DateTimeDialogs.kt
│ │ │ ├── Icon.ios.kt
│ │ │ └── Sheets.kt
│ │ ├── jvmCommon/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── common/
│ │ │ └── compose/
│ │ │ └── ui/
│ │ │ └── DateTimeDialogs.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── common/
│ │ └── compose/
│ │ ├── Coil.kt
│ │ ├── ColorExtractor.jvm.kt
│ │ ├── ReportDrawnWhen.kt
│ │ ├── theme/
│ │ │ └── Platform.kt
│ │ └── ui/
│ │ └── Icon.jvm.kt
│ ├── resources/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── String.kt
│ │ │ ├── TiviDateFormatter.kt
│ │ │ └── TiviTextCreator.kt
│ │ ├── commonMain/
│ │ │ ├── composeResources/
│ │ │ │ └── values/
│ │ │ │ └── strings.xml
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ ├── common/
│ │ │ │ └── ui/
│ │ │ │ └── resources/
│ │ │ │ ├── Fonts.kt
│ │ │ │ └── Resources.kt
│ │ │ └── util/
│ │ │ ├── GenreStringer.kt
│ │ │ ├── String.kt
│ │ │ ├── TiviDateFormatter.kt
│ │ │ └── TiviTextCreator.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── String.kt
│ │ │ ├── TiviDateFormatter.kt
│ │ │ └── TiviTextCreator.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── util/
│ │ ├── String.kt
│ │ ├── TiviDateFormatter.kt
│ │ └── TiviTextCreator.kt
│ └── screens/
│ ├── build.gradle.kts
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── screens/
│ ├── Parcelize.kt
│ └── Screens.kt
├── compose-stability.conf
├── core/
│ ├── analytics/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── analytics/
│ │ │ ├── AnalyticsPlatformComponent.kt
│ │ │ └── TiviFirebaseAnalytics.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── analytics/
│ │ │ ├── Analytics.kt
│ │ │ ├── AnalyticsComponent.kt
│ │ │ └── AnalyticsInitializer.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── analytics/
│ │ │ └── AnalyticsPlatformComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── core/
│ │ └── analytics/
│ │ └── AnalyticsPlatformComponent.kt
│ ├── base/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ ├── animations/
│ │ │ └── Lerp.kt
│ │ ├── app/
│ │ │ └── ApplicationInfo.kt
│ │ ├── appinitializers/
│ │ │ └── AppInitializer.kt
│ │ ├── base/
│ │ │ └── InvokeStatus.kt
│ │ ├── extensions/
│ │ │ └── Lazy.kt
│ │ ├── inject/
│ │ │ └── Scopes.kt
│ │ └── util/
│ │ ├── AppCoroutineDispatchers.kt
│ │ ├── Collections.kt
│ │ ├── CoroutineContext.kt
│ │ └── Result.kt
│ ├── logging/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── AndroidSetCrashReportingEnabledAction.kt
│ │ │ ├── CrashlyticsAndroidInitializer.kt
│ │ │ └── LoggerPlatformComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── CrashReportingInitializer.kt
│ │ │ ├── KermitInitializer.kt
│ │ │ ├── LoggerComponent.kt
│ │ │ ├── RecordingLoggerWriter.kt
│ │ │ └── SetCrashReportingEnabledAction.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── CrashlyticsIosInitializer.kt
│ │ │ └── LoggerPlatformComponent.kt
│ │ ├── jvmMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ └── LoggerPlatformComponent.kt
│ │ └── mobileMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── util/
│ │ └── CrashlyticsLoggerWriter.kt
│ ├── notifications/
│ │ ├── core/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ ├── androidMain/
│ │ │ │ ├── AndroidManifest.xml
│ │ │ │ ├── kotlin/
│ │ │ │ │ └── app/
│ │ │ │ │ └── tivi/
│ │ │ │ │ └── core/
│ │ │ │ │ └── notifications/
│ │ │ │ │ ├── AndroidNotificationManager.kt
│ │ │ │ │ ├── NotificationPlatformComponent.kt
│ │ │ │ │ ├── PendingNotificationStore.kt
│ │ │ │ │ └── PostNotificationBroadcastReceiver.kt
│ │ │ │ └── res/
│ │ │ │ └── drawable/
│ │ │ │ └── outline_tv_gen_24.xml
│ │ │ ├── commonMain/
│ │ │ │ └── kotlin/
│ │ │ │ └── app/
│ │ │ │ └── tivi/
│ │ │ │ └── core/
│ │ │ │ └── notifications/
│ │ │ │ ├── NotificationManager.kt
│ │ │ │ └── NotificationsComponent.kt
│ │ │ ├── iosMain/
│ │ │ │ └── kotlin/
│ │ │ │ └── app/
│ │ │ │ └── tivi/
│ │ │ │ └── core/
│ │ │ │ └── notifications/
│ │ │ │ ├── IosNotificationManager.kt
│ │ │ │ └── NotificationPlatformComponent.kt
│ │ │ └── jvmMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── notifications/
│ │ │ ├── EmptyNotificationManager.kt
│ │ │ └── NotificationPlatformComponent.kt
│ │ └── protos/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── proto/
│ │ └── pending.proto
│ ├── performance/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── perf/
│ │ │ ├── AndroidTracer.kt
│ │ │ └── PerformanceComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── perf/
│ │ │ ├── PerformanceComponent.kt
│ │ │ └── Tracer.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── perf/
│ │ │ └── PerformanceComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── core/
│ │ └── perf/
│ │ └── PerformanceComponent.kt
│ ├── permissions/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── permissions/
│ │ │ ├── PermissionsController.android.kt
│ │ │ └── PermissionsPlatformComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── permissions/
│ │ │ ├── PermissionsComponent.kt
│ │ │ └── PermissionsController.common.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── permissions/
│ │ │ └── PermissionsPlatformComponent.kt
│ │ ├── jvmMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── core/
│ │ │ └── permissions/
│ │ │ └── PermissionsPlatformComponent.kt
│ │ └── mokoImplMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── core/
│ │ └── permissions/
│ │ └── PermissionsController.ios.kt
│ ├── powercontroller/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ ├── AndroidManifest.xml
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── AndroidPowerController.kt
│ │ │ └── PowerControllerComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ ├── PowerController.kt
│ │ │ └── PowerControllerComponent.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── util/
│ │ │ └── PowerControllerComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── util/
│ │ └── PowerControllerComponent.kt
│ └── preferences/
│ ├── build.gradle.kts
│ └── src/
│ ├── androidMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ └── PreferencesComponent.kt
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ ├── Preference.kt
│ │ ├── PreferencesComponent.kt
│ │ ├── TiviPreferences.kt
│ │ └── TiviPreferencesImpl.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ └── PreferencesPlatformComponent.kt
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── settings/
│ └── PreferencesPlatformComponent.kt
├── data/
│ ├── anticipatedshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── anticipatedshows/
│ │ ├── AnticipatedShowsBinds.kt
│ │ ├── AnticipatedShowsDataSource.kt
│ │ ├── AnticipatedShowsLastRequestStore.kt
│ │ ├── AnticipatedShowsStore.kt
│ │ └── TraktAnticipatedShowsDataSource.kt
│ ├── db/
│ │ ├── build.gradle.kts
│ │ ├── room-schemas/
│ │ │ ├── 1.json
│ │ │ ├── 10.json
│ │ │ ├── 11.json
│ │ │ ├── 12.json
│ │ │ ├── 13.json
│ │ │ ├── 14.json
│ │ │ ├── 15.json
│ │ │ ├── 16.json
│ │ │ ├── 17.json
│ │ │ ├── 18.json
│ │ │ ├── 19.json
│ │ │ ├── 2.json
│ │ │ ├── 20.json
│ │ │ ├── 21.json
│ │ │ ├── 22.json
│ │ │ ├── 23.json
│ │ │ ├── 24.json
│ │ │ ├── 25.json
│ │ │ ├── 26.json
│ │ │ ├── 27.json
│ │ │ ├── 28.json
│ │ │ ├── 29.json
│ │ │ ├── 3.json
│ │ │ ├── 30.json
│ │ │ ├── 31.json
│ │ │ ├── 32.json
│ │ │ ├── 4.json
│ │ │ ├── 5.json
│ │ │ ├── 6.json
│ │ │ ├── 7.json
│ │ │ ├── 8.json
│ │ │ └── 9.json
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ ├── daos/
│ │ │ ├── AnticipatedShowsDao.kt
│ │ │ ├── EntityDao.kt
│ │ │ ├── EntryDao.kt
│ │ │ ├── EpisodeWatchEntryDao.kt
│ │ │ ├── EpisodesDao.kt
│ │ │ ├── FollowedShowsDao.kt
│ │ │ ├── LastRequestDao.kt
│ │ │ ├── LibraryShowsDao.kt
│ │ │ ├── PaginatedEntryDao.kt
│ │ │ ├── PairEntryDao.kt
│ │ │ ├── PopularDao.kt
│ │ │ ├── RecommendedDao.kt
│ │ │ ├── RelatedShowsDao.kt
│ │ │ ├── SeasonsDao.kt
│ │ │ ├── ShowFtsDao.kt
│ │ │ ├── ShowTmdbImagesDao.kt
│ │ │ ├── TiviShowDao.kt
│ │ │ ├── TrendingDao.kt
│ │ │ ├── UserDao.kt
│ │ │ └── WatchedShowDao.kt
│ │ └── db/
│ │ └── DatabaseTransactionRunner.kt
│ ├── db-sqldelight/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── SqlDelightDatabasePlatformComponent.kt
│ │ ├── commonMain/
│ │ │ ├── kotlin/
│ │ │ │ └── app/
│ │ │ │ └── tivi/
│ │ │ │ └── data/
│ │ │ │ ├── DatabaseFactory.kt
│ │ │ │ ├── SqlDelightDatabaseComponent.kt
│ │ │ │ ├── SqlDelightTransactionRunner.kt
│ │ │ │ ├── Utils.kt
│ │ │ │ ├── columnadaptors/
│ │ │ │ │ ├── DayOfWeekColumnAdapter.kt
│ │ │ │ │ ├── ImageTypeColumnAdapter.kt
│ │ │ │ │ ├── InstantLongColumnAdapter.kt
│ │ │ │ │ ├── InstantStringColumnAdapter.kt
│ │ │ │ │ ├── LocalDateColumnAdapter.kt
│ │ │ │ │ ├── LocalDateTimeColumnAdapter.kt
│ │ │ │ │ ├── LocalTimeColumnAdapter.kt
│ │ │ │ │ ├── PendingActionColumnAdapter.kt
│ │ │ │ │ ├── RequestColumnAdapter.kt
│ │ │ │ │ ├── ShowStatusColumnAdapter.kt
│ │ │ │ │ └── TimeZoneColumnAdapter.kt
│ │ │ │ ├── daos/
│ │ │ │ │ ├── SqlDelightAnticipatedShowsDao.kt
│ │ │ │ │ ├── SqlDelightEntityDao.kt
│ │ │ │ │ ├── SqlDelightEpisodeWatchEntryDao.kt
│ │ │ │ │ ├── SqlDelightEpisodesDao.kt
│ │ │ │ │ ├── SqlDelightFollowedShowsDao.kt
│ │ │ │ │ ├── SqlDelightLastRequestDao.kt
│ │ │ │ │ ├── SqlDelightLibraryShowsDao.kt
│ │ │ │ │ ├── SqlDelightPopularShowsDao.kt
│ │ │ │ │ ├── SqlDelightRecommendedShowsDao.kt
│ │ │ │ │ ├── SqlDelightRelatedShowsDao.kt
│ │ │ │ │ ├── SqlDelightSeasonsDao.kt
│ │ │ │ │ ├── SqlDelightShowImagesDao.kt
│ │ │ │ │ ├── SqlDelightTiviShowDao.kt
│ │ │ │ │ ├── SqlDelightTrendingShowsDao.kt
│ │ │ │ │ ├── SqlDelightUserDao.kt
│ │ │ │ │ └── SqlDelightWatchedShowsDao.kt
│ │ │ │ └── paging/
│ │ │ │ ├── KeyedQueryPagingSource.kt
│ │ │ │ ├── OffsetQueryPagingSource.kt
│ │ │ │ └── QueryPagingSource.kt
│ │ │ └── sqldelight/
│ │ │ ├── app/
│ │ │ │ └── tivi/
│ │ │ │ └── data/
│ │ │ │ ├── anticipated_shows.sq
│ │ │ │ ├── episode_watch_entries.sq
│ │ │ │ ├── episodes.sq
│ │ │ │ ├── last_requests.sq
│ │ │ │ ├── library_shows.sq
│ │ │ │ ├── myshows_entries.sq
│ │ │ │ ├── popular_shows.sq
│ │ │ │ ├── recommended_entries.sq
│ │ │ │ ├── related_shows.sq
│ │ │ │ ├── seasons.sq
│ │ │ │ ├── show.sq
│ │ │ │ ├── show_images.sq
│ │ │ │ ├── shows_last_watched.sq
│ │ │ │ ├── shows_next_to_watch.sq
│ │ │ │ ├── shows_view_watch_stats.sq
│ │ │ │ ├── trending_shows.sq
│ │ │ │ ├── upnext_shows.sq
│ │ │ │ ├── users.sq
│ │ │ │ └── watched_entries.sq
│ │ │ └── migrations/
│ │ │ ├── 29.sqm
│ │ │ ├── 30.sqm
│ │ │ ├── 31.sqm
│ │ │ ├── 32.sqm
│ │ │ ├── 33.sqm
│ │ │ └── 34.sqm
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── SqlDelightDatabasePlatformComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── SqlDelightDatabasePlatformComponent.kt
│ ├── episodes/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── episodes/
│ │ ├── EpisodeBinds.kt
│ │ ├── EpisodeLastRequestStore.kt
│ │ ├── EpisodeWatchLastRequestStore.kt
│ │ ├── EpisodeWatchStore.kt
│ │ ├── SeasonLastRequestStore.kt
│ │ ├── SeasonsEpisodesRepository.kt
│ │ ├── ShowSeasonsLastRequestStore.kt
│ │ └── datasource/
│ │ ├── EpisodeDataSource.kt
│ │ ├── EpisodeWatchesDataSource.kt
│ │ └── SeasonsEpisodesDataSource.kt
│ ├── followedshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── followedshows/
│ │ ├── FollowedShowsBinds.kt
│ │ ├── FollowedShowsDataSource.kt
│ │ ├── FollowedShowsLastRequestStore.kt
│ │ ├── FollowedShowsRepository.kt
│ │ └── TraktFollowedShowsDataSource.kt
│ ├── legacy/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ ├── lastrequests/
│ │ │ ├── EntityLastRequestStore.kt
│ │ │ └── GroupLastRequestStore.kt
│ │ ├── mappers/
│ │ │ ├── EpisodeIdToTraktIdMapper.kt
│ │ │ ├── Mapper.kt
│ │ │ ├── Mappers.kt
│ │ │ ├── SeasonIdToTraktIdMapper.kt
│ │ │ ├── ShowIdToTmdbIdMapper.kt
│ │ │ ├── ShowIdToTraktIdMapper.kt
│ │ │ ├── ShowIdToTraktOrImdbIdMapper.kt
│ │ │ ├── TmdbEpisodeDetailToEpisode.kt
│ │ │ ├── TmdbEpisodeToEpisode.kt
│ │ │ ├── TmdbSeasonDetailToSeason.kt
│ │ │ ├── TmdbSeasonToSeason.kt
│ │ │ ├── TmdbSeasonToSeasonWithEpisodes.kt
│ │ │ ├── TmdbShowDetailToShowImages.kt
│ │ │ ├── TmdbShowDetailToTiviShow.kt
│ │ │ ├── TmdbShowPageResultToTiviShows.kt
│ │ │ ├── TmdbShowToTiviShow.kt
│ │ │ ├── TraktBaseShowToWatchedShowEntry.kt
│ │ │ ├── TraktEpisodeToEpisode.kt
│ │ │ ├── TraktHistoryEntryToEpisode.kt
│ │ │ ├── TraktHistoryItemToEpisodeWatchEntry.kt
│ │ │ ├── TraktListItemToFollowedShowEntry.kt
│ │ │ ├── TraktListItemToTiviShow.kt
│ │ │ ├── TraktSeasonToSeason.kt
│ │ │ ├── TraktSeasonToSeasonWithEpisodes.kt
│ │ │ ├── TraktShowToTiviShow.kt
│ │ │ ├── TraktStatusToShowStatus.kt
│ │ │ ├── TraktTrendingShowToTiviShow.kt
│ │ │ ├── TraktTrendingShowToTrendingShowEntry.kt
│ │ │ └── UserToTraktUser.kt
│ │ └── util/
│ │ ├── ItemSyncer.kt
│ │ └── StoreExtensions.kt
│ ├── licenses/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── licenses/
│ │ │ ├── LicenseDataPlatformComponent.kt
│ │ │ └── fetcher/
│ │ │ └── AndroidLicensesFetcherImpl.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── licenses/
│ │ │ ├── LicenseDataComponent.kt
│ │ │ ├── LicensesState.kt
│ │ │ ├── fetcher/
│ │ │ │ └── LicensesFetcher.kt
│ │ │ └── store/
│ │ │ ├── LicensesStore.kt
│ │ │ └── LicensesStoreImpl.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── licenses/
│ │ │ ├── LicenseDataPlatformComponent.kt
│ │ │ └── fetcher/
│ │ │ └── IosLicensesFetcherImpl.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── licenses/
│ │ ├── LicenseDataPlatformComponent.kt
│ │ └── fetcher/
│ │ └── JvmLicensesFetcherImpl.kt
│ ├── models/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ ├── compoundmodels/
│ │ │ ├── EntryWithShow.kt
│ │ │ ├── EpisodeWithSeason.kt
│ │ │ ├── EpisodeWithWatches.kt
│ │ │ ├── LibraryShow.kt
│ │ │ ├── SeasonWithEpisodes.kt
│ │ │ ├── SeasonWithEpisodesAndWatches.kt
│ │ │ ├── SeasonWithShow.kt
│ │ │ ├── ShowSeasonEpisode.kt
│ │ │ └── UpNextEntry.kt
│ │ ├── imagemodels/
│ │ │ ├── EpisodeImageModel.kt
│ │ │ ├── ImageModel.kt
│ │ │ ├── SeasonImageModel.kt
│ │ │ └── ShowImageModel.kt
│ │ ├── models/
│ │ │ ├── ActionDate.kt
│ │ │ ├── AnticipatedShowEntry.kt
│ │ │ ├── Entry.kt
│ │ │ ├── Episode.kt
│ │ │ ├── EpisodeWatchEntry.kt
│ │ │ ├── FollowedShowEntry.kt
│ │ │ ├── Genre.kt
│ │ │ ├── LastRequest.kt
│ │ │ ├── Notification.kt
│ │ │ ├── PendingAction.kt
│ │ │ ├── PopularShowEntry.kt
│ │ │ ├── RecommendedShowEntry.kt
│ │ │ ├── RelatedShowEntry.kt
│ │ │ ├── Request.kt
│ │ │ ├── Season.kt
│ │ │ ├── ShowImages.kt
│ │ │ ├── ShowStatus.kt
│ │ │ ├── ShowTmdbImage.kt
│ │ │ ├── SortOption.kt
│ │ │ ├── TiviEntity.kt
│ │ │ ├── TiviShow.kt
│ │ │ ├── TraktUser.kt
│ │ │ ├── TrendingShowEntry.kt
│ │ │ └── WatchedShowEntry.kt
│ │ ├── util/
│ │ │ ├── DateTimeUtils.kt
│ │ │ ├── ImageEntityUtils.kt
│ │ │ └── MergeShowUtils.kt
│ │ └── views/
│ │ ├── ShowsNextToWatch.kt
│ │ └── ShowsWatchStats.kt
│ ├── popularshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── popularshows/
│ │ ├── PopularShowsBinds.kt
│ │ ├── PopularShowsDataSource.kt
│ │ ├── PopularShowsLastRequestStore.kt
│ │ ├── PopularShowsStore.kt
│ │ └── TraktPopularShowsDataSource.kt
│ ├── recommendedshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── recommendedshows/
│ │ ├── RecommendedShowsBinds.kt
│ │ ├── RecommendedShowsDataSource.kt
│ │ ├── RecommendedShowsLastRequestStore.kt
│ │ ├── RecommendedShowsStore.kt
│ │ └── TraktRecommendedShowsDataSource.kt
│ ├── relatedshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── relatedshows/
│ │ ├── RelatedShowsBinds.kt
│ │ ├── RelatedShowsDataSource.kt
│ │ ├── RelatedShowsLastRequestStore.kt
│ │ ├── RelatedShowsStore.kt
│ │ ├── TmdbRelatedShowsDataSourceImpl.kt
│ │ └── TraktRelatedShowsDataSourceImpl.kt
│ ├── search/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── search/
│ │ ├── SearchBinds.kt
│ │ ├── SearchDataSource.kt
│ │ ├── SearchRepository.kt
│ │ └── TmdbSearchDataSource.kt
│ ├── showimages/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── showimages/
│ │ ├── ShowImagesBinds.kt
│ │ ├── ShowImagesDataSource.kt
│ │ ├── ShowImagesLastRequestStore.kt
│ │ ├── ShowImagesStore.kt
│ │ └── TmdbShowImagesDataSource.kt
│ ├── shows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── shows/
│ │ ├── ShowDataSource.kt
│ │ ├── ShowLastRequestStore.kt
│ │ ├── ShowStore.kt
│ │ ├── ShowsBinds.kt
│ │ ├── TmdbShowDataSourceImpl.kt
│ │ └── TraktShowDataSourceImpl.kt
│ ├── test/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidUnitTest/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── DatabaseTest.kt
│ │ ├── commonTest/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ ├── data/
│ │ │ │ ├── DatabaseTest.kt
│ │ │ │ ├── dao/
│ │ │ │ │ ├── EpisodeWatchEntryTest.kt
│ │ │ │ │ ├── EpisodesTest.kt
│ │ │ │ │ └── SeasonsTest.kt
│ │ │ │ └── repositories/
│ │ │ │ ├── FollowedShowRepositoryTest.kt
│ │ │ │ └── SeasonsEpisodesRepositoryTest.kt
│ │ │ └── utils/
│ │ │ ├── AuthorizedAuthStore.kt
│ │ │ ├── Dispatchers.kt
│ │ │ ├── FakeEpisodeDataSource.kt
│ │ │ ├── FakeEpisodeWatchesDataSource.kt
│ │ │ ├── FakeFollowedShowsDataSource.kt
│ │ │ ├── FakeSeasonsEpisodesDataSource.kt
│ │ │ ├── Fakes.kt
│ │ │ ├── ObjectGraph.kt
│ │ │ ├── SampleData.kt
│ │ │ └── TestTransactionRunner.kt
│ │ ├── jvmTest/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── DatabaseTest.kt
│ │ └── nativeTest/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── DatabaseTest.kt
│ ├── traktauth/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── traktauth/
│ │ │ ├── AndroidTraktLoginAction.kt
│ │ │ ├── AndroidTraktRefreshTokenAction.kt
│ │ │ ├── AppAuthAuthStateWrapper.kt
│ │ │ ├── LoginTraktActivityResultContract.kt
│ │ │ ├── TraktAuthComponent.kt
│ │ │ ├── TraktAuthInitializer.kt
│ │ │ └── store/
│ │ │ ├── BlockStoreAuthStore.kt
│ │ │ ├── PreferencesAuthStore.kt
│ │ │ └── TiviAuthStore.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── traktauth/
│ │ │ ├── AuthState.kt
│ │ │ ├── TraktAuthComponent.kt
│ │ │ ├── TraktAuthRepository.kt
│ │ │ ├── TraktAuthState.kt
│ │ │ ├── TraktLoginAction.kt
│ │ │ ├── TraktOAuthInfo.kt
│ │ │ ├── TraktRefreshTokenAction.kt
│ │ │ └── store/
│ │ │ └── AuthStore.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── data/
│ │ │ └── traktauth/
│ │ │ ├── IosAuthStore.kt
│ │ │ └── TraktAuthComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── traktauth/
│ │ ├── DesktopAuthStore.kt
│ │ ├── DesktopTraktLoginAction.kt
│ │ ├── DesktopTraktRefreshTokenAction.kt
│ │ └── TraktAuthComponent.kt
│ ├── traktusers/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── traktusers/
│ │ ├── TraktUsersBinds.kt
│ │ ├── TraktUsersDataSource.kt
│ │ ├── TraktUsersLastRequestStore.kt
│ │ ├── TraktUsersRepository.kt
│ │ └── UsersDataSource.kt
│ ├── trendingshows/
│ │ ├── build.gradle.kts
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── data/
│ │ └── trendingshows/
│ │ ├── TraktTrendingShowsDataSource.kt
│ │ ├── TrendingShowsBinds.kt
│ │ ├── TrendingShowsDataSource.kt
│ │ ├── TrendingShowsLastRequestStore.kt
│ │ └── TrendingShowsStore.kt
│ └── watchedshows/
│ ├── build.gradle.kts
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── data/
│ └── watchedshows/
│ ├── TraktWatchedShowsDataSource.kt
│ ├── WatchedShowsBinds.kt
│ ├── WatchedShowsDataSource.kt
│ ├── WatchedShowsLastRequestStore.kt
│ └── WatchedShowsStore.kt
├── desktop-app/
│ ├── build.gradle.kts
│ └── src/
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── Main.kt
├── docs/
│ ├── _config.yml
│ └── privacypolicy.md
├── domain/
│ ├── build.gradle.kts
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── domain/
│ ├── Interactor.kt
│ ├── PaginatedEntryRemoteMediator.kt
│ ├── RefreshOnlyRemoteMediator.kt
│ ├── interactors/
│ │ ├── AddEpisodeWatch.kt
│ │ ├── ChangeSeasonFollowStatus.kt
│ │ ├── ChangeSeasonWatchedStatus.kt
│ │ ├── ChangeShowFollowStatus.kt
│ │ ├── ClearUserDetails.kt
│ │ ├── FetchLicensesList.kt
│ │ ├── GetTraktAuthState.kt
│ │ ├── LoginTrakt.kt
│ │ ├── LogoutTrakt.kt
│ │ ├── RefreshTraktTokens.kt
│ │ ├── RemoveEpisodeWatch.kt
│ │ ├── RemoveEpisodeWatches.kt
│ │ ├── ScheduleDebugEpisodeNotification.kt
│ │ ├── ScheduleEpisodeNotifications.kt
│ │ ├── SearchShows.kt
│ │ ├── UpdateAnticipatedShows.kt
│ │ ├── UpdateEpisodeDetails.kt
│ │ ├── UpdateLibraryShows.kt
│ │ ├── UpdatePopularShows.kt
│ │ ├── UpdateRecommendedShows.kt
│ │ ├── UpdateRelatedShows.kt
│ │ ├── UpdateShowDetails.kt
│ │ ├── UpdateShowImages.kt
│ │ ├── UpdateShowSeasons.kt
│ │ ├── UpdateTmdbConfig.kt
│ │ ├── UpdateTrendingShows.kt
│ │ ├── UpdateUpNextEpisodes.kt
│ │ └── UpdateUserDetails.kt
│ └── observers/
│ ├── ObserveAnticipatedShows.kt
│ ├── ObserveEpisodeDetails.kt
│ ├── ObserveEpisodeWatches.kt
│ ├── ObserveNextShowEpisodesToWatch.kt
│ ├── ObservePagedAnticipatedShows.kt
│ ├── ObservePagedLibraryShows.kt
│ ├── ObservePagedPopularShows.kt
│ ├── ObservePagedRecommendedShows.kt
│ ├── ObservePagedTrendingShows.kt
│ ├── ObservePagedUpNextShows.kt
│ ├── ObservePopularShows.kt
│ ├── ObserveRecommendedShows.kt
│ ├── ObserveRelatedShows.kt
│ ├── ObserveShowDetails.kt
│ ├── ObserveShowDetailsForEpisodeId.kt
│ ├── ObserveShowFollowStatus.kt
│ ├── ObserveShowImages.kt
│ ├── ObserveShowNextEpisodeToWatch.kt
│ ├── ObserveShowSeasonsEpisodesWatches.kt
│ ├── ObserveShowViewStats.kt
│ ├── ObserveTraktAuthState.kt
│ ├── ObserveTrendingShows.kt
│ └── ObserveUserDetails.kt
├── fastlane/
│ ├── Fastfile
│ ├── Matchfile
│ ├── metadata/
│ │ └── android/
│ │ └── en_US/
│ │ ├── full_description.txt
│ │ ├── short_description.txt
│ │ ├── title.txt
│ │ └── video.txt
│ └── screenshots/
│ └── screenshots.html
├── gradle/
│ ├── build-logic/
│ │ ├── convention/
│ │ │ ├── build.gradle.kts
│ │ │ └── src/
│ │ │ └── main/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── gradle/
│ │ │ ├── Android.kt
│ │ │ ├── AndroidApplicationConventionPlugin.kt
│ │ │ ├── AndroidApplicationLicensesHandler.kt
│ │ │ ├── AndroidLibraryConventionPlugin.kt
│ │ │ ├── AndroidTestConventionPlugin.kt
│ │ │ ├── AssetCopyTask.kt
│ │ │ ├── ComposeMultiplatformConventionPlugin.kt
│ │ │ ├── IosLicensesHandler.kt
│ │ │ ├── Java.kt
│ │ │ ├── Kotlin.kt
│ │ │ ├── KotlinAndroidConventionPlugin.kt
│ │ │ ├── KotlinMultiplatformConventionPlugin.kt
│ │ │ ├── Licensee.kt
│ │ │ ├── RootConventionPlugin.kt
│ │ │ ├── Spotless.kt
│ │ │ ├── VersionCatalog.kt
│ │ │ └── Versions.kt
│ │ ├── gradle.properties
│ │ └── settings.gradle.kts
│ ├── dependencyGraph.gradle
│ ├── libs.versions.toml
│ └── wrapper/
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── ios-app/
│ └── Tivi/
│ ├── Podfile
│ ├── Settings.bundle/
│ │ └── Root.plist
│ ├── Tivi/
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon-QA.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ └── Contents.json
│ │ ├── Auth.swift
│ │ ├── ContentView.swift
│ │ ├── GoogleService-Info.plist
│ │ ├── Info.plist
│ │ ├── Preview Content/
│ │ │ └── Preview Assets.xcassets/
│ │ │ └── Contents.json
│ │ └── TiviApp.swift
│ ├── Tivi.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata/
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── swiftpm/
│ │ │ └── Package.resolved
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ ├── Tivi Prod (StoreKit).xcscheme
│ │ ├── Tivi Prod.xcscheme
│ │ ├── Tivi QA.xcscheme
│ │ └── UITests.xcscheme
│ ├── Tivi.xcworkspace/
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata/
│ │ └── IDEWorkspaceChecks.plist
│ ├── UITests/
│ │ ├── Extensions.swift
│ │ ├── Screenshots.swift
│ │ └── SnapshotHelper.swift
│ └── xcconfig/
│ ├── Project.xcconfig
│ ├── Tivi-Prod-Debug.xcconfig
│ ├── Tivi-Prod-Release.xcconfig
│ ├── Tivi-QA-Debug.xcconfig
│ ├── Tivi-QA-Release.xcconfig
│ ├── UITests.xcconfig
│ └── common/
│ ├── Debug.xcconfig
│ ├── Prod.xcconfig
│ ├── QA.xcconfig
│ └── Release.xcconfig
├── release/
│ ├── GoogleService-Info.plist.gpg
│ ├── app-debug.jks
│ ├── app-release.gpg
│ ├── clean-secrets.sh
│ ├── decrypt-secrets.sh
│ ├── encrypt-secrets.sh
│ ├── google-services.gpg
│ └── play-account.gpg
├── renovate.json
├── room2sqld.py
├── settings.gradle.kts
├── shared/
│ ├── common/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── inject/
│ │ │ ├── SharedActivityComponent.kt
│ │ │ └── SharedPlatformApplicationComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ ├── appinitializers/
│ │ │ │ └── AppInitializers.kt
│ │ │ └── inject/
│ │ │ ├── SharedApplicationComponent.kt
│ │ │ └── SharedUiComponent.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── inject/
│ │ │ └── SharedPlatformApplicationComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── inject/
│ │ └── SharedPlatformApplicationComponent.kt
│ ├── prod/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ ├── androidMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── inject/
│ │ │ ├── AndroidActivityComponent.kt
│ │ │ └── AndroidApplicationComponent.kt
│ │ ├── commonMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── inject/
│ │ │ ├── ProdApplicationComponent.kt
│ │ │ └── ProdUiComponent.kt
│ │ ├── iosMain/
│ │ │ └── kotlin/
│ │ │ └── app/
│ │ │ └── tivi/
│ │ │ └── inject/
│ │ │ ├── HomeUiControllerComponent.kt
│ │ │ └── IosApplicationComponent.kt
│ │ └── jvmMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── inject/
│ │ ├── DesktopApplicationComponent.kt
│ │ └── WindowComponent.kt
│ └── qa/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ ├── androidMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── inject/
│ │ ├── AndroidActivityComponent.kt
│ │ └── AndroidApplicationComponent.kt
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── inject/
│ │ ├── QaApplicationComponent.kt
│ │ └── QaUiComponent.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── inject/
│ │ ├── HomeUiControllerComponent.kt
│ │ └── IosApplicationComponent.kt
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── inject/
│ ├── DesktopApplicationComponent.kt
│ └── WindowComponent.kt
├── spotless/
│ ├── cb-copyright.txt
│ └── google-copyright.txt
├── tasks/
│ ├── build.gradle.kts
│ └── src/
│ ├── androidMain/
│ │ ├── AndroidManifest.xml
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── tasks/
│ │ ├── AndroidTasks.kt
│ │ ├── BootBroadcastReceiver.kt
│ │ ├── ScheduleEpisodeNotificationsWorker.kt
│ │ ├── SyncLibraryShowsWorker.kt
│ │ ├── TasksPlatformComponent.kt
│ │ └── TiviWorkerFactory.kt
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── tasks/
│ │ ├── Tasks.kt
│ │ ├── TasksComponent.kt
│ │ └── TasksInitializer.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── tasks/
│ │ ├── IosTasks.kt
│ │ └── TasksPlatformComponent.kt
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── tasks/
│ └── TasksPlatformComponent.kt
├── thirdparty/
│ └── androidx/
│ └── paging/
│ └── compose/
│ ├── build.gradle.kts
│ └── src/
│ ├── androidMain/
│ │ └── kotlin/
│ │ └── PagingPlaceholders.android.kt
│ ├── commonMain/
│ │ └── kotlin/
│ │ ├── LazyFoundationExtensions.kt
│ │ ├── LazyPagingItems.kt
│ │ └── PagingPlaceholders.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── PagingPlaceholders.ios.kt
│ └── jvmMain/
│ └── kotlin/
│ └── PagingPlaceholders.jvm.kt
└── ui/
├── account/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── account/
│ ├── AccountComponent.kt
│ ├── AccountPresenter.kt
│ ├── AccountUi.kt
│ └── AccountUiState.kt
├── anticipated/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── anticipated/
│ ├── AnticipatedShows.kt
│ ├── AnticipatedShowsComponent.kt
│ ├── AnticipatedShowsPresenter.kt
│ └── AnticipatedShowsUiState.kt
├── developer/
│ ├── log/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── developer/
│ │ └── log/
│ │ ├── DevLog.kt
│ │ ├── DevLogComponent.kt
│ │ ├── DevLogPresenter.kt
│ │ └── DevLogUiState.kt
│ ├── notifications/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── developer/
│ │ └── notifications/
│ │ ├── DevNotifications.kt
│ │ ├── DevNotificationsComponent.kt
│ │ ├── DevNotificationsPresenter.kt
│ │ └── DevNotificationsUiState.kt
│ └── settings/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── settings/
│ └── developer/
│ ├── DevSettings.kt
│ ├── DevSettingsComponent.kt
│ ├── DevSettingsPresenter.kt
│ └── DevSettingsUiState.kt
├── discover/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── discover/
│ ├── Discover.kt
│ ├── DiscoverComponent.kt
│ ├── DiscoverPresenter.kt
│ └── DiscoverUiState.kt
├── episode/
│ ├── details/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── episodedetails/
│ │ ├── EpisodeDetails.kt
│ │ ├── EpisodeDetailsComponent.kt
│ │ ├── EpisodeDetailsPresenter.kt
│ │ └── EpisodeDetailsUiState.kt
│ └── track/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── episode/
│ └── track/
│ ├── EpisodeTrack.kt
│ ├── EpisodeTrackComponent.kt
│ ├── EpisodeTrackPresenter.kt
│ └── EpisodeTrackUiState.kt
├── library/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── library/
│ ├── Library.kt
│ ├── LibraryComponent.kt
│ ├── LibraryPresenter.kt
│ └── LibraryUiState.kt
├── licenses/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── settings/
│ └── licenses/
│ ├── Licenses.kt
│ ├── LicensesComponent.kt
│ ├── LicensesPresenter.kt
│ └── LicensesUiState.kt
├── popular/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── popular/
│ ├── PopularShows.kt
│ ├── PopularShowsComponent.kt
│ ├── PopularShowsPresenter.kt
│ └── PopularShowsUiState.kt
├── recommended/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── recommended/
│ ├── Recommended.kt
│ ├── RecommendedShowsComponent.kt
│ ├── RecommendedShowsPresenter.kt
│ └── RecommendedShowsUiState.kt
├── root/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── home/
│ │ ├── Home.kt
│ │ ├── RootUiComponent.kt
│ │ ├── RootViewModel.kt
│ │ └── TiviContent.kt
│ └── iosMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── TiviUiViewController.kt
├── search/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── search/
│ ├── Search.kt
│ ├── SearchComponent.kt
│ ├── SearchPresenter.kt
│ └── SearchUiState.kt
├── settings/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ ├── androidMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ └── Platform.kt
│ ├── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ ├── Platform.kt
│ │ ├── Settings.kt
│ │ ├── SettingsComponent.kt
│ │ ├── SettingsPresenter.kt
│ │ └── SettingsUiState.kt
│ ├── iosMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── settings/
│ │ └── Platform.kt
│ └── jvmMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── settings/
│ └── Platform.kt
├── show/
│ ├── details/
│ │ ├── build.gradle.kts
│ │ ├── lint-baseline.xml
│ │ └── src/
│ │ └── commonMain/
│ │ └── kotlin/
│ │ └── app/
│ │ └── tivi/
│ │ └── showdetails/
│ │ └── details/
│ │ ├── ShowDetails.kt
│ │ ├── ShowDetailsComponent.kt
│ │ ├── ShowDetailsPresenter.kt
│ │ └── ShowDetailsUiState.kt
│ └── seasons/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── showdetails/
│ └── seasons/
│ ├── ShowSeasons.kt
│ ├── ShowSeasonsComponent.kt
│ ├── ShowSeasonsPresenter.kt
│ └── ShowSeasonsUiState.kt
├── trending/
│ ├── build.gradle.kts
│ ├── lint-baseline.xml
│ └── src/
│ └── commonMain/
│ └── kotlin/
│ └── app/
│ └── tivi/
│ └── home/
│ └── trending/
│ ├── Trending.kt
│ ├── TrendingShowsComponent.kt
│ ├── TrendingShowsPresenter.kt
│ └── TrendingShowsUiState.kt
└── upnext/
├── build.gradle.kts
├── lint-baseline.xml
└── src/
└── commonMain/
└── kotlin/
└── app/
└── tivi/
└── home/
└── upnext/
├── UpNext.kt
├── UpNextComponent.kt
├── UpNextPresenter.kt
└── UpNextUiState.kt
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
charset = utf-8
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true
[*.{kt,kts}]
ij_kotlin_imports_layout = *
ktlint_code_style = intellij_idea
ktlint_standard_discouraged-comment-location = disabled
ktlint_standard_function-expression-body = disabled
ktlint_function_naming_ignore_when_annotated_with = Composable
================================================
FILE: .gitattributes
================================================
* text=auto eol=lf
*.bat text eol=crlf
*.jar binary
================================================
FILE: .github/scripts/mac-disk-cleanup.sh
================================================
#!/bin/bash
echo "Disk space before cleanup..."
df -h /
echo "Removing unnecessary files to free up disk space..."
# https://github.com/actions/runner-images/issues/2840
sudo rm -rf \
/opt/hostedtoolcache \
/opt/google/chrome \
/opt/microsoft/msedge \
/opt/microsoft/powershell \
/opt/pipx \
/usr/lib/mono \
/usr/local/julia* \
/usr/local/lib/node_modules \
/usr/local/share/chromium \
/usr/local/share/powershell \
/usr/share/dotnet \
/usr/share/swift
echo "Searching for Xcode versions:"
find /Applications -name "Xcode_*" -maxdepth 1 -mindepth 1
echo "Removing old Xcode versions..."
find /Applications -name "Xcode_*" -maxdepth 1 -mindepth 1 | grep -v `cat .xcode-version` | xargs rm -rf
echo "Available Xcode versions after removal:"
find /Applications -name "Xcode_*" -maxdepth 1 -mindepth 1
echo "Disk space after cleanup..."
df -h /
================================================
FILE: .github/workflows/baseline-profile.yml
================================================
name: Baseline profile generation
on:
# Every Sunday at 00:43
schedule:
- cron: '43 0 * * 0'
workflow_dispatch:
pull_request:
paths:
- 'benchmark/**'
- '.github/workflows/baseline-profile.yml'
jobs:
baseline-profile:
runs-on: ubuntu-latest
timeout-minutes: 45
env:
TERM: dumb
ORG_GRADLE_PROJECT_TIVI_TMDB_API_KEY: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_TMDB_API_KEY }}
ORG_GRADLE_PROJECT_TIVI_TVDB_API_KEY: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_TVDB_API_KEY }}
ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_ID: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_ID }}
ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_SECRET: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_SECRET }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_URL: ${{ secrets.ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_URL }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_USERNAME: ${{ secrets.ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_USERNAME }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_PASSWORD: ${{ secrets.ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_PASSWORD }}
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
with:
# We need to use a Personal Access Token from an admin to be able to commit to main,
# as it is a protected branch.
# https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token#creating-a-fine-grained-personal-access-token
token: ${{ secrets.TIVI_OWNER_PAT }}
- name: Enable KVM
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm
- name: Setup JDK for build
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- name: Accept Android SDK licenses
run: yes | $ANDROID_SDK_ROOT/cmdline-tools/latest/bin/sdkmanager --licenses
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
# This allows us to build most of what we need without the emulator running
# and using resources
- name: Build app and benchmark
run: ./gradlew assembleNonMinifiedRelease
- name: Clear Gradle Managed Devices
run: ./gradlew cleanManagedDevices
- name: Run benchmark on Gradle Managed Device
run: |
./gradlew generateBaselineProfile \
-Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" \
-Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile \
-Pandroid.experimental.testOptions.managedDevices.setupTimeoutMinutes=10 \
--no-configuration-cache
# If we're on main branch, copy over the baseline profile and
# commit it to the repository (if changed)
- name: Commit baseline profile into main
if: github.ref == 'refs/heads/main'
run: |
# If the baseline profile has changed, commit it
if [[ $(git diff --stat android-app/app/src) != '' ]]; then
git config user.name github-actions
git config user.email github-actions@github.com
git add android-app/app/src
git commit -m "Update app baseline profile"
git pull --rebase
git push
fi
- name: Upload reports
if: always()
uses: actions/upload-artifact@v4
with:
name: reports
path: |
**/build/reports/*
- name: Clean secrets
if: always()
run: ./release/clean-secrets.sh
================================================
FILE: .github/workflows/build.yml
================================================
name: CI
on:
push:
branches:
- main
tags:
- v*
pull_request:
workflow_dispatch:
env:
ORG_GRADLE_PROJECT_TIVI_REVENUECAT_ANDROID_API_KEY: ${{ secrets.REVENUECAT_ANDROID_API_KEY }}
ORG_GRADLE_PROJECT_TIVI_REVENUECAT_IOS_API_KEY: ${{ secrets.REVENUECAT_IOS_API_KEY }}
ORG_GRADLE_PROJECT_TIVI_TMDB_API_KEY: ${{ secrets.TMDB_API_KEY }}
ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_ID: ${{ secrets.TRAKT_CLIENT_ID }}
ORG_GRADLE_PROJECT_TIVI_TRAKT_CLIENT_SECRET: ${{ secrets.TRAKT_CLIENT_SECRET }}
ORG_GRADLE_PROJECT_TIVI_RELEASE_KEYSTORE_PWD: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_RELEASE_KEYSTORE_PWD }}
ORG_GRADLE_PROJECT_TIVI_RELEASE_KEY_PWD: ${{ secrets.ORG_GRADLE_PROJECT_TIVI_RELEASE_KEY_PWD }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_URL: ${{ secrets.REMOTE_BUILD_CACHE_URL }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_USERNAME: ${{ secrets.REMOTE_BUILD_CACHE_USERNAME }}
ORG_GRADLE_PROJECT_REMOTE_BUILD_CACHE_PASSWORD: ${{ secrets.REMOTE_BUILD_CACHE_PASSWORD }}
APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ID }}
APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_ISSUER_ID }}
APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_CONTENTS }}
APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64: true
MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.FASTLANE_MATCH_GH_PAT }}
MATCH_PASSWORD: ${{ secrets.FASTLANE_MATCH_PASSWORD }}
TIVI_BUILD_NUMBER: ${{ github.run_number }}
FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT: 60
jobs:
android:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Generate build number
shell: bash
run: echo "ORG_GRADLE_PROJECT_TIVI_VERSIONCODE=$(( (GITHUB_RUN_NUMBER * 2) + 10000 ))" >> $GITHUB_ENV
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- name: Build Android App (skipping benchmark variant)
run: |
./gradlew check \
:android-app:app:assemble \
:android-app:app:bundle \
-x assembleNonMinifiedRelease \
-x bundleNonMinifiedRelease \
-Pandroidx.baselineprofile.skipgeneration=true
- name: Clean secrets
if: always()
run: ./release/clean-secrets.sh
- name: Upload build outputs
if: always()
uses: actions/upload-artifact@v4
with:
name: android-build-outputs
path: android-app/app/build/outputs
- name: Upload reports
if: always()
uses: actions/upload-artifact@v4
with:
name: android-reports
path: |
**/build/reports/*
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: android-test-results
path: |
**/build/test-results/*
desktop:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v3
- name: set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Build Desktop App
run: ./gradlew jvmTest :desktop-app:packageDistributionForCurrentOS
- name: Upload build outputs
if: always()
uses: actions/upload-artifact@v4
with:
name: desktop-build-binaries
path: desktop-app/build/compose/binaries
- name: Upload reports
if: always()
uses: actions/upload-artifact@v4
with:
name: desktop-reports
path: |
**/build/reports/*
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: desktop-test-results
path: |
**/build/test-results/*
ios-qa-app:
runs-on: macos-14
timeout-minutes: 60
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup Disk space in runner
run: .github/scripts/mac-disk-cleanup.sh
- name: set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: brew install swiftlint
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- uses: actions/cache@v4
with:
path: ios-app/Tivi/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- name: Run Fastlane Lint lane
run: bundle exec fastlane ios lint
- name: Build iOS application
run: bundle exec fastlane ios build_qa
- name: Upload build outputs
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: ios-qa-build-outputs
path: |
*.ipa
*.dSYM.zip
- name: Upload build logs
if: always()
uses: actions/upload-artifact@v4
with:
name: ios-qa-logs
path: |
**/fastlane-buildlog
ios-prod-app:
runs-on: macos-14
timeout-minutes: 60
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup Disk space in runner
run: .github/scripts/mac-disk-cleanup.sh
- name: set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- run: brew install swiftlint
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- uses: actions/cache@v4
with:
path: ios-app/Tivi/Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- name: Build iOS application
run: bundle exec fastlane ios build_prod
- name: Upload build outputs
if: always()
continue-on-error: true
uses: actions/upload-artifact@v4
with:
name: ios-prod-build-outputs
path: |
*.ipa
*.dSYM.zip
- name: Upload build logs
if: always()
uses: actions/upload-artifact@v4
with:
name: ios-prod-logs
path: |
**/fastlane-buildlog
ios-test:
runs-on: macos-14
timeout-minutes: 60
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup Disk space in runner
run: .github/scripts/mac-disk-cleanup.sh
- name: set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: 21
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
# Set Xcode version
- run: sudo xcodes select
- name: iOS tests
# Disable CC due to https://github.com/google/ksp/issues/1463
run: ./gradlew iosSimulatorArm64Test --no-configuration-cache
- name: Upload reports
if: always()
uses: actions/upload-artifact@v4
with:
name: ios-reports
path: |
**/build/reports/*
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: ios-test-results
path: |
**/build/test-results/*
publish-testflight:
if: github.ref == 'refs/heads/main'
needs: [ios-qa-app, ios-prod-app, ios-test]
runs-on: macos-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- name: Cleanup Disk space in runner
run: .github/scripts/mac-disk-cleanup.sh
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- uses: actions/download-artifact@v4
with:
name: ios-qa-build-outputs
- name: Publish QA to TestFlight
run: bundle exec fastlane ios publish_qa
- name: Delete QA IPA
run: |
rm *.ipa
rm *.dSYM.zip
- uses: actions/download-artifact@v4
with:
name: ios-prod-build-outputs
- name: Publish prod to TestFlight
run: bundle exec fastlane ios publish_prod
publish-playstore:
if: github.ref == 'refs/heads/main'
needs: [android]
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: ruby/setup-ruby@v1
with:
bundler-cache: true
- name: Decrypt secrets
run: ./release/decrypt-secrets.sh
env:
ENCRYPT_KEY: ${{ secrets.ENCRYPT_KEY }}
- uses: actions/download-artifact@v4
with:
name: android-build-outputs
path: android-app/app/build/outputs
- name: Publish QA to Google Play
run: bundle exec fastlane android publish_qa
- name: Publish prod to Google Play
run: bundle exec fastlane android publish_prod
================================================
FILE: .github/workflows/gradle-wrapper.yaml
================================================
name: gradle-wrapper
on:
pull_request:
paths:
- 'gradlew'
- 'gradlew.bat'
- 'gradle/wrapper/'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: gradle/wrapper-validation-action@v3
================================================
FILE: .github/workflows/todo.yml
================================================
name: TODO <> Issues
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4
- uses: alstr/todo-to-issue-action@v5
================================================
FILE: .gitignore
================================================
# Gradle
.gradle
build/
# Kotlin
.kotlin/
captures
/local.properties
# IntelliJ .idea folder
.idea/workspace.xml
.idea/misc.xml
.idea/libraries
.idea/caches
.idea/navEditor.xml
.idea/tasks.xml
.idea/modules.xml
.idea/other.xml
.idea/compiler.xml
.idea/jarRepositories.xml
.idea/deploymentTargetDropDown.xml
.idea/deploymentTargetSelector.xml
.idea/androidTestResultsUserPreferences.xml
.idea/appInsightsSettings.xml
.idea/artifacts
.idea/shelf
gradle.xml
*.iml
ios-app/Tivi/.idea/*
.fleet
# General
.DS_Store
.externalNativeBuild
# Do not commit plain-text release keys
app-release.jks
play-account.p12
play-account.json
# Do not commit firebase config
google-services.json
# VS Code config
org.eclipse.buildship.core.prefs
.classpath
.project
bin/
##########################################################################################
# Imported from https://github.com/github/gitignore/blob/main/Swift.gitignore
##########################################################################################
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
## User settings
xcuserdata/
## Obj-C/Swift specific
*.hmap
## App packaging
*.ipa
*.dSYM.zip
*.dSYM
## Playgrounds
timeline.xctimeline
playground.xcworkspace
# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm
# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
.build/
# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control
report.xml
Preview.html
screenshots/**/*.png
test_output
*.env*
================================================
FILE: .idea/checkstyle-idea.xml
================================================
================================================
FILE: .idea/codeStyles/Project.xml
================================================
.*:id
http://schemas.android.com/apk/res/android
.*:name
http://schemas.android.com/apk/res/android
.*
http://schemas.android.com/apk/res/android
ANDROID_ATTRIBUTE_ORDER
================================================
FILE: .idea/codeStyles/codeStyleConfig.xml
================================================
================================================
FILE: .idea/copyright/Chris_Banes_Apache_v2.xml
================================================
================================================
FILE: .idea/copyright/Google_Apache_v2_0.xml
================================================
================================================
FILE: .idea/copyright/profiles_settings.xml
================================================
================================================
FILE: .idea/dictionaries/chris.xml
================================================
spdx
================================================
FILE: .idea/dictionaries/chrisbanes.xml
================================================
tmdb
trakt
================================================
FILE: .idea/encodings.xml
================================================
================================================
FILE: .idea/inspectionProfiles/ktlint.xml
================================================
================================================
FILE: .idea/inspectionProfiles/profiles_settings.xml
================================================
================================================
FILE: .idea/kotlinc.xml
================================================
================================================
FILE: .idea/vcs.xml
================================================
================================================
FILE: .ruby-version
================================================
3.3.4
================================================
FILE: .swiftlint.yml
================================================
included:
- ios-app/Tivi
excluded:
- ios-app/Tivi/UITests/SnapshotHelper.swift
- ios-app/Tivi/Pods
strict: true
disabled_rules:
- todo
================================================
FILE: .xcode-version
================================================
15.3
================================================
FILE: Gemfile
================================================
source "https://rubygems.org"
gem 'cocoapods', '~> 1.15'
gem 'fastlane'
gem 'screengrab'
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# Tivi has now deprecated
After roughly 9 years of development, I've decided that now (12th November 2024) is the time for Tivi to be 'complete'. After releasing 1.0.0 recently, I unfortunately just don't have the time or inclination to keep developing the app.
Another reason which has prompted this change is that I have no intention of allowing Google Play to publish my home address (through it's '[verification](https://support.google.com/googleplay/android-developer/answer/14177239?hl=en)' process), therefore my developer account has been restricted and locked. C'est la vie.
I've also delisted the app on the iOS App Store.
Thanks to everyone who has used and tested the app. I hope that it's been useful to learn from.
🫡
---

Tivi is a TV show tracking application which connects to [Trakt.tv](https://www.trakt.tv). It has been updated over the years to target a number of platforms, built upon Kotlin Multiplatform and Compose Multiplatform.
## Download
## Platforms
### Android
Tivi started out as an open source Android app, showcasing cutting technologies through its development. The codebase was transformed in late-2022 to be built upon [Kotlin Multiplatform](https://kotlinlang.org/docs/multiplatform.html), allowing us to re-use a large proportion of the code across different platforms.
### iOS
The iOS app is well maintained (the main developers uses it daily). To aid development time, most of the UIs are shared with the Android app, enabled through [Compose Multiplatform](https://www.jetbrains.com/lp/compose-multiplatform/).
### Desktop JVM
Tivi is built for Desktop running as a Java app. Unfortunately we don’t have feature parity on the desktop target due to either missing APIs, or lack of priority by the maintainer to implement them. However the basics of the app do work.
## Development Setup
### Android and Desktop
Tivi is a standard Gradle project which can be opened in recent versions of Android Studio or IntelliJ.
- The Android application module is located at [android-app/app/](android-app/app) (`:android-app:app`).
- The Desktop application module is located at [desktop-app/](desktop-app) (`:desktop-app`).
### iOS
The iOS project is setup as a typical Xcode project. It currently uses [CocoaPods](https://cocoapods.org/) to manage dependencies, and therefore you’ll need to install this before opening the Xcode project.
Let's step through it:
#### Setup Ruby
We need Ruby for various dependencies, therefore we need a Ruby environment. I recommend using [rbenv](https://github.com/rbenv/rbenv), but that's just a suggestion:
```shell
brew install rbenv
rbenv init
# Download Ruby 3.3.4 and set it as the global version
rbenv install 3.3.4
rbenv global 3.3.4
# Install bundler
gem install bundler
```
#### Xcode
We use the latest version of Xcode supported by Kotlin Multiplatform, which is defined in the [.xcode-version](.xcode-version) file.
We enforce the Xcode version on CI, but locally you can use whatever version you want. The [Xcodes.app](https://www.xcodes.app/) application is a great way to install different versions.
#### Nearly there
After you have installed the dependencies, you can now pull down the dependencies:
``` shell
cd /path/to/tivi/checkout
# Install all of the Ruby dependencies
bundle install
# Install pods
pod install --project-directory=ios-app/Tivi
```
#### Open the project in Xcode
Finally, we can open the project in Xcode. Open Xcode and then point it to the workspace file at: [`ios-app/Tivi/Tivi.xcworkspace`](ios-app/Tivi/Tivi.xcworkspace).
Press Run and it should build!
### Code style
This project uses [ktlint](https://github.com/pinterest/ktlint), provided via
the [spotless](https://github.com/diffplug/spotless) gradle plugin, and the bundled project IntelliJ codestyle.
If you find that one of your pull reviews does not pass the CI server check due to a code style conflict, you can fix it by running: `./gradlew spotlessApply`.
### API keys
You need to supply API / client keys for the various services the
app uses:
- [Trakt.tv](https://trakt.docs.apiary.io)
- [TMDb](https://developers.themoviedb.org)
You can find information about how to gain access via the relevant links.
When creating a Trakt API project, you need to set the OAuth redirect uri to `app.tivi.debug://auth/oauth2callback` for debug build types, or `app.tivi://auth/oauth2callback` for release build types.
Once you obtain the keys, you can set them in your `~/.gradle/gradle.properties`:
```
# Get these from Trakt.tv
TIVI_TRAKT_CLIENT_ID=
TIVI_TRAKT_CLIENT_SECRET=
# Get this from TMDb
TIVI_TMDB_API_KEY=
```
## Contributions
If you've found an error in this sample, please file an issue.
Patches are encouraged and may be submitted by forking this project and
submitting a pull request. Since this project is still in its very early stages,
if your change is substantial, please raise an issue first to discuss it.
## License
```
Copyright 2016-2021 Google LLC
Copyright 2023 Christopher Banes
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
================================================
FILE: android-app/app/benchmark-rules.pro
================================================
-dontobfuscate
-dontwarn com.google.errorprone.annotations.InlineMe
================================================
FILE: android-app/app/build.gradle.kts
================================================
// Copyright 2023, Google LLC, Christopher Banes and the Tivi project contributors
// SPDX-License-Identifier: Apache-2.0
import com.android.build.api.dsl.ManagedVirtualDevice
plugins {
id("app.tivi.android.application")
id("app.tivi.kotlin.android")
id("app.tivi.compose")
id("androidx.baselineprofile")
}
android {
namespace = "app.tivi"
defaultConfig {
applicationId = "app.tivi"
versionCode = properties["TIVI_VERSIONCODE"]?.toString()?.toInt() ?: 19000
versionName = "1.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
signingConfigs {
getByName("debug") {
storeFile = rootProject.file("release/app-debug.jks")
storePassword = "android"
keyAlias = "androiddebugkey"
keyPassword = "android"
}
if (rootProject.file("release/app-release.jks").exists()) {
create("release") {
storeFile = rootProject.file("release/app-release.jks")
storePassword = properties["TIVI_RELEASE_KEYSTORE_PWD"]?.toString().orEmpty()
keyAlias = "tivi"
keyPassword = properties["TIVI_RELEASE_KEY_PWD"]?.toString().orEmpty()
}
}
}
buildFeatures {
buildConfig = true
}
buildTypes {
debug {
signingConfig = signingConfigs["debug"]
versionNameSuffix = "-dev"
}
release {
signingConfig = signingConfigs.findByName("release") ?: signingConfigs["debug"]
isShrinkResources = true
isMinifyEnabled = true
proguardFiles("proguard-rules.pro")
}
}
flavorDimensions += "mode"
productFlavors {
create("qa") {
dimension = "mode"
// This is a build with Chucker enabled
proguardFiles("proguard-rules-chucker.pro")
versionNameSuffix = "-qa"
}
create("standard") {
dimension = "mode"
// Standard build is always ahead of the QA builds as it goes straight to
// the alpha channel. This is the 'release' flavour
versionCode = (android.defaultConfig.versionCode ?: 0) + 1
}
}
@Suppress("UnstableApiUsage")
testOptions {
managedDevices {
devices {
create("api34") {
device = "Pixel 6"
apiLevel = 34
systemImageSource = "aosp"
}
}
}
}
}
androidComponents {
// Ignore the standardDebug variant
beforeVariants(
selector()
.withBuildType("debug")
.withFlavor("mode" to "standard"),
) { variant ->
variant.enable = false
}
onVariants(selector().withBuildType("release")) { variant ->
variant.packaging.resources.run {
// Exclude AndroidX version files. We only do this in the release build so that
// Layout Inspector continues to work for debug
excludes.add("META-INF/*.version")
// Exclude the Firebase/Fabric/other random properties files
excludes.addAll("/*.properties", "META-INF/*.properties")
}
}
}
dependencies {
qaImplementation(projects.shared.qa)
standardImplementation(projects.shared.prod)
implementation(libs.androidx.activity.activity)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.browser)
implementation(libs.androidx.profileinstaller)
implementation(libs.androidx.splashscreen)
qaImplementation(libs.leakCanary)
implementation(libs.kotlin.coroutines.android)
implementation(libs.google.firebase.crashlytics)
"baselineProfile"(projects.androidApp.benchmark)
androidTestImplementation(projects.androidApp.commonTest)
androidTestImplementation(libs.androidx.uiautomator)
androidTestImplementation(libs.screengrab)
androidTestImplementation(libs.junit)
androidTestImplementation(libs.androidx.test.core)
androidTestImplementation(libs.androidx.test.rules)
}
baselineProfile {
mergeIntoMain = true
saveInSrc = true
}
if (file("google-services.json").exists()) {
apply(plugin = libs.plugins.gms.googleServices.get().pluginId)
apply(plugin = libs.plugins.firebase.crashlytics.get().pluginId)
}
fun DependencyHandler.qaImplementation(dependencyNotation: Any) =
add("qaImplementation", dependencyNotation)
fun DependencyHandler.standardImplementation(dependencyNotation: Any) =
add("standardImplementation", dependencyNotation)
================================================
FILE: android-app/app/proguard-rules-chucker.pro
================================================
# Chucker uses GSON and TypeToken:
# https://r8.googlesource.com/r8/+/refs/heads/main/compatibility-faq.md#gson-with-full-mode
-keepattributes Signature
-keep class com.google.gson.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken
================================================
FILE: android-app/app/proguard-rules.pro
================================================
# This is a configuration file for R8
-verbose
-allowaccessmodification
-repackageclasses
# Note that you cannot just include these flags in your own
# configuration file; if you are including this file, optimization
# will be turned off. You'll need to either edit this file, or
# duplicate the contents of this file and remove the include of this
# file from your project's proguard.config path property.
# For native methods, see http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
native ;
}
# For enumeration classes
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
# AndroidX + support library contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontwarn android.support.**
-dontwarn androidx.**
-keepattributes SourceFile,
LineNumberTable,
RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations,
AnnotationDefault
-renamesourcefileattribute SourceFile
# Using ktor client in Android has missing proguard rule
# See https://youtrack.jetbrains.com/issue/KTOR-5528
-dontwarn org.slf4j.**
# Remove Amazon call from Purchases
-assumenosideeffects class com.revenuecat.purchases.kmp.Purchases {
syncAmazonPurchase(...);
}
================================================
FILE: android-app/app/src/androidTest/kotlin/app/tivi/screenshots/Screenshots.kt
================================================
// Copyright 2024, Christopher Banes and the Tivi project contributors
// SPDX-License-Identifier: Apache-2.0
package app.tivi.screenshots
import android.os.SystemClock
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.UiDevice
import app.tivi.app.test.navigateFromDiscoverToShowDetails
import app.tivi.app.test.navigateToLibrary
import app.tivi.app.test.navigateToSearch
import app.tivi.app.test.navigateToUpNext
import app.tivi.test.smoke.startAppAndWait
import org.junit.Rule
import org.junit.Test
import tools.fastlane.screengrab.Screengrab
import tools.fastlane.screengrab.locale.LocaleTestRule
class Screenshots {
@Rule
@JvmField
val localeTestRule = LocaleTestRule()
@Test
fun screenshots() {
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
startAppAndWait(device)
SystemClock.sleep(3_000)
Screengrab.screenshot("0_home")
device.navigateFromDiscoverToShowDetails()
SystemClock.sleep(1_000)
Screengrab.screenshot("1_show_details")
device.navigateToUpNext()
SystemClock.sleep(1_000)
Screengrab.screenshot("2_upnext")
device.navigateToLibrary()
SystemClock.sleep(1_000)
Screengrab.screenshot("3_library")
device.navigateToSearch()
SystemClock.sleep(1_000)
Screengrab.screenshot("4_search")
}
}
================================================
FILE: android-app/app/src/androidTest/kotlin/app/tivi/test/smoke/SmokeTest.kt
================================================
// Copyright 2023, Google LLC, Christopher Banes and the Tivi project contributors
// SPDX-License-Identifier: Apache-2.0
package app.tivi.test.smoke
import android.content.Intent
import androidx.test.core.app.ApplicationProvider
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.Until
import app.tivi.TiviApplication
import app.tivi.app.test.AppScenarios
import org.junit.Assert.assertNotNull
import org.junit.Test
class SmokeTest {
@Test
fun openApp() {
val device = UiDevice.getInstance(InstrumentationRegistry.getInstrumentation())
startAppAndWait(device)
// Run through the main navigation items
AppScenarios.mainNavigationItems(device)
}
}
internal fun startAppAndWait(device: UiDevice) {
device.pressHome()
// Wait for launcher
val launcherPackage = device.launcherPackageName
assertNotNull(launcherPackage)
device.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), 5_000)
// Launch the app
val context = ApplicationProvider.getApplicationContext()
val packageName = context.packageName
val intent = context.packageManager.getLaunchIntentForPackage(packageName)!!.apply {
// Clear out any previous instances
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
}
context.startActivity(intent)
// Wait for the app to appear
device.wait(Until.hasObject(By.pkg(packageName).depth(0)), 5_000)
}
================================================
FILE: android-app/app/src/debug/AndroidManifest.xml
================================================
================================================
FILE: android-app/app/src/debug/res/values/colors.xml
================================================
#00695C
================================================
FILE: android-app/app/src/debug/res/values/strings.xml
================================================
Tivi debug
================================================
FILE: android-app/app/src/main/AndroidManifest.xml
================================================
================================================
FILE: android-app/app/src/main/generated/baselineProfiles/baseline-prof.txt
================================================
PL_COROUTINE/ArtificialStackFrames;->()V
PL_COROUTINE/ArtificialStackFrames;->coroutineBoundary()Ljava/lang/StackTraceElement;
PL_COROUTINE/CoroutineDebuggingKt;->()V
PL_COROUTINE/CoroutineDebuggingKt;->access$artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement;
PL_COROUTINE/CoroutineDebuggingKt;->artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement;
Landroidx/activity/Cancellable;
Landroidx/activity/ComponentActivity;
HSPLandroidx/activity/ComponentActivity;->$r8$lambda$4IRRzyoWeWaykEOcgWGjbNoGAkw(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->$r8$lambda$KUbBm7ckfqTc9QC-gukC86fguu4(Landroidx/activity/ComponentActivity;Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity;->$r8$lambda$h6vvr6zUWA2U1fE-0KsKpOgpr28(Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->$r8$lambda$ibk6u1HK7J3AWKL_Wn934v2UVI8(Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->()V
HSPLandroidx/activity/ComponentActivity;->()V
HSPLandroidx/activity/ComponentActivity;->_init_$lambda$2(Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->_init_$lambda$3(Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->_init_$lambda$5(Landroidx/activity/ComponentActivity;Landroid/content/Context;)V
HSPLandroidx/activity/ComponentActivity;->access$addObserverForBackInvoker(Landroidx/activity/ComponentActivity;Landroidx/activity/OnBackPressedDispatcher;)V
HSPLandroidx/activity/ComponentActivity;->access$ensureViewModelStore(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity;->access$getReportFullyDrawnExecutor$p(Landroidx/activity/ComponentActivity;)Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
HSPLandroidx/activity/ComponentActivity;->addObserverForBackInvoker$lambda$7(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/ComponentActivity;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/ComponentActivity;->addObserverForBackInvoker(Landroidx/activity/OnBackPressedDispatcher;)V
HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
HSPLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V
HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry;
HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras;
HSPLandroidx/activity/ComponentActivity;->getFullyDrawnReporter()Landroidx/activity/FullyDrawnReporter;
HPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle;
HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher;
HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry;
HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore;
HSPLandroidx/activity/ComponentActivity;->initializeViewTreeOwners()V
HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V
HSPLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/ComponentActivity;->registerForActivityResult(Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultRegistry;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/ComponentActivity;->reportFullyDrawn()V
HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda4;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda4;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda4;->onContextAvailable(Landroid/content/Context;)V
Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda5;
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda5;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/ComponentActivity$4;
HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/ComponentActivity$Api33Impl;
HSPLandroidx/activity/ComponentActivity$Api33Impl;->()V
HSPLandroidx/activity/ComponentActivity$Api33Impl;->()V
HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher;
Landroidx/activity/ComponentActivity$Companion;
HSPLandroidx/activity/ComponentActivity$Companion;->()V
HSPLandroidx/activity/ComponentActivity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
Landroidx/activity/ComponentActivity$NonConfigurationInstances;
Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor;
Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->(Landroidx/activity/ComponentActivity;)V
PLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->activityDestroyed()V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->execute(Ljava/lang/Runnable;)V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->onDraw()V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->run()V
HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorImpl;->viewCreated(Landroid/view/View;)V
Landroidx/activity/ComponentActivity$activityResultRegistry$1;
HSPLandroidx/activity/ComponentActivity$activityResultRegistry$1;->(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/ComponentActivity$defaultViewModelProviderFactory$2;
HSPLandroidx/activity/ComponentActivity$defaultViewModelProviderFactory$2;->(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/ComponentActivity$fullyDrawnReporter$2;
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2;->invoke()Landroidx/activity/FullyDrawnReporter;
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2;->invoke()Ljava/lang/Object;
Landroidx/activity/ComponentActivity$fullyDrawnReporter$2$1;
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2$1;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2$1;->invoke()Ljava/lang/Object;
HSPLandroidx/activity/ComponentActivity$fullyDrawnReporter$2$1;->invoke()V
Landroidx/activity/ComponentActivity$onBackPressedDispatcher$2;
HSPLandroidx/activity/ComponentActivity$onBackPressedDispatcher$2;->(Landroidx/activity/ComponentActivity;)V
HSPLandroidx/activity/ComponentActivity$onBackPressedDispatcher$2;->invoke()Landroidx/activity/OnBackPressedDispatcher;
HSPLandroidx/activity/ComponentActivity$onBackPressedDispatcher$2;->invoke()Ljava/lang/Object;
Landroidx/activity/ComponentActivity$onBackPressedDispatcher$2$$ExternalSyntheticLambda0;
HSPLandroidx/activity/ComponentActivity$onBackPressedDispatcher$2$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/graphics/BlendMode;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/Window;Z)V
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$4()Landroid/graphics/BlendMode;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$7()Landroid/graphics/BlendMode;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/Class;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(I)I
PLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Notification$Builder;Ljava/lang/String;)Landroid/app/Notification$Builder;
PLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Landroid/app/NotificationChannel;)V
PLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/NotificationManager;Ljava/lang/String;)Landroid/app/NotificationChannel;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowManager$LayoutParams;I)V
PLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/autofill/AutofillManager;Landroid/view/autofill/AutofillManager$AutofillCallback;)V
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager$AutofillCallback;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/autofill/AutofillManager;
HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/CharSequence;I)Landroid/app/NotificationChannel;
Landroidx/activity/EdgeToEdge;
HSPLandroidx/activity/EdgeToEdge;->()V
HSPLandroidx/activity/EdgeToEdge;->enable(Landroidx/activity/ComponentActivity;Landroidx/activity/SystemBarStyle;Landroidx/activity/SystemBarStyle;)V
Landroidx/activity/EdgeToEdgeApi26;
HSPLandroidx/activity/EdgeToEdgeApi26;->()V
Landroidx/activity/EdgeToEdgeApi28;
HSPLandroidx/activity/EdgeToEdgeApi28;->()V
Landroidx/activity/EdgeToEdgeApi29;
HSPLandroidx/activity/EdgeToEdgeApi29;->()V
HSPLandroidx/activity/EdgeToEdgeApi29;->setUp(Landroidx/activity/SystemBarStyle;Landroidx/activity/SystemBarStyle;Landroid/view/Window;Landroid/view/View;ZZ)V
Landroidx/activity/EdgeToEdgeApi30;
HSPLandroidx/activity/EdgeToEdgeApi30;->()V
HSPLandroidx/activity/EdgeToEdgeApi30;->adjustLayoutInDisplayCutoutMode(Landroid/view/Window;)V
Landroidx/activity/EdgeToEdgeBase;
HSPLandroidx/activity/EdgeToEdgeBase;->()V
Landroidx/activity/EdgeToEdgeImpl;
Landroidx/activity/FullyDrawnReporter;
HSPLandroidx/activity/FullyDrawnReporter;->$r8$lambda$A0RwxxT-QIMFOsDA3Nv48auR1K4(Landroidx/activity/FullyDrawnReporter;)V
HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/FullyDrawnReporter;->addOnReportDrawnListener(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/FullyDrawnReporter;->addReporter()V
HSPLandroidx/activity/FullyDrawnReporter;->fullyDrawnReported()V
HSPLandroidx/activity/FullyDrawnReporter;->isFullyDrawnReported()Z
HSPLandroidx/activity/FullyDrawnReporter;->postWhenReportersAreDone()V
HSPLandroidx/activity/FullyDrawnReporter;->removeReporter()V
HSPLandroidx/activity/FullyDrawnReporter;->reportRunnable$lambda$2(Landroidx/activity/FullyDrawnReporter;)V
Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;
HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Landroidx/activity/FullyDrawnReporter;)V
HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->run()V
Landroidx/activity/FullyDrawnReporterOwner;
Landroidx/activity/OnBackPressedCallback;
HSPLandroidx/activity/OnBackPressedCallback;->(Z)V
HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V
PLandroidx/activity/OnBackPressedCallback;->getEnabledChangedCallback$activity_release()Lkotlin/jvm/functions/Function0;
HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z
PLandroidx/activity/OnBackPressedCallback;->remove()V
PLandroidx/activity/OnBackPressedCallback;->removeCancellable(Landroidx/activity/Cancellable;)V
HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V
HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V
Landroidx/activity/OnBackPressedDispatcher;
HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;Landroidx/core/util/Consumer;)V
PLandroidx/activity/OnBackPressedDispatcher;->access$getInProgressCallback$p(Landroidx/activity/OnBackPressedDispatcher;)Landroidx/activity/OnBackPressedCallback;
PLandroidx/activity/OnBackPressedDispatcher;->access$getOnBackPressedCallbacks$p(Landroidx/activity/OnBackPressedDispatcher;)Lkotlin/collections/ArrayDeque;
HSPLandroidx/activity/OnBackPressedDispatcher;->access$updateEnabledCallbacks(Landroidx/activity/OnBackPressedDispatcher;)V
PLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable;
HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V
HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState(Z)V
HSPLandroidx/activity/OnBackPressedDispatcher;->updateEnabledCallbacks()V
Landroidx/activity/OnBackPressedDispatcher$1;
HSPLandroidx/activity/OnBackPressedDispatcher$1;->(Landroidx/activity/OnBackPressedDispatcher;)V
Landroidx/activity/OnBackPressedDispatcher$2;
HSPLandroidx/activity/OnBackPressedDispatcher$2;->(Landroidx/activity/OnBackPressedDispatcher;)V
Landroidx/activity/OnBackPressedDispatcher$3;
HSPLandroidx/activity/OnBackPressedDispatcher$3;->(Landroidx/activity/OnBackPressedDispatcher;)V
Landroidx/activity/OnBackPressedDispatcher$4;
HSPLandroidx/activity/OnBackPressedDispatcher$4;->(Landroidx/activity/OnBackPressedDispatcher;)V
PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->()V
PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->registerOnBackInvokedCallback(Ljava/lang/Object;ILjava/lang/Object;)V
PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->unregisterOnBackInvokedCallback(Ljava/lang/Object;Ljava/lang/Object;)V
Landroidx/activity/OnBackPressedDispatcher$Api34Impl;
HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V
HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V
HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->createOnBackAnimationCallback(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback;
Landroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1;
HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V
Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V
PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V
HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;
HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V
PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V
Landroidx/activity/OnBackPressedDispatcher$addCallback$1;
HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->(Ljava/lang/Object;)V
HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()Ljava/lang/Object;
HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()V
Landroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;
HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->(Ljava/lang/Object;)V
PLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()Ljava/lang/Object;
PLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()V
Landroidx/activity/OnBackPressedDispatcherOwner;
Landroidx/activity/R$id;
Landroidx/activity/SystemBarStyle;
HSPLandroidx/activity/SystemBarStyle;->()V
HSPLandroidx/activity/SystemBarStyle;->(IIILkotlin/jvm/functions/Function1;)V
HSPLandroidx/activity/SystemBarStyle;->(IIILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/activity/SystemBarStyle;->getDetectDarkMode$activity_release()Lkotlin/jvm/functions/Function1;
HSPLandroidx/activity/SystemBarStyle;->getNightMode$activity_release()I
HSPLandroidx/activity/SystemBarStyle;->getScrimWithEnforcedContrast$activity_release(Z)I
Landroidx/activity/SystemBarStyle$Companion;
HSPLandroidx/activity/SystemBarStyle$Companion;->()V
HSPLandroidx/activity/SystemBarStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/activity/SystemBarStyle$Companion;->auto$default(Landroidx/activity/SystemBarStyle$Companion;IILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/activity/SystemBarStyle;
HSPLandroidx/activity/SystemBarStyle$Companion;->auto(IILkotlin/jvm/functions/Function1;)Landroidx/activity/SystemBarStyle;
Landroidx/activity/SystemBarStyle$Companion$auto$1;
HSPLandroidx/activity/SystemBarStyle$Companion$auto$1;->()V
HSPLandroidx/activity/SystemBarStyle$Companion$auto$1;->()V
HSPLandroidx/activity/SystemBarStyle$Companion$auto$1;->invoke(Landroid/content/res/Resources;)Ljava/lang/Boolean;
HSPLandroidx/activity/SystemBarStyle$Companion$auto$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/ViewTreeFullyDrawnReporterOwner;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner;->get(Landroid/view/View;)Landroidx/activity/FullyDrawnReporterOwner;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner;->set(Landroid/view/View;Landroidx/activity/FullyDrawnReporterOwner;)V
Landroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$1;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$1;->()V
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$1;->()V
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$1;->invoke(Landroid/view/View;)Landroid/view/View;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$2;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$2;->()V
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$2;->()V
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$2;->invoke(Landroid/view/View;)Landroidx/activity/FullyDrawnReporterOwner;
HSPLandroidx/activity/ViewTreeFullyDrawnReporterOwner$findViewTreeFullyDrawnReporterOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->get(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V
Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Landroid/view/View;)Landroid/view/View;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Landroid/view/View;)Landroidx/activity/OnBackPressedDispatcherOwner;
HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/compose/BackHandlerKt;
HSPLandroidx/activity/compose/BackHandlerKt;->BackHandler(ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
Landroidx/activity/compose/BackHandlerKt$BackHandler$1$1;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;Z)V
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()Ljava/lang/Object;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$1$1;->invoke()V
Landroidx/activity/compose/BackHandlerKt$BackHandler$2$1;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$1;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/activity/compose/BackHandlerKt$BackHandler$2$1$invoke$$inlined$onDispose$1;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$2$1$invoke$$inlined$onDispose$1;->(Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;)V
PLandroidx/activity/compose/BackHandlerKt$BackHandler$2$1$invoke$$inlined$onDispose$1;->dispose()V
Landroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;
HSPLandroidx/activity/compose/BackHandlerKt$BackHandler$backCallback$1$1;->(ZLandroidx/compose/runtime/State;)V
Landroidx/activity/compose/ComponentActivityKt;
HSPLandroidx/activity/compose/ComponentActivityKt;->()V
HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V
HSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)V
HSPLandroidx/activity/compose/ComponentActivityKt;->setOwners(Landroidx/activity/ComponentActivity;)V
Landroidx/activity/compose/LocalFullyDrawnReporterOwner;
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner;->()V
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner;->()V
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/activity/FullyDrawnReporterOwner;
Landroidx/activity/compose/LocalFullyDrawnReporterOwner$LocalFullyDrawnReporterOwner$1;
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner$LocalFullyDrawnReporterOwner$1;->()V
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner$LocalFullyDrawnReporterOwner$1;->()V
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner$LocalFullyDrawnReporterOwner$1;->invoke()Landroidx/activity/FullyDrawnReporterOwner;
HSPLandroidx/activity/compose/LocalFullyDrawnReporterOwner$LocalFullyDrawnReporterOwner$1;->invoke()Ljava/lang/Object;
Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner;
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/activity/OnBackPressedDispatcherOwner;
Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Landroidx/activity/OnBackPressedDispatcherOwner;
HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Ljava/lang/Object;
Landroidx/activity/compose/ReportDrawnComposition;
HSPLandroidx/activity/compose/ReportDrawnComposition;->(Landroidx/activity/FullyDrawnReporter;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/compose/ReportDrawnComposition;->invoke()Ljava/lang/Object;
HSPLandroidx/activity/compose/ReportDrawnComposition;->invoke()V
HSPLandroidx/activity/compose/ReportDrawnComposition;->observeReporter(Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/compose/ReportDrawnComposition;->removeReporter()V
Landroidx/activity/compose/ReportDrawnComposition$checkReporter$1;
HSPLandroidx/activity/compose/ReportDrawnComposition$checkReporter$1;->(Ljava/lang/Object;)V
Landroidx/activity/compose/ReportDrawnComposition$observeReporter$1;
HSPLandroidx/activity/compose/ReportDrawnComposition$observeReporter$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/compose/ReportDrawnComposition$observeReporter$1;->invoke()Ljava/lang/Object;
HSPLandroidx/activity/compose/ReportDrawnComposition$observeReporter$1;->invoke()V
Landroidx/activity/compose/ReportDrawnComposition$snapshotStateObserver$1;
HSPLandroidx/activity/compose/ReportDrawnComposition$snapshotStateObserver$1;->()V
HSPLandroidx/activity/compose/ReportDrawnComposition$snapshotStateObserver$1;->()V
Landroidx/activity/compose/ReportDrawnKt;
HSPLandroidx/activity/compose/ReportDrawnKt;->ReportDrawnWhen(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V
Landroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1;
HSPLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1;->(Landroidx/activity/FullyDrawnReporter;Lkotlin/jvm/functions/Function0;)V
HSPLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1$invoke$$inlined$onDispose$1;->()V
PLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1$invoke$$inlined$onDispose$1;->dispose()V
Landroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1$invoke$$inlined$onDispose$2;
HSPLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1$invoke$$inlined$onDispose$2;->(Landroidx/activity/compose/ReportDrawnComposition;)V
HSPLandroidx/activity/compose/ReportDrawnKt$ReportDrawnWhen$1$1$invoke$$inlined$onDispose$2;->dispose()V
Landroidx/activity/contextaware/ContextAware;
Landroidx/activity/contextaware/ContextAwareHelper;
HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V
PLandroidx/activity/contextaware/ContextAwareHelper;->clearAvailableContext()V
HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V
Landroidx/activity/contextaware/OnContextAvailableListener;
Landroidx/activity/result/ActivityResult;
Landroidx/activity/result/ActivityResultCallback;
Landroidx/activity/result/ActivityResultCaller;
Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultLauncher;->()V
Landroidx/activity/result/ActivityResultRegistry;
HSPLandroidx/activity/result/ActivityResultRegistry;->$r8$lambda$TWvtyPFk-iHdx0R-btWVLevVLT0(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->()V
HSPLandroidx/activity/result/ActivityResultRegistry;->()V
HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I
HSPLandroidx/activity/result/ActivityResultRegistry;->register$lambda$1(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher;
HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V
PLandroidx/activity/result/ActivityResultRegistry;->unregister$activity_release(Ljava/lang/String;)V
Landroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticLambda0;
HSPLandroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticLambda0;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
HSPLandroidx/activity/result/ActivityResultRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V
Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract;
HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V
Landroidx/activity/result/ActivityResultRegistry$Companion;
HSPLandroidx/activity/result/ActivityResultRegistry$Companion;->()V
HSPLandroidx/activity/result/ActivityResultRegistry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
Landroidx/activity/result/ActivityResultRegistry$LifecycleContainer;
HSPLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->(Landroidx/lifecycle/Lifecycle;)V
HSPLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->addObserver(Landroidx/lifecycle/LifecycleEventObserver;)V
PLandroidx/activity/result/ActivityResultRegistry$LifecycleContainer;->clearObservers()V
Landroidx/activity/result/ActivityResultRegistry$generateRandomNumber$1;
HSPLandroidx/activity/result/ActivityResultRegistry$generateRandomNumber$1;->()V
HSPLandroidx/activity/result/ActivityResultRegistry$generateRandomNumber$1;->()V
HSPLandroidx/activity/result/ActivityResultRegistry$generateRandomNumber$1;->invoke()Ljava/lang/Integer;
HSPLandroidx/activity/result/ActivityResultRegistry$generateRandomNumber$1;->invoke()Ljava/lang/Object;
Landroidx/activity/result/ActivityResultRegistry$register$2;
HSPLandroidx/activity/result/ActivityResultRegistry$register$2;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
Landroidx/activity/result/ActivityResultRegistry$register$3;
HSPLandroidx/activity/result/ActivityResultRegistry$register$3;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V
Landroidx/activity/result/ActivityResultRegistryOwner;
Landroidx/activity/result/contract/ActivityResultContract;
HSPLandroidx/activity/result/contract/ActivityResultContract;->()V
Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;
HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V
Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;
HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->()V
HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
Landroidx/appcompat/app/ActionBarDrawerToggle$DelegateProvider;
Landroidx/appcompat/app/AppCompatActivity;
Landroidx/appcompat/app/AppCompatCallback;
Landroidx/appcompat/view/WindowCallbackWrapper;
Landroidx/appcompat/widget/SearchView$OnQueryTextListener;
Landroidx/arch/core/executor/ArchTaskExecutor;
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getIOThreadExecutor()Ljava/util/concurrent/Executor;
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor;
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->lambda$static$1(Ljava/lang/Runnable;)V
HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;
HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;->()V
Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;
HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->()V
HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V
Landroidx/arch/core/executor/DefaultTaskExecutor;
HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V
HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V
HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z
HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V
Landroidx/arch/core/executor/DefaultTaskExecutor$1;
HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->(Landroidx/arch/core/executor/DefaultTaskExecutor;)V
HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread;
Landroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;
HSPLandroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler;
Landroidx/arch/core/executor/TaskExecutor;
HSPLandroidx/arch/core/executor/TaskExecutor;->()V
Landroidx/arch/core/internal/FastSafeIterableMap;
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry;
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/arch/core/internal/SafeIterableMap;
HSPLandroidx/arch/core/internal/SafeIterableMap;->()V
PLandroidx/arch/core/internal/SafeIterableMap;->descendingIterator()Ljava/util/Iterator;
HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator;
HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I
Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator;
HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry;
Landroidx/arch/core/internal/SafeIterableMap$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object;
Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object;
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry;
HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
Landroidx/arch/core/internal/SafeIterableMap$ListIterator;
HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z
PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object;
PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/util/Map$Entry;
PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->nextNode()Landroidx/arch/core/internal/SafeIterableMap$Entry;
PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V
Landroidx/arch/core/internal/SafeIterableMap$SupportRemove;
HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V
Landroidx/arch/core/util/Function;
Landroidx/collection/ArrayMap;
HSPLandroidx/collection/ArrayMap;->()V
HSPLandroidx/collection/ArrayMap;->containsKey(Ljava/lang/Object;)Z
HSPLandroidx/collection/ArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set;
PLandroidx/collection/ArrayMap;->removeAll(Ljava/util/Collection;)Z
Landroidx/collection/ArrayMap$KeyIterator;
HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V
Landroidx/collection/ArrayMap$KeySet;
HSPLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V
HSPLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator;
PLandroidx/collection/ArrayMap$KeySet;->removeAll(Ljava/util/Collection;)Z
Landroidx/collection/ArraySet;
HSPLandroidx/collection/ArraySet;->()V
HSPLandroidx/collection/ArraySet;->(I)V
HSPLandroidx/collection/ArraySet;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z
HSPLandroidx/collection/ArraySet;->clear()V
HSPLandroidx/collection/ArraySet;->getArray$collection()[Ljava/lang/Object;
HSPLandroidx/collection/ArraySet;->getHashes$collection()[I
HSPLandroidx/collection/ArraySet;->get_size$collection()I
HSPLandroidx/collection/ArraySet;->setArray$collection([Ljava/lang/Object;)V
HSPLandroidx/collection/ArraySet;->setHashes$collection([I)V
HSPLandroidx/collection/ArraySet;->set_size$collection(I)V
HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object;
Landroidx/collection/ArraySetKt;
HSPLandroidx/collection/ArraySetKt;->allocArrays(Landroidx/collection/ArraySet;I)V
HSPLandroidx/collection/ArraySetKt;->indexOf(Landroidx/collection/ArraySet;Ljava/lang/Object;I)I
Landroidx/collection/IndexBasedArrayIterator;
HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V
HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z
Landroidx/collection/IntIntMap;
HSPLandroidx/collection/IntIntMap;->()V
HSPLandroidx/collection/IntIntMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/IntIntMap;->contains(I)Z
HSPLandroidx/collection/IntIntMap;->findKeyIndex(I)I
HSPLandroidx/collection/IntIntMap;->getCapacity()I
PLandroidx/collection/IntObjectMap;->()V
PLandroidx/collection/IntObjectMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
PLandroidx/collection/IntObjectMap;->getCapacity()I
PLandroidx/collection/IntObjectMapKt;->()V
PLandroidx/collection/IntObjectMapKt;->mutableIntObjectMapOf()Landroidx/collection/MutableIntObjectMap;
Landroidx/collection/IntSet;
HSPLandroidx/collection/IntSet;->()V
HSPLandroidx/collection/IntSet;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/IntSet;->getCapacity()I
Landroidx/collection/IntSetKt;
HSPLandroidx/collection/IntSetKt;->()V
HPLandroidx/collection/IntSetKt;->getEmptyIntArray()[I
Landroidx/collection/LongSparseArray;
HPLandroidx/collection/LongSparseArray;->(I)V
HSPLandroidx/collection/LongSparseArray;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HPLandroidx/collection/LongSparseArray;->clear()V
PLandroidx/collection/LongSparseArray;->containsKey(J)Z
HPLandroidx/collection/LongSparseArray;->get(J)Ljava/lang/Object;
HPLandroidx/collection/LongSparseArray;->indexOfKey(J)I
HPLandroidx/collection/LongSparseArray;->isEmpty()Z
HPLandroidx/collection/LongSparseArray;->keyAt(I)J
HPLandroidx/collection/LongSparseArray;->put(JLjava/lang/Object;)V
PLandroidx/collection/LongSparseArray;->remove(J)V
HPLandroidx/collection/LongSparseArray;->size()I
HPLandroidx/collection/LongSparseArray;->valueAt(I)Ljava/lang/Object;
PLandroidx/collection/LongSparseArrayKt;->()V
PLandroidx/collection/LongSparseArrayKt;->access$getDELETED$p()Ljava/lang/Object;
Landroidx/collection/LruCache;
HSPLandroidx/collection/LruCache;->(I)V
HSPLandroidx/collection/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/collection/LruCache;->remove(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
HSPLandroidx/collection/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I
HSPLandroidx/collection/LruCache;->trimToSize(I)V
Landroidx/collection/MutableIntIntMap;
HSPLandroidx/collection/MutableIntIntMap;->(I)V
HSPLandroidx/collection/MutableIntIntMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/MutableIntIntMap;->findFirstAvailableSlot(I)I
HPLandroidx/collection/MutableIntIntMap;->findInsertIndex(I)I
HSPLandroidx/collection/MutableIntIntMap;->initializeGrowth()V
HSPLandroidx/collection/MutableIntIntMap;->initializeMetadata(I)V
HSPLandroidx/collection/MutableIntIntMap;->initializeStorage(I)V
HSPLandroidx/collection/MutableIntIntMap;->set(II)V
PLandroidx/collection/MutableIntObjectMap;->(I)V
PLandroidx/collection/MutableIntObjectMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
PLandroidx/collection/MutableIntObjectMap;->findAbsoluteInsertIndex(I)I
PLandroidx/collection/MutableIntObjectMap;->findFirstAvailableSlot(I)I
PLandroidx/collection/MutableIntObjectMap;->initializeGrowth()V
PLandroidx/collection/MutableIntObjectMap;->initializeMetadata(I)V
PLandroidx/collection/MutableIntObjectMap;->initializeStorage(I)V
PLandroidx/collection/MutableIntObjectMap;->set(ILjava/lang/Object;)V
Landroidx/collection/MutableIntSet;
HSPLandroidx/collection/MutableIntSet;->(I)V
HSPLandroidx/collection/MutableIntSet;->initializeGrowth()V
HSPLandroidx/collection/MutableIntSet;->initializeMetadata(I)V
HSPLandroidx/collection/MutableIntSet;->initializeStorage(I)V
Landroidx/collection/MutableObjectIntMap;
HPLandroidx/collection/MutableObjectIntMap;->(I)V
HPLandroidx/collection/MutableObjectIntMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HPLandroidx/collection/MutableObjectIntMap;->adjustStorage()V
HPLandroidx/collection/MutableObjectIntMap;->findFirstAvailableSlot(I)I
HSPLandroidx/collection/MutableObjectIntMap;->findIndex(Ljava/lang/Object;)I
HPLandroidx/collection/MutableObjectIntMap;->initializeGrowth()V
HPLandroidx/collection/MutableObjectIntMap;->initializeMetadata(I)V
HPLandroidx/collection/MutableObjectIntMap;->initializeStorage(I)V
HPLandroidx/collection/MutableObjectIntMap;->put(Ljava/lang/Object;II)I
PLandroidx/collection/MutableObjectIntMap;->removeDeletedMarkers()V
HPLandroidx/collection/MutableObjectIntMap;->removeValueAt(I)V
HPLandroidx/collection/MutableObjectIntMap;->resizeStorage(I)V
HSPLandroidx/collection/MutableObjectIntMap;->set(Ljava/lang/Object;I)V
Landroidx/collection/MutableScatterMap;
HPLandroidx/collection/MutableScatterMap;->(I)V
HSPLandroidx/collection/MutableScatterMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HPLandroidx/collection/MutableScatterMap;->adjustStorage()V
PLandroidx/collection/MutableScatterMap;->clear()V
HPLandroidx/collection/MutableScatterMap;->findFirstAvailableSlot(I)I
HPLandroidx/collection/MutableScatterMap;->findInsertIndex(Ljava/lang/Object;)I
HPLandroidx/collection/MutableScatterMap;->initializeGrowth()V
HPLandroidx/collection/MutableScatterMap;->initializeMetadata(I)V
HPLandroidx/collection/MutableScatterMap;->initializeStorage(I)V
HPLandroidx/collection/MutableScatterMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/collection/MutableScatterMap;->removeValueAt(I)Ljava/lang/Object;
HPLandroidx/collection/MutableScatterMap;->resizeStorage(I)V
HPLandroidx/collection/MutableScatterMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V
Landroidx/collection/MutableScatterSet;
HPLandroidx/collection/MutableScatterSet;->(I)V
HPLandroidx/collection/MutableScatterSet;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HPLandroidx/collection/MutableScatterSet;->add(Ljava/lang/Object;)Z
HSPLandroidx/collection/MutableScatterSet;->adjustStorage()V
HPLandroidx/collection/MutableScatterSet;->clear()V
HPLandroidx/collection/MutableScatterSet;->findAbsoluteInsertIndex(Ljava/lang/Object;)I
HPLandroidx/collection/MutableScatterSet;->findFirstAvailableSlot(I)I
HPLandroidx/collection/MutableScatterSet;->initializeGrowth()V
HPLandroidx/collection/MutableScatterSet;->initializeMetadata(I)V
HPLandroidx/collection/MutableScatterSet;->initializeStorage(I)V
PLandroidx/collection/MutableScatterSet;->plusAssign(Ljava/lang/Object;)V
HSPLandroidx/collection/MutableScatterSet;->remove(Ljava/lang/Object;)Z
HPLandroidx/collection/MutableScatterSet;->removeElementAt(I)V
HSPLandroidx/collection/MutableScatterSet;->resizeStorage(I)V
Landroidx/collection/ObjectIntMap;
HPLandroidx/collection/ObjectIntMap;->()V
HPLandroidx/collection/ObjectIntMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/ObjectIntMap;->equals(Ljava/lang/Object;)Z
HSPLandroidx/collection/ObjectIntMap;->findKeyIndex(Ljava/lang/Object;)I
HPLandroidx/collection/ObjectIntMap;->getCapacity()I
HSPLandroidx/collection/ObjectIntMap;->getOrDefault(Ljava/lang/Object;I)I
HSPLandroidx/collection/ObjectIntMap;->getSize()I
HSPLandroidx/collection/ObjectIntMap;->isNotEmpty()Z
Landroidx/collection/ObjectIntMapKt;
HSPLandroidx/collection/ObjectIntMapKt;->()V
HPLandroidx/collection/ObjectIntMapKt;->emptyObjectIntMap()Landroidx/collection/ObjectIntMap;
Landroidx/collection/ScatterMap;
HPLandroidx/collection/ScatterMap;->()V
HSPLandroidx/collection/ScatterMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/ScatterMap;->containsKey(Ljava/lang/Object;)Z
HSPLandroidx/collection/ScatterMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/ScatterMap;->getCapacity()I
HSPLandroidx/collection/ScatterMap;->isNotEmpty()Z
Landroidx/collection/ScatterMapKt;
HSPLandroidx/collection/ScatterMapKt;->()V
HPLandroidx/collection/ScatterMapKt;->loadedCapacity(I)I
HSPLandroidx/collection/ScatterMapKt;->mutableScatterMapOf()Landroidx/collection/MutableScatterMap;
HSPLandroidx/collection/ScatterMapKt;->nextCapacity(I)I
HPLandroidx/collection/ScatterMapKt;->normalizeCapacity(I)I
HSPLandroidx/collection/ScatterMapKt;->unloadedCapacity(I)I
Landroidx/collection/ScatterSet;
HPLandroidx/collection/ScatterSet;->()V
HSPLandroidx/collection/ScatterSet;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V
HPLandroidx/collection/ScatterSet;->contains(Ljava/lang/Object;)Z
HPLandroidx/collection/ScatterSet;->getCapacity()I
HPLandroidx/collection/ScatterSet;->getSize()I
HSPLandroidx/collection/ScatterSet;->isEmpty()Z
PLandroidx/collection/ScatterSetKt;->()V
PLandroidx/collection/ScatterSetKt;->mutableScatterSetOf()Landroidx/collection/MutableScatterSet;
Landroidx/collection/SimpleArrayMap;
HSPLandroidx/collection/SimpleArrayMap;->()V
HSPLandroidx/collection/SimpleArrayMap;->(I)V
HSPLandroidx/collection/SimpleArrayMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z
HSPLandroidx/collection/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/collection/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I
HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I
HSPLandroidx/collection/SimpleArrayMap;->isEmpty()Z
HSPLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/SimpleArrayMap;->size()I
Landroidx/collection/SparseArrayCompat;
HSPLandroidx/collection/SparseArrayCompat;->(I)V
HSPLandroidx/collection/SparseArrayCompat;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V
HSPLandroidx/collection/SparseArrayCompat;->keyAt(I)I
HSPLandroidx/collection/SparseArrayCompat;->put(ILjava/lang/Object;)V
Landroidx/collection/internal/ContainerHelpersKt;
HSPLandroidx/collection/internal/ContainerHelpersKt;->()V
HSPLandroidx/collection/internal/ContainerHelpersKt;->binarySearch([III)I
HPLandroidx/collection/internal/ContainerHelpersKt;->binarySearch([JIJ)I
HSPLandroidx/collection/internal/ContainerHelpersKt;->idealByteArraySize(I)I
HSPLandroidx/collection/internal/ContainerHelpersKt;->idealIntArraySize(I)I
HSPLandroidx/collection/internal/ContainerHelpersKt;->idealLongArraySize(I)I
Landroidx/collection/internal/Lock;
HSPLandroidx/collection/internal/Lock;->()V
Landroidx/collection/internal/LruHashMap;
HSPLandroidx/collection/internal/LruHashMap;->(IF)V
HSPLandroidx/collection/internal/LruHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/collection/internal/LruHashMap;->isEmpty()Z
HSPLandroidx/collection/internal/LruHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/collection/internal/LruHashMap;->remove(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/AndroidFlingSpline;->()V
PLandroidx/compose/animation/AndroidFlingSpline;->()V
PLandroidx/compose/animation/AndroidFlingSpline;->deceleration(FF)D
Landroidx/compose/animation/AnimatedContentKt;
HPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/animation/AnimatedContentKt;->AnimatedContent(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform$default(ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Landroidx/compose/animation/SizeTransform;
HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform(ZLkotlin/jvm/functions/Function2;)Landroidx/compose/animation/SizeTransform;
HSPLandroidx/compose/animation/AnimatedContentKt;->togetherWith(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ContentTransform;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$5;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5;->()V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5;->()V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->(Landroidx/compose/animation/ContentTransform;)V
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/ContentTransform;)V
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->(Ljava/lang/Object;)V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->(Landroidx/compose/animation/ExitTransition;)V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;)Ljava/lang/Boolean;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;)V
HPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V
PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$5$1$invoke$$inlined$onDispose$1;->dispose()V
Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;
HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;II)V
PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Landroidx/compose/runtime/Composer;I)V
PLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentKt$SizeTransform$1;
HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V
HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V
HPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->invoke-TemP2vQ(JJ)Landroidx/compose/animation/core/SpringSpec;
Landroidx/compose/animation/AnimatedContentMeasurePolicy;
HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V
HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;
HPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
Landroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;
HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V
HPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedContentScope;
Landroidx/compose/animation/AnimatedContentScopeImpl;
HSPLandroidx/compose/animation/AnimatedContentScopeImpl;->(Landroidx/compose/animation/AnimatedVisibilityScope;)V
Landroidx/compose/animation/AnimatedContentTransitionScope;
Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->()V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/unit/LayoutDirection;)V
HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$2(Landroidx/compose/runtime/MutableState;)Z
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$3(Landroidx/compose/runtime/MutableState;Z)V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment()Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getInitialState()Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/Map;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetState()Ljava/lang/Object;
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setAnimatedSize$animation_release(Landroidx/compose/runtime/State;)V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment(Landroidx/compose/ui/Alignment;)V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setLayoutDirection$animation_release(Landroidx/compose/ui/unit/LayoutDirection;)V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->using(Landroidx/compose/animation/ContentTransform;Landroidx/compose/animation/SizeTransform;)Landroidx/compose/animation/ContentTransform;
Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->()V
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->(Z)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->getSizeTransform()Landroidx/compose/runtime/State;
HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;J)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$1;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier;)V
HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec;
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$2;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V
PLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$SizeModifier$measure$size$2;->invoke-YEO4UFw(Ljava/lang/Object;)J
Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy;
HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V
HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult;
Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;
HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->(Ljava/util/List;)V
HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
HPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt;
HPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Landroidx/compose/animation/OnLookaheadMeasured;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/foundation/layout/RowScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibilityImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt;->access$getExitFinished(Landroidx/compose/animation/core/Transition;)Z
HSPLandroidx/compose/animation/AnimatedVisibilityKt;->getExitFinished(Landroidx/compose/animation/core/Transition;)Z
HPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/EnterExitState;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$4;
HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$4;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function2;Landroidx/compose/animation/OnLookaheadMeasured;Lkotlin/jvm/functions/Function3;II)V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$4;->invoke(Landroidx/compose/runtime/Composer;I)V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->(Landroidx/compose/animation/core/Transition;)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Boolean;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$1;->invoke()Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->(Landroidx/compose/runtime/ProduceStateScope;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;)V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$shouldDisposeAfterExit$2$1$2;->emit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Z)Ljava/lang/Boolean;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4;->(Landroidx/compose/foundation/layout/RowScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/Transition;)V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1$1;->(Landroidx/compose/ui/layout/Placeable;)V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$2;
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$2;->()V
HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$2;->()V
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$2;->invoke(Landroidx/compose/animation/EnterExitState;Landroidx/compose/animation/EnterExitState;)Ljava/lang/Boolean;
PLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibilityImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/AnimatedVisibilityScope;
Landroidx/compose/animation/AnimatedVisibilityScopeImpl;
HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->()V
HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->(Landroidx/compose/animation/core/Transition;)V
HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/MutableState;
Landroidx/compose/animation/AnimationModifierKt;
HSPLandroidx/compose/animation/AnimationModifierKt;->()V
PLandroidx/compose/animation/AnimationModifierKt;->animateContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Landroidx/compose/ui/Modifier;
PLandroidx/compose/animation/AnimationModifierKt;->animateContentSize(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/animation/AnimationModifierKt;->getInvalidSize()J
HPLandroidx/compose/animation/AnimationModifierKt;->isValid-ozmzZPI(J)Z
Landroidx/compose/animation/ChangeSize;
HSPLandroidx/compose/animation/ChangeSize;->()V
HSPLandroidx/compose/animation/ChangeSize;->(Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/FiniteAnimationSpec;Z)V
PLandroidx/compose/animation/ChangeSize;->equals(Ljava/lang/Object;)Z
PLandroidx/compose/animation/ChangeSize;->getAlignment()Landroidx/compose/ui/Alignment;
PLandroidx/compose/animation/ChangeSize;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec;
PLandroidx/compose/animation/ChangeSize;->getClip()Z
PLandroidx/compose/animation/ChangeSize;->getSize()Lkotlin/jvm/functions/Function1;
Landroidx/compose/animation/ColorVectorConverterKt;
HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V
HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1;
Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter;
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D;
Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;
HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V
PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke-vNxB06k(Landroidx/compose/animation/core/AnimationVector4D;)J
Landroidx/compose/animation/ContentTransform;
HSPLandroidx/compose/animation/ContentTransform;->()V
HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;)V
HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
PLandroidx/compose/animation/ContentTransform;->getInitialContentExit()Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform;
HSPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition;
HPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F
HSPLandroidx/compose/animation/ContentTransform;->setSizeTransform$animation_release(Landroidx/compose/animation/SizeTransform;)V
HSPLandroidx/compose/animation/ContentTransform;->setTargetContentZIndex(F)V
Landroidx/compose/animation/CrossfadeKt;
HPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
HPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V
Landroidx/compose/animation/CrossfadeKt$Crossfade$1;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$1;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V
Landroidx/compose/animation/CrossfadeKt$Crossfade$3;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Landroidx/compose/animation/core/Transition;)V
PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean;
PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)F
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke$lambda$1(Landroidx/compose/runtime/State;)F
HPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Landroidx/compose/runtime/Composer;I)V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/runtime/State;)V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->(Landroidx/compose/animation/core/FiniteAnimationSpec;)V
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/CrossfadeKt$Crossfade$7;
HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;II)V
PLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Landroidx/compose/runtime/Composer;I)V
PLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/EnterExitState;
HSPLandroidx/compose/animation/EnterExitState;->$values()[Landroidx/compose/animation/EnterExitState;
HSPLandroidx/compose/animation/EnterExitState;->()V
HSPLandroidx/compose/animation/EnterExitState;->(Ljava/lang/String;I)V
PLandroidx/compose/animation/EnterExitState;->values()[Landroidx/compose/animation/EnterExitState;
Landroidx/compose/animation/EnterExitTransitionElement;
HSPLandroidx/compose/animation/EnterExitTransitionElement;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/animation/GraphicsLayerBlockForEnterExit;)V
HSPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/animation/EnterExitTransitionModifierNode;
HSPLandroidx/compose/animation/EnterExitTransitionElement;->create()Landroidx/compose/ui/Modifier$Node;
HPLandroidx/compose/animation/EnterExitTransitionElement;->equals(Ljava/lang/Object;)Z
PLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/animation/EnterExitTransitionModifierNode;)V
PLandroidx/compose/animation/EnterExitTransitionElement;->update(Landroidx/compose/ui/Modifier$Node;)V
Landroidx/compose/animation/EnterExitTransitionKt;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->$r8$lambda$1JgidYUxIRNwEZ0kscHeqkwDXjI(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)Lkotlin/jvm/functions/Function1;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->()V
PLandroidx/compose/animation/EnterExitTransitionKt;->access$getDefaultOffsetAnimationSpec$p()Landroidx/compose/animation/core/SpringSpec;
HPLandroidx/compose/animation/EnterExitTransitionKt;->createGraphicsLayerBlock$lambda$11(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)Lkotlin/jvm/functions/Function1;
HPLandroidx/compose/animation/EnterExitTransitionKt;->createGraphicsLayerBlock(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/GraphicsLayerBlockForEnterExit;
HPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;
PLandroidx/compose/animation/EnterExitTransitionKt;->slideIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;
PLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition;
PLandroidx/compose/animation/EnterExitTransitionKt;->slideOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;
PLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/ui/Alignment;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveEnter$lambda$4(Landroidx/compose/runtime/MutableState;)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveEnter$lambda$5(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/EnterTransition;)V
HPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveEnter(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/EnterTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveExit$lambda$7(Landroidx/compose/runtime/MutableState;)Landroidx/compose/animation/ExitTransition;
HSPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveExit$lambda$8(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/ExitTransition;)V
HPLandroidx/compose/animation/EnterExitTransitionKt;->trackActiveExit(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/ExitTransition;
Landroidx/compose/animation/EnterExitTransitionKt$$ExternalSyntheticLambda0;
HSPLandroidx/compose/animation/EnterExitTransitionKt$$ExternalSyntheticLambda0;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$$ExternalSyntheticLambda0;->init()Lkotlin/jvm/functions/Function1;
Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;
HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V
HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V
Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;
HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V
HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$1;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec;
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$2;->invoke(Landroidx/compose/animation/EnterExitState;)Ljava/lang/Float;
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$alpha$2$WhenMappings;->()V
Landroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$block$1;
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$block$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$block$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$createGraphicsLayerBlock$1$block$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;
HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V
HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V
PLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->invoke(I)Ljava/lang/Integer;
PLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;
HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V
PLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
PLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;->invoke-mzRDjE0(J)J
Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;
HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V
HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V
Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;
HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V
PLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;->invoke-mzRDjE0(J)J
PLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V
HPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->invoke-mHKZG7I(J)J
PLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V
PLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object;
HPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->invoke-mHKZG7I(J)J
Landroidx/compose/animation/EnterExitTransitionModifierNode;
HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Landroidx/compose/animation/GraphicsLayerBlockForEnterExit;)V
HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->getAlignment()Landroidx/compose/ui/Alignment;
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->getEnter()Landroidx/compose/animation/EnterTransition;
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->getExit()Landroidx/compose/animation/ExitTransition;
HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult;
HSPLandroidx/compose/animation/EnterExitTransitionModifierNode;->onAttach()V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setEnter(Landroidx/compose/animation/EnterTransition;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setExit(Landroidx/compose/animation/ExitTransition;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setGraphicsLayerBlock(Landroidx/compose/animation/GraphicsLayerBlockForEnterExit;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setOffsetAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSizeAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setSlideAnimation(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V
PLandroidx/compose/animation/EnterExitTransitionModifierNode;->setTransition(Landroidx/compose/animation/core/Transition;)V
HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->sizeByState-Uzc_VyU(Landroidx/compose/animation/EnterExitState;J)J
HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->slideTargetValueByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J
HPLandroidx/compose/animation/EnterExitTransitionModifierNode;->targetOffsetByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J
PLandroidx/compose/animation/EnterExitTransitionModifierNode$WhenMappings;->