├── .github ├── ci-gradle.properties └── workflows │ ├── check_and_deploy.yml │ └── ci.yml ├── .gitignore ├── .idea ├── .gitignore ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro ├── src │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── composeapp │ │ │ └── ExampleInstrumentedTest.kt │ ├── debug │ │ └── AndroidManifest.xml │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── jarroyo │ │ │ │ └── composeapp │ │ │ │ ├── ComposeApp.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ └── ui │ │ │ │ └── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Theme.kt │ │ │ │ └── Type.kt │ │ └── res │ │ │ ├── drawable-v24 │ │ │ └── ic_launcher_foreground.xml │ │ │ ├── drawable │ │ │ └── ic_launcher_background.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ │ └── xml │ │ │ ├── backup_rules.xml │ │ │ └── data_extraction_rules.xml │ ├── release │ │ └── AndroidManifest.xml │ └── test │ │ └── java │ │ └── com │ │ └── jarroyo │ │ └── composeapp │ │ └── ExampleUnitTest.kt └── versions │ ├── dependencies │ ├── debugAndroidTestRuntimeClasspathDependencies.txt │ ├── debugRuntimeClasspathDependencies.txt │ ├── debugUnitTestRuntimeClasspathDependencies.txt │ ├── releaseRuntimeClasspathDependencies.txt │ └── releaseUnitTestRuntimeClasspathDependencies.txt │ └── mergedManifests │ ├── debug │ ├── AndroidManifest.xml │ └── processDebugManifest │ │ └── AndroidManifest.xml │ └── release │ ├── AndroidManifest.xml │ └── processReleaseManifest │ └── AndroidManifest.xml ├── build-conventions ├── build.gradle.kts ├── build │ ├── libs │ │ └── build-conventions.jar │ ├── pluginDescriptors │ │ ├── composeapp.android-app-conventions.properties │ │ ├── composeapp.android-conventions.properties │ │ ├── composeapp.buildlog-conventions.properties │ │ ├── composeapp.config-conventions.properties │ │ ├── composeapp.dependencies-conventions.properties │ │ ├── composeapp.detekt-conventions.properties │ │ ├── composeapp.merged-manifests-conventions.properties │ │ ├── composeapp.ruler-conventions.properties │ │ ├── composeapp.spotless-conventions.properties │ │ └── composeapp.versions-conventions.properties │ ├── resources │ │ └── main │ │ │ └── META-INF │ │ │ └── gradle-plugins │ │ │ ├── composeapp.android-app-conventions.properties │ │ │ ├── composeapp.android-conventions.properties │ │ │ ├── composeapp.buildlog-conventions.properties │ │ │ ├── composeapp.config-conventions.properties │ │ │ ├── composeapp.dependencies-conventions.properties │ │ │ ├── composeapp.detekt-conventions.properties │ │ │ ├── composeapp.merged-manifests-conventions.properties │ │ │ ├── composeapp.ruler-conventions.properties │ │ │ ├── composeapp.spotless-conventions.properties │ │ │ └── composeapp.versions-conventions.properties │ └── tmp │ │ └── jar │ │ └── MANIFEST.MF ├── settings.gradle.kts └── src │ └── main │ └── kotlin │ ├── com │ └── jarroyo │ │ └── composeapp │ │ ├── ext │ │ ├── AndroidConfigExt.kt │ │ ├── AppConfigExt.kt │ │ ├── ConfigExt.kt │ │ ├── ExtraPropertiesExtensionExt.kt │ │ └── ParamsConfigExt.kt │ │ └── gmd │ │ └── GradleManagedDevices.kt │ ├── composeapp.android-app-conventions.gradle.kts │ ├── composeapp.android-conventions.gradle.kts │ ├── composeapp.buildlog-conventions.gradle.kts │ ├── composeapp.config-conventions.gradle.kts │ ├── composeapp.dependencies-conventions.gradle.kts │ ├── composeapp.detekt-conventions.gradle.kts │ ├── composeapp.merged-manifests-conventions.gradle.kts │ ├── composeapp.multiplatform-feature-conventions.gradle.kts │ ├── composeapp.multiplatform-library-conventions.gradle.kts │ ├── composeapp.ruler-conventions.gradle.kts │ ├── composeapp.spotless-conventions.gradle.kts │ ├── composeapp.versions-conventions.gradle.kts │ └── composeapp.violation-comments-to-github-conventions.gradle.kts ├── build.gradle.kts ├── config ├── detekt │ └── detekt.yml ├── diktat │ └── diktat-analysis.yml ├── greclipse │ └── greclipse.properties ├── lint │ └── lint.xml ├── prettier │ ├── prettierrc-graphql.yml │ └── prettierrc-yml.yml └── ruler │ └── ownership.yaml ├── desktop ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── jvmMain │ └── kotlin │ └── com │ └── jarroyo │ └── composeapp │ └── Main.kt ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── iosApp ├── iosApp.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ ├── xcshareddata │ │ │ ├── IDEWorkspaceChecks.plist │ │ │ └── swiftpm │ │ │ │ └── Package.resolved │ │ └── xcuserdata │ │ │ └── javierarroyo.xcuserdatad │ │ │ └── UserInterfaceState.xcuserstate │ └── xcuserdata │ │ └── javierarroyo.xcuserdatad │ │ ├── xcdebugger │ │ └── Breakpoints_v2.xcbkptlist │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── iosApp.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── swiftpm │ │ │ └── Package.resolved │ └── xcuserdata │ │ └── javierarroyo.xcuserdatad │ │ ├── UserInterfaceState.xcuserstate │ │ └── xcschemes │ │ └── xcschememanagement.plist └── iosApp │ ├── Assets.xcassets │ ├── AccentColor.colorset │ │ └── Contents.json │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json │ ├── ContentView.swift │ ├── GoogleService-Info.plist │ ├── Info.plist │ ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json │ ├── iosApp.entitlements │ └── iosAppApp.swift ├── modules ├── feature-common-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com.jarroyo.feature.common.api │ │ └── interactor │ │ └── OpenUrlInBrowserInteractor.kt ├── feature-common │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── kotlin │ │ │ └── com.jarroyo.feature.common │ │ │ └── interactor │ │ │ └── OpenUrlInBrowserInteractor.kt │ │ ├── commonMain │ │ └── kotlin │ │ │ └── com.jarroyo.feature.common │ │ │ ├── CommonFeature.kt │ │ │ └── interactor │ │ │ └── OpenUrlInBrowserInteractorImpl.kt │ │ ├── desktopMain │ │ └── kotlin │ │ │ └── com.jarroyo.feature.common │ │ │ └── interactor │ │ │ └── OpenUrlInBrowserInteractor.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com.jarroyo.feature.common │ │ └── interactor │ │ └── OpenUrlInBrowserInteractor.kt ├── feature-electricity-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── electricity │ │ └── api │ │ ├── destination │ │ └── ElectricityDestination.kt │ │ └── interactor │ │ └── GetElectricityDataInteractor.kt ├── feature-electricity │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── electricity │ │ │ └── di │ │ │ └── PlatformModule.kt │ │ ├── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── electricity │ │ │ ├── ElectricityFeature.kt │ │ │ ├── di │ │ │ └── PlatformModule.kt │ │ │ ├── interactor │ │ │ └── GetElectricityDataInteractorImpl.kt │ │ │ └── ui │ │ │ ├── ElectricityContract.kt │ │ │ ├── ElectricityScreen.kt │ │ │ └── ElectricityViewModel.kt │ │ ├── desktopMain │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── electricity │ │ │ └── di │ │ │ └── PlatformModule.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── electricity │ │ └── di │ │ └── PlatformModule.kt ├── feature-home-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ └── AndroidManifest.xml ├── feature-home-shared │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── AndroidManifest.xml │ │ ├── commonMain │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── jarroyo │ │ │ │ └── feature │ │ │ │ └── home │ │ │ │ └── shared │ │ │ │ ├── di │ │ │ │ ├── FeaturesModule.kt │ │ │ │ └── KoinAppModule.kt │ │ │ │ ├── ext │ │ │ │ └── LocalDateTimeExt.kt │ │ │ │ └── ui │ │ │ │ ├── HomeFeature.kt │ │ │ │ ├── MainNavigationBar.kt │ │ │ │ └── RootView.kt │ │ └── resources │ │ │ └── drawable │ │ │ └── ui_ic_arrow_back.xml │ │ └── nativeMain │ │ └── kotlin │ │ └── MainViewController.kt ├── feature-launches-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── launches │ │ └── api │ │ ├── destination │ │ ├── LaunchDestination.kt │ │ └── LaunchListDestination.kt │ │ └── interactor │ │ ├── AddFavoriteInteractor.kt │ │ ├── GetFavoritesInteractor.kt │ │ ├── GetLaunchDetailInteractor.kt │ │ ├── GetLaunchesInteractor.kt │ │ └── RemoveFavoriteInteractor.kt ├── feature-launches │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── launches │ │ │ └── di │ │ │ └── PlatformModule.kt │ │ ├── commonMain │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── jarroyo │ │ │ │ └── feature │ │ │ │ └── launches │ │ │ │ ├── LaunchesFeature.kt │ │ │ │ ├── di │ │ │ │ └── PlatformModule.kt │ │ │ │ ├── interactor │ │ │ │ ├── AddFavoriteInteractorImpl.kt │ │ │ │ ├── GetFavoritesInteractorImpl.kt │ │ │ │ ├── GetLaunchDetailInteractorImpl.kt │ │ │ │ ├── GetLaunchesInteractorImpl.kt │ │ │ │ └── RemoveFavoriteInteractorImpl.kt │ │ │ │ ├── sqldelight │ │ │ │ ├── DatabaseWrapper.kt │ │ │ │ └── dao │ │ │ │ │ └── FavoriteRocketsDao.kt │ │ │ │ └── ui │ │ │ │ ├── launchdetail │ │ │ │ ├── LaunchDetailContract.kt │ │ │ │ ├── LaunchDetailScreen.kt │ │ │ │ └── LaunchDetailViewModel.kt │ │ │ │ └── launchlist │ │ │ │ ├── LaunchListContract.kt │ │ │ │ ├── LaunchListItem.kt │ │ │ │ ├── LaunchListScreen.kt │ │ │ │ └── LaunchListViewModel.kt │ │ └── sqldelight │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── launches │ │ │ └── FavoriteRockets.sq │ │ ├── commonTest │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── home │ │ │ └── shared │ │ │ └── interactor │ │ │ └── GetLaunchDetailInteractorImplTest.kt │ │ ├── desktopMain │ │ └── kotlin │ │ │ └── com │ │ │ └── jarroyo │ │ │ └── feature │ │ │ └── launches │ │ │ └── di │ │ │ └── PlatformModule.kt │ │ └── nativeMain │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── launches │ │ └── di │ │ └── PlatformModule.kt ├── feature-schedules-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── schedules │ │ └── api │ │ ├── destination │ │ ├── ScheduleDetailDetail.kt │ │ ├── ScheduleListDestination.kt │ │ └── UserSelectorDestination.kt │ │ ├── ext │ │ └── UserExt.kt │ │ ├── interactor │ │ ├── AddSchedulesInteractor.kt │ │ ├── GetScheduleInteractor.kt │ │ ├── GetSchedulesInteractor.kt │ │ ├── GetUserInteractor.kt │ │ ├── GetUserListInteractor.kt │ │ └── RemoveSchedulesInteractor.kt │ │ └── model │ │ ├── Schedule.kt │ │ └── User.kt ├── feature-schedules │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── feature │ │ └── schedules │ │ ├── SchedulesFeature.kt │ │ ├── interactor │ │ ├── AddScheduleInteractorImpl.kt │ │ ├── GetScheduleInteractorImpl.kt │ │ ├── GetSchedulesInteractorImpl.kt │ │ ├── GetUserInteractorImpl.kt │ │ ├── GetUserListInteractorImpl.kt │ │ └── RemoveScheduleInteractorImpl.kt │ │ ├── navigationsuite │ │ └── ScheduleListNavigationSuiteItem.kt │ │ └── ui │ │ ├── list │ │ ├── ScheduleListContract.kt │ │ ├── ScheduleListItem.kt │ │ ├── ScheduleListScreen.kt │ │ └── ScheduleListViewModel.kt │ │ ├── scheduledetail │ │ ├── ScheduleDetailContract.kt │ │ ├── ScheduleDetailScreen.kt │ │ └── ScheduleDetailViewModel.kt │ │ └── userselector │ │ ├── UserSelectorContract.kt │ │ ├── UserSelectorItem.kt │ │ ├── UserSelectorScreen.kt │ │ └── UserSelectorViewModel.kt ├── library-feature │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── library │ │ └── feature │ │ ├── Feature.kt │ │ ├── FeatureLifecycle.kt │ │ └── FeatureManager.kt ├── library-navigation-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── library │ │ └── navigation │ │ └── api │ │ ├── destination │ │ └── NavigationDestination.kt │ │ └── navigator │ │ ├── AppNavigator.kt │ │ └── NavigatorEvent.kt ├── library-navigation │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── library │ │ └── navigation │ │ ├── di │ │ └── KoinNavigationModule.kt │ │ └── navigator │ │ └── AppNavigatorImpl.kt ├── library-network-api │ ├── .gitignore │ ├── build.gradle.kts │ ├── consumer-rules.pro │ ├── proguard-rules.pro │ └── src │ │ └── commonMain │ │ ├── AndroidManifest.xml │ │ ├── graphql │ │ ├── LaunchFragment.graphql │ │ ├── QueryLaunchDetail.graphql │ │ ├── QueryLaunches.graphql │ │ ├── RocketFragment.graphql │ │ ├── ShipFragment.graphql │ │ └── schema.graphqls │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── library │ │ └── network │ │ └── api │ │ └── ext │ │ └── ApolloCallExt.kt ├── library-network │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ ├── androidMain │ │ └── AndroidManifest.xml │ │ └── commonMain │ │ └── kotlin │ │ └── com │ │ └── jarroyo │ │ └── library │ │ └── network │ │ └── di │ │ ├── ElectricityApi.kt │ │ └── KoinNetworkModule.kt ├── library-test │ ├── build.gradle.kts │ └── proguard-test-consumer-rules.pro └── library-ui-shared │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ ├── androidMain │ └── kotlin │ │ └── AndroidManifest.xml │ └── commonMain │ └── kotlin │ └── com │ └── jarroyo │ └── library │ └── ui │ └── shared │ ├── BaseViewModel.kt │ ├── component │ ├── BottomButtonBar.kt │ ├── NavHostController.kt │ ├── NavigationBarItemWithBadge.kt │ ├── Placeholder.kt │ ├── ProvidableCompositionLocal.kt │ ├── SettingsMenuRow.kt │ └── SettingsTile.kt │ └── theme │ └── Spacing.kt ├── screenshots ├── android │ ├── detail.png │ ├── graph.png │ ├── home.png │ └── loading.png ├── compose_multiplatform_logo.png ├── desktop │ ├── detail.png │ ├── graph.png │ ├── home.png │ └── loading.png ├── ios │ ├── buildPhases.png │ ├── detail.png │ ├── graph.png │ ├── home.png │ └── loading.png └── summary.png └── settings.gradle.kts /.github/ci-gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.daemon=false 2 | org.gradle.workers.max=2 3 | 4 | kotlin.incremental=false 5 | kotlin.compiler.execution.strategy=in-process -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.aab 3 | *.apk 4 | *.ap_ 5 | 6 | # Files for the ART/Dalvik VM 7 | *.dex 8 | 9 | # Java class files 10 | *.class 11 | 12 | # Generated files 13 | bin/ 14 | gen/ 15 | out/ 16 | 17 | # Gradle files 18 | .gradle/ 19 | build/ 20 | 21 | # Local configuration file (sdk path, etc) 22 | local.properties 23 | 24 | # Log Files 25 | *.log 26 | 27 | # Android Studio Navigation editor temp files 28 | .navigation/ 29 | 30 | # Android Studio captures folder 31 | captures/ 32 | 33 | # Intellij 34 | *.iml 35 | .idea/* 36 | !.idea/codeStyles/ 37 | !.idea/copyright/ 38 | !.idea/detekt.xml 39 | 40 | # External native build folder generated in Android Studio 2.2 and later 41 | .externalNativeBuild 42 | 43 | /captures 44 | /projectFilesBackup 45 | release_notes_*.txt 46 | 47 | # Release keys 48 | app-release.jks 49 | play-account.p12 50 | play-account.json 51 | 52 | # Google Services (e.g. APIs or Firebase) 53 | google-services.json 54 | 55 | # Freeline 56 | freeline.py 57 | freeline/ 58 | freeline_project_description.json 59 | 60 | # Fastlane 61 | fastlane/report.xml 62 | fastlane/Preview.html 63 | fastlane/screenshots 64 | fastlane/test_output 65 | fastlane/readme.md 66 | 67 | **/.DS_Store 68 | *.db 69 | 70 | # Reports 71 | reports/ 72 | 73 | prebuilds/fullsdk-linux 74 | prebuilds/fullsdk-darwin 75 | 76 | .cxx 77 | *.klib 78 | .kotlin/ -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 50 | 51 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 40 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id ("composeapp.android-app-conventions") 3 | alias(libs.plugins.tripletplay) 4 | } 5 | 6 | android { 7 | defaultConfig { 8 | applicationId = config.android.applicationId.get() 9 | setProperty("archivesBaseName", "composeapp") 10 | 11 | testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" // https://github.com/google/dagger/issues/2033 12 | 13 | vectorDrawables.useSupportLibrary = true 14 | } 15 | buildTypes { 16 | getByName("debug") { 17 | namespace = config.android.applicationId.get() + ".debug" 18 | applicationIdSuffix = ".debug" 19 | } 20 | getByName("release") { 21 | namespace = config.android.applicationId.get() 22 | isShrinkResources = true 23 | isMinifyEnabled = true 24 | proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") 25 | } 26 | } 27 | } 28 | 29 | dependencies { 30 | // Modules 31 | implementation(projects.modules.featureHomeShared) 32 | 33 | implementation(libs.androidx.activity.compose) 34 | implementation(libs.gitlive.firebase.firestore) 35 | implementation(libs.jetbrains.compose.ui) 36 | implementation(libs.jetbrains.compose.material3) 37 | implementation(libs.koin.android) 38 | testImplementation(libs.junit) 39 | androidTestImplementation(libs.junit) 40 | androidTestImplementation(libs.androidx.test.espresso.core) 41 | androidTestImplementation(libs.androidx.compose.ui.test.junit4) 42 | androidTestImplementation(libs.gitlive.firebase.firestore) 43 | debugImplementation(libs.androidx.compose.tooling) 44 | debugImplementation(libs.androidx.compose.ui.test.manifest) 45 | 46 | detektPlugins(libs.detekt) 47 | detektPlugins(libs.detekt.rules.compose) 48 | detektPlugins(libs.detekt.twitter.compose.rules) 49 | 50 | implementation(libs.androidx.compose.tooling) 51 | } 52 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle.kts. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | -dontwarn org.slf4j.impl.StaticLoggerBinder -------------------------------------------------------------------------------- /app/src/androidTest/java/com/jarroyo/composeapp/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import org.junit.Test 5 | import org.junit.runner.RunWith 6 | 7 | /** 8 | * Instrumented test, which will execute on an Android device. 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | @RunWith(AndroidJUnit4::class) 13 | class ExampleInstrumentedTest { 14 | @Test 15 | fun useAppContext() { 16 | // Context of the app under test. 17 | assert(true) 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 16 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/jarroyo/composeapp/ComposeApp.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp 2 | 3 | import android.app.Application 4 | import android.content.Context 5 | import com.google.firebase.FirebaseApp 6 | import com.jarroyo.feature.home.shared.di.initKoin 7 | import org.koin.dsl.module 8 | 9 | class ComposeApp : Application() { 10 | override fun onCreate() { 11 | super.onCreate() 12 | FirebaseApp.initializeApp(this) 13 | initKoin( 14 | listOf( 15 | module { 16 | single { this@ComposeApp } 17 | }, 18 | ), 19 | ) 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/jarroyo/composeapp/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp 2 | 3 | import android.os.Bundle 4 | import androidx.activity.ComponentActivity 5 | import androidx.activity.compose.setContent 6 | import com.jarroyo.composeapp.ui.theme.ComposeAppTheme 7 | import com.jarroyo.feature.home.shared.ui.RootView 8 | 9 | class MainActivity : ComponentActivity() { 10 | override fun onCreate(savedInstanceState: Bundle?) { 11 | super.onCreate(savedInstanceState) 12 | setContent { 13 | ComposeAppTheme { 14 | RootView() 15 | } 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/jarroyo/composeapp/ui/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp.ui.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val PurpleDark = Color(0xFFD0BCFF) 6 | val PurpleGreyDark = Color(0xFFCCC2DC) 7 | val PinkDark = Color(0xFFEFB8C8) 8 | 9 | val PurpleLight = Color(0xFF6650a4) 10 | val PurpleGreyLight = Color(0xFF625b71) 11 | val PinkLight = Color(0xFF7D5260) 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/jarroyo/composeapp/ui/theme/Theme.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp.ui.theme 2 | 3 | import android.os.Build 4 | import androidx.compose.foundation.isSystemInDarkTheme 5 | import androidx.compose.material3.MaterialTheme 6 | import androidx.compose.material3.darkColorScheme 7 | import androidx.compose.material3.dynamicDarkColorScheme 8 | import androidx.compose.material3.dynamicLightColorScheme 9 | import androidx.compose.material3.lightColorScheme 10 | import androidx.compose.runtime.Composable 11 | import androidx.compose.ui.platform.LocalContext 12 | 13 | private val DarkColorScheme = darkColorScheme( 14 | primary = PurpleDark, 15 | secondary = PurpleGreyDark, 16 | tertiary = PinkDark, 17 | ) 18 | 19 | private val LightColorScheme = lightColorScheme( 20 | primary = PurpleLight, 21 | secondary = PurpleGreyLight, 22 | tertiary = PinkLight, 23 | ) 24 | 25 | @Composable 26 | fun ComposeAppTheme( 27 | darkTheme: Boolean = isSystemInDarkTheme(), 28 | dynamicColor: Boolean = true, 29 | content: @Composable () -> Unit, 30 | ) { 31 | val myColorScheme = when { 32 | dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && darkTheme -> 33 | dynamicDarkColorScheme(LocalContext.current) 34 | 35 | dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !darkTheme -> 36 | dynamicLightColorScheme(LocalContext.current) 37 | 38 | darkTheme -> DarkColorScheme 39 | else -> LightColorScheme 40 | } 41 | 42 | MaterialTheme( 43 | colorScheme = myColorScheme, 44 | typography = Typography, 45 | content = content, 46 | ) 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/jarroyo/composeapp/ui/theme/Type.kt: -------------------------------------------------------------------------------- 1 | package com.jarroyo.composeapp.ui.theme 2 | 3 | import androidx.compose.material3.Typography 4 | import androidx.compose.ui.text.TextStyle 5 | import androidx.compose.ui.text.font.FontFamily 6 | import androidx.compose.ui.text.font.FontWeight 7 | import androidx.compose.ui.unit.sp 8 | 9 | // Set of Material typography styles to start with 10 | val Typography = Typography( 11 | bodyLarge = TextStyle( 12 | fontFamily = FontFamily.Default, 13 | fontWeight = FontWeight.Normal, 14 | fontSize = 16.sp, 15 | lineHeight = 24.sp, 16 | letterSpacing = 0.5.sp, 17 | ), 18 | ) 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | ComposeApp 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 |