diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..c990bdfc9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,38 @@ +name: Bug report +description: Report a reproducible problem with Roller Coasters +title: "[Bug]: " +labels: + - Bug +body: + - type: textarea + id: problem + attributes: + label: Problem + description: What happened, and what did you expect instead? + validations: + required: true + - type: textarea + id: steps + attributes: + label: Reproduction steps + description: List the smallest set of steps needed to reproduce the issue. + placeholder: | + 1. Clone the repository + 2. Run ... + 3. See ... + validations: + required: true + - type: textarea + id: environment + attributes: + label: Environment + description: Include Android Studio, JDK, Gradle, device/emulator, and OS details when relevant. + validations: + required: false + - type: textarea + id: context + attributes: + label: Additional context + description: Add logs, screenshots, or links that help explain the problem. + validations: + required: false diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..0086358db --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1 @@ +blank_issues_enabled: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..52d135886 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,34 @@ +name: Feature request +description: Suggest an improvement for Roller Coasters +title: "[Feature]: " +labels: + - Enhancement +body: + - type: textarea + id: motivation + attributes: + label: Motivation + description: What problem would this solve for the app or codebase? + validations: + required: true + - type: textarea + id: proposal + attributes: + label: Proposal + description: Describe the change you would like to see. + validations: + required: true + - type: textarea + id: alternatives + attributes: + label: Alternatives considered + description: List any simpler or more focused alternatives you considered. + validations: + required: false + - type: textarea + id: scope + attributes: + label: Scope notes + description: Call out any maintenance, architecture, or migration trade-offs. + validations: + required: false diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..bc88f2a98 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,13 @@ +## Summary + +- Briefly describe the change. + +## Verification + +- [ ] Ran relevant local checks +- [ ] Added or updated tests where needed +- [ ] Updated screenshots or snapshots for intentional UI changes + +## Notes + +- Add any follow-up context, screenshots, or trade-offs here. diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 44fa0bb8e..097bddb83 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,62 +1,92 @@ -name: CI +name: Android CI on: + push: + branches: [ "develop" ] pull_request: + workflow_dispatch: + schedule: + - cron: "0 3 * * *" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: build: - name: Build + name: Build & Validate runs-on: ubuntu-latest + timeout-minutes: 60 steps: - - uses: actions/checkout@v4 - - uses: gradle/actions/wrapper-validation@v3 - - uses: actions/setup-java@v4 + - name: Checkout code + uses: actions/checkout@v4 with: - distribution: 'temurin' - java-version: '17' - - uses: gradle/actions/setup-gradle@v3 - - name: Cache Gradle - uses: actions/cache@v4 + fetch-depth: 0 + + - name: Validate Gradle Wrapper + uses: gradle/actions/wrapper-validation@v3 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - gradle-${{ runner.os }}- + distribution: temurin + java-version: "21" + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Make gradlew executable + run: chmod +x gradlew + - name: Setup local.properties with Maps API Key run: | echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" >> local.properties - - name: Assemble Debug - run: ./gradlew assembleDebug --stacktrace --no-daemon - jvm-tests: - name: JVM Tests - runs-on: ubuntu-latest - needs: build + - name: Check Module Boundaries + run: ./gradlew --no-daemon --stacktrace checkModuleDependencyBoundaries - steps: - - uses: actions/checkout@v4 - - uses: gradle/actions/wrapper-validation@v3 - - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '17' - - uses: gradle/actions/setup-gradle@v3 - - name: Cache Gradle - uses: actions/cache@v4 + - name: Run Static Analysis + run: ./gradlew --no-daemon --stacktrace detekt lintDebug + + - name: Run Unit Tests + run: ./gradlew --no-daemon --stacktrace test -PexcludeSnapshotTests=true + + - name: Verify Paparazzi Snapshots + run: ./gradlew --no-daemon --stacktrace --no-parallel verifyPaparazziDebug + + - name: Generate Kover Coverage + run: ./gradlew --no-daemon --stacktrace koverXmlReport koverVerify -PexcludeSnapshotTests=true + + - name: Build Debug APK + run: ./gradlew --no-daemon --stacktrace assembleDebug + + - name: Upload Reports + if: always() + uses: actions/upload-artifact@v4 with: + name: android-ci-reports path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - gradle-${{ runner.os }}- - - name: Setup local.properties with Maps API Key - run: | - echo "sdk.dir=$ANDROID_SDK_ROOT" > local.properties - echo "MAPS_API_KEY=${{ secrets.MAPS_API_KEY }}" >> local.properties - - name: Run JVM Tests - run: ./gradlew testDebugUnitTest --stacktrace --no-daemon + **/build/reports/** + **/build/test-results/** + if-no-files-found: ignore + + - name: Job Summary + if: always() + uses: actions/github-script@v7 + with: + script: | + await core.summary + .addHeading("Android CI Summary") + .addList([ + "Static analysis: detekt + lintDebug", + "Unit tests: test", + "Snapshot tests: verifyPaparazziDebug", + "Coverage: koverXmlReport + koverVerify", + "Build: assembleDebug", + ]) + .write(); diff --git a/.java-version b/.java-version new file mode 100644 index 000000000..aabe6ec39 --- /dev/null +++ b/.java-version @@ -0,0 +1 @@ +21 diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..e852c455d --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,29 @@ +# Code of Conduct + +## Our Pledge + +We want this project to be a welcoming, respectful place for everyone who wants +to learn from or improve Roller Coasters. + +## Expected Behavior + +- Be respectful and constructive. +- Assume good intent, especially when discussing architecture preferences. +- Keep feedback focused on the code, documentation, and project goals. +- Make room for maintainers to prioritize work according to the project's scope. + +## Unacceptable Behavior + +- Harassment, insults, or discriminatory language. +- Personal attacks or repeated unwelcome attention. +- Publishing private information without permission. +- Derailing issues or pull requests with unrelated arguments. + +## Enforcement + +Maintainers may edit, hide, or remove comments, issues, pull requests, or other +contributions that do not follow this code of conduct. Repeated or severe +violations may result in being blocked from participating in the project. + +Report concerns by opening a private security advisory or contacting the +maintainer through the public profile links. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..24bbce35a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,39 @@ +# Contributing + +Thanks for helping improve Roller Coasters. + +## Workflow + +1. Fork the repository. +2. Create a focused branch from `dev`. +3. Keep changes small enough to review. +4. Run the relevant checks before opening a pull request. +5. Open a pull request using the template and describe the behavior change. + +## Local Checks + +Run the narrowest check that covers your change. Use JDK 21 or newer. For broad changes, run: + +```bash +./gradlew checkModuleDependencyBoundaries detekt lintDebug test \ + -PexcludeSnapshotTests=true \ + verifyPaparazziDebug koverXmlReport koverVerify assembleDebug +``` + +Run Paparazzi with `--no-parallel` if a local Gradle configuration enables parallel execution: + +```bash +./gradlew --no-parallel verifyPaparazziDebug +``` + +## Pull Requests + +Pull requests should include: + +- What changed. +- Why the change is needed. +- How it was verified. +- Screenshots or recordings for visible UI changes. + +Please keep unrelated formatting, generated files, and IDE metadata out of the +pull request unless they are required for the change. diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..c202cb73f --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Pablo Costa Tirado + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index 0f1174efc..5e3bcbbb2 100644 --- a/README.md +++ b/README.md @@ -1,106 +1,197 @@ # Roller Coasters +[![Android CI](https://github.com/Sottti/RollerCoasters/actions/workflows/ci.yml/badge.svg)](https://github.com/Sottti/RollerCoasters/actions/workflows/ci.yml) ![API](https://img.shields.io/badge/dynamic/toml?url=https://raw.githubusercontent.com/Sottti/RollerCoasters/refs/heads/dev/gradle/libs.versions.toml&query=$.versions.minSdk&label=API&color=brightgreen&suffix=%2B&logo=android&logoColor=white) ![Compose BOM](https://img.shields.io/badge/dynamic/toml?url=https://raw.githubusercontent.com/Sottti/RollerCoasters/refs/heads/dev/gradle/libs.versions.toml&query=$.versions.compose-bom&label=Compose%20BOM&color=007ACC&logo=jetpackcompose&logoColor=white) ![Navigation](https://img.shields.io/badge/dynamic/toml?url=https://raw.githubusercontent.com/Sottti/RollerCoasters/refs/heads/dev/gradle/libs.versions.toml&query=$.versions.compose-navigation3&label=Navigation&color=4CAF50&logo=android&logoColor=white) ![Kotlin](https://img.shields.io/badge/dynamic/toml?url=https://raw.githubusercontent.com/Sottti/RollerCoasters/refs/heads/dev/gradle/libs.versions.toml&query=$.versions.kotlin&label=Kotlin&color=7F52FF&logo=kotlin&logoColor=white) ![GitHub last commit](https://img.shields.io/github/last-commit/Sottti/RollerCoasters?logo=github&logoColor=white) ![GitHub repo size](https://img.shields.io/github/repo-size/Sottti/RollerCoasters) -[![License](https://img.shields.io/badge/License-MIT-blue?style=flat&logo=opensourceinitiative&logoColor=white)](https://opensource.org/licenses/MIT) +[![License](https://img.shields.io/badge/License-MIT-blue?style=flat&logo=opensourceinitiative&logoColor=white)](LICENSE) -## Overview +Modern Kotlin Android playground for exploring roller coaster discovery with Jetpack Compose, Hilt, +Ktor, Room/Paging, Google Maps, Paparazzi, and a modular MVVM/Clean Architecture setup. -Roller Coasters is a personal playground where I experiment with modern Android development -practices, libraries, and tools. It is a space to try new APIs, patterns, and approachesβ€”especially -around Jetpack Composeβ€”without the constraints of production code. +## Disclaimer -The project is under active development and the codebase is not yet stable or nearly finished. +This repository is a personal playground for trying modern Android APIs, libraries, architecture +patterns, and tooling without the constraints of production code. It is intentionally under active +development, so implementation details and module boundaries may change as the experiment evolves. -## βš™οΈ Tech Stack & Architecture +## Overview -This template is built using modern Android development practices and libraries: +Roller Coasters is an Android app for browsing, filtering, saving, and inspecting roller coaster +data. The app uses a layered multi-module setup to explore how a real product codebase can keep UI, +domain logic, data access, dependency injection, and shared tooling separated while still feeling +fast to iterate on. -* **Language:** 100% [Kotlin](https://kotlinlang.org/) -* **UI:** [Jetpack Compose](https://developer.android.com/jetpack/compose) for declarative UI. - * **Theming:** [Material 3](https://m3.material.io/) (Material You) with dynamic color support. - * **Navigation: - ** [Compose Navigation 3](https://developer.android.com/guide/navigation/navigation-3) for - screen transitions. -* **Architecture:** Follows Google's official "Guide to app architecture", - combining [MVVM](https://developer.android.com/jetpack/guide) (Model-View-ViewModel) with - principles from Clean Architecture. - * **UI Layer:** State-driven UI using `ViewModel`, `State`, and `Actions`. ViewModels follow - a [declarative approach](https://proandroiddev.com/loading-initial-data-in-launchedeffect-vs-viewmodel-f1747c20ce62). - * **Domain Layer:** (Optional) UseCases encapsulate specific business logic (e.g., - `GetFavoriteCoastersUseCase`). - * **Data Layer:** `Repository` pattern providing a single source of truth. -* **Asynchronicity: - ** [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) & [Flows](https://developer.android.com/kotlin/flow) - for managing background tasks and data streams. -* **Dependency Injection:** [Hilt](https://dagger.dev/hilt/) for managing dependencies throughout - the app. -* **Networking:** [Ktor Client](https://ktor.io/docs/client-overview.html) for REST API - communication. -* **Serialization:** [Kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization) for - JSON parsing. -* **Testing:** - * **Unit Tests:** [JUnit 4](https://junit.org/junit4/) & [Mockk](https://mockk.io/) - * **Screenshot Tests:** [Paparazzi](https://github.com/cashapp/paparazzi) - * **UI Tests:** [Compose Test Rules](https://developer.android.com/jetpack/compose/testing) - -## πŸ“± App Features - -* **Explore Feed:** View roller coasters, filterable by various criteria (specs, materials, etc.). -* **Favorites:** Mark and view your favorite roller coasters. -* **Details Screen:** See detailed information and images for each coaster. -* **Settings:** - * Customize theme (Light/Dark/System) - * Enable/disable dynamic color - * Adjust color contrast - * Change language (English, Spanish and Galician) - * Select measurement system (Metric/Imperial). -* **Modern UI:** - * Dynamic Theming (Material You). - * Support for multiple languages. - * Edge-to-edge display. - * Predictive back navigation. -* **About Screen:** Information about the project/developer. - -## πŸ“· Screenshots - -### πŸ’‘ Light Theme - -

- - - - -

+## Screenshots -### πŸŒ™ Dark Theme +### Light Theme

- - - - + Explore screen in light theme + Roller coaster details screen in light theme + Settings screen in light theme + About screen in light theme

-## πŸ“ Project Structure +### Dark Theme -This project follows a standard multi-module setup, which is highly recommended for separation of -concerns and build speed. +

+ Explore screen in dark theme + Roller coaster details screen in dark theme + Settings screen in dark theme + About screen in dark theme +

-## πŸš€ Planned Features or Improvements +## Features -* **Search:** Find roller coasters by name. -* **Parks:** Add information about amusement parks. -* **Enhanced Discovery:** More filtering options (manufacturer, park, etc.). -* **Robustness:** Improved error handling and empty state displays. -* **UI/UX:** Add animations; improve support for large screens and foldables. -* **Navigation:** Migrate fully to Jetpack Compose Navigation 3 (if not already done). +This app uses modern libraries and tools from the Android ecosystem: -## πŸ“œ License +* **Tech Stack:** 100% [Kotlin](https://kotlinlang.org/) +* **UI:** [Jetpack Compose](https://developer.android.com/jetpack/compose) for declarative UI. + * **Theming:** [Material 3](https://m3.material.io/) with dynamic color and contrast support. + * **Navigation:** [Compose Navigation 3](https://developer.android.com/guide/navigation/navigation-3) + for screen transitions. +* **Architecture:** Follows Google's official "Guide to app architecture". + * [MVVM](https://developer.android.com/jetpack/guide) (Model-View-ViewModel). + * **UI Layer:** State-driven UI with `ViewModel`, `State`, and `Actions`. + * **Domain Layer:** Use cases and canonical models for app behavior. + * **Data Layer:** Repository pattern backed by local and remote data sources. +* **Asynchronous work:** [Kotlin Coroutines](https://kotlinlang.org/docs/coroutines-overview.html) + & [Flows](https://developer.android.com/kotlin/flow) for background work and reactive streams. +* **Dependency Injection:** [Hilt](https://dagger.dev/hilt/) for managing dependencies. +* **Networking:** [Ktor Client](https://ktor.io/docs/client-create-and-configure.html) for REST API + communication. +* **Persistence:** [Room](https://developer.android.com/training/data-storage/room) and + [DataStore](https://developer.android.com/topic/libraries/architecture/datastore) for local data. +* **Maps:** [Maps Compose](https://github.com/googlemaps/android-maps-compose) for coaster location + UI. +* **Serialization:** [Kotlinx.serialization](https://github.com/Kotlin/kotlinx.serialization) for + JSON parsing. +* **Testing and quality:** + * **Unit Tests:** [JUnit 4](https://junit.org/junit4/) & [Mockk](https://mockk.io/) + * **Screenshot Tests:** [Paparazzi](https://github.com/cashapp/paparazzi) + * **Static Analysis:** Detekt, Compose rules, Android Lint, and Kover coverage checks. + +### Running the test suites + +Execute the following Gradle tasks from the project root to run the automated checks locally: + +> Run Gradle with JDK 21 or newer. + +| Suite | Command | Description | +|--------------------------|------------------------------------------------------------|--------------------------------------------------| +| Module boundaries | `./gradlew checkModuleDependencyBoundaries` | Validates high-level Gradle module dependencies. | +| Static analysis | `./gradlew detekt lintDebug` | Runs Detekt and Android Lint. | +| Local/unit tests | `./gradlew test -PexcludeSnapshotTests=true` | Executes JVM tests while excluding snapshots. | +| Screenshot tests | `./gradlew --no-parallel verifyPaparazziDebug` | Verifies committed Paparazzi goldens. | +| Coverage | `./gradlew koverXmlReport koverVerify -PexcludeSnapshotTests=true` | Generates and verifies Kover coverage. | +| Debug build | `./gradlew assembleDebug` | Builds the debug APK. | + +> Map previews and runtime map features expect `MAPS_API_KEY` in `local.properties` or CI secrets. + +### Additional Highlights + +* **Roller coaster discovery:** Explore, search, and detail screens are split into independent + presentation modules backed by shared domain and data contracts. +* **Design-system playground:** Reusable Compose components, typography, colors, shapes, cards, + dialogs, maps, images, and preview fixtures live under `presentation:design-system`. +* **Localized settings:** Theme, dynamic color, contrast, language, and measurement-system settings + are modeled through dedicated domain/data modules. +* **Snapshot tooling:** Paparazzi helpers provide consistent device, theme, and preview parameters + across screen and component screenshots. +* **Edge-to-edge ready:** Compose screens are built around modern Android system-bar and inset + behavior. +* **Dependency hygiene:** Version catalog, Dependabot, Gradle Versions Plugin, Detekt, Lint, Kover, + and CI checks keep the playground current while still catching regressions. + +### Incoming Features + +* **Parks:** Add richer amusement-park data and park-oriented discovery. +* **Enhanced discovery:** Expand filtering by manufacturer, location, ride type, and park. +* **Robustness:** Continue improving error handling, empty states, and offline behavior. +* **Large screens:** Explore adaptive layouts for tablets, foldables, and landscape devices. +* **Motion:** Add purposeful transitions and animations where they clarify navigation or state + changes. + +## Architecture (MVVM + Clean) + +Roller Coasters uses a state-driven MVVM (Model-View-ViewModel) architecture combined with +principles from Clean Architecture. + +* **UI (Compose):** Observes `State` from the `ViewModel` and sends `Actions` back to it. +* **ViewModel:** Handles presentation logic, consumes actions, calls use cases or repositories, and + exposes a single state stream for the UI. +* **UseCases (Domain Layer):** Encapsulate focused pieces of app behavior and keep feature logic + reusable. +* **Repository (Data Layer):** Acts as the single source of truth and hides local/remote data + details from the UI and domain layers. + +## Project Structure + +The repository is laid out as a layered, multi-module Gradle project. Each directory below maps to a +distinct slice of the architecture so features can evolve independently while keeping dependencies +explicit. + +```text +β”œβ”€β”€ app/ # Android entry point and app-level configuration +β”œβ”€β”€ data/ # Repository implementations, remote clients, sync, and persistence +β”œβ”€β”€ domain/ # Business rules, app models, use cases, fixtures, and locale logic +β”œβ”€β”€ di/ # Centralized Hilt bindings that wire modules together +β”œβ”€β”€ presentation/ # Compose UI, app shell, navigation, previews, and design system +β”œβ”€β”€ utils/ # Cross-cutting helpers for lifecycle, dates, and time +β”œβ”€β”€ buildSrc/ # Gradle convention helpers and module constants +└── gradle/, *.gradle.kts # Build logic, settings, and version configuration +``` + +### Module Overview + +Every Gradle module has a single responsibility. Use the list below to find the code you need: + +* **Application shell** + * `app`: Hosts the `Application`, splash activity, and app-level configuration. + * `presentation:app-shell`: Owns the bottom-bar shell and top-level screen composition. +* **Presentation layer** + * `presentation:explore`, `presentation:favourites`, `presentation:search`, + `presentation:roller-coaster-details`, `presentation:settings`, and `presentation:about-me`: + Feature-specific Compose screens. + * `presentation:design-system:*`: Shared Compose foundations, reusable components, previews, + maps, images, and component-specific snapshot tests. + * `presentation:navigation` and `presentation:navigation-external`: Navigation contracts and + app-facing navigation integration. + * `presentation:paparazzi`, `presentation:previews`, `presentation:fixtures`, + `presentation:format`, `presentation:string-provider`, `presentation:top-bars`, and + `presentation:utils`: Shared UI tooling, resources, and formatting helpers. +* **Domain layer** + * `domain:model`, `domain:roller-coasters`, `domain:settings`, `domain:system-features`, + `domain:locales`, and `domain:fixtures`: Canonical models, use cases, and test fixtures. +* **Data layer** + * `data:roller-coasters`: Room cache, remote API mapping, sync scheduling, and repository + implementation for coaster data. + * `data:network`: Ktor client configuration and API result handling. + * `data:settings`: Persistence for user preferences and configuration toggles. + * `data:system-features`: Abstractions over device and system capabilities. +* **Dependency injection** + * `di`: Shared Hilt modules and component wiring consumed across the app. +* **Shared utilities** + * `utils:lifecycle` and `utils:time-dates`: Lifecycle-aware coroutine helpers and date/time + utilities. + +## Contributing + +This is a personal playground, but focused improvements, bug reports, and ideas are welcome. + +See [CONTRIBUTING.md](CONTRIBUTING.md) for the contribution workflow and pull request expectations. + +## License This project is licensed under the [MIT License](https://opensource.org/licenses/MIT) - see the [LICENSE](LICENSE) file for details. + +## Contact + +If you feel like saying hi, have any comments, suggestions or +questions, [open an issue](https://github.com/Sottti/RollerCoasters/issues?q=sort%3Aupdated-desc+is%3Aissue+is%3Aopen) +or say [hi on X](https://x.com/Sotttti). diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 927e76489..6a059bdd7 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,11 +1,12 @@ -import com.sottti.roller.coasters.buildSrc.module +import org.gradle.api.Project +import java.util.Properties + +private val mapsApiKeyProperty = "MAPS_API_KEY" plugins { alias(libs.plugins.android.application) alias(libs.plugins.hilt) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) - alias(libs.plugins.secrets) } android { @@ -19,6 +20,7 @@ android { applicationId = "com.sottti.roller.coasters" versionCode = 1 versionName = "1.0" + manifestPlaceholders[mapsApiKeyProperty] = project.mapsApiKey() } buildTypes { @@ -40,10 +42,27 @@ dependencies { implementation(libs.hilt.work) implementation(libs.splashscreen) implementation(libs.work.runtime) - implementation(project(module.di)) - implementation(project(module.domain.systemFeatures)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.domain.settings)) - implementation(project(module.presentation.home)) + implementation(projects.di) + implementation(projects.domain.systemFeatures) + implementation(projects.domain.rollerCoasters) + implementation(projects.domain.settings) + implementation(projects.presentation.appShell) ksp(libs.hilt.compiler) } + +private fun Project.mapsApiKey(): String = + providers.gradleProperty(mapsApiKeyProperty) + .orElse(providers.environmentVariable(mapsApiKeyProperty)) + .orElse(providers.provider { localProperties().getProperty(mapsApiKeyProperty).orEmpty() }) + .get() + +private fun Project.localProperties(): Properties { + val properties = Properties() + val localPropertiesFile = rootProject.file("local.properties") + + if (localPropertiesFile.isFile) { + localPropertiesFile.inputStream().use(properties::load) + } + + return properties +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index df60e0506..a380c43b7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -33,11 +33,18 @@ android:name="autoStoreLocales" android:value="true" /> + + + - - + android:value="${MAPS_API_KEY}" /> diff --git a/app/src/main/kotlin/com/sottti/roller/coasters/app/SplashScreenActivity.kt b/app/src/main/kotlin/com/sottti/roller/coasters/app/SplashScreenActivity.kt index 687a4f3ed..f43401039 100644 --- a/app/src/main/kotlin/com/sottti/roller/coasters/app/SplashScreenActivity.kt +++ b/app/src/main/kotlin/com/sottti/roller/coasters/app/SplashScreenActivity.kt @@ -8,7 +8,7 @@ import androidx.lifecycle.lifecycleScope import com.sottti.roller.coasters.domain.roller.coasters.usecase.ScheduleRollerCoastersSync import com.sottti.roller.coasters.domain.settings.usecase.theme.ApplyStoredAppTheme import com.sottti.roller.coasters.domain.system.features.SystemFeatures -import com.sottti.roller.coasters.presentation.home.ui.startHomeActivity +import com.sottti.roller.coasters.presentation.app.shell.ui.startAppShellActivity import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.launch import javax.inject.Inject @@ -36,7 +36,7 @@ internal class SplashScreenActivity : ComponentActivity() { scheduleRollerCoastersSync() - startHomeActivity(context = this) + startAppShellActivity(context = this) finish() } diff --git a/build.gradle.kts b/build.gradle.kts index ec9794f45..5aeebf34f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,12 @@ import com.android.build.api.dsl.ApplicationExtension import com.android.build.api.dsl.LibraryExtension +import dev.detekt.gradle.Detekt +import dev.detekt.gradle.DetektCreateBaselineTask +import org.gradle.accessors.dm.LibrariesForLibs +import org.gradle.api.artifacts.ProjectDependency +import org.gradle.api.tasks.testing.Test +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JavaToolchainService import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension @@ -7,18 +14,114 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension plugins { alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false + alias(libs.plugins.detekt) apply true alias(libs.plugins.gradle.versions) apply true alias(libs.plugins.hilt) apply false - alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.ksp) apply false alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.kover) apply true alias(libs.plugins.paparazzi) apply false - alias(libs.plugins.secrets) apply false +} + +tasks.register("cleanPaparazziSnapshots") { + group = "verification" + description = "Deletes all Paparazzi snapshot images across the project." + delete(fileTree(rootDir) { include("**/src/test/snapshots/images/**") }) +} + +private val excludeSnapshotTestsProperty = "excludeSnapshotTests" +private val snapshotTestPattern = "**/*SnapshotTest.class" + +val libraries = the() + +val checkModuleDependencyBoundaries = tasks.register("checkModuleDependencyBoundaries") { + group = "verification" + description = "Checks direct project dependencies follow the configured module boundary rules." + + doLast { + val dependencyViolations = allprojects + .flatMap { project -> + project.configurations.flatMap { configuration -> + configuration.dependencies + .withType(ProjectDependency::class.java) + .filter { dependency -> dependency.path != project.path } + .map { dependency -> + ProjectDependencyEdge( + configuration = configuration.name, + source = project.path, + target = dependency.path, + ) + } + } + } + .flatMap { dependency -> dependency.boundaryViolations() } + + val pluginViolations = allprojects + .filter { project -> project.path in pureKotlinModules } + .flatMap { project -> project.pureKotlinModuleViolations() } + + val violations = (dependencyViolations + pluginViolations) + .distinct() + .sorted() + + if (violations.isNotEmpty()) { + throw GradleException( + buildString { + appendLine("Module dependency boundary violations found:") + violations.forEach { violation -> appendLine("- $violation") } + }, + ) + } + } } subprojects { + apply(plugin = "dev.detekt") + + dependencies { + "detektPlugins"(libraries.detekt.compose) + "detektPlugins"(libraries.detekt.formatting) + } + + detekt { + toolVersion = libraries.versions.detekt.get() + config.setFrom(files("$rootDir/detekt.yml")) + buildUponDefaultConfig = true + autoCorrect = false + parallel = true + baselineFile("detekt-baseline.xml")?.let { baseline = it } + } + + tasks.withType().configureEach { + jvmTarget.set("21") + ignoreFailures = false + exclude("**/StateInViewModelWhileSubscribed.kt") + reports { + html.required.set(true) + checkstyle.required.set(true) + sarif.required.set(false) + markdown.required.set(false) + } + } + + tasks.withType().configureEach { + jvmTarget.set("21") + exclude("**/StateInViewModelWhileSubscribed.kt") + } + + val excludeSnapshotTests = providers.gradleProperty(excludeSnapshotTestsProperty) + .map(String::toBoolean) + .orElse(false) + + tasks.withType().configureEach { + if (excludeSnapshotTests.get()) { + exclude(snapshotTestPattern) + failOnNoDiscoveredTests.set(false) + } + } + afterEvaluate { when { plugins.hasPlugin("com.android.application") -> { @@ -29,17 +132,14 @@ subprojects { } } - plugins.withId("org.jetbrains.kotlin.android") { - extensions.configure { - explicitApi() - jvmToolchain(17) - compilerOptions { - jvmTarget.set(JvmTarget.JVM_17) - freeCompilerArgs.add("-Xwhen-guards") - freeCompilerArgs.add("-Xcontext-parameters") - freeCompilerArgs.add("-Xannotation-default-target=param-property") - } - } + plugins.withId("com.android.application") { configureKotlinAndroid() } + + plugins.withId("com.android.library") { configureKotlinAndroid() } + + plugins.withId("app.cash.paparazzi") { configurePaparazziTests() } + + tasks.matching { it.name == "check" }.configureEach { + dependsOn(checkModuleDependencyBoundaries) } plugins.withId("org.jetbrains.kotlin.jvm") { @@ -53,6 +153,120 @@ subprojects { } } +private data class ProjectDependencyEdge( + val configuration: String, + val source: String, + val target: String, +) + +private val dependencyFreeModules = setOf( + ":domain:locales", + ":domain:model", + ":domain:system-features", + ":presentation:navigation", + ":presentation:previews", + ":presentation:string-provider", +) + +private val pureKotlinModules = setOf( + ":domain:fixtures", + ":domain:locales", + ":domain:model", + ":domain:roller-coasters", + ":domain:settings", + ":domain:system-features", + ":presentation:navigation", + ":presentation:paparazzi", + ":utils:time-dates", +) + +private val pureKotlinForbiddenPluginIds = mapOf( + "com.android.application" to "Android application", + "com.android.library" to "Android library", + "com.google.dagger.hilt.android" to "Hilt Android", +) + +private val presentationSupportModules = setOf( + ":presentation:fixtures", + ":presentation:paparazzi", + ":presentation:previews", +) + +private fun ProjectDependencyEdge.boundaryViolations(): List = buildList { + if (source in dependencyFreeModules) { + add("$source must not declare project dependencies, but $configuration depends on $target.") + } + + if (target == ":app") { + add("$source must not depend on :app via $configuration.") + } + + if (source.startsWith(":domain:") && !target.startsWith(":domain:")) { + add("$source is a domain module and may only depend on domain modules, but $configuration depends on $target.") + } + + if (source.startsWith(":data:") && !target.isAllowedDataDependency()) { + add("$source is a data module and may only depend on data, domain, or utils modules, but $configuration depends on $target.") + } + + if (source.startsWith(":presentation:") && target.isForbiddenPresentationDependency()) { + add("$source is a presentation module and must not depend on data, di, or app modules, but $configuration depends on $target.") + } + + if (source.startsWith(":presentation:design-system:") && target.isForbiddenDesignSystemDependency()) { + add("$source is a design-system module and must not depend on $target via $configuration.") + } + + if (source.isNonPresentationLayer() && target in presentationSupportModules) { + add("$source must not depend on presentation support module $target via $configuration.") + } + + if (source == ":di" && !target.isAllowedDiDependency()) { + add("$source may only depend on data or domain modules, but $configuration depends on $target.") + } +} + +private fun Project.pureKotlinModuleViolations(): List = buildList { + if (!plugins.hasPlugin("org.jetbrains.kotlin.jvm")) { + add("$path is configured as a pure Kotlin module and must apply the Kotlin JVM plugin.") + } + + pureKotlinForbiddenPluginIds + .filter { (pluginId, _) -> plugins.hasPlugin(pluginId) } + .forEach { (pluginId, description) -> + add("$path is configured as a pure Kotlin module and must not apply the $description plugin ($pluginId).") + } +} + +private fun String.isAllowedDataDependency() = + startsWith(":data:") || startsWith(":domain:") || startsWith(":utils:") + +private fun String.isForbiddenPresentationDependency() = + startsWith(":data:") || this == ":di" || this == ":app" + +private fun String.isForbiddenDesignSystemDependency() = + this == ":presentation:app-shell" || + startsWith(":data:") || + this == ":di" || + this == ":app" + +private fun String.isNonPresentationLayer() = + startsWith(":domain:") || startsWith(":data:") || this == ":di" || this == ":app" + +private fun String.isAllowedDiDependency() = + startsWith(":data:") || startsWith(":domain:") + +private fun Project.configurePaparazziTests() { + val javaToolchains = extensions.getByType() + tasks.withType().configureEach { + javaLauncher.set( + javaToolchains.launcherFor { + languageVersion.set(JavaLanguageVersion.of(21)) + }, + ) + } +} + private fun ApplicationExtension.androidApplicationConfig() { compileSdk = compileSdk() @@ -61,6 +275,14 @@ private fun ApplicationExtension.androidApplicationConfig() { targetSdk = targetSdk() } + lint { + baselineFile("lint-baseline.xml")?.let { baseline = it } + abortOnError = true + checkReleaseBuilds = false + xmlReport = true + htmlReport = true + } + compileOptions { sourceCompatibility = javaVersion() targetCompatibility = javaVersion() @@ -71,7 +293,13 @@ private fun Project.androidLibraryConfig() { extensions.configure { compileSdk = compileSdk() defaultConfig { minSdk = minSdk() } - lint { targetSdk = targetSdk() } + lint { + targetSdk = targetSdk() + baselineFile("lint-baseline.xml")?.let { baseline = it } + abortOnError = true + xmlReport = true + htmlReport = true + } compileOptions { sourceCompatibility = javaVersion() @@ -80,6 +308,21 @@ private fun Project.androidLibraryConfig() { } } +private fun Project.configureKotlinAndroid() { + extensions.configure { + explicitApi() + jvmToolchain(17) + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + freeCompilerArgs.add("-Xcontext-parameters") + freeCompilerArgs.add("-Xannotation-default-target=param-property") + } + } +} + +private fun Project.baselineFile(path: String) = + file(path).takeIf { it.exists() } + private fun compileSdk() = libs.versions.compileSdk.get().toInt() private fun javaVersion() = JavaVersion.VERSION_17 private fun minSdk() = libs.versions.minSdk.get().toInt() diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index bc0172f0f..000000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,3 +0,0 @@ -plugins { - `kotlin-dsl` -} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts deleted file mode 100644 index ad8ea6b6e..000000000 --- a/buildSrc/settings.gradle.kts +++ /dev/null @@ -1,19 +0,0 @@ -rootProject.name = "buildSrc" - -pluginManagement { - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} - -@Suppress("UnstableApiUsage") -dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) - repositories { - google() - mavenCentral() - gradlePluginPortal() - } -} diff --git a/buildSrc/src/main/kotlin/com/sottti/roller/coasters/buildSrc/Modules.kt b/buildSrc/src/main/kotlin/com/sottti/roller/coasters/buildSrc/Modules.kt deleted file mode 100644 index 0585a3d41..000000000 --- a/buildSrc/src/main/kotlin/com/sottti/roller/coasters/buildSrc/Modules.kt +++ /dev/null @@ -1,72 +0,0 @@ -@file:Suppress("ClassName", "ConstPropertyName") - -package com.sottti.roller.coasters.buildSrc - -object module { - object presentation { - const val aboutMe = ":presentation:about-me" - const val explore = ":presentation:explore" - const val favourites = ":presentation:favourites" - const val fixtures = ":presentation:fixtures" - const val format = ":presentation:format" - const val home = ":presentation:home" - const val navigation = ":presentation:navigation" - const val navigationExternal = ":presentation:navigation-external" - const val paparazzi = ":presentation:paparazzi" - const val previews = ":presentation:previews" - const val rollerCoasterDetails = ":presentation:roller-coaster-details" - const val search = ":presentation:search" - const val settings = ":presentation:settings" - const val stringProvider = ":presentation:string-provider" - const val topBars = ":presentation:top-bars" - const val utils = ":presentation:utils" - - object designSystem { - const val cardGrid = ":presentation:design-system:card-grid" - const val chip = ":presentation:design-system:chip" - const val colors = ":presentation:design-system:colors" - const val dialogs = ":presentation:design-system:dialogs" - const val dimensions = ":presentation:design-system:dimensions" - const val empty = ":presentation:design-system:empty" - const val error = ":presentation:design-system:error" - const val heroImage = ":presentation:design-system:hero-image" - const val iconResources = ":presentation:design-system:icon-resources" - const val icons = ":presentation:design-system:icons" - const val illustrations = ":presentation:design-system:illustrations" - const val images = ":presentation:design-system:images" - const val informative = ":presentation::design-system:informative" - const val map = ":presentation:design-system:map" - const val progressIndicators = ":presentation:design-system:progress-indicators" - const val rollerCoasterCard = ":presentation:design-system:roller-coaster-card" - const val searchBar = ":presentation:design-system:search-bar" - const val shapes = ":presentation:design-system:shapes" - const val switch = ":presentation:design-system:switch" - const val text = ":presentation:design-system:text" - const val themes = ":presentation:design-system:themes" - const val typography = ":presentation:design-system:typography" - } - } - - object domain { - const val systemFeatures = ":domain:system-features" - const val fixtures = ":domain:fixtures" - const val locales = ":domain:locales" - const val model = ":domain:model" - const val rollerCoasters = ":domain:roller-coasters" - const val settings = ":domain:settings" - } - - object data { - const val systemFeatures = ":data:system-features" - const val network = ":data:network" - const val rollerCoasters = ":data:roller-coasters" - const val settings = ":data:settings" - } - - object utils { - const val lifecycle = ":utils:lifecycle" - const val timeDates = ":utils:time-dates" - } - - const val di = ":di" -} diff --git a/data/network/build.gradle.kts b/data/network/build.gradle.kts index e00ca43fc..6d5cab569 100644 --- a/data/network/build.gradle.kts +++ b/data/network/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.kotlin.serialization) } diff --git a/data/network/detekt-baseline.xml b/data/network/detekt-baseline.xml new file mode 100644 index 000000000..f228b591e --- /dev/null +++ b/data/network/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + TooGenericExceptionCaught:SafeApiCall.kt:exception: Exception + TooGenericExceptionThrown:SafeApiCallTest.kt:SafeApiCallTest$throw RuntimeException(unexpectedErrorMessage) + + diff --git a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/HttpClient.kt b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/HttpClient.kt index 0dbbf2ce2..29d0cba32 100644 --- a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/HttpClient.kt +++ b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/HttpClient.kt @@ -1,6 +1,7 @@ package com.sottti.roller.coasters.data.network import io.ktor.client.HttpClient +import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.cio.CIO import io.ktor.client.plugins.contentnegotiation.ContentNegotiation import io.ktor.client.plugins.logging.ANDROID @@ -10,8 +11,12 @@ import io.ktor.client.plugins.logging.Logging import io.ktor.serialization.kotlinx.json.json import kotlinx.serialization.json.Json -internal fun createHttpClient() = - HttpClient(CIO) { +internal fun createHttpClient( + engine: HttpClientEngine = CIO.create(), +) = + HttpClient(engine) { + expectSuccess = true + install(ContentNegotiation) { json( Json { diff --git a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/SafeApiCall.kt b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/SafeApiCall.kt index a7cceaf21..f2f91cf52 100644 --- a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/SafeApiCall.kt +++ b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/SafeApiCall.kt @@ -6,14 +6,17 @@ import com.github.michaelbull.result.Result import com.sottti.roller.coasters.data.network.model.ExceptionApiModel import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.ClientError import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.NoInternet +import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.RedirectError import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.ServerError import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.Timeout import com.sottti.roller.coasters.data.network.model.ExceptionApiModel.Unknown import io.ktor.client.network.sockets.SocketTimeoutException import io.ktor.client.plugins.ClientRequestException +import io.ktor.client.plugins.RedirectResponseException import io.ktor.client.plugins.ServerResponseException import io.ktor.client.statement.bodyAsText import java.net.UnknownHostException +import kotlin.coroutines.cancellation.CancellationException public suspend fun safeApiCall( apiCall: suspend () -> T, @@ -24,15 +27,20 @@ public suspend fun safeApiCall( } catch (exception: SocketTimeoutException) { Err(Timeout(exception.message ?: TIMEOUT_ERROR_MESSAGE)) } catch (exception: ClientRequestException) { // 4xx errors + val errorBody = exception.response.bodyAsText() Err( ClientError( message = exception.message, code = exception.response.status.value, - errorBody = exception.response.bodyAsText(), + errorBody = errorBody, ), ) } catch (exception: ServerResponseException) { // 5xx errors Err(ServerError(message = exception.message, code = exception.response.status.value)) +} catch (exception: RedirectResponseException) { // 3xx errors + Err(RedirectError(message = exception.message, code = exception.response.status.value)) +} catch (exception: CancellationException) { + throw exception } catch (exception: Exception) { Err(Unknown(exception.message ?: UNKNOWN_ERROR_MESSAGE)) } diff --git a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/model/ExceptionApiModel.kt b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/model/ExceptionApiModel.kt index bdf0a638f..50c2afd14 100644 --- a/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/model/ExceptionApiModel.kt +++ b/data/network/src/main/kotlin/com/sottti/roller/coasters/data/network/model/ExceptionApiModel.kt @@ -14,6 +14,11 @@ public sealed class ExceptionApiModel( val errorBody: String?, ) : ExceptionApiModel(message) + public data class RedirectError( + override val message: String, + val code: Int, + ) : ExceptionApiModel(message) + public data class ServerError( override val message: String, val code: Int, diff --git a/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTest.kt b/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTest.kt index 76550386e..c25ea466d 100644 --- a/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTest.kt +++ b/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTest.kt @@ -5,11 +5,16 @@ import com.github.michaelbull.result.get import com.github.michaelbull.result.getError import com.google.common.truth.Truth.assertThat import com.sottti.roller.coasters.data.network.model.ExceptionApiModel +import io.ktor.client.engine.mock.MockEngine +import io.ktor.client.engine.mock.respondError import io.ktor.client.network.sockets.SocketTimeoutException +import io.ktor.http.HttpHeaders import io.ktor.http.HttpStatusCode +import io.ktor.http.headersOf import kotlinx.coroutines.runBlocking import org.junit.Test import java.net.UnknownHostException +import kotlin.coroutines.cancellation.CancellationException internal class SafeApiCallTest { @@ -64,6 +69,26 @@ internal class SafeApiCallTest { } } + @Test + fun `production client returns server error when server returns 5xx`() = runBlocking { + val mockClient = createHttpClient( + MockEngine { + respondError( + status = HttpStatusCode.InternalServerError, + content = "Internal Server Error", + ) + } + ) + + val result = mockClient.fetchWithSafeApiCall() + + val error = result.getError() + assertThat(error).isInstanceOf(ExceptionApiModel.ServerError::class.java) + with(error as ExceptionApiModel.ServerError) { + assertThat(code).isEqualTo(500) + } + } + @Test fun `returns client error when client request exception occurs`() = runBlocking { val content = "Resource not found" @@ -84,4 +109,55 @@ internal class SafeApiCallTest { assertThat(message).contains("404") } } + + @Test + fun `production client returns client error when server returns 4xx`() = runBlocking { + val content = "Resource not found" + val mockClient = createHttpClient( + MockEngine { + respondError( + status = HttpStatusCode.NotFound, + content = content, + ) + } + ) + + val result = mockClient.fetchWithSafeApiCall() + + val error = result.getError() + assertThat(error).isInstanceOf(ExceptionApiModel.ClientError::class.java) + with(error as ExceptionApiModel.ClientError) { + assertThat(code).isEqualTo(404) + assertThat(errorBody).isEqualTo(content) + } + } + + @Test + fun `returns redirect error when redirect response exception occurs`() = runBlocking { + val mockEngine = mockEngineForResponse( + content = "", + headers = headersOf(HttpHeaders.Location, "https://example.com/redirected"), + status = HttpStatusCode.MovedPermanently, + ) + val mockClient = createMockClient( + engine = mockEngine, + followRedirects = false, + ) + + val result = mockClient.fetchWithSafeApiCall() + + val error = result.getError() + assertThat(error).isInstanceOf(ExceptionApiModel.RedirectError::class.java) + with(error as ExceptionApiModel.RedirectError) { + assertThat(code).isEqualTo(301) + assertThat(message).contains("301") + } + } + + @Test(expected = CancellationException::class) + fun `rethrows cancellation exception`() { + runBlocking { + safeApiCall { throw CancellationException("Job cancelled") } + } + } } diff --git a/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTestHelpers.kt b/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTestHelpers.kt index 0735ab341..019d852f4 100644 --- a/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTestHelpers.kt +++ b/data/network/src/test/kotlin/com/sottti/roller/coasters/data/network/SafeApiCallTestHelpers.kt @@ -6,23 +6,28 @@ import io.ktor.client.HttpClient import io.ktor.client.engine.mock.MockEngine import io.ktor.client.engine.mock.respond import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.http.Headers import io.ktor.http.HttpStatusCode import io.ktor.serialization.kotlinx.json.json internal fun createMockClient( engine: MockEngine, + followRedirects: Boolean = true, ): HttpClient = HttpClient(engine) { install(ContentNegotiation) { json() } expectSuccess = true + this.followRedirects = followRedirects } internal fun mockEngineForResponse( status: HttpStatusCode, content: String, + headers: Headers = Headers.Empty, ): MockEngine = MockEngine { request -> respond( content = content, + headers = headers, status = status, ) } diff --git a/data/roller-coasters/build.gradle.kts b/data/roller-coasters/build.gradle.kts index fd474b882..c938da913 100644 --- a/data/roller-coasters/build.gradle.kts +++ b/data/roller-coasters/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.kotlin.serialization) } @@ -19,10 +16,10 @@ dependencies { implementation(libs.room) implementation(libs.room.paging) implementation(libs.work.runtime) - implementation(project(module.data.network)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.utils.timeDates)) + implementation(projects.data.network) + implementation(projects.domain.fixtures) + implementation(projects.domain.rollerCoasters) + implementation(projects.utils.timeDates) ksp(libs.hilt.compiler) ksp(libs.room.compiler) diff --git a/data/roller-coasters/detekt-baseline.xml b/data/roller-coasters/detekt-baseline.xml new file mode 100644 index 000000000..b1bbe68ec --- /dev/null +++ b/data/roller-coasters/detekt-baseline.xml @@ -0,0 +1,22 @@ + + + + + CyclomaticComplexMethod:RollerCoastersApiMapper.kt:private fun RollerCoasterStatsApiModel.isMultiTrack: Boolean + Filename:StatsRoomModel.kt:com.sottti.roller.coasters.data.roller.coasters.datasources.local.model.StatsRoomModel.kt + Indentation:RollerCoastersApiMapper.kt: + Indentation:RollerCoastersRoomQueriesMapperTest.kt:RollerCoastersRoomQueriesMapperTest$ + MatchingDeclarationName:StatsRoomModel.kt:RideRoomModel + MultiLineIfElse:PictureSerializer.kt:PictureSerializer$Json.decodeFromJsonElement(PictureApiModel.serializer(), element) + MultiLineIfElse:PictureSerializer.kt:PictureSerializer$null + MultiLineIfElse:RollerCoastersRemoteDataSource.kt:RollerCoastersRemoteDataSource$Err(error ?: Exception("Error syncing roller coasters")) + MultiLineIfElse:RollerCoastersRemoteDataSource.kt:RollerCoastersRemoteDataSource$Ok(Unit) + NoConsecutiveBlankLines:RollerCoastersRemoteDataSourceTest.kt:RollerCoastersRemoteDataSourceTest$ + ReturnCount:CoordinatesSerializer.kt:CoordinatesSerializer$override fun deserialize: CoordinatesApiModel? + StatementWrapping:RollerCoastersRemoteDataSource.kt:RollerCoastersRemoteDataSource$; + StatementWrapping:RollerCoastersRemoteDataSource.kt:RollerCoastersRemoteDataSource$successfulCalls++; it + TooGenericExceptionCaught:FilteredRollerCoastersPagingSource.kt:FilteredRollerCoastersPagingSource$e: Exception + TooManyFunctions:RollerCoastersDao.kt:RollerCoastersDao + Wrapping:RollerCoastersRemoteDataSource.kt:RollerCoastersRemoteDataSource$( + + diff --git a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/FilteredRollerCoastersPagingSource.kt b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/FilteredRollerCoastersPagingSource.kt index 76b730012..3d213f301 100644 --- a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/FilteredRollerCoastersPagingSource.kt +++ b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/FilteredRollerCoastersPagingSource.kt @@ -9,6 +9,7 @@ import com.sottti.roller.coasters.domain.roller.coasters.model.RollerCoaster import com.sottti.roller.coasters.domain.roller.coasters.model.SortByFilter import com.sottti.roller.coasters.domain.roller.coasters.model.TypeFilter import com.sottti.roller.coasters.domain.settings.model.measurementSystem.ResolvedMeasurementSystem +import kotlin.coroutines.cancellation.CancellationException internal class FilteredRollerCoastersPagingSource( private val dao: RollerCoastersDao, @@ -45,6 +46,8 @@ internal class FilteredRollerCoastersPagingSource( prevKey = if (page == 0) null else page - 1, nextKey = if (rollerCoasters.size < pageSize) null else page + 1, ) + } catch (e: CancellationException) { + throw e } catch (e: Exception) { LoadResult.Error(e) } diff --git a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/remote/RollerCoastersRemoteDataSource.kt b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/remote/RollerCoastersRemoteDataSource.kt index 54e1ad590..8e019714e 100644 --- a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/remote/RollerCoastersRemoteDataSource.kt +++ b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/remote/RollerCoastersRemoteDataSource.kt @@ -3,8 +3,8 @@ package com.sottti.roller.coasters.data.roller.coasters.datasources.remote import com.github.michaelbull.result.Err import com.github.michaelbull.result.Ok import com.github.michaelbull.result.mapBoth -import com.github.michaelbull.result.onFailure -import com.github.michaelbull.result.onSuccess +import com.github.michaelbull.result.onErr +import com.github.michaelbull.result.onOk import com.sottti.roller.coasters.data.roller.coasters.datasources.remote.api.RollerCoastersApiCalls import com.sottti.roller.coasters.data.roller.coasters.datasources.remote.mapper.toApiModel import com.sottti.roller.coasters.data.roller.coasters.datasources.remote.mapper.toDomain @@ -79,8 +79,8 @@ internal class RollerCoastersRemoteDataSource @Inject constructor( val result = api.getRollerCoasters(offset = offset, limit = limit) mutex.withLock { result - .onSuccess { successfulCalls++ } - .onFailure { exceptionApi -> error = exceptionApi } + .onOk { successfulCalls++ } + .onErr { exceptionApi -> error = exceptionApi } } result.mapBoth( success = { page -> diff --git a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/repository/RollerCoastersRepositoryImpl.kt b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/repository/RollerCoastersRepositoryImpl.kt index c010ab0dd..e8e26965c 100644 --- a/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/repository/RollerCoastersRepositoryImpl.kt +++ b/data/roller-coasters/src/main/kotlin/com/sottti/roller/coasters/data/roller/coasters/repository/RollerCoastersRepositoryImpl.kt @@ -1,7 +1,7 @@ package com.sottti.roller.coasters.data.roller.coasters.repository import androidx.paging.PagingData -import com.github.michaelbull.result.onSuccess +import com.github.michaelbull.result.onOk import com.sottti.roller.coasters.data.roller.coasters.datasources.local.RollerCoastersLocalDataSource import com.sottti.roller.coasters.data.roller.coasters.datasources.remote.RollerCoastersRemoteDataSource import com.sottti.roller.coasters.data.roller.coasters.sync.RollerCoasterSyncScheduler @@ -45,7 +45,7 @@ internal class RollerCoastersRepositoryImpl @Inject constructor( if (rollerCoaster == null) { remoteDataSource .getRollerCoaster(id, measurementSystem) - .onSuccess { localDataSource.storeRollerCoaster(it) } + .onOk { localDataSource.storeRollerCoaster(it) } } }.filterNotNull() @@ -83,5 +83,5 @@ internal class RollerCoastersRepositoryImpl @Inject constructor( ): Result> = remoteDataSource .searchRollerCoasters(query = query, measurementSystem = measurementSystem) - .onSuccess { rollerCoasters -> localDataSource.storeRollerCoasters(rollerCoasters) } + .onOk { rollerCoasters -> localDataSource.storeRollerCoasters(rollerCoasters) } } diff --git a/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/converters/ListConvertersTest.kt b/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/converters/ListConvertersTest.kt index 43bf0e5c9..2328a26db 100644 --- a/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/converters/ListConvertersTest.kt +++ b/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/converters/ListConvertersTest.kt @@ -1,7 +1,7 @@ package com.sottti.roller.coasters.data.roller.coasters.datasources.local.converters import com.google.common.truth.Truth.assertThat -import kotlin.test.Test +import org.junit.Test internal class ListConvertersTest { diff --git a/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/RollerCoastersPagingSourceTest.kt b/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/RollerCoastersPagingSourceTest.kt index 5f73b47b2..0509c417a 100644 --- a/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/RollerCoastersPagingSourceTest.kt +++ b/data/roller-coasters/src/test/kotlin/com/sottti/roller/coasters/data/roller/coasters/datasources/local/paging/RollerCoastersPagingSourceTest.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Test +import kotlin.coroutines.cancellation.CancellationException @OptIn(ExperimentalCoroutinesApi::class) internal class RollerCoastersPagingSourceTest { @@ -117,6 +118,20 @@ internal class RollerCoastersPagingSourceTest { assertThat(error.throwable.message).isEqualTo("DB Error") } + @Test(expected = CancellationException::class) + fun `load - rethrows cancellation exceptions`() = runBlocking { + coEvery { dao.getPagedRollerCoasters(any()) } throws CancellationException("cancelled") + + val params = PagingSource.LoadParams.Refresh( + key = 0, + loadSize = 2, + placeholdersEnabled = false, + ) + + pagingSource.load(params) + Unit + } + @Test fun `getRefreshKey - should return null when anchorPosition is null`() { val state = PagingState( diff --git a/data/settings/build.gradle.kts b/data/settings/build.gradle.kts index 428dba0dc..655043647 100644 --- a/data/settings/build.gradle.kts +++ b/data/settings/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) } @@ -17,10 +14,10 @@ dependencies { implementation(libs.appcompat) implementation(libs.datastore.preferences) implementation(libs.hilt) - implementation(project(module.domain.locales)) - implementation(project(module.domain.settings)) - implementation(project(module.domain.systemFeatures)) - implementation(project(module.utils.lifecycle)) + implementation(projects.domain.locales) + implementation(projects.domain.settings) + implementation(projects.domain.systemFeatures) + implementation(projects.utils.lifecycle) ksp(libs.hilt.compiler) androidTestImplementation(libs.junit.ext) diff --git a/data/settings/detekt-baseline.xml b/data/settings/detekt-baseline.xml new file mode 100644 index 000000000..547b65577 --- /dev/null +++ b/data/settings/detekt-baseline.xml @@ -0,0 +1,9 @@ + + + + + NoConsecutiveBlankLines:SettingsLocalDataSource.kt:SettingsLocalDataSource$ + TooManyFunctions:SettingsLocalDataSource.kt:SettingsLocalDataSource + TooManyFunctions:SettingsRepositoryImpl.kt:SettingsRepositoryImpl : SettingsRepository + + diff --git a/data/settings/src/main/kotlin/com/sottti/roller/coasters/data/settings/mapper/ThemeDataMapper.kt b/data/settings/src/main/kotlin/com/sottti/roller/coasters/data/settings/mapper/ThemeDataMapper.kt index ae32ed161..281e31495 100644 --- a/data/settings/src/main/kotlin/com/sottti/roller/coasters/data/settings/mapper/ThemeDataMapper.kt +++ b/data/settings/src/main/kotlin/com/sottti/roller/coasters/data/settings/mapper/ThemeDataMapper.kt @@ -35,7 +35,7 @@ internal fun AppTheme.toUiModeManagerNightMode() = when (this) { AppTheme.DarkAppTheme -> UiModeManager.MODE_NIGHT_YES AppTheme.LightAppTheme -> UiModeManager.MODE_NIGHT_NO - AppTheme.System -> UiModeManager.MODE_NIGHT_AUTO + AppTheme.System -> UiModeManager.MODE_NIGHT_CUSTOM } internal fun AppTheme.toAppCompatDelegateNightMode() = diff --git a/data/system-features/build.gradle.kts b/data/system-features/build.gradle.kts index 9d4c0f8cb..273175e43 100644 --- a/data/system-features/build.gradle.kts +++ b/data/system-features/build.gradle.kts @@ -1,9 +1,6 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) alias(libs.plugins.hilt) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) } @@ -13,6 +10,6 @@ android { dependencies { implementation(libs.hilt) - implementation(project(module.domain.systemFeatures)) + implementation(projects.domain.systemFeatures) ksp(libs.hilt.compiler) } diff --git a/detekt.yml b/detekt.yml index c780e656f..5370b0b8d 100644 --- a/detekt.yml +++ b/detekt.yml @@ -1,5 +1,120 @@ naming: + active: true FunctionNaming: active: true - ignoreAnnotated: - - Composable + functionPattern: '^[a-z][a-zA-Z0-9]*' + ignoreAnnotated: [ 'Composable' ] + TopLevelPropertyNaming: + active: true + constantPattern: '[A-Z][A-Z0-9_]*' + propertyPattern: '[a-z][A-Za-z0-9]*' + privatePropertyPattern: '(_)?[a-z][A-Za-z0-9]*' + ignoreAnnotated: [ 'Composable' ] + +complexity: + active: true + LongMethod: + active: true + allowedLines: 60 + LongParameterList: + active: true + allowedFunctionParameters: 10 + ignoreDefaultParameters: true + TooManyFunctions: + active: true + allowedFunctionsPerFile: 30 + ignoreDeprecated: true + ignorePrivate: true + ignoreAnnotatedFunctions: [ 'Composable' ] + +style: + active: true + MagicNumber: + active: true + ignoreNumbers: [ '-1', '0', '1', '2', '4', '8', '12', '16', '24', '32', '64' ] + ignoreAnnotated: [ 'Preview', 'Composable' ] + MaxLineLength: + active: true + maxLineLength: 120 + UnusedPrivateFunction: + active: true + ignoreAnnotated: [ 'Preview' ] + UnusedPrivateProperty: + active: true + UnusedParameter: + active: true + +comments: + active: true + +Compose: + active: true + ComposableNaming: + active: true + CompositionLocalAllowlist: + active: false + CompositionLocalNaming: + active: true + RememberContentMissing: + active: true + RememberMissing: + active: true + ModifierMissing: + active: false + ModifierNotUsedAtRoot: + active: false + ModifierWithoutDefault: + active: false + ViewModelInjection: + active: false + +potential-bugs: + active: true + NullableToStringCall: + active: true + ImplicitDefaultLocale: + active: true + UnreachableCatchBlock: + active: true + UnsafeCast: + active: true + InvalidRange: + active: true + +exceptions: + active: true + +ktlint: + active: true + BackingPropertyNaming: + active: false + Indentation: + active: true + BlankLineBetweenWhenConditions: + active: false + ClassSignature: + active: false + FinalNewline: + active: true + FunctionSignature: + active: false + FunctionExpressionBody: + active: false + ImportOrdering: + active: false + MaximumLineLength: + active: false + NoTrailingSpaces: + active: true + TrailingCommaOnCallSite: + active: false + TrailingCommaOnDeclarationSite: + active: false + +empty-blocks: + active: true + +performance: + active: true + SpreadOperator: + active: true diff --git a/di/build.gradle.kts b/di/build.gradle.kts index fc73bc94c..f9356ed51 100644 --- a/di/build.gradle.kts +++ b/di/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) } @@ -11,12 +8,12 @@ android { } dependencies { - implementation(project(module.domain.rollerCoasters)) + implementation(projects.domain.rollerCoasters) implementation(libs.hilt) - implementation(project(module.data.systemFeatures)) - implementation(project(module.data.rollerCoasters)) - implementation(project(module.data.settings)) - implementation(project(module.domain.systemFeatures)) - implementation(project(module.domain.settings)) + implementation(projects.data.systemFeatures) + implementation(projects.data.rollerCoasters) + implementation(projects.data.settings) + implementation(projects.domain.systemFeatures) + implementation(projects.domain.settings) ksp(libs.hilt.compiler) } diff --git a/domain/fixtures/build.gradle.kts b/domain/fixtures/build.gradle.kts index 9ad7a9edd..fe518f324 100644 --- a/domain/fixtures/build.gradle.kts +++ b/domain/fixtures/build.gradle.kts @@ -1,9 +1,7 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.kotlin.jvm) } dependencies { - implementation(project(module.domain.rollerCoasters)) + implementation(projects.domain.rollerCoasters) } diff --git a/domain/fixtures/detekt-baseline.xml b/domain/fixtures/detekt-baseline.xml new file mode 100644 index 000000000..5a45f21eb --- /dev/null +++ b/domain/fixtures/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + Indentation:RollerCoasterConstantsFixtures.kt: + + diff --git a/domain/roller-coasters/build.gradle.kts b/domain/roller-coasters/build.gradle.kts index 1b4b0caea..c78c4421e 100644 --- a/domain/roller-coasters/build.gradle.kts +++ b/domain/roller-coasters/build.gradle.kts @@ -1,13 +1,11 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.kotlin.jvm) } dependencies { api(libs.result) - api(project(module.domain.model)) - api(project(module.domain.settings)) + api(projects.domain.model) + api(projects.domain.settings) implementation(libs.javax.inject) implementation(libs.kotlin.coroutines.core) implementation(libs.paging.common) @@ -19,5 +17,5 @@ dependencies { testImplementation(libs.paging.common) testImplementation(libs.paging.testing) testImplementation(libs.truth) - testImplementation(project(module.domain.fixtures)) + testImplementation(projects.domain.fixtures) } diff --git a/domain/settings/build.gradle.kts b/domain/settings/build.gradle.kts index b90b96161..dc946e731 100644 --- a/domain/settings/build.gradle.kts +++ b/domain/settings/build.gradle.kts @@ -1,5 +1,3 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.kotlin.jvm) } @@ -8,8 +6,8 @@ dependencies { implementation(libs.annotations) implementation(libs.javax.inject) implementation(libs.kotlin.coroutines.core) - implementation(project(module.domain.systemFeatures)) - implementation(project(module.domain.locales)) + implementation(projects.domain.systemFeatures) + implementation(projects.domain.locales) testImplementation(libs.junit) testImplementation(libs.kotlin.coroutines.test) diff --git a/domain/settings/detekt-baseline.xml b/domain/settings/detekt-baseline.xml new file mode 100644 index 000000000..0cab39940 --- /dev/null +++ b/domain/settings/detekt-baseline.xml @@ -0,0 +1,12 @@ + + + + + Filename:ResolvedMeasurementSystemMapperTest.kt:com.sottti.roller.coasters.domain.settings.mapper.ResolvedMeasurementSystemMapperTest.kt + Indentation:GetResolvedColorContrast.kt:GetResolvedColorContrast$ + Indentation:ObserveResolvedColorContrast.kt:ObserveResolvedColorContrast$ + MatchingDeclarationName:ResolvedMeasurementSystemMapperTest.kt:MeasurementSystemMapperTest + NoConsecutiveBlankLines:GetResolvedColorContrastTest.kt:GetResolvedColorContrastTest$ + TooManyFunctions:SettingsRepository.kt:SettingsRepository + + diff --git a/domain/settings/src/test/kotlin/com/sottti/roller/coasters/domain/settings/usecase/colorContrast/ObserveResolvedColorContrastTest.kt b/domain/settings/src/test/kotlin/com/sottti/roller/coasters/domain/settings/usecase/colorContrast/ObserveResolvedColorContrastTest.kt index c078b6d78..58ced2624 100644 --- a/domain/settings/src/test/kotlin/com/sottti/roller/coasters/domain/settings/usecase/colorContrast/ObserveResolvedColorContrastTest.kt +++ b/domain/settings/src/test/kotlin/com/sottti/roller/coasters/domain/settings/usecase/colorContrast/ObserveResolvedColorContrastTest.kt @@ -8,7 +8,6 @@ import com.sottti.roller.coasters.domain.settings.model.colorContrast.AppColorCo import com.sottti.roller.coasters.domain.settings.model.colorContrast.ResolvedColorContrast import com.sottti.roller.coasters.domain.settings.model.colorContrast.SystemColorContrast import com.sottti.roller.coasters.domain.settings.repository.SettingsRepository -import io.mockk.coEvery import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.flow.flowOf @@ -25,6 +24,9 @@ internal class ObserveResolvedColorContrastTest { @Before fun setUp() { settingsRepository = mockk() + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.StandardContrast) observeResolvedColorContrast = ObserveResolvedColorContrast(settingsRepository) } @@ -52,9 +54,9 @@ internal class ObserveResolvedColorContrastTest { @Test fun `emits resolved high contrast when system high contrast is observed`() = runTest { every { settingsRepository.observeAppColorContrast() } returns flowOf(System) - coEvery { - settingsRepository.getSystemColorContrast() - } returns SystemColorContrast.HighContrast + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.HighContrast) val emissions = observeResolvedColorContrast().toList() assertThat(emissions).containsExactly(ResolvedColorContrast.HighContrast) } @@ -62,9 +64,9 @@ internal class ObserveResolvedColorContrastTest { @Test fun `emits resolved low contrast when system low contrast is observed`() = runTest { every { settingsRepository.observeAppColorContrast() } returns flowOf(System) - coEvery { - settingsRepository.getSystemColorContrast() - } returns SystemColorContrast.LowContrast + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.LowContrast) val emissions = observeResolvedColorContrast().toList() assertThat(emissions).containsExactly(ResolvedColorContrast.LowContrast) } @@ -72,9 +74,9 @@ internal class ObserveResolvedColorContrastTest { @Test fun `emits resolved medium contrast when system medium contrast is observed`() = runTest { every { settingsRepository.observeAppColorContrast() } returns flowOf(System) - coEvery { - settingsRepository.getSystemColorContrast() - } returns SystemColorContrast.MediumContrast + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.MediumContrast) val emissions = observeResolvedColorContrast().toList() assertThat(emissions).containsExactly(ResolvedColorContrast.MediumContrast) } @@ -82,9 +84,9 @@ internal class ObserveResolvedColorContrastTest { @Test fun `emits resolved standard contrast when system standard contrast is observed`() = runTest { every { settingsRepository.observeAppColorContrast() } returns flowOf(System) - coEvery { - settingsRepository.getSystemColorContrast() - } returns SystemColorContrast.StandardContrast + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.StandardContrast) val emissions = observeResolvedColorContrast().toList() assertThat(emissions).containsExactly(ResolvedColorContrast.StandardContrast) } @@ -94,9 +96,9 @@ internal class ObserveResolvedColorContrastTest { every { settingsRepository.observeAppColorContrast() } returns flowOf(HighContrast, System) - coEvery { - settingsRepository.getSystemColorContrast() - } returns SystemColorContrast.MediumContrast + every { + settingsRepository.observeSystemColorContrast() + } returns flowOf(SystemColorContrast.MediumContrast, SystemColorContrast.MediumContrast) val emissions = observeResolvedColorContrast().toList() assertThat(emissions).containsExactly( ResolvedColorContrast.HighContrast, diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 44265d655..c2fc707d2 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,43 +1,45 @@ [versions] -agp = "8.13.0" -annotations = "1.9.1" +agp = "9.2.1" +annotations = "1.10.0" appcompat = "1.7.1" -browser = "1.9.0" -coil = "3.3.0" -compileSdk = "36" -compose-bom = "2025.10.00" -compose-maps = "6.12.1" -compose-navigation2 = "2.9.5" -compose-navigation3 = "1.0.0-beta01" -core = "1.17.0" -coroutines = "1.10.2" -datastore-preferences = "1.1.7" -gradle-versions = "0.53.0" -hilt = "2.57.2" +browser = "1.10.0" +coil = "3.4.0" +compileSdk = "37" +compose-bom = "2026.05.02" +compose-maps = "8.3.0" +compose-navigation2 = "2.9.8" +compose-navigation3 = "1.1.2" +composeRules = "0.5.9" +core = "1.19.0" +coroutines = "1.11.0" +datastore-preferences = "1.2.1" +detekt = "2.0.0-alpha.3" +gradle-versions = "0.54.0" +hilt = "2.59.2" hilt-navigation-compose = "1.3.0" hilt-work = "1.3.0" javax-inject = "1" junit = "4.13.2" junit-ext = "1.3.0" -kotlin = "2.2.20" -kotlin-ksp = "2.2.20-2.0.3" -kotlinSerialization = "1.9.0" -ktor = "3.3.1" -lifecycle = "2.9.4" -material = "1.13.0" +kotlin = "2.3.21" +kotlin-ksp = "2.3.9" +kotlinSerialization = "1.11.0" +kover = "0.9.8" +ktor = "3.5.0" +lifecycle = "2.10.0" +material = "1.14.0" minSdk = "26" -mockk = "1.14.6" -paging = "3.3.6" -paparazzi = "2.0.0-alpha02" -result = "2.1.0" -room = "2.8.2" -secrets = "2.0.1" -splashscreen = "1.2.0-rc01" +mockk = "1.14.11" +paging = "3.5.0" +paparazzi = "2.0.0-alpha05" +result = "2.3.1" +room = "2.8.4" +splashscreen = "1.2.0" targetSdk = "36" test-runner = "1.7.0" truth = "1.4.5" turbine = "1.2.1" -work = "2.10.5" +work = "2.11.2" [libraries] annotations = { group = "androidx.annotation", name = "annotation", version.ref = "annotations" } @@ -53,13 +55,17 @@ compose-navigation2 = { group = "androidx.navigation", name = "navigation-compos compose-navigation3-runtime = { group = "androidx.navigation3", name = "navigation3-runtime", version.ref = "compose-navigation3" } compose-navigation3-ui = { group = "androidx.navigation3", name = "navigation3-ui", version.ref = "compose-navigation3" } compose-runtime = { group = "androidx.compose.runtime", name = "runtime" } +compose-runtime-saveable = { group = "androidx.compose.runtime", name = "runtime-saveable" } compose-ui = { group = "androidx.compose.ui", name = "ui" } compose-ui-test-junit4 = { group = "androidx.compose.ui", name = "ui-test-junit4" } compose-ui-test-manifest = { group = "androidx.compose.ui", name = "ui-test-manifest" } compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } compose-window-size = { group = "androidx.compose.material3", name = "material3-window-size-class" } core = { group = "androidx.core", name = "core-ktx", version.ref = "core" } datastore-preferences = { group = "androidx.datastore", name = "datastore-preferences", version.ref = "datastore-preferences" } +detekt-compose = { group = "io.nlopez.compose.rules", name = "detekt", version.ref = "composeRules" } +detekt-formatting = { group = "dev.detekt", name = "detekt-rules-ktlint-wrapper", version.ref = "detekt" } hilt = { group = "com.google.dagger", name = "hilt-android", version.ref = "hilt" } hilt-compiler = { group = "com.google.dagger", name = "hilt-compiler", version.ref = "hilt" } hilt-navigation-compose = { group = "androidx.hilt", name = "hilt-navigation-compose", version.ref = "hilt-navigation-compose" } @@ -100,12 +106,12 @@ work-runtime = { group = "androidx.work", name = "work-runtime-ktx", version.ref [plugins] android-application = { id = "com.android.application", version.ref = "agp" } android-library = { id = "com.android.library", version.ref = "agp" } +detekt = { id = "dev.detekt", version.ref = "detekt" } gradle-versions = { id = "com.github.ben-manes.versions", version.ref = "gradle-versions" } hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-compose = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-ksp = { id = "com.google.devtools.ksp", version.ref = "kotlin-ksp" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" } paparazzi = { id = "app.cash.paparazzi", version.ref = "paparazzi" } -secrets = { id = "com.google.android.libraries.mapsplatform.secrets-gradle-plugin", version.ref = "secrets" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 1b33c55ba..b1b8ef56b 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a3f9a9a09..e74c8700b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-rc-1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-all.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 23d15a936..b9bb139f7 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright Β© 2015-2021 the original authors. +# Copyright Β© 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH="\\\"\\\"" # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" diff --git a/gradlew.bat b/gradlew.bat index 5eed7ee84..aa5f10b06 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -23,8 +23,8 @@ @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -51,7 +51,7 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -65,30 +65,18 @@ echo. 1>&2 echo Please set the JAVA_HOME variable in your environment to match the 1>&2 echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH= @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/presentation/about-me/build.gradle.kts b/presentation/about-me/build.gradle.kts index fdfbf288c..9132351e5 100644 --- a/presentation/about-me/build.gradle.kts +++ b/presentation/about-me/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -15,29 +12,30 @@ android { dependencies { implementation(libs.compose.foundation) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.cardGrid)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.heroImage)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.images)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.format)) - implementation(project(module.presentation.navigationExternal)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.topBars)) - implementation(project(module.presentation.utils)) + implementation(projects.presentation.designSystem.cardGrid) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.heroImage) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.images) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.format) + implementation(projects.presentation.navigationExternal) + implementation(projects.presentation.previews) + implementation(projects.presentation.topBars) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) testImplementation(libs.junit) testImplementation(libs.kotlin.coroutines.test) testImplementation(libs.mockk) testImplementation(libs.truth) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/about-me/detekt-baseline.xml b/presentation/about-me/detekt-baseline.xml new file mode 100644 index 000000000..dbf8ad515 --- /dev/null +++ b/presentation/about-me/detekt-baseline.xml @@ -0,0 +1,10 @@ + + + + + Indentation:AboutMeUiContent.kt: + MagicNumber:AboutMeState.kt:Topics$3 + NoEmptyFirstLineInMethodBlock:AboutMeViewModelTest.kt:AboutMeViewModelTest$ + ParameterNaming:AboutMeUi.kt:onListCreated: @Composable (LazyListState, TopAppBarScrollBehavior) -> Unit + + diff --git a/presentation/about-me/src/main/kotlin/com/sottti/roller/coasters/presentation/about/me/ui/AboutMeUiContent.kt b/presentation/about-me/src/main/kotlin/com/sottti/roller/coasters/presentation/about/me/ui/AboutMeUiContent.kt index 435a48787..dec546f4c 100644 --- a/presentation/about-me/src/main/kotlin/com/sottti/roller/coasters/presentation/about/me/ui/AboutMeUiContent.kt +++ b/presentation/about-me/src/main/kotlin/com/sottti/roller/coasters/presentation/about/me/ui/AboutMeUiContent.kt @@ -52,6 +52,7 @@ import com.sottti.roller.coasters.presentation.design.system.text.Text import com.sottti.roller.coasters.presentation.top.bars.ui.MainTopBar import com.sottti.roller.coasters.presentation.utils.Spacer import com.sottti.roller.coasters.presentation.utils.override +import com.sottti.roller.coasters.presentation.utils.plus @Composable @OptIn(ExperimentalMaterial3Api::class) diff --git a/presentation/about-me/src/main/res/values-es-rES/strings.xml b/presentation/about-me/src/main/res/values-es-rES/strings.xml index 891af9a13..6220645f2 100644 --- a/presentation/about-me/src/main/res/values-es-rES/strings.xml +++ b/presentation/about-me/src/main/res/values-es-rES/strings.xml @@ -26,6 +26,4 @@ PortuguΓ©s El espaΓ±ol es mi lengua materna. El espaΓ±ol y el gallego son las lenguas oficiales en Galicia, donde nacΓ­. AprendΓ­ ambos desde joven y los estudiΓ© durante toda mi etapa escolar. EspaΓ±ol - Ha ocurrido un error. Lo solucionaremos lo antes posible. - diff --git a/presentation/about-me/src/main/res/values-gl/strings.xml b/presentation/about-me/src/main/res/values-gl/strings.xml index 3778437d4..0e973802c 100644 --- a/presentation/about-me/src/main/res/values-gl/strings.xml +++ b/presentation/about-me/src/main/res/values-gl/strings.xml @@ -26,5 +26,4 @@ PortuguΓ©s O espaΓ±ol Γ© a miΓ±a lingua nai. O espaΓ±ol e o galego son as linguas oficiais en Galicia, onde nacΓ­n. AprendΓ­n ambos dende novo e estudeinos durante toda a miΓ±a etapa escolar. EspaΓ±ol - Produciuse un erro. ArranxarΓ©molo canto antes. diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[0].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[0].png index fc36f2bdb..92fd99eea 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[0].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[10].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[10].png index 062ef3703..452a5d152 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[10].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[11].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[11].png index 49514588d..3224838e9 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[11].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[12].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[12].png index d88d38367..e0769eb72 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[12].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[12].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[13].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[13].png index 0f73b0c4a..a47c2e4ad 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[13].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[13].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[14].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[14].png index a3fc9361d..3f820d8c4 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[14].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[14].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[15].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[15].png index e5a3c70cd..d40572861 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[15].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[15].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[16].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[16].png index a145b7979..442322ac0 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[16].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[16].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[17].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[17].png index 4fa955266..bca4f42ba 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[17].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[17].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[18].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[18].png index 4bb822d63..8cfe08733 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[18].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[18].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[19].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[19].png index 3f9656db1..416522ec7 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[19].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[19].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[1].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[1].png index 293a4bc85..7c7130893 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[1].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[20].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[20].png index cf9c23085..f26af906e 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[20].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[20].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[21].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[21].png index 694277ba0..677d77a89 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[21].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[21].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[22].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[22].png index d826d3801..4f434fd85 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[22].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[22].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[23].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[23].png index 6bb720b15..7bc63c772 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[23].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[23].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[24].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[24].png index 01806d6f9..09a9ddc31 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[24].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[24].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[25].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[25].png index 48a15e009..a528c994e 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[25].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[25].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[2].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[2].png index 570d964f1..438a085a8 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[2].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[3].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[3].png index b47c432f7..b3963b003 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[3].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[4].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[4].png index 8932d52a7..d8ad0b91e 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[4].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[5].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[5].png index 7620ee748..840de57e4 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[5].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[6].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[6].png index a5b52f71f..860375a40 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[6].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[7].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[7].png index 25ef87ab3..db6c3ecd8 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[7].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[8].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[8].png index be0bf5fba..c616c9abc 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[8].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[9].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[9].png index 4b34b2871..421a8119d 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[9].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiBottomSheetContentSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[0].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[0].png index a0e1c8569..48a75750c 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[0].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[1].png b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[1].png index 70b5db29b..8a4fb0652 100644 Binary files a/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[1].png and b/presentation/about-me/src/test/snapshots/images/com.sottti.roller.coasters.presentation.about.me.ui_AboutMeUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/app-shell/build.gradle.kts b/presentation/app-shell/build.gradle.kts new file mode 100644 index 000000000..70865b8d6 --- /dev/null +++ b/presentation/app-shell/build.gradle.kts @@ -0,0 +1,35 @@ +plugins { + alias(libs.plugins.android.library) + alias(libs.plugins.hilt) + alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.ksp) + alias(libs.plugins.paparazzi) +} + +android { + namespace = "com.sottti.roller.coasters.presentation.app.shell" +} + +dependencies { + implementation(libs.appcompat) + implementation(libs.compose.material) + implementation(libs.compose.navigation2) + implementation(libs.hilt) + implementation(libs.hilt.navigation.compose) + implementation(platform(libs.compose.bom)) + implementation(projects.domain.settings) + implementation(projects.presentation.aboutMe) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.explore) + implementation(projects.presentation.favourites) + implementation(projects.presentation.navigation) + implementation(projects.presentation.previews) + implementation(projects.presentation.rollerCoasterDetails) + implementation(projects.presentation.search) + implementation(projects.presentation.settings) + implementation(projects.presentation.utils) + ksp(libs.hilt.compiler) + testImplementation(projects.presentation.paparazzi) +} diff --git a/presentation/app-shell/detekt-baseline.xml b/presentation/app-shell/detekt-baseline.xml new file mode 100644 index 000000000..7af920d2e --- /dev/null +++ b/presentation/app-shell/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + LambdaParameterInRestartableEffect:AppShellUiNavigationBar.kt:onAction: (AppShellActions) -> Unit + MutableParams:AppShellUiNavigationBar.kt:scrollToTopCallbacks: MutableMap<NavigationDestination, () -> Unit> + + diff --git a/presentation/home/src/main/AndroidManifest.xml b/presentation/app-shell/src/main/AndroidManifest.xml similarity index 88% rename from presentation/home/src/main/AndroidManifest.xml rename to presentation/app-shell/src/main/AndroidManifest.xml index e1a30aefa..6a1d0a261 100644 --- a/presentation/home/src/main/AndroidManifest.xml +++ b/presentation/app-shell/src/main/AndroidManifest.xml @@ -3,7 +3,7 @@ Icons.Explore.filled @@ -46,7 +46,7 @@ private fun explore( destination = NavigationDestination.Explore, ) -private fun search() = HomeNavigationBarItemState( +private fun search() = AppShellNavigationBarItemState( labelResId = R.string.navigation_bar_item_label_search, icon = Icons.Search.outlined, destination = NavigationDestination.Search, @@ -54,7 +54,7 @@ private fun search() = HomeNavigationBarItemState( private fun favourites( selectedItem: NavigationDestination, -) = HomeNavigationBarItemState( +) = AppShellNavigationBarItemState( labelResId = R.string.navigation_bar_item_label_favourites, icon = when (selectedItem) { NavigationDestination.Favourites -> Icons.Star.filled @@ -65,7 +65,7 @@ private fun favourites( private fun aboutMe( selectedItem: NavigationDestination, -) = HomeNavigationBarItemState( +) = AppShellNavigationBarItemState( labelResId = R.string.navigation_bar_item_label_about_me, icon = when (selectedItem) { NavigationDestination.AboutMe -> Icons.AccountCircle.filled diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeMapper.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellMapper.kt similarity index 89% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeMapper.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellMapper.kt index 8fed70073..6a8ff6fe4 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeMapper.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellMapper.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.data +package com.sottti.roller.coasters.presentation.app.shell.data import com.sottti.roller.coasters.domain.settings.model.colorContrast.ResolvedColorContrast import com.sottti.roller.coasters.presentation.design.system.colors.color.ColorContrast diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeReducer.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellReducer.kt similarity index 57% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeReducer.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellReducer.kt index ebe9b386e..822ac4032 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeReducer.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellReducer.kt @@ -1,19 +1,19 @@ -package com.sottti.roller.coasters.presentation.home.data +package com.sottti.roller.coasters.presentation.app.shell.data import com.sottti.roller.coasters.domain.settings.model.colorContrast.ResolvedColorContrast import com.sottti.roller.coasters.domain.settings.model.dynamicColor.ResolvedDynamicColor import com.sottti.roller.coasters.domain.settings.model.theme.ResolvedTheme -import com.sottti.roller.coasters.presentation.home.model.HomeActions -import com.sottti.roller.coasters.presentation.home.model.HomeActions.DestinationSelected -import com.sottti.roller.coasters.presentation.home.model.HomeActions.NoOp -import com.sottti.roller.coasters.presentation.home.model.HomeState +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions.DestinationSelected +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions.NoOp +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellState -internal fun HomeState.reduce( +internal fun AppShellState.reduce( resolvedColorContrast: ResolvedColorContrast, resolvedDynamicColor: ResolvedDynamicColor, resolvedTheme: ResolvedTheme, - stateMutationAction: HomeActions, -): HomeState = copy( + stateMutationAction: AppShellActions, +): AppShellState = copy( colorContrast = resolvedColorContrast, dynamicColor = resolvedDynamicColor, theme = resolvedTheme, diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeViewModel.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellViewModel.kt similarity index 76% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeViewModel.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellViewModel.kt index 582879e52..47d4316ec 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/data/HomeViewModel.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/data/AppShellViewModel.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.data +package com.sottti.roller.coasters.presentation.app.shell.data import androidx.lifecycle.ViewModel import com.sottti.roller.coasters.domain.settings.model.colorContrast.ResolvedColorContrast @@ -8,9 +8,9 @@ import com.sottti.roller.coasters.domain.settings.usecase.colorContrast.ObserveR import com.sottti.roller.coasters.domain.settings.usecase.dynamicColor.ObserveResolvedDynamicColor import com.sottti.roller.coasters.domain.settings.usecase.theme.GetSystemTheme import com.sottti.roller.coasters.domain.settings.usecase.theme.ObserveResolvedTheme -import com.sottti.roller.coasters.presentation.home.model.HomeActions -import com.sottti.roller.coasters.presentation.home.model.HomeActions.NoOp -import com.sottti.roller.coasters.presentation.home.model.HomeState +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions.NoOp +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellState import com.sottti.roller.coasters.presentation.utils.stateInWhileSubscribed import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableSharedFlow @@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.scan import javax.inject.Inject @HiltViewModel -internal class HomeViewModel @Inject constructor( +internal class AppShellViewModel @Inject constructor( getSystemThemeTheme: GetSystemTheme, observeResolvedColorContrast: ObserveResolvedColorContrast, observeResolvedDynamicColor: ObserveResolvedDynamicColor, @@ -31,8 +31,8 @@ internal class HomeViewModel @Inject constructor( val initialState = initialState(getSystemThemeTheme()) - private val actions = MutableSharedFlow(extraBufferCapacity = 64) - val state: StateFlow = combine( + private val actions = MutableSharedFlow(extraBufferCapacity = 64) + val state: StateFlow = combine( flow = observeResolvedColorContrast(), flow2 = observeResolvedDynamicColor(), flow3 = observeResolvedTheme(), @@ -48,16 +48,16 @@ internal class HomeViewModel @Inject constructor( .drop(1) .stateInWhileSubscribed(initialValue = initialState) - internal val onAction: (HomeActions) -> Unit = ::processAction - private fun processAction(action: HomeActions) = actions.tryEmit(action) + internal val onAction: (AppShellActions) -> Unit = ::processAction + private fun processAction(action: AppShellActions) = actions.tryEmit(action) private val reducer: ( resolvedColorContrast: ResolvedColorContrast, resolvedDynamicColor: ResolvedDynamicColor, resolvedTheme: ResolvedTheme, - stateMutationAction: HomeActions, - ) -> (HomeState) -> HomeState = + stateMutationAction: AppShellActions, + ) -> (AppShellState) -> AppShellState = { resolvedColorContrast, resolvedDynamicColor, resolvedTheme, stateMutationAction -> - { previous: HomeState -> + { previous: AppShellState -> previous.reduce( resolvedColorContrast = resolvedColorContrast, resolvedDynamicColor = resolvedDynamicColor, diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeActions.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellActions.kt similarity index 59% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeActions.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellActions.kt index 7b9890f31..88f2c0756 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeActions.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellActions.kt @@ -1,15 +1,15 @@ -package com.sottti.roller.coasters.presentation.home.model +package com.sottti.roller.coasters.presentation.app.shell.model import androidx.compose.runtime.Immutable import com.sottti.roller.coasters.presentation.navigation.NavigationDestination @Immutable -internal sealed interface HomeActions { +internal sealed interface AppShellActions { @Immutable data class DestinationSelected( val destination: NavigationDestination, - ) : HomeActions + ) : AppShellActions @Immutable - data object NoOp : HomeActions + data object NoOp : AppShellActions } diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeState.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellState.kt similarity index 72% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeState.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellState.kt index ef1f2d48e..929b4d6a2 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/model/HomeState.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/model/AppShellState.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.model +package com.sottti.roller.coasters.presentation.app.shell.model import androidx.annotation.StringRes import androidx.compose.runtime.Immutable @@ -9,21 +9,21 @@ import com.sottti.roller.coasters.presentation.design.system.icons.model.IconSta import com.sottti.roller.coasters.presentation.navigation.NavigationDestination @Immutable -internal data class HomeState( +internal data class AppShellState( val colorContrast: ResolvedColorContrast, val dynamicColor: ResolvedDynamicColor, val theme: ResolvedTheme, - val navigationBarItems: HomeNavigationBarState, + val navigationBarItems: AppShellNavigationBarState, ) @Immutable -internal data class HomeNavigationBarState( - val items: List, +internal data class AppShellNavigationBarState( + val items: List, val selectedItem: NavigationDestination, ) @Immutable -internal data class HomeNavigationBarItemState( +internal data class AppShellNavigationBarItemState( @StringRes val labelResId: Int, val destination: NavigationDestination, val icon: IconState, diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeActivity.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellActivity.kt similarity index 67% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeActivity.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellActivity.kt index 3ff223c2b..dbcb5614a 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeActivity.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellActivity.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.ui +package com.sottti.roller.coasters.presentation.app.shell.ui import android.content.Context import android.content.Intent @@ -9,15 +9,15 @@ import androidx.activity.viewModels import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.sottti.roller.coasters.domain.settings.model.theme.ResolvedTheme +import com.sottti.roller.coasters.presentation.app.shell.data.AppShellViewModel +import com.sottti.roller.coasters.presentation.app.shell.data.toColorContrast import com.sottti.roller.coasters.presentation.design.system.themes.RollerCoastersTheme -import com.sottti.roller.coasters.presentation.home.data.HomeViewModel -import com.sottti.roller.coasters.presentation.home.data.toColorContrast import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint -internal open class HomeActivity : AppCompatActivity() { +internal open class AppShellActivity : AppCompatActivity() { - private val viewModel: HomeViewModel by viewModels() + private val viewModel: AppShellViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge() @@ -29,13 +29,13 @@ internal open class HomeActivity : AppCompatActivity() { useDynamicColor = state.dynamicColor.enabled, useDarkTheme = state.theme == ResolvedTheme.DarkResolvedTheme, ) { - HomeUi(state = state, onAction = viewModel.onAction) + AppShellUi(state = state, onAction = viewModel.onAction) } } } } } -public fun startHomeActivity(context: Context) { - context.startActivity(Intent(context, HomeActivity::class.java)) +public fun startAppShellActivity(context: Context) { + context.startActivity(Intent(context, AppShellActivity::class.java)) } diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUi.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUi.kt similarity index 77% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUi.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUi.kt index 5993a2446..fb0cc416b 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUi.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUi.kt @@ -1,30 +1,29 @@ -package com.sottti.roller.coasters.presentation.home.ui +package com.sottti.roller.coasters.presentation.app.shell.ui import androidx.compose.runtime.Composable import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import com.sottti.roller.coasters.presentation.home.model.HomeActions -import com.sottti.roller.coasters.presentation.home.model.HomeState -import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Home +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellState +import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.AppShell import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.RollerCoasterDetails import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Settings import com.sottti.roller.coasters.presentation.roller.coaster.details.ui.RollerCoasterDetailsUi import com.sottti.roller.coasters.presentation.settings.ui.SettingsUi @Composable -internal fun HomeUi( - state: HomeState, - onAction: (HomeActions) -> Unit, - - ) { +internal fun AppShellUi( + state: AppShellState, + onAction: (AppShellActions) -> Unit, +) { val rootNavController = rememberNavController() NavHost( navController = rootNavController, - startDestination = Home, + startDestination = AppShell, ) { - composable { + composable { NavigationBar( onAction = onAction, onNavigateToRollerCoaster = { rollerCoasterId -> diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBar.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBar.kt similarity index 70% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBar.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBar.kt index 6a5950b5c..41ce9ff65 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBar.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBar.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.ui +package com.sottti.roller.coasters.presentation.app.shell.ui import androidx.compose.material3.NavigationBar import androidx.compose.material3.NavigationBarItem @@ -6,15 +6,15 @@ import androidx.compose.runtime.Composable import com.sottti.roller.coasters.presentation.design.system.icons.ui.icon.Icon import com.sottti.roller.coasters.presentation.design.system.text.Text import com.sottti.roller.coasters.presentation.design.system.themes.RollerCoastersTheme -import com.sottti.roller.coasters.presentation.home.data.navigationBarItems -import com.sottti.roller.coasters.presentation.home.model.HomeNavigationBarItemState -import com.sottti.roller.coasters.presentation.home.model.HomeNavigationBarState +import com.sottti.roller.coasters.presentation.app.shell.data.navigationBarItems +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellNavigationBarItemState +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellNavigationBarState import com.sottti.roller.coasters.presentation.previews.RollerCoastersPreview @Composable internal fun BottomBar( - navigationBarItems: HomeNavigationBarState, - onNavigationBarItemClick: (item: HomeNavigationBarItemState) -> Unit, + navigationBarItems: AppShellNavigationBarState, + onNavigationBarItemClick: (item: AppShellNavigationBarItemState) -> Unit, ) { NavigationBar { navigationBarItems.items.forEach { item -> diff --git a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiNavigationBar.kt b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiNavigationBar.kt similarity index 87% rename from presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiNavigationBar.kt rename to presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiNavigationBar.kt index fe6308afb..beccf3039 100644 --- a/presentation/home/src/main/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiNavigationBar.kt +++ b/presentation/app-shell/src/main/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiNavigationBar.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.ui +package com.sottti.roller.coasters.presentation.app.shell.ui import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.PaddingValues @@ -21,13 +21,13 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.currentBackStackEntryAsState import androidx.navigation.compose.rememberNavController +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellActions.DestinationSelected +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellNavigationBarItemState +import com.sottti.roller.coasters.presentation.app.shell.model.AppShellState import com.sottti.roller.coasters.presentation.about.me.ui.AboutMeUi import com.sottti.roller.coasters.presentation.explore.ui.ExploreUi import com.sottti.roller.coasters.presentation.favourites.ui.FavouritesUi -import com.sottti.roller.coasters.presentation.home.model.HomeActions -import com.sottti.roller.coasters.presentation.home.model.HomeActions.DestinationSelected -import com.sottti.roller.coasters.presentation.home.model.HomeNavigationBarItemState -import com.sottti.roller.coasters.presentation.home.model.HomeState import com.sottti.roller.coasters.presentation.navigation.NavigationDestination import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.AboutMe import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Explore @@ -39,10 +39,10 @@ import com.sottti.roller.coasters.presentation.search.ui.SearchUi @Composable @OptIn(ExperimentalMaterial3Api::class) internal fun NavigationBar( - onAction: (HomeActions) -> Unit, + onAction: (AppShellActions) -> Unit, onNavigateToRollerCoaster: (Int) -> Unit, onNavigateToSettings: () -> Unit, - state: HomeState, + state: AppShellState, ) { val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) var bottomSheetContent by remember { @@ -74,21 +74,21 @@ internal fun NavigationBar( bottomBar = { BottomBar( navigationBarItems = state.navigationBarItems, - onNavigationBarItemClick = { homeNavigationBarItem -> - val destination = homeNavigationBarItem.destination + onNavigationBarItemClick = { appShellNavigationBarItem -> + val destination = appShellNavigationBarItem.destination when (selectedTab) { destination -> scrollToTopCallbacks[destination]?.invoke() else -> { selectedTab = destination onAction(DestinationSelected(destination)) - navController.navigateTo(homeNavigationBarItem) + navController.navigateTo(appShellNavigationBarItem) } } }, ) }, ) { padding -> - HomeNavHost( + AppShellNavHost( navController = navController, onNavigateToRollerCoaster = onNavigateToRollerCoaster, onNavigateToSettings = onNavigateToSettings, @@ -109,7 +109,7 @@ internal fun NavigationBar( } @Composable -private fun HomeNavHost( +private fun AppShellNavHost( navController: NavHostController, startDestination: Explore, padding: PaddingValues, @@ -159,9 +159,9 @@ private fun HomeNavHost( } private fun NavHostController.navigateTo( - homeNavigationBarItemState: HomeNavigationBarItemState, + appShellNavigationBarItemState: AppShellNavigationBarItemState, ) { - navigate(homeNavigationBarItemState.destination) { + navigate(appShellNavigationBarItemState.destination) { popUpTo(graph.startDestinationId) { saveState = true } launchSingleTop = true restoreState = true diff --git a/presentation/home/src/main/res/values-es-rES/strings.xml b/presentation/app-shell/src/main/res/values-es-rES/strings.xml similarity index 100% rename from presentation/home/src/main/res/values-es-rES/strings.xml rename to presentation/app-shell/src/main/res/values-es-rES/strings.xml diff --git a/presentation/home/src/main/res/values-gl/strings.xml b/presentation/app-shell/src/main/res/values-gl/strings.xml similarity index 100% rename from presentation/home/src/main/res/values-gl/strings.xml rename to presentation/app-shell/src/main/res/values-gl/strings.xml diff --git a/presentation/home/src/main/res/values/strings.xml b/presentation/app-shell/src/main/res/values/strings.xml similarity index 100% rename from presentation/home/src/main/res/values/strings.xml rename to presentation/app-shell/src/main/res/values/strings.xml diff --git a/presentation/home/src/test/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBarUiSnapshotTest.kt b/presentation/app-shell/src/test/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBarUiSnapshotTest.kt similarity index 87% rename from presentation/home/src/test/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBarUiSnapshotTest.kt rename to presentation/app-shell/src/test/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBarUiSnapshotTest.kt index 8b03e65be..6cb50bfd9 100644 --- a/presentation/home/src/test/kotlin/com/sottti/roller/coasters/presentation/home/ui/HomeUiBottomBarUiSnapshotTest.kt +++ b/presentation/app-shell/src/test/kotlin/com/sottti/roller/coasters/presentation/app/shell/ui/AppShellUiBottomBarUiSnapshotTest.kt @@ -1,4 +1,4 @@ -package com.sottti.roller.coasters.presentation.home.ui +package com.sottti.roller.coasters.presentation.app.shell.ui import com.android.ide.common.rendering.api.SessionParams import com.android.resources.NightMode @@ -10,7 +10,7 @@ import org.junit.runner.RunWith import org.junit.runners.Parameterized @RunWith(Parameterized::class) -internal class HomeUiBottomBarUiSnapshotTest( +internal class AppShellUiBottomBarUiSnapshotTest( nightMode: NightMode, ) { diff --git a/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[0].png b/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[0].png new file mode 100644 index 000000000..587d5d747 Binary files /dev/null and b/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[1].png b/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[1].png new file mode 100644 index 000000000..776a1385c Binary files /dev/null and b/presentation/app-shell/src/test/snapshots/images/com.sottti.roller.coasters.presentation.app.shell.ui_AppShellUiBottomBarUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/card-grid/build.gradle.kts b/presentation/design-system/card-grid/build.gradle.kts index d10178bdf..ca17c8b6f 100644 --- a/presentation/design-system/card-grid/build.gradle.kts +++ b/presentation/design-system/card-grid/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -20,14 +17,15 @@ dependencies { debugImplementation(libs.compose.ui.test.manifest) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/card-grid/detekt-baseline.xml b/presentation/design-system/card-grid/detekt-baseline.xml new file mode 100644 index 000000000..0890c6de5 --- /dev/null +++ b/presentation/design-system/card-grid/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + LambdaParameterEventTrailing:CardGrid.kt:onClick: (() -> Unit) + LambdaParameterEventTrailing:CardGrid.kt:onClick: ((Int) -> Unit) + + diff --git a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[0].png b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[0].png index 66fcaf2b2..02b5559c0 100644 Binary files a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[0].png and b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[1].png b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[1].png index 724c3eba2..d2854db18 100644 Binary files a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[1].png and b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_MonoGridSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[0].png b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[0].png index 20c85b4d7..e9902ddc0 100644 Binary files a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[0].png and b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[1].png b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[1].png index 4c8962d2d..94e3461d2 100644 Binary files a/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[1].png and b/presentation/design-system/card-grid/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.card.grid_QuadCardGridSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/chip/build.gradle.kts b/presentation/design-system/chip/build.gradle.kts index cbe448e69..f34a14117 100644 --- a/presentation/design-system/chip/build.gradle.kts +++ b/presentation/design-system/chip/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,12 +9,13 @@ android { } dependencies { - api(project(module.presentation.designSystem.icons)) + api(projects.presentation.designSystem.icons) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[0].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[0].png index 1d51dafce..b91f19df4 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[0].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[10].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[10].png index 234363145..0025bede0 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[10].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[11].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[11].png index e4e03818d..f7a0aaa1d 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[11].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[12].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[12].png index 15ca37612..4c09ee4ae 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[12].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[12].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[13].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[13].png index eab2defce..6e3119b94 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[13].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[13].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[14].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[14].png index aeec258a6..f25173816 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[14].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[14].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[15].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[15].png index 39469c15a..58be1cdda 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[15].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[15].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[16].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[16].png index 98939ae52..5b1372208 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[16].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[16].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[17].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[17].png index 569c603f5..5685b1e69 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[17].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[17].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[18].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[18].png index 04193e132..db6761d30 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[18].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[18].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[19].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[19].png index 6c0e91a04..ff4d9612c 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[19].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[19].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[1].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[1].png index be10cd6c8..124dc7a82 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[1].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[20].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[20].png index 55948fec9..fde693380 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[20].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[20].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[21].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[21].png index 87be58f6d..55088f1bc 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[21].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[21].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[22].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[22].png index 73add9d51..a1d1ffac7 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[22].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[22].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[23].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[23].png index 0738b3fe0..24664d4f2 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[23].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[23].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[24].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[24].png index 39c4dcfd1..e01293efa 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[24].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[24].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[25].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[25].png index 80c336a9f..5e8b53782 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[25].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[25].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[26].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[26].png index 0e468e7c8..26abac41a 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[26].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[26].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[27].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[27].png index b7d7527ce..6b6a63142 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[27].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[27].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[28].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[28].png index f3351909a..7691a5e0c 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[28].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[28].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[29].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[29].png index 4b00f2164..4c9e8800e 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[29].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[29].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[2].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[2].png index 19f5d7668..7c182a062 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[2].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[30].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[30].png index c8f331f2f..9f487fbed 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[30].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[30].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[31].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[31].png index 514b080f5..7240d7045 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[31].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[31].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[32].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[32].png index a7118caab..09d3e61c3 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[32].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[32].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[33].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[33].png index adabe5390..7a31d6543 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[33].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[33].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[34].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[34].png index 34f33e1c0..c643f1aab 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[34].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[34].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[35].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[35].png index 0692b5b80..8a087cd34 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[35].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[35].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[36].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[36].png index 63a748a44..2f02f662f 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[36].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[36].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[37].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[37].png index f9ab27bc2..95347ad47 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[37].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[37].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[38].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[38].png index dd866d89a..8d3f38158 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[38].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[38].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[39].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[39].png index 40520e1ab..fffb5b2d1 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[39].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[39].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[3].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[3].png index 85379ff53..69d0fcca6 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[3].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[40].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[40].png index f3351909a..7691a5e0c 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[40].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[40].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[41].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[41].png index 4b00f2164..4c9e8800e 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[41].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[41].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[42].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[42].png index c8f331f2f..9f487fbed 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[42].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[42].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[43].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[43].png index 514b080f5..7240d7045 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[43].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[43].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[44].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[44].png index c2d60a2d2..5dc7f6d5d 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[44].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[44].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[45].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[45].png index 9ac4e22e8..fa7042970 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[45].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[45].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[46].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[46].png index 56c998270..88c764e72 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[46].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[46].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[47].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[47].png index 300e26a6c..6dfc9bd74 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[47].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[47].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[4].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[4].png index 98939ae52..5b1372208 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[4].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[5].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[5].png index 569c603f5..5685b1e69 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[5].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[6].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[6].png index 04193e132..db6761d30 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[6].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[7].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[7].png index 6c0e91a04..ff4d9612c 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[7].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[8].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[8].png index 32809699e..d6ddf94b5 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[8].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[9].png b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[9].png index f50e8a388..4eb080e4e 100644 Binary files a/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[9].png and b/presentation/design-system/chip/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.chip_ChipSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/design-system/colors/build.gradle.kts b/presentation/design-system/colors/build.gradle.kts index 71385e846..9133cf9d4 100644 --- a/presentation/design-system/colors/build.gradle.kts +++ b/presentation/design-system/colors/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } @@ -11,7 +8,7 @@ android { } dependencies { - api(project(module.domain.locales)) + api(projects.domain.locales) implementation(libs.compose.material) implementation(libs.compose.runtime) implementation(libs.compose.ui) diff --git a/presentation/design-system/colors/detekt-baseline.xml b/presentation/design-system/colors/detekt-baseline.xml new file mode 100644 index 000000000..520cff64d --- /dev/null +++ b/presentation/design-system/colors/detekt-baseline.xml @@ -0,0 +1,31 @@ + + + + + Filename:ResolvedColorContrastMappersTest.kt:com.sottti.roller.coasters.presentation.design.system.colors.mapper.ResolvedColorContrastMappersTest.kt + MatchingDeclarationName:ResolvedColorContrastMappersTest.kt:ColorContrastMappersTest + NoConsecutiveBlankLines:ColorSchemesMapper.kt: + NoConsecutiveBlankLines:ExternalNavigationPrimaryColor.kt: + NoEmptyFirstLineInMethodBlock:ExternalNavigationPrimaryColor.kt: + TopLevelPropertyNaming:LocalColors.kt:internal val LocalColors = staticCompositionLocalOf<ColorScheme> { error("No colors provided. Make sure to wrap your composables in a custom theme.") } + TopLevelPropertyNaming:LocalOpacities.kt:internal val LocalOpacities = staticCompositionLocalOf<Opacities> { error("No opacities provided. Make sure to wrap your composables in a custom theme.") } + TopLevelPropertyNaming:SocialNetworkColors.kt:private val ANDROID_DEVELOPERS_PRIMARY_COLOR_DARK: Color = Color(0xFF000000) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val ANDROID_DEVELOPERS_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val DRIBBBLE_PRIMARY_COLOR_DARK: Color = Color(0xFF000000) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val DRIBBBLE_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val FALLBACK_COLOR_DARK: Color = Color(0xFF000000) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val FALLBACK_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val GITHUB_PRIMARY_COLOR_DARK: Color = Color(0xFF020409) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val GITHUB_PRIMARY_COLOR_LIGHT: Color = Color(0xFFF6F8FA) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val INSTAGRAM_PRIMARY_COLOR_DARK: Color = Color(0xFF000000) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val INSTAGRAM_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val LINKED_IN_PRIMARY_COLOR_DARK: Color = Color(0xFF1E2226) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val LINKED_IN_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val MEDIUM_PRIMARY_COLOR_DARK: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val MEDIUM_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val STACK_OVERFLOW_PRIMARY_COLOR_DARK: Color = Color(0xFF252627) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val STACK_OVERFLOW_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val X_PRIMARY_COLOR_DARK: Color = Color(0xFF000000) + TopLevelPropertyNaming:SocialNetworkColors.kt:private val X_PRIMARY_COLOR_LIGHT: Color = Color(0xFFFFFFFF) + + diff --git a/presentation/design-system/colors/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/colors/color/ColorFactory.kt b/presentation/design-system/colors/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/colors/color/ColorFactory.kt index d38a652b7..60a10fe0a 100644 --- a/presentation/design-system/colors/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/colors/color/ColorFactory.kt +++ b/presentation/design-system/colors/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/colors/color/ColorFactory.kt @@ -1,5 +1,7 @@ package com.sottti.roller.coasters.presentation.design.system.colors.color +import android.os.Build +import androidx.annotation.ChecksSdkIntAtLeast import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.runtime.ReadOnlyComposable @@ -14,7 +16,11 @@ public fun colors( useDarkTheme: Boolean, useDynamicColor: Boolean = false, ): ColorScheme = when { - useDynamicColor -> dynamicColorScheme(useDarkTheme) + useDynamicColor && isDynamicColorAvailable() -> dynamicColorScheme(useDarkTheme) useDarkTheme -> colorContrast.darkColorScheme() else -> colorContrast.lightColorScheme() } + +@ChecksSdkIntAtLeast(api = Build.VERSION_CODES.S) +private fun isDynamicColorAvailable(): Boolean = + Build.VERSION.SDK_INT >= Build.VERSION_CODES.S diff --git a/presentation/design-system/dialogs/build.gradle.kts b/presentation/design-system/dialogs/build.gradle.kts index f8b70690e..ea0470f2c 100644 --- a/presentation/design-system/dialogs/build.gradle.kts +++ b/presentation/design-system/dialogs/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,14 +9,15 @@ android { } dependencies { - api(project(module.presentation.designSystem.icons)) + api(projects.presentation.designSystem.icons) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/dialogs/detekt-baseline.xml b/presentation/design-system/dialogs/detekt-baseline.xml new file mode 100644 index 000000000..e769e2cd2 --- /dev/null +++ b/presentation/design-system/dialogs/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + ParameterNaming:DialogWithRadioButtons.kt:onOptionSelected: (DialogRadioButtonOption) -> Unit + + diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[0].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[0].png index 3fe87956a..9607d0d5f 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[0].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[1].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[1].png index 72c11c460..f3a38df68 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[1].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[2].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[2].png index 03b8f2848..6c83d48a6 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[2].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[3].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[3].png index 3aae387ef..56290ef3a 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[3].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[4].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[4].png index 959c6bcdb..ae24847ef 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[4].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[5].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[5].png index f7a1fa49e..9063b3520 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[5].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[6].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[6].png index 4f9aa3da8..ce23b4eff 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[6].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[7].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[7].png index 6fed2e620..44aa090d9 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[7].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.informative_DialogInformativeSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[0].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[0].png index 5960ee8c9..ea87a8828 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[0].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[1].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[1].png index 0982d22b2..ec691da05 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[1].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[2].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[2].png index 44cf138b1..cdbf8ae51 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[2].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[3].png b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[3].png index c858b5903..0ad40c893 100644 Binary files a/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[3].png and b/presentation/design-system/dialogs/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.dialogs.radioButtons_DialogWithRadioButtonsSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/dimensions/build.gradle.kts b/presentation/design-system/dimensions/build.gradle.kts index be7abc9dc..4fc139cde 100644 --- a/presentation/design-system/dimensions/build.gradle.kts +++ b/presentation/design-system/dimensions/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } diff --git a/presentation/design-system/dimensions/detekt-baseline.xml b/presentation/design-system/dimensions/detekt-baseline.xml new file mode 100644 index 000000000..8278cd7c9 --- /dev/null +++ b/presentation/design-system/dimensions/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + TopLevelPropertyNaming:LocalDimensions.kt:internal val LocalDimensions = staticCompositionLocalOf<Dimensions> { error("No dimensions provided. Make sure to wrap your composables in a custom theme.") } + + diff --git a/presentation/design-system/empty/build.gradle.kts b/presentation/design-system/empty/build.gradle.kts index d74d0896d..65ee69f31 100644 --- a/presentation/design-system/empty/build.gradle.kts +++ b/presentation/design-system/empty/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,16 +9,17 @@ android { } dependencies { - api(project(module.presentation.designSystem.illustrations)) + api(projects.presentation.designSystem.illustrations) implementation(libs.compose.foundation) implementation(libs.compose.material) implementation(libs.compose.ui) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.informative)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.informative) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[0].png b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[0].png index 1376f4c39..9a1b1a30f 100644 Binary files a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[0].png and b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[1].png b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[1].png index 23be9f045..58ff7241e 100644 Binary files a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[1].png and b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[2].png b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[2].png index 41c345960..607df3c23 100644 Binary files a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[2].png and b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[3].png b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[3].png index 5c73a1b0a..f6f1dd7a7 100644 Binary files a/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[3].png and b/presentation/design-system/empty/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.empty_EmptySnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/error/build.gradle.kts b/presentation/design-system/error/build.gradle.kts index bbd32c132..2492e7e90 100644 --- a/presentation/design-system/error/build.gradle.kts +++ b/presentation/design-system/error/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,16 +9,17 @@ android { } dependencies { - api(project(module.presentation.designSystem.illustrations)) + api(projects.presentation.designSystem.illustrations) implementation(libs.compose.foundation) implementation(libs.compose.material) implementation(libs.compose.ui) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.informative)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.informative) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[0].png b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[0].png index 9bd9857c3..5d20dab3d 100644 Binary files a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[0].png and b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[1].png b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[1].png index b3fa33d4a..70626e543 100644 Binary files a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[1].png and b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[2].png b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[2].png index 0d1d09792..6a6192785 100644 Binary files a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[2].png and b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[3].png b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[3].png index 6c2d28ad4..72c3617b0 100644 Binary files a/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[3].png and b/presentation/design-system/error/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.error_ErrorSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/hero-image/build.gradle.kts b/presentation/design-system/hero-image/build.gradle.kts index d554e9ce9..af764f535 100644 --- a/presentation/design-system/hero-image/build.gradle.kts +++ b/presentation/design-system/hero-image/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,13 +9,14 @@ android { } dependencies { - api(project(module.presentation.designSystem.images)) + api(projects.presentation.designSystem.images) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/hero-image/detekt-baseline.xml b/presentation/design-system/hero-image/detekt-baseline.xml new file mode 100644 index 000000000..854b15562 --- /dev/null +++ b/presentation/design-system/hero-image/detekt-baseline.xml @@ -0,0 +1,9 @@ + + + + + Filename:HeroImageStateProvider.kt:com.sottti.roller.coasters.presentation.design.system.hero.image.HeroImageStateProvider.kt + MatchingDeclarationName:HeroImageStateProvider.kt:ProfilePictureStateProvider : PreviewParameterProvider + NoConsecutiveBlankLines:HeroImage.kt: + + diff --git a/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[0].png b/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[0].png index 4fad2c041..1fabb4c70 100644 Binary files a/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[0].png and b/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[1].png b/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[1].png index e9374921d..7a8c24ce3 100644 Binary files a/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[1].png and b/presentation/design-system/hero-image/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.hero.image_HeroImageSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/icon-resources/build.gradle.kts b/presentation/design-system/icon-resources/build.gradle.kts index d6e08cbae..0f8a78250 100644 --- a/presentation/design-system/icon-resources/build.gradle.kts +++ b/presentation/design-system/icon-resources/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { @@ -10,6 +7,6 @@ android { } dependencies { - implementation(project(module.presentation.designSystem.colors)) + implementation(projects.presentation.designSystem.colors) implementation(libs.appcompat) } diff --git a/presentation/design-system/icon-resources/detekt-baseline.xml b/presentation/design-system/icon-resources/detekt-baseline.xml new file mode 100644 index 000000000..dbac6fa12 --- /dev/null +++ b/presentation/design-system/icon-resources/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + Filename:IconResourcesR.kt:com.sottti.roller.coasters.presentation.design.system.icon.resources.IconResourcesR.kt + + diff --git a/presentation/design-system/icons/build.gradle.kts b/presentation/design-system/icons/build.gradle.kts index 8dcf0745d..0b126a6a3 100644 --- a/presentation/design-system/icons/build.gradle.kts +++ b/presentation/design-system/icons/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,16 +10,17 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.material) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.iconResources)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.utils)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.iconResources) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + implementation(projects.presentation.utils) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[0].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[0].png index a02e7871a..bc6c45ca9 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[0].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[0].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[1].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[1].png index c349047ac..cfe0960d3 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[1].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnBackgroundTest[1].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[0].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[0].png index eb4aa9d3a..967bcb813 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[0].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[0].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[1].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[1].png index c1785d195..c4e7dd26b 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[1].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.circledIcon_CircledIconSnapshotTest_snapshotOnSurfaceTest[1].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[0].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[0].png index 4688668f1..e952ac4c6 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[0].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[1].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[1].png index ec20b2a6b..548877d29 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[1].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[2].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[2].png index 35881a9f4..84ec1606f 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[2].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[3].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[3].png index d782ce1e2..97cddd6aa 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[3].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[4].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[4].png index 4688668f1..e952ac4c6 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[4].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[5].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[5].png index ec20b2a6b..548877d29 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[5].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[6].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[6].png index 35881a9f4..84ec1606f 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[6].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[7].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[7].png index d782ce1e2..97cddd6aa 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[7].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.icon_IconSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[0].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[0].png index 3556c0e45..8af832ea1 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[0].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[1].png b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[1].png index 0a665a3af..d3e9852df 100644 Binary files a/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[1].png and b/presentation/design-system/icons/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.icons.pilledIcon_PilledIconSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/illustrations/build.gradle.kts b/presentation/design-system/illustrations/build.gradle.kts index ec3ea906b..181952478 100644 --- a/presentation/design-system/illustrations/build.gradle.kts +++ b/presentation/design-system/illustrations/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,11 +10,12 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.material) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/illustrations/detekt-baseline.xml b/presentation/design-system/illustrations/detekt-baseline.xml new file mode 100644 index 000000000..dc08ff0d0 --- /dev/null +++ b/presentation/design-system/illustrations/detekt-baseline.xml @@ -0,0 +1,9 @@ + + + + + Filename:IllustrationsUiStateProvider.kt:com.sottti.roller.coasters.presentation.design.system.illustrations.ui.default.IllustrationsUiStateProvider.kt + MatchingDeclarationName:IllustrationsUiStateProvider.kt:IllustrationUiStateProvider : PreviewParameterProvider + Wrapping:Illustration.kt:-> + + diff --git a/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[0].png b/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[0].png index 9adb8a0f7..14ca7b668 100644 Binary files a/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[0].png and b/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[1].png b/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[1].png index 9783a6cd5..025c6adfb 100644 Binary files a/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[1].png and b/presentation/design-system/illustrations/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.illustrations_CircledIllustrationSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/images/build.gradle.kts b/presentation/design-system/images/build.gradle.kts index 9c30904d1..97598f1b1 100644 --- a/presentation/design-system/images/build.gradle.kts +++ b/presentation/design-system/images/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,18 +9,19 @@ android { } dependencies { - api(project(module.domain.model)) + api(projects.domain.model) implementation(libs.annotations) implementation(libs.coil.compose) implementation(libs.coil.network.ktor3) implementation(libs.compose.foundation) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/images/detekt-baseline.xml b/presentation/design-system/images/detekt-baseline.xml new file mode 100644 index 000000000..4151b21db --- /dev/null +++ b/presentation/design-system/images/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + NoBlankLineBeforeRbrace:ImagesSnapshotTest.kt:ImagesSnapshotTest.Companion$ + + diff --git a/presentation/design-system/images/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/images/network/NetworkImage.kt b/presentation/design-system/images/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/images/network/NetworkImage.kt index 60d716407..0c9280b63 100644 --- a/presentation/design-system/images/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/images/network/NetworkImage.kt +++ b/presentation/design-system/images/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/images/network/NetworkImage.kt @@ -13,6 +13,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.res.painterResource import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.lifecycle.compose.collectAsStateWithLifecycle import coil3.compose.AsyncImagePainter @@ -35,9 +36,6 @@ public fun NetworkImage( foreverLoading: Boolean = false, ) { val isPreview = LocalInspectionMode.current - val model = if (isPreview) R.drawable.dragon_khan_hero_image else imageRequest(url) - val painter = rememberAsyncImagePainter(model) - val painterState by painter.state.collectAsStateWithLifecycle() val cornerRadius = when { roundedCorners -> shapes.roundedCorner.medium else -> RoundedCornerShape(ZeroCornerSize) @@ -47,22 +45,55 @@ public fun NetworkImage( val imageModifier = Modifier.matchParentSize() when { - foreverLoading || painterState is AsyncImagePainter.State.Loading -> + foreverLoading -> ProgressIndicator(modifier = imageModifier) - painterState is AsyncImagePainter.State.Success -> + isPreview -> Image( - painter = painter, + painter = painterResource(R.drawable.dragon_khan_hero_image), contentDescription = contentDescription, contentScale = ContentScale.Crop, modifier = imageModifier, ) - else -> Box(modifier = imageModifier) + else -> AsyncNetworkImage( + contentDescription = contentDescription, + modifier = imageModifier, + url = url, + ) } } } +@Composable +private fun AsyncNetworkImage( + url: ImageUrl, + contentDescription: String, + modifier: Modifier, +) { + val painter = rememberNetworkImagePainter(url) + val painterState by painter.state.collectAsStateWithLifecycle() + + when { + painterState is AsyncImagePainter.State.Loading -> + ProgressIndicator(modifier = modifier) + + painterState is AsyncImagePainter.State.Success -> + Image( + painter = painter, + contentDescription = contentDescription, + contentScale = ContentScale.Crop, + modifier = modifier, + ) + + else -> Box(modifier = modifier) + } +} + +@Composable +private fun rememberNetworkImagePainter(url: ImageUrl): AsyncImagePainter = + rememberAsyncImagePainter(imageRequest(url)) + @Composable private fun imageRequest(url: ImageUrl): ImageRequest { val context = LocalContext.current diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[0].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[0].png new file mode 100644 index 000000000..da6d1b926 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[1].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[1].png new file mode 100644 index 000000000..27bf4412e Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[2].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[2].png new file mode 100644 index 000000000..d7b991f76 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[3].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[3].png new file mode 100644 index 000000000..496af58d8 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.local_ImagesSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[0].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[0].png new file mode 100644 index 000000000..7d586ea1c Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[1].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[1].png new file mode 100644 index 000000000..0c0ba1cbf Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[2].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[2].png new file mode 100644 index 000000000..7d586ea1c Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[3].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[3].png new file mode 100644 index 000000000..a975b37e8 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[4].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[4].png new file mode 100644 index 000000000..b80c89ed5 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[5].png b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[5].png new file mode 100644 index 000000000..a975b37e8 Binary files /dev/null and b/presentation/design-system/images/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images.network_NetworkImagesSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/informative/build.gradle.kts b/presentation/design-system/informative/build.gradle.kts index 7cbdf2b5b..c6edbfa4d 100644 --- a/presentation/design-system/informative/build.gradle.kts +++ b/presentation/design-system/informative/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -12,19 +9,20 @@ android { } dependencies { - api(project(module.presentation.designSystem.illustrations)) + api(projects.presentation.designSystem.illustrations) implementation(libs.compose.foundation) implementation(libs.compose.material) implementation(libs.compose.runtime) implementation(libs.compose.ui) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.utils)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + implementation(projects.presentation.utils) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[0].png b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[0].png index a3aaef3ef..b86f6ba3a 100644 Binary files a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[0].png and b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[1].png b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[1].png index 6c42cdd57..ae397fa58 100644 Binary files a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[1].png and b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[2].png b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[2].png index 41c345960..607df3c23 100644 Binary files a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[2].png and b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[3].png b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[3].png index 5c73a1b0a..f6f1dd7a7 100644 Binary files a/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[3].png and b/presentation/design-system/informative/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.informative_InformativeSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/map/build.gradle.kts b/presentation/design-system/map/build.gradle.kts index e23cde802..2665758be 100644 --- a/presentation/design-system/map/build.gradle.kts +++ b/presentation/design-system/map/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -14,11 +11,12 @@ android { dependencies { implementation(libs.compose.foundation) implementation(libs.compose.maps) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.presentation.designSystem.images)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.domain.fixtures) + implementation(projects.presentation.designSystem.images) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/map/detekt-baseline.xml b/presentation/design-system/map/detekt-baseline.xml new file mode 100644 index 000000000..68ff4fd36 --- /dev/null +++ b/presentation/design-system/map/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + CommentWrapping:Map.kt:/* target = */ + CommentWrapping:Map.kt:/* zoom = */ + + diff --git a/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[0].png b/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[0].png index 3656db347..da6d1b926 100644 Binary files a/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[0].png and b/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[1].png b/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[1].png index 902a1a7a5..27bf4412e 100644 Binary files a/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[1].png and b/presentation/design-system/map/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.images_MapSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/playground/build.gradle.kts b/presentation/design-system/playground/build.gradle.kts index c81bcea34..c37f377dd 100644 --- a/presentation/design-system/playground/build.gradle.kts +++ b/presentation/design-system/playground/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } @@ -12,12 +9,13 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) } diff --git a/presentation/design-system/playground/detekt-baseline.xml b/presentation/design-system/playground/detekt-baseline.xml new file mode 100644 index 000000000..062c6c0a5 --- /dev/null +++ b/presentation/design-system/playground/detekt-baseline.xml @@ -0,0 +1,30 @@ + + + + + ArgumentListWrapping:Animations.kt:( Modifier .alpha(alpha = alpha.value) .clickable { onClick() }) + ArgumentListWrapping:Animations.kt:( modifier = Modifier.align(Alignment.Center), text = "Colours", color = Color.Black, ) + CommentSpacing:CustomModifiers.kt://) : Modifier.Node() { + CommentSpacing:CustomModifiers.kt://) : ModifierNodeElement<PulsateNode>() { + CommentSpacing:CustomModifiers.kt://private class PulsateNode( + CommentSpacing:CustomModifiers.kt://private data class PulsateElement( + CommentSpacing:CustomModifiers.kt://private fun Modifier.pulsate(enabled: Boolean = true) = this.then(PulsateElement(enabled)) + CommentSpacing:CustomModifiers.kt://} + ComposableNaming:ElevationAndShadows.kt:@Composable @Preview( widthDp = 1200, heightDp = 600, ) private fun cardElevationAnimation + ForEachOnRange:CustomLayout.kt:1..10 + ForEachOnRange:Intrinsics.kt:1..10 + MultipleEmitters:CoutingRecompositions.kt:@Composable private fun A + MultipleEmitters:CoutingRecompositions.kt:@Composable private fun RecompositionDemonstrator + MutableStateAutoboxing:CoutingRecompositions.kt:mutableStateOf(0) + MutableStateAutoboxing:Random.kt:mutableStateOf(0) + NoConsecutiveBlankLines:CustomLayout.kt: + NoConsecutiveBlankLines:ElevationAndShadows.kt: + NoConsecutiveBlankLines:Text.kt: + NoEmptyFile:CustomModifiers.kt:com.sottti.roller.coasters.presentation.design.system.playground.CustomModifiers.kt + NoEmptyFirstLineInMethodBlock:ElevationAndShadows.kt: + NoMultipleSpaces:CoutingRecompositions.kt: + SpacingAroundParens:Animations.kt:( + UnnecessaryParenthesesBeforeTrailingLambda:Text.kt:() + Wrapping:Animations.kt:( + + diff --git a/presentation/design-system/playground/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/playground/CustomLayout.kt b/presentation/design-system/playground/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/playground/CustomLayout.kt index 35ba548fa..fc2f8469c 100644 --- a/presentation/design-system/playground/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/playground/CustomLayout.kt +++ b/presentation/design-system/playground/src/main/kotlin/com/sottti/roller/coasters/presentation/design/system/playground/CustomLayout.kt @@ -112,7 +112,7 @@ private fun SpecialBox() { } public fun Modifier.centerInParent0(): Modifier = - this then layout { measurable, constraints -> + layout { measurable, constraints -> val maxWidthAllowedByParent = constraints.maxWidth val maxHeightAllowedByTheParent = constraints.maxHeight val placeable = measurable.measure(constraints) @@ -129,7 +129,7 @@ public fun Modifier.paddingModifier( end: Dp = 0.dp, bottom: Dp = 0.dp, ): Modifier { - return this then layout { measurable, constraints -> + return layout { measurable, constraints -> val horizontal = (start + end).roundToPx() val vertical = (top + bottom).roundToPx() val placeable = measurable.measure( @@ -147,21 +147,19 @@ public fun Modifier.paddingModifier( } public fun Modifier.centerInParent(): Modifier = - this.then( - layout { measurable, constraints -> - val parentWidth = constraints.maxWidth - val parentHeight = constraints.maxHeight + layout { measurable, constraints -> + val parentWidth = constraints.maxWidth + val parentHeight = constraints.maxHeight - val placeable = measurable.measure(constraints) + val placeable = measurable.measure(constraints) - check(placeable[FirstBaseline] != AlignmentLine.Unspecified) + check(placeable[FirstBaseline] != AlignmentLine.Unspecified) - val x = (parentWidth - placeable.width) / 2 - val y = (parentHeight - placeable.height) / 2 + val x = (parentWidth - placeable.width) / 2 + val y = (parentHeight - placeable.height) / 2 - layout(placeable.width, placeable.height) { - placeable.placeRelative(x, y) - } + layout(placeable.width, placeable.height) { + placeable.placeRelative(x, y) } - ) + } diff --git a/presentation/design-system/progress-indicators/build.gradle.kts b/presentation/design-system/progress-indicators/build.gradle.kts index d19cc0728..cbe89928c 100644 --- a/presentation/design-system/progress-indicators/build.gradle.kts +++ b/presentation/design-system/progress-indicators/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,10 +10,11 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[0].png b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[0].png index 1b6f242d4..66558bbba 100644 Binary files a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[0].png and b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[1].png b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[1].png index ff2b4df74..3d01a4c0d 100644 Binary files a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[1].png and b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[2].png b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[2].png index 117c4788a..27b91d15c 100644 Binary files a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[2].png and b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[3].png b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[3].png index 267737458..7bc65b2d3 100644 Binary files a/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[3].png and b/presentation/design-system/progress-indicators/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.progress.indicators_ProgressIndicatorSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/roller-coaster-card/build.gradle.kts b/presentation/design-system/roller-coaster-card/build.gradle.kts index ecf36e14e..af022648b 100644 --- a/presentation/design-system/roller-coaster-card/build.gradle.kts +++ b/presentation/design-system/roller-coaster-card/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,16 +10,17 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.images)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.utils)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.images) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.previews) + implementation(projects.presentation.utils) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/roller-coaster-card/detekt-baseline.xml b/presentation/design-system/roller-coaster-card/detekt-baseline.xml new file mode 100644 index 000000000..fa21f859a --- /dev/null +++ b/presentation/design-system/roller-coaster-card/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + NoBlankLineBeforeRbrace:RollerCoasterCardLargeStateProvider.kt:RollerCoasterCardLargeStateProvider$ + + diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[0].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[0].png index eb0bce550..a3e70aaa7 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[0].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[1].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[1].png index a885f9acd..97d269803 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[1].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[2].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[2].png index 6cd8832fd..a3e70aaa7 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[2].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[3].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[3].png index cb48c1900..dad6b64da 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[3].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.large_RollerCoasterCardLargeSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[0].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[0].png index 47a9d0ede..028b90f92 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[0].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[1].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[1].png index 63c616d8c..8d244565e 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[1].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[2].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[2].png index 17c233806..cb14ac6d9 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[2].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[3].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[3].png index 24e41a914..efc4c72c7 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[3].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[4].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[4].png index b3e8ec555..a16214049 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[4].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[5].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[5].png index 1fbfba05d..646c6474f 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[5].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[6].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[6].png index 17c233806..cb14ac6d9 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[6].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[7].png b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[7].png index 24e41a914..efc4c72c7 100644 Binary files a/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[7].png and b/presentation/design-system/roller-coaster-card/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.small_RollerCoasterCardSmallSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/search-bar/build.gradle.kts b/presentation/design-system/search-bar/build.gradle.kts index 97fc813ee..99679cb7b 100644 --- a/presentation/design-system/search-bar/build.gradle.kts +++ b/presentation/design-system/search-bar/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,15 +10,16 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.domain.fixtures) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/search-bar/detekt-baseline.xml b/presentation/design-system/search-bar/detekt-baseline.xml new file mode 100644 index 000000000..170181dc2 --- /dev/null +++ b/presentation/design-system/search-bar/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + LambdaParameterEventTrailing:SearchBar.kt:onQueryChange: (String?) -> Unit + + diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[0].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[0].png index bdf09d675..ce5da8ae2 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[0].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[1].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[1].png index f65e43bce..77ab0da08 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[1].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[2].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[2].png index f189342a0..f10234acb 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[2].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[3].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[3].png index 57ae699d4..eb31fed53 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[3].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[4].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[4].png index 911233300..81b14fc73 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[4].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[5].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[5].png index d3f44f571..61fc5d716 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[5].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[6].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[6].png index 047d1f94b..b3ce319c4 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[6].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[7].png b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[7].png index 6760436eb..41a279e17 100644 Binary files a/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[7].png and b/presentation/design-system/search-bar/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.search.bar_SearchBarSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/shapes/build.gradle.kts b/presentation/design-system/shapes/build.gradle.kts index d4453dcfe..33b9cd4c3 100644 --- a/presentation/design-system/shapes/build.gradle.kts +++ b/presentation/design-system/shapes/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } @@ -12,7 +9,8 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.dimensions)) + implementation(projects.presentation.designSystem.dimensions) } diff --git a/presentation/design-system/shapes/detekt-baseline.xml b/presentation/design-system/shapes/detekt-baseline.xml new file mode 100644 index 000000000..38720efd4 --- /dev/null +++ b/presentation/design-system/shapes/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + ReturnCount:CornerShape.kt:CornerShape$override fun createOutline: Outline + TopLevelPropertyNaming:LocalShapes.kt:internal val LocalShapes = staticCompositionLocalOf<Shapes> { error("No shapes provided. Make sure to wrap your composables in a custom theme.") } + + diff --git a/presentation/design-system/switch/build.gradle.kts b/presentation/design-system/switch/build.gradle.kts index 9c8f3afcc..4307077b6 100644 --- a/presentation/design-system/switch/build.gradle.kts +++ b/presentation/design-system/switch/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,10 +10,11 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[0].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[0].png index f36c34c44..c33fd37f8 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[0].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[1].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[1].png index a13dfdfe9..eda5c804d 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[1].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[2].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[2].png index 9d33da297..780f8c7a7 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[2].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[3].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[3].png index ee1f4ba9e..ad2d58866 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[3].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[4].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[4].png index 5e9174bd4..e6259390f 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[4].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[5].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[5].png index 3442fcb84..51f4cbe18 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[5].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[6].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[6].png index 9872b6721..11dba4076 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[6].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[7].png b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[7].png index 80c62d052..382199136 100644 Binary files a/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[7].png and b/presentation/design-system/switch/src/test/snapshots/images/com.sottti.roller.coasters.presentation.design.system.switchh_SwitchSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/design-system/text/build.gradle.kts b/presentation/design-system/text/build.gradle.kts index b7069a6cf..9599a7d0a 100644 --- a/presentation/design-system/text/build.gradle.kts +++ b/presentation/design-system/text/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -13,11 +10,12 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.typography)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.typography) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/design-system/text/detekt-baseline.xml b/presentation/design-system/text/detekt-baseline.xml new file mode 100644 index 000000000..6ec74dca4 --- /dev/null +++ b/presentation/design-system/text/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + NoConsecutiveBlankLines:Text.kt:Text.Body$ + + diff --git a/presentation/design-system/themes/build.gradle.kts b/presentation/design-system/themes/build.gradle.kts index 3e644c942..1e0b72453 100644 --- a/presentation/design-system/themes/build.gradle.kts +++ b/presentation/design-system/themes/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } @@ -11,13 +8,13 @@ android { } dependencies { - api(project(module.presentation.designSystem.colors)) + api(projects.presentation.designSystem.colors) implementation(libs.compose.material) implementation(libs.material) implementation(libs.splashscreen) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.iconResources)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.typography)) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.iconResources) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.typography) } diff --git a/presentation/design-system/typography/build.gradle.kts b/presentation/design-system/typography/build.gradle.kts index 7ca8ca173..3affff187 100644 --- a/presentation/design-system/typography/build.gradle.kts +++ b/presentation/design-system/typography/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } diff --git a/presentation/design-system/typography/detekt-baseline.xml b/presentation/design-system/typography/detekt-baseline.xml new file mode 100644 index 000000000..d89049a47 --- /dev/null +++ b/presentation/design-system/typography/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + TopLevelPropertyNaming:LocalTypography.kt:internal val LocalTypography = staticCompositionLocalOf<Typography> { error("No typography provided. Make sure to wrap your composables in a custom theme.") } + + diff --git a/presentation/explore/build.gradle.kts b/presentation/explore/build.gradle.kts index 9c008e606..365b4ad54 100644 --- a/presentation/explore/build.gradle.kts +++ b/presentation/explore/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -16,30 +13,31 @@ dependencies { implementation(libs.appcompat) implementation(libs.compose.foundation) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(libs.paging.compose) implementation(libs.paging.runtime) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.locales)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.presentation.designSystem.chip)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.empty)) - implementation(project(module.presentation.designSystem.error)) - implementation(project(module.presentation.designSystem.images)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.rollerCoasterCard)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.format)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.stringProvider)) - implementation(project(module.presentation.topBars)) - implementation(project(module.presentation.utils)) + implementation(projects.domain.fixtures) + implementation(projects.domain.locales) + implementation(projects.domain.rollerCoasters) + implementation(projects.presentation.designSystem.chip) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.empty) + implementation(projects.presentation.designSystem.error) + implementation(projects.presentation.designSystem.images) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.rollerCoasterCard) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.format) + implementation(projects.presentation.previews) + implementation(projects.presentation.stringProvider) + implementation(projects.presentation.topBars) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) testImplementation(libs.junit) @@ -48,5 +46,5 @@ dependencies { testImplementation(libs.paging.testing) testImplementation(libs.truth) testImplementation(libs.turbine) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/explore/detekt-baseline.xml b/presentation/explore/detekt-baseline.xml new file mode 100644 index 000000000..00924ff90 --- /dev/null +++ b/presentation/explore/detekt-baseline.xml @@ -0,0 +1,19 @@ + + + + + ArgumentListWrapping:ExploreReducer.kt:( primary = state.filters.primary.map { filter -> when { primaryFilterClass.isInstance(filter) -> (filter as T).updateFilter(state) else -> filter } }) + ArgumentListWrapping:ExploreReducer.kt:( secondary = state.filters.secondary.map { filter -> when (filter) { is AllFilter -> filter.copy(visible = filter is T) is AlphabeticalFilter -> filter.copy(visible = filter is T) is DropFilter -> filter.copy(visible = filter is T) is GForceFilter -> filter.copy(visible = filter is T) is HeightFilter -> filter.copy(visible = filter is T) is InversionsFilter -> filter.copy(visible = filter is T) is LengthFilter -> filter.copy(visible = filter is T) is MaxVerticalFilter -> filter.copy(visible = filter is T) is SpeedFilter -> filter.copy(visible = filter is T) is SteelFilter -> filter.copy(visible = filter is T) is WoodFilter -> filter.copy(visible = filter is T) } }) + CyclomaticComplexMethod:ExploreTestHelpers.kt:internal fun filtersWithExpansion + CyclomaticComplexMethod:ExploreUiMapper.kt:private fun Ride.contextualStat: String? + Indentation:ExploreReducer.kt: + LambdaParameterInRestartableEffect:ExploreUi.kt:onScrollToTop: (() -> Unit) -> Unit + NoConsecutiveBlankLines:ExploreReducer.kt: + NoConsecutiveBlankLines:ExploreState.kt: + NoConsecutiveBlankLines:ExploreTestHelpers.kt: + ParameterNaming:ExploreUi.kt:onListCreated: @Composable (LazyListState) -> Unit + SpacingAroundParens:ExploreReducer.kt:( + ThrowingExceptionsWithoutMessageOrCause:ExploreUiStateProvider.kt:Exception() + Wrapping:ExploreReducer.kt:( + + diff --git a/presentation/explore/src/main/kotlin/com/sottti/roller/coasters/presentation/explore/ui/ExploreUiContent.kt b/presentation/explore/src/main/kotlin/com/sottti/roller/coasters/presentation/explore/ui/ExploreUiContent.kt index e517f41ae..ea2c9a2f3 100644 --- a/presentation/explore/src/main/kotlin/com/sottti/roller/coasters/presentation/explore/ui/ExploreUiContent.kt +++ b/presentation/explore/src/main/kotlin/com/sottti/roller/coasters/presentation/explore/ui/ExploreUiContent.kt @@ -8,10 +8,15 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.material3.Button +import androidx.compose.material3.Card import androidx.compose.material3.Scaffold import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign import androidx.paging.LoadState +import androidx.paging.LoadState.Error import androidx.paging.LoadState.Loading import androidx.paging.LoadState.NotLoading import androidx.paging.compose.LazyPagingItems @@ -22,10 +27,13 @@ import com.sottti.roller.coasters.presentation.design.system.error.ErrorUi import com.sottti.roller.coasters.presentation.design.system.progress.indicators.ProgressIndicator import com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.RollerCoasterCard import com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.RollerCoasterCardStat +import com.sottti.roller.coasters.presentation.design.system.text.Text +import com.sottti.roller.coasters.presentation.explore.R import com.sottti.roller.coasters.presentation.explore.model.ExploreAction import com.sottti.roller.coasters.presentation.explore.model.ExploreRollerCoaster import com.sottti.roller.coasters.presentation.explore.model.Filters import com.sottti.roller.coasters.presentation.utils.override +import com.sottti.roller.coasters.presentation.utils.plus @Composable internal fun ExploreContent( @@ -100,8 +108,13 @@ private fun LoadedRollerCoasters( contentPadding = padding + PaddingValues(dimensions.spacing.medium), verticalArrangement = Arrangement.spacedBy(dimensions.spacing.medium), ) { - if (rollerCoasters.loadState.prepend is Loading) { - item(key = "loading") { FillMaxWidthProgressIndicator() } + when (rollerCoasters.loadState.prepend) { + is Error -> item(key = "prepend error") { + PaginationErrorItem(onRetry = { rollerCoasters.retry() }) + } + + is Loading -> item(key = "prepend loading") { FillMaxWidthProgressIndicator() } + else -> Unit } items( @@ -116,8 +129,13 @@ private fun LoadedRollerCoasters( } } - if (rollerCoasters.loadState.append is Loading) { - item(key = "loading") { FillMaxWidthProgressIndicator() } + when (rollerCoasters.loadState.append) { + is Error -> item(key = "append error") { + PaginationErrorItem(onRetry = { rollerCoasters.retry() }) + } + + is Loading -> item(key = "append loading") { FillMaxWidthProgressIndicator() } + else -> Unit } } } @@ -163,3 +181,26 @@ private fun FillMaxWidthProgressIndicator( .fillMaxWidth(), ) } + +@Composable +private fun PaginationErrorItem( + onRetry: () -> Unit, +) { + Card(modifier = Modifier.fillMaxWidth()) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(dimensions.spacing.medium), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(dimensions.spacing.small), + ) { + Text.Body.Medium( + textResId = R.string.pagination_error, + textAlign = TextAlign.Center, + ) + Button(onClick = onRetry) { + Text.Vanilla(R.string.pagination_error_retry) + } + } + } +} diff --git a/presentation/explore/src/main/res/values-es-rES/strings.xml b/presentation/explore/src/main/res/values-es-rES/strings.xml index 75f5b2ca6..9d22c98a5 100644 --- a/presentation/explore/src/main/res/values-es-rES/strings.xml +++ b/presentation/explore/src/main/res/values-es-rES/strings.xml @@ -13,5 +13,7 @@ Todos Acero Madera + No pudimos cargar mΓ‘s montaΓ±as rusas. + Reintentar Clasificado #%1$d diff --git a/presentation/explore/src/main/res/values-gl/strings.xml b/presentation/explore/src/main/res/values-gl/strings.xml index 590ca210f..22561f7ac 100644 --- a/presentation/explore/src/main/res/values-gl/strings.xml +++ b/presentation/explore/src/main/res/values-gl/strings.xml @@ -13,5 +13,7 @@ Todos Aceiro Madeira + Non puidemos cargar mΓ‘is montaΓ±as rusas. + Tentar de novo Clasificado #%1$d diff --git a/presentation/explore/src/main/res/values/strings.xml b/presentation/explore/src/main/res/values/strings.xml index 54b0ab244..f705d78d9 100644 --- a/presentation/explore/src/main/res/values/strings.xml +++ b/presentation/explore/src/main/res/values/strings.xml @@ -13,5 +13,7 @@ All Steel Wood + We couldn\'t load more roller coasters. + Retry Ranked #%1$d diff --git a/presentation/explore/src/test/kotlin/com/sottti/roller/coasters/presentation/explore/data/ExploreViewModelTest.kt b/presentation/explore/src/test/kotlin/com/sottti/roller/coasters/presentation/explore/data/ExploreViewModelTest.kt index 873e2ffd8..16d3544a5 100644 --- a/presentation/explore/src/test/kotlin/com/sottti/roller/coasters/presentation/explore/data/ExploreViewModelTest.kt +++ b/presentation/explore/src/test/kotlin/com/sottti/roller/coasters/presentation/explore/data/ExploreViewModelTest.kt @@ -32,6 +32,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.launch +import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import org.junit.Test @@ -173,15 +174,15 @@ internal class ExploreViewModelTest { observeSystemLocale = observeSystemLocale, ) - val job = launch { viewModel.rollerCoasters.collect() } + backgroundScope.launch { viewModel.rollerCoasters.collect() } + advanceUntilIdle() viewModel.events.test { viewModel.onAction(SecondaryFilterAction.SelectTypeSteel) + advanceUntilIdle() assertThat(awaitItem()).isEqualTo(ExploreEvent.ScrollToTop) cancelAndIgnoreRemainingEvents() } - - job.cancel() } @Test diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[0].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[0].png index c20ea6fd9..1731629b7 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[0].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[10].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[10].png index ca30cfb0e..fe1338730 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[10].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[11].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[11].png index 6c6fd046b..3a209e088 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[11].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[12].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[12].png index ca30cfb0e..fe1338730 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[12].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[12].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[13].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[13].png index 6c6fd046b..3a209e088 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[13].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[13].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[14].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[14].png index ca30cfb0e..fe1338730 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[14].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[14].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[15].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[15].png index 6c6fd046b..3a209e088 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[15].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[15].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[16].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[16].png index 22985e6d3..83ed415e2 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[16].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[16].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[17].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[17].png index a07bb8544..9be4ceca3 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[17].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[17].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[18].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[18].png index de0ce0f44..38db2154f 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[18].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[18].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[19].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[19].png index 24cea2a60..da76d9d30 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[19].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[19].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[1].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[1].png index 932ebe870..f85357232 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[1].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[2].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[2].png index 483dcd8cc..20a441618 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[2].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[3].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[3].png index 117bac0e4..2f096eae1 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[3].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[4].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[4].png index b4783711f..7c3719ff2 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[4].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[5].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[5].png index 3e01bbb85..928c8220e 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[5].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[6].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[6].png index 2b33ddd5d..eee5050da 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[6].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[7].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[7].png index 9a7f086a2..3e945d788 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[7].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[8].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[8].png index ca30cfb0e..fe1338730 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[8].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[9].png b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[9].png index 6c6fd046b..3a209e088 100644 Binary files a/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[9].png and b/presentation/explore/src/test/snapshots/images/com.sottti.roller.coasters.presentation.explore.ui_ExploreUiSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/favourites/build.gradle.kts b/presentation/favourites/build.gradle.kts index 189802ba2..cc23b6c1a 100644 --- a/presentation/favourites/build.gradle.kts +++ b/presentation/favourites/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -15,24 +12,25 @@ android { dependencies { implementation(libs.compose.foundation) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(libs.paging.compose) implementation(libs.paging.runtime) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.empty)) - implementation(project(module.presentation.designSystem.error)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.rollerCoasterCard)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.topBars)) - implementation(project(module.presentation.utils)) + implementation(projects.domain.fixtures) + implementation(projects.domain.rollerCoasters) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.empty) + implementation(projects.presentation.designSystem.error) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.rollerCoasterCard) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + implementation(projects.presentation.topBars) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) testImplementation(libs.junit) @@ -41,5 +39,5 @@ dependencies { testImplementation(libs.paging.testing) testImplementation(libs.truth) testImplementation(libs.turbine) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/favourites/detekt-baseline.xml b/presentation/favourites/detekt-baseline.xml new file mode 100644 index 000000000..32c810d2a --- /dev/null +++ b/presentation/favourites/detekt-baseline.xml @@ -0,0 +1,13 @@ + + + + + ArgumentListWrapping:FavouritesUiContent.kt:(modifier = Modifier .padding(padding) .fillMaxSize()) + FunctionOnlyReturningConstant:FavouritesPresentationModule.kt:FavouritesPresentationModule$@Provides fun provideCoroutineScope: CoroutineScope? + NoConsecutiveBlankLines:FavouritesUiContent.kt: + NoEmptyFirstLineInMethodBlock:FavouritesViewModelTest.kt:FavouritesViewModelTest$ + ParameterNaming:FavouritesUi.kt:onListCreated: @Composable (LazyListState, TopAppBarScrollBehavior) -> Unit + ThrowingExceptionsWithoutMessageOrCause:FavouritesUiStateProvider.kt:Exception() + Wrapping:FavouritesUiContent.kt:( + + diff --git a/presentation/favourites/src/main/kotlin/com/sottti/roller/coasters/presentation/favourites/ui/FavouritesUiContent.kt b/presentation/favourites/src/main/kotlin/com/sottti/roller/coasters/presentation/favourites/ui/FavouritesUiContent.kt index 6101d3936..c50940485 100644 --- a/presentation/favourites/src/main/kotlin/com/sottti/roller/coasters/presentation/favourites/ui/FavouritesUiContent.kt +++ b/presentation/favourites/src/main/kotlin/com/sottti/roller/coasters/presentation/favourites/ui/FavouritesUiContent.kt @@ -8,14 +8,19 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.material3.Button +import androidx.compose.material3.Card import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Scaffold import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextAlign import androidx.paging.LoadState +import androidx.paging.LoadState.Error import androidx.paging.LoadState.Loading import androidx.paging.LoadState.NotLoading import androidx.paging.compose.LazyPagingItems @@ -25,9 +30,12 @@ import com.sottti.roller.coasters.presentation.design.system.error.ErrorButton import com.sottti.roller.coasters.presentation.design.system.error.ErrorUi import com.sottti.roller.coasters.presentation.design.system.progress.indicators.ProgressIndicator import com.sottti.roller.coasters.presentation.design.system.roller.coaster.card.RollerCoasterCard +import com.sottti.roller.coasters.presentation.design.system.text.Text +import com.sottti.roller.coasters.presentation.favourites.R import com.sottti.roller.coasters.presentation.favourites.model.FavouritesRollerCoaster import com.sottti.roller.coasters.presentation.top.bars.ui.MainTopBar import com.sottti.roller.coasters.presentation.utils.override +import com.sottti.roller.coasters.presentation.utils.plus @Composable @@ -104,8 +112,13 @@ private fun LoadedRollerCoasters( state = listState, verticalArrangement = Arrangement.spacedBy(dimensions.spacing.medium), ) { - if (rollerCoasters.loadState.prepend is Loading) { - item(key = "prepend loading") { ProgressIndicatorFillMaxWidth() } + when (rollerCoasters.loadState.prepend) { + is Error -> item(key = "prepend error") { + PaginationErrorItem(onRetry = { rollerCoasters.retry() }) + } + + is Loading -> item(key = "prepend loading") { ProgressIndicatorFillMaxWidth() } + else -> Unit } items( @@ -120,8 +133,13 @@ private fun LoadedRollerCoasters( } } - if (rollerCoasters.loadState.append is Loading) { - item(key = "append loading") { ProgressIndicatorFillMaxWidth() } + when (rollerCoasters.loadState.append) { + is Error -> item(key = "append error") { + PaginationErrorItem(onRetry = { rollerCoasters.retry() }) + } + + is Loading -> item(key = "append loading") { ProgressIndicatorFillMaxWidth() } + else -> Unit } } } @@ -157,3 +175,26 @@ private fun ProgressIndicatorFillMaxWidth() { .fillMaxWidth(), ) } + +@Composable +private fun PaginationErrorItem( + onRetry: () -> Unit, +) { + Card(modifier = Modifier.fillMaxWidth()) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding(dimensions.spacing.medium), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(dimensions.spacing.small), + ) { + Text.Body.Medium( + textResId = R.string.pagination_error, + textAlign = TextAlign.Center, + ) + Button(onClick = onRetry) { + Text.Vanilla(R.string.pagination_error_retry) + } + } + } +} diff --git a/presentation/favourites/src/main/res/values-es-rES/strings.xml b/presentation/favourites/src/main/res/values-es-rES/strings.xml index c1d9eadf3..d3a0332cb 100644 --- a/presentation/favourites/src/main/res/values-es-rES/strings.xml +++ b/presentation/favourites/src/main/res/values-es-rES/strings.xml @@ -1,3 +1,5 @@ Favoritos> + No pudimos cargar mΓ‘s favoritos. + Reintentar diff --git a/presentation/favourites/src/main/res/values-gl/strings.xml b/presentation/favourites/src/main/res/values-gl/strings.xml index c1d9eadf3..f5bac7c4c 100644 --- a/presentation/favourites/src/main/res/values-gl/strings.xml +++ b/presentation/favourites/src/main/res/values-gl/strings.xml @@ -1,3 +1,5 @@ Favoritos> + Non puidemos cargar mΓ‘is favoritos. + Tentar de novo diff --git a/presentation/favourites/src/main/res/values/strings.xml b/presentation/favourites/src/main/res/values/strings.xml index c9fdcf43e..eb3836fe1 100644 --- a/presentation/favourites/src/main/res/values/strings.xml +++ b/presentation/favourites/src/main/res/values/strings.xml @@ -1,3 +1,5 @@ Favourites> + We couldn\'t load more favourites. + Retry diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[0].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[0].png index 44d8d27c5..1731629b7 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[0].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[10].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[10].png index 531f7fd06..6df0ad665 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[10].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[11].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[11].png index c9bbe01c5..9fa5bb695 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[11].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[12].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[12].png index 531f7fd06..6df0ad665 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[12].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[12].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[13].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[13].png index c9bbe01c5..9fa5bb695 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[13].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[13].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[14].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[14].png index 531f7fd06..6df0ad665 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[14].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[14].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[15].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[15].png index c9bbe01c5..9fa5bb695 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[15].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[15].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[16].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[16].png index 22985e6d3..83ed415e2 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[16].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[16].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[17].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[17].png index a07bb8544..9be4ceca3 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[17].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[17].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[18].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[18].png index de0ce0f44..38db2154f 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[18].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[18].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[19].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[19].png index 24cea2a60..da76d9d30 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[19].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[19].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[1].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[1].png index dc815b63f..f85357232 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[1].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[2].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[2].png index 43fc09ea6..101145992 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[2].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[3].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[3].png index 87b131002..6914beff0 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[3].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[4].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[4].png index 6465eedb7..a774c0a59 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[4].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[5].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[5].png index 29a9b818c..133af49e4 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[5].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[6].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[6].png index 2b33ddd5d..3c69f676d 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[6].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[7].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[7].png index 9a7f086a2..1a75a4ab0 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[7].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[8].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[8].png index 531f7fd06..6df0ad665 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[8].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[9].png b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[9].png index c9bbe01c5..9fa5bb695 100644 Binary files a/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[9].png and b/presentation/favourites/src/test/snapshots/images/com.sottti.roller.coasters.presentation.favourites.ui_FavouritesUiSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/fixtures/build.gradle.kts b/presentation/fixtures/build.gradle.kts index 523f8a2d7..07008c3b1 100644 --- a/presentation/fixtures/build.gradle.kts +++ b/presentation/fixtures/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { @@ -10,5 +7,5 @@ android { } dependencies { - implementation(project(module.domain.model)) + implementation(projects.domain.model) } diff --git a/presentation/fixtures/detekt-baseline.xml b/presentation/fixtures/detekt-baseline.xml new file mode 100644 index 000000000..cf804da18 --- /dev/null +++ b/presentation/fixtures/detekt-baseline.xml @@ -0,0 +1,20 @@ + + + + + PropertyName:RollerCoasterFixtures.kt:public const val fixtureAnotherStat: String = "94 meters" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureAnotherStatDetail: String = "Top 83" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureContentDescription: String = "content description" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureParkName: String = "PortAventura Park" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureRollerCoasterName: String = "Dragon Khan" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureStat: String = "49 meters" + PropertyName:RollerCoasterFixtures.kt:public const val fixtureStatDetail: String = "Top 38" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureAnotherStat: String = "94 meters" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureAnotherStatDetail: String = "Top 83" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureContentDescription: String = "content description" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureParkName: String = "PortAventura Park" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureRollerCoasterName: String = "Dragon Khan" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureStat: String = "49 meters" + TopLevelPropertyNaming:RollerCoasterFixtures.kt:public const val fixtureStatDetail: String = "Top 38" + + diff --git a/presentation/format/build.gradle.kts b/presentation/format/build.gradle.kts index 8c7aaeec7..7e850ed71 100644 --- a/presentation/format/build.gradle.kts +++ b/presentation/format/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) } @@ -19,11 +16,11 @@ dependencies { implementation(libs.compose.runtime) implementation(libs.hilt) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.locales)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.fixtures)) + implementation(projects.domain.fixtures) + implementation(projects.domain.locales) + implementation(projects.domain.rollerCoasters) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.fixtures) ksp(libs.hilt.compiler) androidTestImplementation(libs.junit.ext) diff --git a/presentation/format/detekt-baseline.xml b/presentation/format/detekt-baseline.xml new file mode 100644 index 000000000..9ac7e60b3 --- /dev/null +++ b/presentation/format/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + ArgumentListWrapping:DisplayUnitFormatter.kt:DisplayUnitFormatter$( R.string.g_force, value.toDisplayFormat(appLanguage, defaultLocale), ) + + diff --git a/presentation/home/build.gradle.kts b/presentation/home/build.gradle.kts deleted file mode 100644 index da48b6ea8..000000000 --- a/presentation/home/build.gradle.kts +++ /dev/null @@ -1,38 +0,0 @@ -import com.sottti.roller.coasters.buildSrc.module - -plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.hilt) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) - alias(libs.plugins.kotlin.ksp) - alias(libs.plugins.paparazzi) -} - -android { - namespace = "com.sottti.roller.coasters.presentation.home" -} - -dependencies { - implementation(libs.appcompat) - implementation(libs.compose.material) - implementation(libs.compose.navigation2) - implementation(libs.hilt) - implementation(libs.hilt.navigation.compose) - implementation(platform(libs.compose.bom)) - implementation(project(module.domain.settings)) - implementation(project(module.presentation.aboutMe)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.explore)) - implementation(project(module.presentation.favourites)) - implementation(project(module.presentation.navigation)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.rollerCoasterDetails)) - implementation(project(module.presentation.search)) - implementation(project(module.presentation.settings)) - implementation(project(module.presentation.utils)) - ksp(libs.hilt.compiler) - testImplementation(project(module.presentation.paparazzi)) -} diff --git a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[0].png b/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[0].png deleted file mode 100644 index a8e76a652..000000000 Binary files a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[0].png and /dev/null differ diff --git a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[1].png b/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[1].png deleted file mode 100644 index 7f1e40d47..000000000 Binary files a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeBottomBarUiSnapshotTest_snapshotTest[1].png and /dev/null differ diff --git a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[0].png b/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[0].png deleted file mode 100644 index 9af830152..000000000 Binary files a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[0].png and /dev/null differ diff --git a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[1].png b/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[1].png deleted file mode 100644 index 90ce493b5..000000000 Binary files a/presentation/home/src/test/snapshots/images/com.sottti.roller.coasters.presentation.home.ui_HomeUiBottomBarUiSnapshotTest_snapshotTest[1].png and /dev/null differ diff --git a/presentation/navigation-external/build.gradle.kts b/presentation/navigation-external/build.gradle.kts index 514dbd7e5..827338f81 100644 --- a/presentation/navigation-external/build.gradle.kts +++ b/presentation/navigation-external/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) } diff --git a/presentation/navigation/build.gradle.kts b/presentation/navigation/build.gradle.kts index 1e206861e..9bbc4966d 100644 --- a/presentation/navigation/build.gradle.kts +++ b/presentation/navigation/build.gradle.kts @@ -1,15 +1,11 @@ plugins { - alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) - alias(libs.plugins.kotlin.compose) + alias(libs.plugins.kotlin.jvm) alias(libs.plugins.kotlin.serialization) } -android { - namespace = "com.sottti.roller.coasters.presentation.navigation" -} - dependencies { - implementation(libs.compose.navigation2) + api(platform(libs.compose.bom)) + api(libs.compose.runtime) + api(libs.compose.runtime.saveable) implementation(libs.kotlin.serialization.json) } diff --git a/presentation/navigation/detekt-baseline.xml b/presentation/navigation/detekt-baseline.xml new file mode 100644 index 000000000..30e5de00d --- /dev/null +++ b/presentation/navigation/detekt-baseline.xml @@ -0,0 +1,7 @@ + + + + + NoConsecutiveBlankLines:NavigationDestination.kt: + + diff --git a/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestination.kt b/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestination.kt index 82c7834ed..e6d990240 100644 --- a/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestination.kt +++ b/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestination.kt @@ -21,7 +21,7 @@ public sealed interface NavigationDestination { @Immutable @Serializable - public data object Home : NavigationDestination + public data object AppShell : NavigationDestination @Immutable @Serializable diff --git a/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestinationMappers.kt b/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestinationMappers.kt index 62a923244..e904f12d5 100644 --- a/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestinationMappers.kt +++ b/presentation/navigation/src/main/kotlin/com/sottti/roller/coasters/presentation/navigation/NavigationDestinationMappers.kt @@ -1,9 +1,9 @@ package com.sottti.roller.coasters.presentation.navigation import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.AboutMe +import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.AppShell import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Explore import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Favourites -import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Home import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Search import com.sottti.roller.coasters.presentation.navigation.NavigationDestination.Settings @@ -12,7 +12,7 @@ public fun String?.toNavigationDestination(): NavigationDestination = AboutMe::class.qualifiedName -> AboutMe Explore::class.qualifiedName -> Explore Favourites::class.qualifiedName -> Favourites - Home::class.qualifiedName -> Home + AppShell::class.qualifiedName -> AppShell Search::class.qualifiedName -> Search Settings::class.qualifiedName -> Settings else -> Explore diff --git a/presentation/paparazzi/build.gradle.kts b/presentation/paparazzi/build.gradle.kts index 3fb499952..7858e8bc2 100644 --- a/presentation/paparazzi/build.gradle.kts +++ b/presentation/paparazzi/build.gradle.kts @@ -1,7 +1,16 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { alias(libs.plugins.kotlin.jvm) } +kotlin { + jvmToolchain(21) + compilerOptions { + jvmTarget.set(JvmTarget.JVM_21) + } +} + dependencies { implementation(libs.paparazzi.core) } diff --git a/presentation/paparazzi/detekt-baseline.xml b/presentation/paparazzi/detekt-baseline.xml new file mode 100644 index 000000000..c42d52988 --- /dev/null +++ b/presentation/paparazzi/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + Filename:PIXEL_10_PRO_XL.kt:com.sottti.roller.coasters.presentation.paparazzi.PIXEL_10_PRO_XL.kt + TopLevelPropertyNaming:PIXEL_10_PRO_XL.kt:internal val PIXEL_10_PRO_XL: DeviceConfig = DeviceConfig( screenHeight = 2992, screenWidth = 1344, xdpi = 486, ydpi = 486, orientation = ScreenOrientation.PORTRAIT, uiMode = UiMode.NORMAL, nightMode = NightMode.NOTNIGHT, density = Density.create(560), fontScale = 1f, layoutDirection = LayoutDirection.LTR, locale = null, ratio = ScreenRatio.LONG, size = ScreenSize.NORMAL, keyboard = Keyboard.NOKEY, touchScreen = TouchScreen.FINGER, keyboardState = KeyboardState.SOFT, softButtons = true, navigation = Navigation.NONAV, screenRound = null, released = "August 20, 2025" ) + + diff --git a/presentation/previews/build.gradle.kts b/presentation/previews/build.gradle.kts index 1ddffee3e..edaa49487 100644 --- a/presentation/previews/build.gradle.kts +++ b/presentation/previews/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } @@ -9,6 +8,6 @@ android { } dependencies { - implementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) } diff --git a/presentation/previews/detekt-baseline.xml b/presentation/previews/detekt-baseline.xml new file mode 100644 index 000000000..c59f389d9 --- /dev/null +++ b/presentation/previews/detekt-baseline.xml @@ -0,0 +1,14 @@ + + + + + AnnotationSpacing:RollerCoasterPreviewDynamicColors.kt:RollerCoasterPreviewDynamicColors$@Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Red", wallpaper = RED_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Blue", wallpaper = BLUE_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Green", wallpaper = GREEN_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Yellow", wallpaper = YELLOW_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Red", wallpaper = RED_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Blue", wallpaper = BLUE_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Green", wallpaper = GREEN_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Yellow", wallpaper = YELLOW_DOMINATED_EXAMPLE, ) @Retention(AnnotationRetention.BINARY) @Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.FUNCTION) public annotation + ModifierListSpacing:RollerCoasterPreviewDynamicColors.kt:RollerCoasterPreviewDynamicColors$@Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Red", wallpaper = RED_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Blue", wallpaper = BLUE_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Green", wallpaper = GREEN_DOMINATED_EXAMPLE, ) @Preview( group = LIGHT_THEME_GROUP, device = DEVICE, name = "Yellow", wallpaper = YELLOW_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Red", wallpaper = RED_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Blue", wallpaper = BLUE_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Green", wallpaper = GREEN_DOMINATED_EXAMPLE, ) @Preview( group = DARK_THEME_GROUP, device = DEVICE, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL, name = "Yellow", wallpaper = YELLOW_DOMINATED_EXAMPLE, ) @Retention(AnnotationRetention.BINARY) @Target(AnnotationTarget.ANNOTATION_CLASS, AnnotationTarget.FUNCTION) public annotation + NoConsecutiveBlankLines:RollerCoasterPreviewDynamicColors.kt: + PreviewAnnotationNaming:RollerCoasterPreviewDynamicColors.kt:RollerCoasterPreviewDynamicColors + PreviewAnnotationNaming:RollerCoastersPreview.kt:RollerCoastersPreview + PreviewAnnotationNaming:RollerCoastersPreviewNoLocale.kt:RollerCoastersPreviewNoLocale + PreviewAnnotationNaming:RollerCoastersPreviewSingleLocale.kt:RollerCoastersPreviewSingleLocale + PreviewAnnotationNaming:RollerCoastersTallPreview.kt:RollerCoastersTallPreview + + diff --git a/presentation/roller-coaster-details/build.gradle.kts b/presentation/roller-coaster-details/build.gradle.kts index 93b6606ae..1161f304f 100644 --- a/presentation/roller-coaster-details/build.gradle.kts +++ b/presentation/roller-coaster-details/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -14,25 +11,26 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.presentation.designSystem.colors)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.error)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.images)) - implementation(project(module.presentation.designSystem.map)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.format)) - implementation(project(module.presentation.navigation)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.utils)) + implementation(projects.domain.fixtures) + implementation(projects.domain.rollerCoasters) + implementation(projects.presentation.designSystem.colors) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.error) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.images) + implementation(projects.presentation.designSystem.map) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.format) + implementation(projects.presentation.navigation) + implementation(projects.presentation.previews) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) testImplementation(libs.junit) @@ -40,5 +38,5 @@ dependencies { testImplementation(libs.mockk) testImplementation(libs.truth) testImplementation(libs.turbine) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/roller-coaster-details/detekt-baseline.xml b/presentation/roller-coaster-details/detekt-baseline.xml new file mode 100644 index 000000000..2dab03c28 --- /dev/null +++ b/presentation/roller-coaster-details/detekt-baseline.xml @@ -0,0 +1,10 @@ + + + + + ArgumentListWrapping:RollerCoasterDetailsReducer.kt:( header = R.string.identity_header, name = RollerCoasterDetailsRow( headline = R.string.identity_name, trailing = name.current.value, ), formerNames = name.former?.value?.let { formerNames -> RollerCoasterDetailsRow( headline = R.string.identity_former_names, trailing = formerNames, ) }) + SpacingAroundParens:RollerCoasterDetailsReducer.kt:( + Wrapping:RollerCoasterDetailsReducer.kt:( + Wrapping:RollerCoasterDetailsReducer.kt:( header = R.string.identity_header, name = RollerCoasterDetailsRow( headline = R.string.identity_name, trailing = name.current.value, ), formerNames = name.former?.value?.let { formerNames -> RollerCoasterDetailsRow( headline = R.string.identity_former_names, trailing = formerNames, ) }) + + diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[0].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[0].png index c03d8a044..521761064 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[0].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[1].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[1].png index b8c59a613..2ce8d7031 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[1].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[2].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[2].png index 7de2e536c..b470523ab 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[2].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[3].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[3].png index a40333814..a6aecec79 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[3].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[4].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[4].png index 0aea57c47..7feb14d46 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[4].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[5].png b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[5].png index de8e1db70..8f5c82b7e 100644 Binary files a/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[5].png and b/presentation/roller-coaster-details/src/test/snapshots/images/com.sottti.roller.coasters.presentation.roller.coaster.details.ui_RollerCoasterDetailsUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/search/build.gradle.kts b/presentation/search/build.gradle.kts index b6213bf3d..ab5d3d528 100644 --- a/presentation/search/build.gradle.kts +++ b/presentation/search/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -15,24 +12,25 @@ android { dependencies { implementation(libs.compose.foundation) implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.fixtures)) - implementation(project(module.domain.rollerCoasters)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.empty)) - implementation(project(module.presentation.designSystem.error)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.rollerCoasterCard)) - implementation(project(module.presentation.designSystem.searchBar)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.topBars)) - implementation(project(module.presentation.utils)) + implementation(projects.domain.fixtures) + implementation(projects.domain.rollerCoasters) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.empty) + implementation(projects.presentation.designSystem.error) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.rollerCoasterCard) + implementation(projects.presentation.designSystem.searchBar) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + implementation(projects.presentation.topBars) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/search/detekt-baseline.xml b/presentation/search/detekt-baseline.xml new file mode 100644 index 000000000..563cdc1c4 --- /dev/null +++ b/presentation/search/detekt-baseline.xml @@ -0,0 +1,8 @@ + + + + + NoConsecutiveBlankLines:SearchReducer.kt: + ParameterNaming:SearchUi.kt:onListCreated: @Composable (LazyListState, TopAppBarScrollBehavior) -> Unit + + diff --git a/presentation/search/src/main/kotlin/com/sottti/roller/coasters/presentation/search/ui/SearchUiContent.kt b/presentation/search/src/main/kotlin/com/sottti/roller/coasters/presentation/search/ui/SearchUiContent.kt index 4469ce750..4e4fe14b8 100644 --- a/presentation/search/src/main/kotlin/com/sottti/roller/coasters/presentation/search/ui/SearchUiContent.kt +++ b/presentation/search/src/main/kotlin/com/sottti/roller/coasters/presentation/search/ui/SearchUiContent.kt @@ -25,6 +25,7 @@ import com.sottti.roller.coasters.presentation.search.model.SearchAction import com.sottti.roller.coasters.presentation.search.model.SearchResult import com.sottti.roller.coasters.presentation.search.model.SearchState import com.sottti.roller.coasters.presentation.utils.override +import com.sottti.roller.coasters.presentation.utils.plus @Composable @OptIn(ExperimentalMaterial3Api::class) diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[0].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[0].png index 976b1b74a..1439a3a8e 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[0].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[1].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[1].png index 4b497af16..3bb617a44 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[1].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[2].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[2].png index cf8d42eae..13121f47e 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[2].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[3].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[3].png index 16fcd8947..ade9140d5 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[3].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[4].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[4].png index 864d76903..7f13faf9c 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[4].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[5].png b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[5].png index 00d44e688..1535568b8 100644 Binary files a/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[5].png and b/presentation/search/src/test/snapshots/images/com.sottti.roller.coasters.presentation.search.ui_SearchUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/settings/build.gradle.kts b/presentation/settings/build.gradle.kts index d546af3b0..a797e0d82 100644 --- a/presentation/settings/build.gradle.kts +++ b/presentation/settings/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.kotlin.ksp) alias(libs.plugins.paparazzi) @@ -14,22 +11,23 @@ android { dependencies { implementation(libs.compose.material) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(libs.hilt) implementation(libs.hilt.navigation.compose) implementation(platform(libs.compose.bom)) - implementation(project(module.domain.systemFeatures)) - implementation(project(module.domain.settings)) - implementation(project(module.presentation.designSystem.dialogs)) - implementation(project(module.presentation.designSystem.dimensions)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.progressIndicators)) - implementation(project(module.presentation.designSystem.shapes)) - implementation(project(module.presentation.designSystem.switch)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.previews)) - implementation(project(module.presentation.utils)) + implementation(projects.domain.systemFeatures) + implementation(projects.domain.settings) + implementation(projects.presentation.designSystem.dialogs) + implementation(projects.presentation.designSystem.dimensions) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.progressIndicators) + implementation(projects.presentation.designSystem.shapes) + implementation(projects.presentation.designSystem.switch) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.previews) + implementation(projects.presentation.utils) ksp(libs.hilt.compiler) testImplementation(libs.junit) @@ -37,5 +35,5 @@ dependencies { testImplementation(libs.mockk) testImplementation(libs.truth) testImplementation(libs.turbine) - testImplementation(project(module.presentation.paparazzi)) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/settings/detekt-baseline.xml b/presentation/settings/detekt-baseline.xml new file mode 100644 index 000000000..4e18c84e1 --- /dev/null +++ b/presentation/settings/detekt-baseline.xml @@ -0,0 +1,16 @@ + + + + + ChainWrapping:SettingsAppColorContrastReducer.kt:&& + CyclomaticComplexMethod:SettingsViewModel.kt:SettingsViewModel$private suspend fun SettingsState.handleStateMutationAction: SettingsState + FunctionOnlyReturningConstant:SettingsPresentationModule.kt:SettingsPresentationModule$@Provides @ViewModelScoped fun provideInitialSettingsState: SettingsState? + Indentation:SettingsAppColorContrastReducer.kt: + NoConsecutiveBlankLines:SettingsAppLanguageUiMapperTest.kt:SettingsAppLanguageUiMapperTest$ + NoConsecutiveBlankLines:SettingsInitialState.kt: + Wrapping:SettingsAppLanguageReducerTest.kt:SettingsAppLanguageReducerTest$( + Wrapping:SettingsAppMeasurementSystemReducerTest.kt:SettingsAppMeasurementSystemReducerTest$( + Wrapping:SettingsAppThemeReducerTest.kt:SettingsAppThemeReducerTest$( + Wrapping:SettingsUiList.kt:( + + diff --git a/presentation/settings/src/main/kotlin/com/sottti/roller/coasters/presentation/settings/ui/SettingsUiList.kt b/presentation/settings/src/main/kotlin/com/sottti/roller/coasters/presentation/settings/ui/SettingsUiList.kt index b1c53d407..b9b8ca071 100644 --- a/presentation/settings/src/main/kotlin/com/sottti/roller/coasters/presentation/settings/ui/SettingsUiList.kt +++ b/presentation/settings/src/main/kotlin/com/sottti/roller/coasters/presentation/settings/ui/SettingsUiList.kt @@ -36,6 +36,7 @@ import com.sottti.roller.coasters.presentation.settings.model.SettingsAction.Lau import com.sottti.roller.coasters.presentation.settings.model.SettingsAction.LaunchAppThemePicker import com.sottti.roller.coasters.presentation.settings.model.SettingsState import com.sottti.roller.coasters.presentation.utils.Spacer +import com.sottti.roller.coasters.presentation.utils.plus @Composable internal fun SettingsList( diff --git a/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsTestHelpers.kt b/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsTestHelpers.kt index c4beb7890..e56ad027d 100644 --- a/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsTestHelpers.kt +++ b/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsTestHelpers.kt @@ -1,9 +1,13 @@ package com.sottti.roller.coasters.presentation.settings.data - import app.cash.turbine.TurbineTestContext import app.cash.turbine.test import com.google.common.truth.Truth.assertThat +import com.sottti.roller.coasters.domain.settings.model.colorContrast.AppColorContrast +import com.sottti.roller.coasters.domain.settings.model.dynamicColor.AppDynamicColor +import com.sottti.roller.coasters.domain.settings.model.language.AppLanguage +import com.sottti.roller.coasters.domain.settings.model.measurementSystem.AppMeasurementSystem +import com.sottti.roller.coasters.domain.settings.model.theme.AppTheme import com.sottti.roller.coasters.domain.settings.usecase.colorContrast.GetAppColorContrast import com.sottti.roller.coasters.domain.settings.usecase.colorContrast.ObserveAppColorContrast import com.sottti.roller.coasters.domain.settings.usecase.colorContrast.SetAppColorContrast @@ -19,8 +23,18 @@ import com.sottti.roller.coasters.domain.settings.usecase.theme.GetAppTheme import com.sottti.roller.coasters.domain.settings.usecase.theme.ObserveAppTheme import com.sottti.roller.coasters.domain.settings.usecase.theme.SetAppTheme import com.sottti.roller.coasters.domain.system.features.SystemFeatures +import com.sottti.roller.coasters.presentation.settings.data.mapper.toDomain +import com.sottti.roller.coasters.presentation.settings.model.AppSelectedLanguageState +import com.sottti.roller.coasters.presentation.settings.model.DynamicColorCheckedState +import com.sottti.roller.coasters.presentation.settings.model.SelectedAppColorContrastState +import com.sottti.roller.coasters.presentation.settings.model.SelectedAppMeasurementSystemState +import com.sottti.roller.coasters.presentation.settings.model.SelectedAppThemeState import com.sottti.roller.coasters.presentation.settings.model.SettingsState +import io.mockk.every import io.mockk.mockk +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOf internal fun createViewModel( systemFeatures: SystemFeatures = mockk(), @@ -29,11 +43,12 @@ internal fun createViewModel( getAppMeasurementSystem: GetAppMeasurementSystem = mockk(), getAppTheme: GetAppTheme = mockk(), initialState: SettingsState? = null, - observeAppColorContrast: ObserveAppColorContrast = mockk(), - observeAppDynamicColor: ObserveAppDynamicColor = mockk(), - observeAppLanguage: ObserveAppLanguage = mockk(), - observeAppMeasurementSystem: ObserveAppMeasurementSystem = mockk(), - observeAppTheme: ObserveAppTheme = mockk(), + observeAppColorContrast: ObserveAppColorContrast = defaultObserveAppColorContrast(initialState), + observeAppDynamicColor: ObserveAppDynamicColor = defaultObserveAppDynamicColor(initialState), + observeAppLanguage: ObserveAppLanguage = defaultObserveAppLanguage(initialState), + observeAppMeasurementSystem: ObserveAppMeasurementSystem = + defaultObserveAppMeasurementSystem(initialState), + observeAppTheme: ObserveAppTheme = defaultObserveAppTheme(initialState), setAppColorContrast: SetAppColorContrast = mockk(), setAppDynamicColor: SetAppDynamicColor = mockk(), setAppLanguage: SetAppLanguage = mockk(), @@ -58,8 +73,127 @@ internal fun createViewModel( testInitialState = initialState, ) -internal suspend fun SettingsViewModel.assertHasState(expected: SettingsState) = - state.test { assertHasState(expected) } +private fun defaultObserveAppColorContrast( + initialState: SettingsState?, +): ObserveAppColorContrast { + val observeAppColorContrast = mockk() + val appColorContrastFlow = + initialState?.let { flowOf(it.appColorContrast()) } ?: emptyFlow() + every { observeAppColorContrast() } returns appColorContrastFlow + return observeAppColorContrast +} + +private fun defaultObserveAppDynamicColor( + initialState: SettingsState?, +): ObserveAppDynamicColor { + val observeAppDynamicColor = mockk() + val appDynamicColorFlow = + initialState?.let { flowOf(it.appDynamicColor()) } ?: emptyFlow() + every { observeAppDynamicColor() } returns appDynamicColorFlow + return observeAppDynamicColor +} + +private fun defaultObserveAppLanguage( + initialState: SettingsState?, +): ObserveAppLanguage { + val observeAppLanguage = mockk() + val appLanguageFlow = + initialState?.let { flowOf(it.appLanguage()) } ?: emptyFlow() + every { observeAppLanguage() } returns appLanguageFlow + return observeAppLanguage +} + +private fun defaultObserveAppMeasurementSystem( + initialState: SettingsState?, +): ObserveAppMeasurementSystem { + val observeAppMeasurementSystem = mockk() + val appMeasurementSystemFlow = + initialState?.let { + flowOf(it.appMeasurementSystem()) + } ?: emptyFlow() + every { observeAppMeasurementSystem() } returns appMeasurementSystemFlow + return observeAppMeasurementSystem +} + +private fun defaultObserveAppTheme( + initialState: SettingsState?, +): ObserveAppTheme { + val observeAppTheme = mockk() + val appThemeFlow = + initialState?.let { flowOf(it.appTheme()) } ?: emptyFlow() + every { observeAppTheme() } returns appThemeFlow + return observeAppTheme +} + +private fun SettingsState.appColorContrast(): AppColorContrast = + when (val selectedAppColorContrast = appColorContrast.listItem.selectedAppColorContrast) { + is SelectedAppColorContrastState.Loaded -> + selectedAppColorContrast.appColorContrast.toDomain() + + SelectedAppColorContrastState.Loading -> AppColorContrast.System + } + +private fun SettingsState.appDynamicColor(): AppDynamicColor = + when (val checkedState = dynamicColor?.checkedState) { + is DynamicColorCheckedState.Loaded -> when { + checkedState.checked -> AppDynamicColor.Enabled + else -> AppDynamicColor.Disabled + } + + DynamicColorCheckedState.Loading, null -> AppDynamicColor.Enabled + } + +private fun SettingsState.appLanguage(): AppLanguage = + when (val selectedAppLanguage = appLanguage.listItem.selectedAppLanguage) { + is AppSelectedLanguageState.Loaded -> selectedAppLanguage.appLanguage.toDomain() + AppSelectedLanguageState.Loading -> AppLanguage.System + } + +private fun SettingsState.appMeasurementSystem(): AppMeasurementSystem = + when ( + val selectedAppMeasurementSystem = + appMeasurementSystem.listItem.selectedAppMeasurementSystem + ) { + is SelectedAppMeasurementSystemState.Loaded -> + selectedAppMeasurementSystem.appMeasurementSystem.toDomain() + + SelectedAppMeasurementSystemState.Loading -> AppMeasurementSystem.System + } + +private fun SettingsState.appTheme(): AppTheme = + when (val selectedAppTheme = appTheme.listItem.selectedAppTheme) { + is SelectedAppThemeState.Loaded -> selectedAppTheme.appTheme.toDomain() + SelectedAppThemeState.Loading -> AppTheme.System + } + +internal suspend fun SettingsViewModel.assertHasState( + expected: SettingsState, +) = + state.test { + assertHasState(expected) + cancelAndIgnoreRemainingEvents() + } + +internal suspend fun SettingsViewModel.assertHasState( + expected: SettingsState, + action: SettingsViewModel.() -> Unit, +) = + state.test { + awaitItem() + delay(1) + this@assertHasState.action() + var current = this@assertHasState.state.value + var attempts = 0 + while (current != expected && attempts < STATE_ASSERTION_ATTEMPTS) { + delay(1) + current = this@assertHasState.state.value + attempts++ + } + assertThat(current).isEqualTo(expected) + cancelAndIgnoreRemainingEvents() + } + +private const val STATE_ASSERTION_ATTEMPTS = 100 internal suspend fun TurbineTestContext.assertHasState(expected: SettingsState) { var state: SettingsState diff --git a/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsViewModelTest.kt b/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsViewModelTest.kt index 77003c651..17fdf6a8d 100644 --- a/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsViewModelTest.kt +++ b/presentation/settings/src/test/kotlin/com/sottti/roller/coasters/presentation/settings/data/SettingsViewModelTest.kt @@ -58,14 +58,30 @@ import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every import io.mockk.mockk +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.junit.After +import org.junit.Before import org.junit.Test @OptIn(ExperimentalCoroutinesApi::class) internal class SettingsViewModelTest { + @Before + fun setUp() { + Dispatchers.setMain(UnconfinedTestDispatcher()) + } + + @After + fun tearDown() { + Dispatchers.resetMain() + } + @Test fun `app color contrast picker selection change`() = runTest { val systemFeatures = mockk() @@ -88,9 +104,9 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(AppColorContrastPickerSelectionChange(newSelectedColorContrast)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(AppColorContrastPickerSelectionChange(newSelectedColorContrast)) + } } @Test @@ -108,9 +124,9 @@ internal class SettingsViewModelTest { setAppColorContrast = setAppColorContrast, ) - viewModel.onAction(ConfirmColorContrastPickerSelection(selectedAppColorContrast)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(ConfirmColorContrastPickerSelection(selectedAppColorContrast)) + } coVerify(exactly = 1) { setAppColorContrast(selectedAppColorContrast.toDomain()) } } @@ -126,9 +142,9 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(AppLanguagePickerSelectionChange(newSelectedLanguage)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(AppLanguagePickerSelectionChange(newSelectedLanguage)) + } } @Test @@ -145,9 +161,9 @@ internal class SettingsViewModelTest { setAppLanguage = setAppLanguage, ) - viewModel.onAction(ConfirmAppLanguagePickerSelection(selectedAppLanguage)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(ConfirmAppLanguagePickerSelection(selectedAppLanguage)) + } coVerify(exactly = 1) { setAppLanguage(selectedAppLanguage.toDomain()) } } @@ -163,9 +179,9 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(AppMeasurementSystemPickerSelectionChange(newSelectedMeasurementSystem)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(AppMeasurementSystemPickerSelectionChange(newSelectedMeasurementSystem)) + } } @Test @@ -182,9 +198,9 @@ internal class SettingsViewModelTest { setAppMeasurementSystem = setAppMeasurementSystem, ) - viewModel.onAction(ConfirmAppMeasurementSystemPickerSelection(selectedAppMeasurementSystem)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(ConfirmAppMeasurementSystemPickerSelection(selectedAppMeasurementSystem)) + } coVerify(exactly = 1) { setAppMeasurementSystem(selectedAppMeasurementSystem.toDomain()) } } @@ -207,9 +223,9 @@ internal class SettingsViewModelTest { systemFeatures = systemFeatures, ) - viewModel.onAction(AppThemePickerSelectionChange(newSelectedTheme)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(AppThemePickerSelectionChange(newSelectedTheme)) + } } @Test @@ -228,9 +244,9 @@ internal class SettingsViewModelTest { setAppTheme = setAppTheme, ) - viewModel.onAction(ConfirmAppThemePickerSelection(selectedAppTheme)) - - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(ConfirmAppThemePickerSelection(selectedAppTheme)) + } coVerify(exactly = 1) { setAppTheme(selectedAppTheme.toDomain()) } } @@ -284,10 +300,10 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(DismissAppColorContrastNotAvailableMessage) - val expectedState = initialState.hideAppColorContrastNotAvailableMessage() - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(DismissAppColorContrastNotAvailableMessage) + } } @Test @@ -302,10 +318,10 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(DismissAppColorContrastPicker) - val expectedState = initialState.hideAppColorContrastPicker() - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(DismissAppColorContrastPicker) + } } @Test @@ -315,10 +331,10 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(DismissAppLanguagePicker) - val expectedState = initialState.hideAppLanguagePicker() - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(DismissAppLanguagePicker) + } } @Test @@ -328,10 +344,10 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(DismissAppMeasurementSystemPicker) - val expectedState = initialState.hideAppMeasurementSystemPicker() - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(DismissAppMeasurementSystemPicker) + } } @Test @@ -342,10 +358,10 @@ internal class SettingsViewModelTest { ) val viewModel = createViewModel(initialState = initialState) - viewModel.onAction(DismissAppThemePicker) - val expectedState = initialState.hideAppThemePicker() - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(DismissAppThemePicker) + } } @Test @@ -444,13 +460,13 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(LaunchAppColorContrastPicker) - val expectedState = initialState.showAppColorContrastPicker( selectedAppColorContrast = appColorContrast, appColorContrastAvailable = colorContrastAvailable, ) - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(LaunchAppColorContrastPicker) + } } @Test @@ -473,13 +489,13 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(LaunchAppColorContrastPicker) - val expectedState = initialState.showAppColorContrastPicker( selectedAppColorContrast = appColorContrast, appColorContrastAvailable = colorContrastAvailable, ) - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(LaunchAppColorContrastPicker) + } } @Test @@ -493,10 +509,10 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(LaunchAppLanguagePicker) - val expectedState = initialState.showAppLanguagePicker(appLanguage) - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(LaunchAppLanguagePicker) + } } @Test @@ -510,10 +526,10 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(LaunchAppMeasurementSystemPicker) - val expectedState = initialState.showAppMeasurementSystemPicker(appMeasurementSystem) - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(LaunchAppMeasurementSystemPicker) + } } @Test @@ -531,12 +547,12 @@ internal class SettingsViewModelTest { initialState = initialState, ) - viewModel.onAction(LaunchAppThemePicker) - val expectedState = initialState.showAppThemePicker( lightDarkAppThemingAvailable = lightDarkSystemThemingAvailable, selectedAppTheme = appTheme.toPresentationModel(selected = true), ) - viewModel.assertHasState(expectedState) + viewModel.assertHasState(expectedState) { + onAction(LaunchAppThemePicker) + } } } diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[0].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[0].png index c69cf4800..06253d257 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[0].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[10].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[10].png index 4caa46aa0..29ea7a259 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[10].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[11].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[11].png index 2d0f8b88a..311541448 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[11].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[12].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[12].png index f47f4c331..331bbb946 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[12].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[12].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[13].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[13].png index 08387c8a5..d7bc993f4 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[13].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[13].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[14].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[14].png index 15f8be33b..61ca4b907 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[14].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[14].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[15].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[15].png index 3c724a8bb..9409c4e8e 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[15].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[15].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[16].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[16].png index 30b26248f..b22655a01 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[16].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[16].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[17].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[17].png index 64cf692b2..a82824a6e 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[17].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[17].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[18].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[18].png index 6e3878099..aaa815991 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[18].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[18].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[19].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[19].png index 3c739cf49..1a7cfbc6a 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[19].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[19].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[1].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[1].png index 201e78cfe..0aed7c6f8 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[1].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[20].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[20].png index 9f2331852..6e153d6bb 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[20].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[20].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[21].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[21].png index 620d473bc..356f57291 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[21].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[21].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[22].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[22].png index 668a9b101..63cf4c79f 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[22].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[22].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[23].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[23].png index ac1751355..4d5de6195 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[23].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[23].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[24].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[24].png index 7aa1ca49f..bca0f0f62 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[24].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[24].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[25].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[25].png index 4c9780d50..f046d70c2 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[25].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[25].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[26].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[26].png index 5add56fd3..0b9d172d0 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[26].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[26].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[27].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[27].png index c9a958fbe..c4939da9b 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[27].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[27].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[28].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[28].png index 77dfcb328..8bfe379c4 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[28].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[28].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[29].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[29].png index 7d05fae90..6207b6174 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[29].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[29].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[2].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[2].png index 51a911bad..d7cf3893a 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[2].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[30].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[30].png index f3997701c..fc7ad6a20 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[30].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[30].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[31].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[31].png index fd3f4b192..072ae704a 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[31].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[31].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[32].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[32].png index 2b9095e4b..051afde93 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[32].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[32].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[33].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[33].png index e49bd23bf..14c73c44d 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[33].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[33].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[34].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[34].png index 4f76b9ac1..fbc6ee05d 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[34].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[34].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[35].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[35].png index 37ccbab02..76e0b253f 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[35].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[35].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[36].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[36].png index 50d0d77f6..3b8ab2635 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[36].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[36].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[37].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[37].png index 3d2fb0ebc..0eaf45e09 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[37].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[37].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[38].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[38].png index 2d4499c91..37301cfdc 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[38].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[38].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[39].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[39].png index b08b93535..5443d7998 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[39].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[39].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[3].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[3].png index fb69b075a..b993e12cd 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[3].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[40].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[40].png index fa2b07d60..f29ed747e 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[40].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[40].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[41].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[41].png index 3332895a5..d80ac1a9a 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[41].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[41].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[42].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[42].png index 3cf988439..aa3b36dc1 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[42].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[42].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[43].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[43].png index ae3f28921..5c3ced1eb 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[43].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[43].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[44].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[44].png index 04cae10d6..301467950 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[44].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[44].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[45].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[45].png index f1ed89323..d8c9a8eb9 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[45].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[45].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[46].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[46].png index 70f218d46..de5a23eb4 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[46].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[46].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[47].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[47].png index 1c11c7b83..3b1219e08 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[47].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[47].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[48].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[48].png index 295c0ff74..3c7eb90f6 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[48].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[48].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[49].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[49].png index f448b64a4..e06375e00 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[49].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[49].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[4].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[4].png index af15eaa0e..ae547379a 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[4].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[50].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[50].png index d9ef94d48..3b103413d 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[50].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[50].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[51].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[51].png index 5da04dd6b..ebd08bfe5 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[51].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[51].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[52].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[52].png index b22e0815f..2c22f74da 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[52].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[52].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[53].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[53].png index d4de52981..bd2db432e 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[53].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[53].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[54].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[54].png index b22e0815f..2c22f74da 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[54].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[54].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[55].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[55].png index d4de52981..bd2db432e 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[55].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[55].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[5].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[5].png index ace439d8a..6696fd154 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[5].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[6].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[6].png index 188be94aa..60becfed3 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[6].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[7].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[7].png index 5a3b59156..25d91bfa4 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[7].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[8].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[8].png index 9fd757227..ccb16040d 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[8].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[9].png b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[9].png index 68d8092a4..4023256c1 100644 Binary files a/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[9].png and b/presentation/settings/src/test/snapshots/images/com.sottti.roller.coasters.presentation.settings.ui_SettingsUiSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/string-provider/build.gradle.kts b/presentation/string-provider/build.gradle.kts index a1d56c121..c95dd456b 100644 --- a/presentation/string-provider/build.gradle.kts +++ b/presentation/string-provider/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.ksp) } diff --git a/presentation/top-bars/build.gradle.kts b/presentation/top-bars/build.gradle.kts index 9e3192894..f38373221 100644 --- a/presentation/top-bars/build.gradle.kts +++ b/presentation/top-bars/build.gradle.kts @@ -1,8 +1,5 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) alias(libs.plugins.paparazzi) } @@ -14,13 +11,14 @@ android { dependencies { implementation(libs.compose.material) implementation(libs.compose.navigation2) - implementation(libs.compose.ui.tooling) + debugImplementation(libs.compose.ui.tooling) + implementation(libs.compose.ui.tooling.preview) implementation(platform(libs.compose.bom)) - implementation(project(module.presentation.designSystem.icons)) - implementation(project(module.presentation.designSystem.text)) - implementation(project(module.presentation.designSystem.themes)) - implementation(project(module.presentation.fixtures)) - implementation(project(module.presentation.navigation)) - implementation(project(module.presentation.previews)) - testImplementation(project(module.presentation.paparazzi)) + implementation(projects.presentation.designSystem.icons) + implementation(projects.presentation.designSystem.text) + implementation(projects.presentation.designSystem.themes) + implementation(projects.presentation.fixtures) + implementation(projects.presentation.navigation) + implementation(projects.presentation.previews) + testImplementation(projects.presentation.paparazzi) } diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[0].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[0].png index 341ec2439..32a52a0ec 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[0].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[0].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[10].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[10].png index a3192cfc0..de9cf1ce6 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[10].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[10].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[11].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[11].png index b2a7f2017..0a884c38f 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[11].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[11].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[1].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[1].png index 44111883d..50e116897 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[1].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[1].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[2].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[2].png index 341ec2439..32a52a0ec 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[2].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[2].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[3].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[3].png index 44111883d..50e116897 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[3].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[3].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[4].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[4].png index 341ec2439..32a52a0ec 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[4].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[4].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[5].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[5].png index 44111883d..50e116897 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[5].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[5].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[6].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[6].png index 341ec2439..32a52a0ec 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[6].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[6].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[7].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[7].png index 44111883d..50e116897 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[7].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[7].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[8].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[8].png index 9d6a7225d..22462fb31 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[8].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[8].png differ diff --git a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[9].png b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[9].png index cb8021af5..6273e6391 100644 Binary files a/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[9].png and b/presentation/top-bars/src/test/snapshots/images/com.sottti.roller.coasters.presentation.topBars.ui_TopBarsUiSnapshotTest_snapshotTest[9].png differ diff --git a/presentation/utils/build.gradle.kts b/presentation/utils/build.gradle.kts index ae970622c..d11439142 100644 --- a/presentation/utils/build.gradle.kts +++ b/presentation/utils/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.compose) } diff --git a/presentation/utils/detekt-baseline.xml b/presentation/utils/detekt-baseline.xml new file mode 100644 index 000000000..83ac7ac7e --- /dev/null +++ b/presentation/utils/detekt-baseline.xml @@ -0,0 +1,9 @@ + + + + + Indentation:Padding.kt: + MagicNumber:Combine.kt:3 + MagicNumber:Combine.kt:5 + + diff --git a/settings.gradle.kts b/settings.gradle.kts index 183ee8823..e9f411357 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,4 +1,6 @@ -rootProject.name = "Roller Coasters" +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + +rootProject.name = "RollerCoasters" pluginManagement { repositories { @@ -58,7 +60,7 @@ include( ":presentation:favourites", ":presentation:fixtures", ":presentation:format", - ":presentation:home", + ":presentation:app-shell", ":presentation:navigation", ":presentation:navigation-external", ":presentation:paparazzi", diff --git a/utils/lifecycle/build.gradle.kts b/utils/lifecycle/build.gradle.kts index f42803e3e..c3dfd74c4 100644 --- a/utils/lifecycle/build.gradle.kts +++ b/utils/lifecycle/build.gradle.kts @@ -1,6 +1,5 @@ plugins { alias(libs.plugins.android.library) - alias(libs.plugins.kotlin.android) } android { diff --git a/utils/time-dates/build.gradle.kts b/utils/time-dates/build.gradle.kts index 69d05143c..ebeda3a40 100644 --- a/utils/time-dates/build.gradle.kts +++ b/utils/time-dates/build.gradle.kts @@ -1,11 +1,9 @@ -import com.sottti.roller.coasters.buildSrc.module - plugins { alias(libs.plugins.kotlin.jvm) } dependencies { - api(project(module.domain.model)) + api(projects.domain.model) implementation(libs.annotations) testImplementation(libs.junit) diff --git a/utils/time-dates/detekt-baseline.xml b/utils/time-dates/detekt-baseline.xml new file mode 100644 index 000000000..48461e5db --- /dev/null +++ b/utils/time-dates/detekt-baseline.xml @@ -0,0 +1,13 @@ + + + + + MagicNumber:TimeMapper.kt:60 + NoConsecutiveBlankLines:DateMapperTestStubs.kt: + NoConsecutiveBlankLines:TimeMapper.kt: + NoMultipleSpaces:DateMapperTestStubs.kt: + TopLevelPropertyNaming:DateMapper.kt:private val FULL_DATE_REGEX_PATTERN = Regex("""\d{4}-\d{2}-\d{2}""") + TopLevelPropertyNaming:DateMapper.kt:private val YEAR_MONTH_REGEX_PATTERN = Regex("""\d{4}-\d{1,2}""") + TopLevelPropertyNaming:DateMapper.kt:private val YEAR_ONLY_REGEX_PATTERN = Regex("""-?\d{4}""") + +