From 6ecc1e340822b7f969bc8986b6b483d02223e64d Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Fri, 5 Jun 2026 12:22:33 -0300 Subject: [PATCH 01/33] Update Detekt configuration and add formatting plugin --- .mega-linter.yml | 2 +- .../java/com.streamplayer.detekt.gradle.kts | 16 ++++-- config/detekt/detekt.yml | 52 +++++++++++++++++-- gradle/libs.versions.toml | 1 + 4 files changed, 62 insertions(+), 9 deletions(-) diff --git a/.mega-linter.yml b/.mega-linter.yml index 00e43fe8..cb3bc1a5 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -25,4 +25,4 @@ SHOW_ELAPSED_TIME: true FILEIO_REPORTER: false -KOTLIN_DETEKT_ARGUMENTS: -c config/detekt/detekt.yml -ex "**/build/**" +KOTLIN_DETEKT_CLI_EXECUTABLE: './gradlew detekt' \ No newline at end of file diff --git a/build-logic/src/main/java/com.streamplayer.detekt.gradle.kts b/build-logic/src/main/java/com.streamplayer.detekt.gradle.kts index d66df7fb..f2bdd79d 100644 --- a/build-logic/src/main/java/com.streamplayer.detekt.gradle.kts +++ b/build-logic/src/main/java/com.streamplayer.detekt.gradle.kts @@ -1,16 +1,24 @@ +import org.gradle.accessors.dm.LibrariesForLibs + plugins { id("io.gitlab.arturbosch.detekt") } +val libs = the() + detekt { config.setFrom(file(project.rootDir.path.plus("/config/detekt/detekt.yml"))) buildUponDefaultConfig = true source.from( - "src/main/java", - "src/test/java", - "src/main/kotlin", - "src/test/kotlin" + files( + "src/commonMain/kotlin", + "src/androidMain/kotlin", + "src/iosMain/kotlin" + ) ) + dependencies { + detektPlugins(libs.detekt.formatting) + } } diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index b13209da..9a3d4b6c 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -402,6 +402,11 @@ naming: ClassNaming: active: true classPattern: "[A-Z][a-zA-Z0-9]*" + ConstructorParameterNaming: + active: true + parameterPattern: "[a-z][A-Za-z0-9]*" + privateParameterPattern: "[a-z][A-Za-z0-9]*" + excludeClassPattern: "$^" EnumNaming: active: true enumEntryPattern: "[A-Z][_a-zA-Z0-9]*" @@ -435,10 +440,15 @@ naming: parameterPattern: "[a-z][A-Za-z0-9]*" excludeClassPattern: "$^" InvalidPackageDeclaration: - active: false + active: true + rootPackage: "" + requireRootInDeclaration: false LambdaParameterNaming: active: false parameterPattern: "[a-z][A-Za-z0-9]*|_" + MatchingDeclarationName: + active: true + mustBeFirst: true MemberNameEqualsClassName: active: true ignoreOverridden: true @@ -452,7 +462,8 @@ naming: propertyPattern: "[A-Za-z][_A-Za-z0-9]*" privatePropertyPattern: "(_)?[A-Za-z][_A-Za-z0-9]*" PackageNaming: - active: false + active: true + packagePattern: '[a-z]+(\.[a-z][A-Za-z0-9]*)*' TopLevelPropertyNaming: active: true constantPattern: "[A-Z][_A-Z0-9]*" @@ -738,7 +749,34 @@ style: active: true maxJumpCount: 1 MagicNumber: - active: false + active: true + excludes: + [ + "**/test/**", + "**/androidTest/**", + "**/commonTest/**", + "**/jvmTest/**", + "**/androidUnitTest/**", + "**/androidInstrumentedTest/**", + "**/jsTest/**", + "**/iosTest/**", + "**/*.kts", + ] + ignoreNumbers: + - "-1" + - "0" + - "1" + - "2" + ignoreHashCodeFunction: true + ignorePropertyDeclaration: false + ignoreLocalVariableDeclaration: false + ignoreConstantDeclaration: true + ignoreCompanionObjectPropertyDeclaration: true + ignoreAnnotation: false + ignoreNamedArgument: true + ignoreEnums: false + ignoreRanges: false + ignoreExtensionFunctions: true MandatoryBracesLoops: active: false MaxChainedCallsOnSameLine: @@ -844,7 +882,7 @@ style: UntilInsteadOfRangeTo: active: false UnusedImports: - active: false + active: true UnusedParameter: active: true allowedNames: "ignored|expected" @@ -897,3 +935,9 @@ style: active: true excludeImports: - "java.util.*" + +formatting: + TrailingCommaOnCallSite: + active: true + TrailingCommaOnDeclarationSite: + active: true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 86b8306d..eeeed680 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -61,6 +61,7 @@ kotzilla-sdk-compose = { group = "io.kotzilla", name = "kotzilla-sdk-compose", v kotlin_gradle_plugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } android_gradle_plugin = { group = "com.android.tools.build", name = "gradle", version.ref = "android_gradle_plugin" } detekt-gradle-plugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt" } +detekt-formatting = { module = "io.gitlab.arturbosch.detekt:detekt-formatting", version.ref = "detekt" } serialization = { module = "org.jetbrains.kotlin.plugin.serialization:org.jetbrains.kotlin.plugin.serialization.gradle.plugin", version.ref = "kotlin" } com-google-devtools-ksp-gradle-plugin = { module = "com.google.devtools.ksp:com.google.devtools.ksp.gradle.plugin", version.ref = "ksp" } From 237404cc3fbaa3c4b981b7152886dee393737848 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Fri, 5 Jun 2026 12:28:55 -0300 Subject: [PATCH 02/33] Add Java setup and grant execute permission for Gradle in MegaLinter configuration --- .github/workflows/mega-linter.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml index 3d134405..67311928 100644 --- a/.github/workflows/mega-linter.yml +++ b/.github/workflows/mega-linter.yml @@ -32,6 +32,15 @@ jobs: fetch-depth: 0 + # Java setup to run Gradle command + - uses: actions/checkout@v4 + - name: Setup Java + uses: ./.github/actions/java + + # Gradle permission to run detekt + - name: Grant execute permission for gradlew + run: chmod +x gradlew + # MegaLinter - name: MegaLinter uses: oxsecurity/megalinter/flavors/java@v8 From f1743af56641a21017b0188eb9c3f92afb37f389 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Fri, 5 Jun 2026 14:50:45 -0300 Subject: [PATCH 03/33] Remove unnecessary Kotlin Detekt CLI executable configuration from MegaLinter setup --- .mega-linter.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.mega-linter.yml b/.mega-linter.yml index cb3bc1a5..3d703e8a 100644 --- a/.mega-linter.yml +++ b/.mega-linter.yml @@ -23,6 +23,4 @@ DISABLE: SHOW_ELAPSED_TIME: true -FILEIO_REPORTER: false - -KOTLIN_DETEKT_CLI_EXECUTABLE: './gradlew detekt' \ No newline at end of file +FILEIO_REPORTER: false \ No newline at end of file From ab4c9ad837dc058e9258f086ce584deca1e49ba1 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Fri, 5 Jun 2026 14:54:05 -0300 Subject: [PATCH 04/33] Update JDK version to 21 in action.yml --- .github/actions/java/action.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/java/action.yml b/.github/actions/java/action.yml index d2fc454e..7cf1ca88 100644 --- a/.github/actions/java/action.yml +++ b/.github/actions/java/action.yml @@ -5,9 +5,9 @@ runs: using: "composite" steps: - uses: actions/checkout@v4 - - name: set up JDK 17 + - name: set up JDK 21 uses: actions/setup-java@v4 with: - java-version: "17" + java-version: "21" distribution: "temurin" cache: gradle From 00be897457af5e0884be33a7500d902fa9ed628b Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Fri, 5 Jun 2026 22:12:45 -0300 Subject: [PATCH 05/33] Remove redundant Java setup and Gradle permission steps from MegaLinter configuration --- .github/workflows/mega-linter.yml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/mega-linter.yml b/.github/workflows/mega-linter.yml index 67311928..b6d89cfa 100644 --- a/.github/workflows/mega-linter.yml +++ b/.github/workflows/mega-linter.yml @@ -29,18 +29,8 @@ jobs: uses: actions/checkout@v4 with: token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }} - fetch-depth: 0 - # Java setup to run Gradle command - - uses: actions/checkout@v4 - - name: Setup Java - uses: ./.github/actions/java - - # Gradle permission to run detekt - - name: Grant execute permission for gradlew - run: chmod +x gradlew - # MegaLinter - name: MegaLinter uses: oxsecurity/megalinter/flavors/java@v8 From 62edf69b5303e7b6216e4962d4c9ab2a42e6ada8 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:52:16 -0300 Subject: [PATCH 06/33] Refactor feature search package structure and update imports --- .../di/AppModule.kt | 6 +-- .../navigation/NavigationGraph.kt | 2 +- .../widgets/SearchStreamCardPreview.kt | 2 +- .../widgets/SearchStreamsPreview.kt | 2 +- .../widgets/StreamsCarouselPreview.kt | 2 +- .../data/api/MostPopularMoviesService.kt | 25 +++++++++++ .../search}/data/api/SearchStreamService.kt | 12 +++--- .../datasource/MostPopularMoviesDataSource.kt | 20 +++++++++ .../data/datasource/SearchStreamDataSource.kt | 20 +++++++++ .../data/model/ListSearchStreamResponse.kt | 2 +- .../repository/MostPopularMoviesRepository.kt | 18 ++++++++ .../data/repository/SearchStreamRepository.kt | 19 +++++++++ .../search}/di/SearchModule.kt | 2 +- .../search/domain/MostPopularMoviesUseCase.kt | 19 +++++++++ .../feature/search/domain/SearchUseCase.kt | 18 ++++++++ .../search/domain/mapper/SearchMapper.kt | 12 ++++++ .../navigation/SearchStreamNavigation.kt | 6 +-- .../presentation/screens/SearchScreen.kt | 42 +++++++++---------- .../presentation/screens/SearchUIState.kt | 10 +++++ .../presentation/screens/SearchViewModel.kt | 27 ++++++------ .../presentation/widgets/SearchCarousel.kt | 4 +- .../presentation/widgets/SearchStreamCard.kt | 8 ++-- .../presentation/widgets/SearchStreams.kt | 6 +-- .../data/api/MostPopularMoviesService.kt | 25 ----------- .../datasource/MostPopularMoviesDataSource.kt | 20 --------- .../data/datasource/SearchStreamDataSource.kt | 20 --------- .../repository/MostPopularMoviesRepository.kt | 18 -------- .../data/repository/SearchStreamRepository.kt | 19 --------- .../domain/MostPopularMoviesUseCase.kt | 19 --------- .../feature_search/domain/SearchUseCase.kt | 17 -------- .../domain/mapper/SearchMapper.kt | 11 ----- .../presentation/screens/SearchUIState.kt | 10 ----- 32 files changed, 223 insertions(+), 220 deletions(-) rename feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/SearchStreamCardPreview.kt (89%) rename feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/SearchStreamsPreview.kt (91%) rename feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/StreamsCarouselPreview.kt (82%) create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/data/api/SearchStreamService.kt (56%) create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/data/model/ListSearchStreamResponse.kt (88%) create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/di/SearchModule.kt (75%) create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/navigation/SearchStreamNavigation.kt (72%) rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/screens/SearchScreen.kt (67%) create mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/screens/SearchViewModel.kt (62%) rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/SearchCarousel.kt (96%) rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/SearchStreamCard.kt (89%) rename feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_search => feature/search}/presentation/widgets/SearchStreams.kt (95%) delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/MostPopularMoviesService.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/MostPopularMoviesDataSource.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/SearchStreamDataSource.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/MostPopularMoviesRepository.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/SearchStreamRepository.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/MostPopularMoviesUseCase.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/SearchUseCase.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/mapper/SearchMapper.kt delete mode 100644 feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchUIState.kt diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index c10fa4a8..18b4d143 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -6,8 +6,8 @@ import com.codandotv.streamplayerapp.core_networking.di.NetworkModule import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModule import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule -import com.codandotv.streamplayerapp.feature_search.di.SearchModule -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.StreamsError +import com.codandotv.streamplayerapp.feature.search.di.SearchModule +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError import com.codandotv.streamplayerapp.profile.di.ProfilePickerStreamModule import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers @@ -35,7 +35,7 @@ fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinAppl // region feature_modules ListStreamModule.module, - SearchModule().module, + com.codandotv.streamplayerapp.feature.search.di.SearchModule().module, NewsScreenModule().module, ProfilePickerStreamModule().module // endregion diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index fa8f6656..4210b65d 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -22,7 +22,7 @@ import com.codandotv.streamplayerapp.profile.presentation.navigation.profilePick import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph import com.codandotv.streamplayerapp.feature_detail.presentation.navigation.detailStreamNavGraph import com.codandotv.streamplayerapp.feature_news.presentation.navigation.newsStreamNavGraph -import com.codandotv.streamplayerapp.feature_search.presentation.navigation.searchStreamsNavGraph +import com.codandotv.streamplayerapp.feature.search.presentation.navigation.searchStreamsNavGraph @Composable fun NavigationGraph(navController: NavHostController) { diff --git a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCardPreview.kt b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt similarity index 89% rename from feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCardPreview.kt rename to feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt index 460ae0fb..e0531259 100644 --- a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCardPreview.kt +++ b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamsPreview.kt b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamsPreview.kt similarity index 91% rename from feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamsPreview.kt rename to feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamsPreview.kt index 8b37e056..536b1fa7 100644 --- a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamsPreview.kt +++ b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamsPreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview diff --git a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/StreamsCarouselPreview.kt b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/StreamsCarouselPreview.kt similarity index 82% rename from feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/StreamsCarouselPreview.kt rename to feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/StreamsCarouselPreview.kt index 9a3c0a2a..56476391 100644 --- a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/StreamsCarouselPreview.kt +++ b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/StreamsCarouselPreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt new file mode 100644 index 00000000..d7915443 --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt @@ -0,0 +1,25 @@ +package com.codandotv.streamplayerapp.feature.search.data.api + +import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.get +import io.ktor.client.request.url +import org.koin.core.annotation.Factory +import org.koin.core.annotation.Provided + +interface MostPopularMoviesService { + suspend fun getPopular(): NetworkResponse +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService::class]) +class MostPopularMoviesServiceImpl( + @Provided private val client: HttpClient +) : com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService { + override suspend fun getPopular(): NetworkResponse = + client.safeRequest { + url("movie/popular") + } +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/SearchStreamService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt similarity index 56% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/SearchStreamService.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt index 8bff2425..198103c9 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/SearchStreamService.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt @@ -1,8 +1,8 @@ -package com.codandotv.streamplayerapp.feature_search.data.api +package com.codandotv.streamplayerapp.feature.search.data.api import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import io.ktor.client.HttpClient import io.ktor.client.request.parameter import io.ktor.client.request.url @@ -11,14 +11,14 @@ import org.koin.core.annotation.Provided import org.koin.meta.annotations.ExternalDefinition interface SearchStreamService { - suspend fun getSearch(query: String): NetworkResponse + suspend fun getSearch(query: String): NetworkResponse } -@Factory(binds = [SearchStreamService::class]) +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService::class]) class SearchStreamServiceImpl( @Provided private val client: HttpClient -) : SearchStreamService { - override suspend fun getSearch(query: String): NetworkResponse = +) : com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService { + override suspend fun getSearch(query: String): NetworkResponse = client.safeRequest { url("search/movie") parameter("query", query) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt new file mode 100644 index 00000000..3e5a16e6 --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt @@ -0,0 +1,20 @@ +package com.codandotv.streamplayerapp.feature.search.data.datasource + +import com.codandotv.streamplayerapp.core_networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface MostPopularMoviesDataSource { + suspend fun getMostPopularMovies(): Flow +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource::class]) +class MostPopularMoviesDataSourceImpl( + private val service: com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService +) : com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource { + + override suspend fun getMostPopularMovies(): Flow = + service.getPopular().toFlow() +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt new file mode 100644 index 00000000..a30a5d4e --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt @@ -0,0 +1,20 @@ +package com.codandotv.streamplayerapp.feature.search.data.datasource + +import com.codandotv.streamplayerapp.core_networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface SearchStreamDataSource { + suspend fun getMovieSearch(query: String): Flow +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource::class]) +class SearchStreamDataSourceImpl( + private val service: com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService +): com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource { + + override suspend fun getMovieSearch(query:String): Flow = + service.getSearch(query = query).toFlow() +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/model/ListSearchStreamResponse.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/model/ListSearchStreamResponse.kt similarity index 88% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/model/ListSearchStreamResponse.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/model/ListSearchStreamResponse.kt index 88fa6d04..1b953895 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/model/ListSearchStreamResponse.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/model/ListSearchStreamResponse.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.data.model +package com.codandotv.streamplayerapp.feature.search.data.model import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt new file mode 100644 index 00000000..67590bfd --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt @@ -0,0 +1,18 @@ +package com.codandotv.streamplayerapp.feature.search.data.repository + +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface MostPopularMoviesRepository { + suspend fun getMostPopularMovies(): Flow +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository::class]) +class MostPopularMoviesRepositoryImpl( + private val dataSource: com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource +) : com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository { + override suspend fun getMostPopularMovies(): Flow = + dataSource.getMostPopularMovies() +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt new file mode 100644 index 00000000..84337a35 --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt @@ -0,0 +1,19 @@ +package com.codandotv.streamplayerapp.feature.search.data.repository + +import com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface SearchStreamRepository { + suspend fun getMovieSearch(query: String): Flow + +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository::class]) +class SearchStreamRepositoryImp( + private val dataSource: com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource +) : com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository { + override suspend fun getMovieSearch(query: String): Flow = + dataSource.getMovieSearch(query) +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/di/SearchModule.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/di/SearchModule.kt similarity index 75% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/di/SearchModule.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/di/SearchModule.kt index f6741e4e..6c27f465 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/di/SearchModule.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/di/SearchModule.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.di +package com.codandotv.streamplayerapp.feature.search.di import org.koin.core.annotation.ComponentScan import org.koin.core.annotation.Module diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt new file mode 100644 index 00000000..03ed9941 --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt @@ -0,0 +1,19 @@ +package com.codandotv.streamplayerapp.feature.search.domain + +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface MostPopularMoviesUseCase { + suspend operator fun invoke(): Flow +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase::class]) +class MostPopularMoviesUseCaseImpl( + val repository: com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository +) : com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase { + override suspend operator fun invoke(): Flow { + return repository.getMostPopularMovies() + } +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt new file mode 100644 index 00000000..5771525c --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt @@ -0,0 +1,18 @@ +package com.codandotv.streamplayerapp.feature.search.domain + +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository +import kotlinx.coroutines.flow.Flow +import org.koin.core.annotation.Factory + +interface SearchUseCase { + suspend operator fun invoke(query:String): Flow +} + +@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase::class]) +class SearchUseCaseImpl(val repository: com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository) : + com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase { + override suspend operator fun invoke(query:String): Flow { + return repository.getMovieSearch(query = query) + } +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt new file mode 100644 index 00000000..4bcebf4a --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt @@ -0,0 +1,12 @@ +package com.codandotv.streamplayerapp.feature.search.domain.mapper + +import com.codandotv.streamplayerapp.core_shared.Url +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse.SearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel + +fun com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse.SearchStreamResponse.toSearchStreamCardModel() = + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel( + id = id.toString(), + title = title, + url = "${Url.IMAGE_URL_SIZE_200}${posterPath}" + ) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt similarity index 72% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt index bddaadad..c3f06e08 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/navigation/SearchStreamNavigation.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt @@ -1,16 +1,16 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.navigation +package com.codandotv.streamplayerapp.feature.search.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.feature_search.presentation.screens.SearchScreen +import com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchScreen import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) fun NavGraphBuilder.searchStreamsNavGraph(navController: NavHostController) { composable(Routes.SEARCH) { _ -> - SearchScreen( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchScreen( navController = navController, onNavigateDetailList = { id -> navController.navigate("${Routes.DETAIL}${id}") diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt similarity index 67% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt index 885f13b6..39be9f7a 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchScreen.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.screens +package com.codandotv.streamplayerapp.feature.search.presentation.screens import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -21,11 +21,11 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core_navigation.extensions.goBack -import com.codandotv.streamplayerapp.feature_search.domain.mapper.toSearchStreamCardModel -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.SearchStreamCard -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.SearchableTopBar -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.StreamsEmpty -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.StreamsError +import com.codandotv.streamplayerapp.feature.search.domain.mapper.toSearchStreamCardModel +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCard +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchableTopBar +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsEmpty +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_search.generated.resources.Res @@ -33,33 +33,33 @@ import streamplayerapp_kmp.feature_search.generated.resources.search_list_descri @Composable fun SearchScreen( - viewModel: SearchViewModel = koinViewModel(), + viewModel: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchViewModel = koinViewModel(), onNavigateDetailList: (String) -> Unit = {}, navController: NavController, ) { val uiState by viewModel.uiState.collectAsState() when (uiState) { - is SearchUIState.Success -> { - SetupSearchScreen( + is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success -> { + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SetupSearchScreen( navController = navController, - uiState = uiState as SearchUIState.Success, + uiState = uiState as com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success, viewModel = viewModel, onNavigateDetailList = onNavigateDetailList ) } - is SearchUIState.Error -> { - StreamsError( + is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Error -> { + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError( onRetry = { viewModel.onTryAgain() }, onCloseButton = { navController.goBack() } ) } - is SearchUIState.Empty -> { - SetupSearchScreen( + is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty -> { + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SetupSearchScreen( navController = navController, - uiState = uiState as SearchUIState.Empty, + uiState = uiState as com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty, viewModel = viewModel, onNavigateDetailList = onNavigateDetailList ) @@ -81,13 +81,13 @@ fun SearchScreen( private fun SetupSearchScreen( onNavigateDetailList: (String) -> Unit = {}, navController: NavController, - uiState: SearchUIState, - viewModel: SearchViewModel + uiState: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState, + viewModel: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchViewModel ) { Scaffold( topBar = { val currentText by viewModel.currentSearchText.collectAsState() - SearchableTopBar( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchableTopBar( modifier = Modifier.statusBarsPadding(), currentSearchText = currentText, onSearchTextChanged = { value -> @@ -111,7 +111,7 @@ private fun SetupSearchScreen( } ) { paddingValues -> - if (uiState is SearchUIState.Success) { + if (uiState is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success) { Column( modifier = Modifier .padding(paddingValues) @@ -125,7 +125,7 @@ private fun SetupSearchScreen( modifier = Modifier.padding(vertical = 8.dp) ) uiState.listCharacters.results.map { - SearchStreamCard( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCard( content = it.toSearchStreamCardModel(), onSearchStreamPressed = { id -> onNavigateDetailList(id) @@ -135,7 +135,7 @@ private fun SetupSearchScreen( } } else { Box(modifier = Modifier.padding(paddingValues)) { - StreamsEmpty() + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsEmpty() } } } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt new file mode 100644 index 00000000..2f1fadae --- /dev/null +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt @@ -0,0 +1,10 @@ +package com.codandotv.streamplayerapp.feature.search.presentation.screens + +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse + +sealed class SearchUIState { + data class Success(val listCharacters: com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse) : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() + data class Error(val messageError: String = "") : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() + object Loading : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() + object Empty : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() +} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchViewModel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt similarity index 62% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchViewModel.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt index 964a49d4..ea519c71 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchViewModel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt @@ -1,10 +1,10 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.screens +package com.codandotv.streamplayerapp.feature.search.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.feature_search.domain.MostPopularMoviesUseCase -import com.codandotv.streamplayerapp.feature_search.domain.SearchUseCase +import com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase +import com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -17,14 +17,15 @@ import org.koin.android.annotation.KoinViewModel @KoinViewModel class SearchViewModel( - private val searchUseCase: SearchUseCase, - private val mostPopularMoviesUseCase: MostPopularMoviesUseCase + private val searchUseCase: com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase, + private val mostPopularMoviesUseCase: com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase ) : ViewModel() { private var tryAgain: () -> Unit = {} - private val _uiState = MutableStateFlow(SearchUIState.Loading) - val uiState: StateFlow = _uiState.stateIn( + private val _uiState = MutableStateFlow( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Loading) + val uiState: StateFlow = _uiState.stateIn( scope = viewModelScope, started = SharingStarted.Eagerly, initialValue = _uiState.value @@ -58,9 +59,9 @@ class SearchViewModel( }.collect { result -> _uiState.update { if (result.results.isEmpty()) { - SearchUIState.Empty + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty } else { - SearchUIState.Success(result) + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success(result) } } } @@ -78,9 +79,9 @@ class SearchViewModel( }.collect { result -> _uiState.update { if (result.results.isEmpty()) { - SearchUIState.Empty + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty } else { - SearchUIState.Success(result) + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success(result) } } } @@ -89,13 +90,13 @@ class SearchViewModel( private fun showError(messageError: String) { _uiState.update { - SearchUIState.Error(messageError = messageError) + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Error(messageError = messageError) } } private fun showLoading() { _uiState.update { - SearchUIState.Loading + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Loading } } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchCarousel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt similarity index 96% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchCarousel.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt index d736bac1..389802b0 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchCarousel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -47,7 +47,7 @@ data class SearchCarousel( @Composable fun SearchCarouselStream( - content: SearchCarousel, + content: com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchCarousel, onNavigateDetailList: (String) -> Unit = {}, modifier: Modifier = Modifier ) { diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCard.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt similarity index 89% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCard.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt index f496d701..3866c0dd 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreamCard.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.foundation.background import androidx.compose.foundation.border @@ -29,7 +29,7 @@ import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage @Suppress("MagicNumber") @Composable fun SearchStreamCard( - content: SearchStreamCardModel, + content: com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel, onSearchStreamPressed: (id: String) -> Unit ) { Row( @@ -43,7 +43,7 @@ fun SearchStreamCard( onSearchStreamPressed(content.id) } ) { - ImageStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.ImageStream( url = content.url, modifier = Modifier .weight(2.5f) @@ -59,7 +59,7 @@ fun SearchStreamCard( fontSize = 18.sp, overflow = TextOverflow.Ellipsis ) - PlayerIcon( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.PlayerIcon( modifier = Modifier .weight(2f) .padding(2.dp) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt similarity index 95% rename from feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt rename to feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt index b86c064f..47ddfae9 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/widgets/SearchStreams.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.widgets +package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -53,10 +53,10 @@ fun SearchableTopBar( modifier: Modifier = Modifier, ) { Column(modifier = modifier) { - StreamPlayerTopBar( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamPlayerTopBar( onBackPressed = onBackPressed ) - SearchTopBar( + _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchTopBar( currentSearchText = currentSearchText, onSearchTextChanged = onSearchTextChanged, onSearchDispatched = onSearchDispatched, diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/MostPopularMoviesService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/MostPopularMoviesService.kt deleted file mode 100644 index ea68be71..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/api/MostPopularMoviesService.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.data.api - -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.request.get -import io.ktor.client.request.url -import org.koin.core.annotation.Factory -import org.koin.core.annotation.Provided - -interface MostPopularMoviesService { - suspend fun getPopular(): NetworkResponse -} - -@Factory(binds = [MostPopularMoviesService::class]) -class MostPopularMoviesServiceImpl( - @Provided private val client: HttpClient -) : MostPopularMoviesService { - override suspend fun getPopular(): NetworkResponse = - client.safeRequest { - url("movie/popular") - } -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/MostPopularMoviesDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/MostPopularMoviesDataSource.kt deleted file mode 100644 index 556be8c9..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/MostPopularMoviesDataSource.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.data.datasource - -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.data.api.MostPopularMoviesService -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface MostPopularMoviesDataSource { - suspend fun getMostPopularMovies(): Flow -} - -@Factory(binds = [MostPopularMoviesDataSource::class]) -class MostPopularMoviesDataSourceImpl( - private val service: MostPopularMoviesService -) : MostPopularMoviesDataSource { - - override suspend fun getMostPopularMovies(): Flow = - service.getPopular().toFlow() -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/SearchStreamDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/SearchStreamDataSource.kt deleted file mode 100644 index bb0606f2..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/datasource/SearchStreamDataSource.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.data.datasource - -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.data.api.SearchStreamService -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface SearchStreamDataSource { - suspend fun getMovieSearch(query: String): Flow -} - -@Factory(binds = [SearchStreamDataSource::class]) -class SearchStreamDataSourceImpl( - private val service: SearchStreamService -): SearchStreamDataSource { - - override suspend fun getMovieSearch(query:String): Flow = - service.getSearch(query = query).toFlow() -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/MostPopularMoviesRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/MostPopularMoviesRepository.kt deleted file mode 100644 index 7a630a48..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/MostPopularMoviesRepository.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.data.repository - -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.data.datasource.MostPopularMoviesDataSource -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface MostPopularMoviesRepository { - suspend fun getMostPopularMovies(): Flow -} - -@Factory(binds = [MostPopularMoviesRepository::class]) -class MostPopularMoviesRepositoryImpl( - private val dataSource: MostPopularMoviesDataSource -) : MostPopularMoviesRepository { - override suspend fun getMostPopularMovies(): Flow = - dataSource.getMostPopularMovies() -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/SearchStreamRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/SearchStreamRepository.kt deleted file mode 100644 index 6358c928..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/data/repository/SearchStreamRepository.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.data.repository - -import com.codandotv.streamplayerapp.feature_search.data.datasource.SearchStreamDataSource -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface SearchStreamRepository { - suspend fun getMovieSearch(query: String): Flow - -} - -@Factory(binds = [SearchStreamRepository::class]) -class SearchStreamRepositoryImp( - private val dataSource: SearchStreamDataSource -) : SearchStreamRepository { - override suspend fun getMovieSearch(query: String): Flow = - dataSource.getMovieSearch(query) -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/MostPopularMoviesUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/MostPopularMoviesUseCase.kt deleted file mode 100644 index 4afdd79f..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/MostPopularMoviesUseCase.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.domain - -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.data.repository.MostPopularMoviesRepository -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface MostPopularMoviesUseCase { - suspend operator fun invoke(): Flow -} - -@Factory(binds = [MostPopularMoviesUseCase::class]) -class MostPopularMoviesUseCaseImpl( - val repository: MostPopularMoviesRepository -) : MostPopularMoviesUseCase { - override suspend operator fun invoke(): Flow { - return repository.getMostPopularMovies() - } -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/SearchUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/SearchUseCase.kt deleted file mode 100644 index 28b77f76..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/SearchUseCase.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.domain - -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.data.repository.SearchStreamRepository -import kotlinx.coroutines.flow.Flow -import org.koin.core.annotation.Factory - -interface SearchUseCase { - suspend operator fun invoke(query:String): Flow -} - -@Factory(binds = [SearchUseCase::class]) -class SearchUseCaseImpl(val repository: SearchStreamRepository) : SearchUseCase { - override suspend operator fun invoke(query:String): Flow { - return repository.getMovieSearch(query = query) - } -} diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/mapper/SearchMapper.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/mapper/SearchMapper.kt deleted file mode 100644 index a96edcb1..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/domain/mapper/SearchMapper.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.domain.mapper - -import com.codandotv.streamplayerapp.core_shared.Url -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse.SearchStreamResponse -import com.codandotv.streamplayerapp.feature_search.presentation.widgets.SearchStreamCardModel - -fun SearchStreamResponse.toSearchStreamCardModel() = SearchStreamCardModel( - id = id.toString(), - title = title, - url = "${Url.IMAGE_URL_SIZE_200}${posterPath}" -) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchUIState.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchUIState.kt deleted file mode 100644 index aae069c5..00000000 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_search/presentation/screens/SearchUIState.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.codandotv.streamplayerapp.feature_search.presentation.screens - -import com.codandotv.streamplayerapp.feature_search.data.model.ListSearchStreamResponse - -sealed class SearchUIState { - data class Success(val listCharacters: ListSearchStreamResponse) : SearchUIState() - data class Error(val messageError: String = "") : SearchUIState() - object Loading : SearchUIState() - object Empty : SearchUIState() -} From 35f13d92480802afd6d360869cf8101ff773d741 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:53:28 -0300 Subject: [PATCH 07/33] Refactor feature profile package structure and update imports --- .../di/AppModule.kt | 4 +- .../navigation/NavigationGraph.kt | 2 +- .../ProfilePickerStreamToolbarPreview.kt | 4 +- .../SetupProfilePickerScreenPreview.kt | 10 +++-- .../data/ProfilePickerStreamRepository.kt | 28 ++++++------ .../data/ProfilePickerStreamService.kt | 10 ++--- .../data/model/ProfileStreamResponse.kt | 4 +- .../profile/di/ProfilePickerStreamModule.kt | 2 +- .../domain/ProfilePickerStreamMapper.kt | 11 +++++ .../domain/ProfilePickerStreamUseCase.kt | 13 +++--- .../profile/domain/ProfileStream.kt | 2 +- .../ProfilePickerStreamNavigation.kt | 6 +-- .../screens/ProfilePickerStreamScreen.kt | 44 +++++++++++-------- .../screens/ProfilePickerStreamViewModel.kt | 14 +++--- .../screens/ProfilePickerStreamsUIState.kt | 8 ++-- .../presentation/widget/ComposeExtensions.kt | 2 +- .../widget/ProfilePickerOpacityLayer.kt | 2 +- .../widget/ProfilePickerProfilesGrid.kt | 24 +++++----- .../ProfilePickerSelectedProfileContainer.kt | 6 +-- .../widget/ProfilePickerStreamLoad.kt | 2 +- .../widget/ProfilePickerStreamToolbar.kt | 2 +- .../domain/ProfilePickerStreamMapper.kt | 11 ----- 22 files changed, 114 insertions(+), 97 deletions(-) rename feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt (63%) rename feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/screens/SetupProfilePickerScreenPreview.kt (57%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/data/ProfilePickerStreamRepository.kt (58%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/data/ProfilePickerStreamService.kt (51%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/data/model/ProfileStreamResponse.kt (59%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/di/ProfilePickerStreamModule.kt (76%) create mode 100644 feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/domain/ProfilePickerStreamUseCase.kt (77%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/domain/ProfileStream.kt (61%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/navigation/ProfilePickerStreamNavigation.kt (71%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/screens/ProfilePickerStreamScreen.kt (72%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/screens/ProfilePickerStreamViewModel.kt (84%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/screens/ProfilePickerStreamsUIState.kt (67%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ComposeExtensions.kt (74%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ProfilePickerOpacityLayer.kt (85%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ProfilePickerProfilesGrid.kt (78%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt (89%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ProfilePickerStreamLoad.kt (86%) rename feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/{ => feature}/profile/presentation/widget/ProfilePickerStreamToolbar.kt (96%) delete mode 100644 feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamMapper.kt diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 18b4d143..d1fdbef6 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -8,7 +8,7 @@ import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModu import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule import com.codandotv.streamplayerapp.feature.search.di.SearchModule import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError -import com.codandotv.streamplayerapp.profile.di.ProfilePickerStreamModule +import com.codandotv.streamplayerapp.feature.profile.di.ProfilePickerStreamModule import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO @@ -37,7 +37,7 @@ fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinAppl ListStreamModule.module, com.codandotv.streamplayerapp.feature.search.di.SearchModule().module, NewsScreenModule().module, - ProfilePickerStreamModule().module + com.codandotv.streamplayerapp.feature.profile.di.ProfilePickerStreamModule().module // endregion ) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index 4210b65d..703a89b5 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -18,7 +18,7 @@ import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlay import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes import com.codandotv.streamplayerapp.core_navigation.routes.Routes import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.navigation.listStreamsNavGraph -import com.codandotv.streamplayerapp.profile.presentation.navigation.profilePickerStreamNavGraph +import com.codandotv.streamplayerapp.feature.profile.presentation.navigation.profilePickerStreamNavGraph import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph import com.codandotv.streamplayerapp.feature_detail.presentation.navigation.detailStreamNavGraph import com.codandotv.streamplayerapp.feature_news.presentation.navigation.newsStreamNavGraph diff --git a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt similarity index 63% rename from feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt rename to feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt index eca69bc3..0e050258 100644 --- a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt +++ b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt @@ -1,9 +1,9 @@ -package com.codandotv.streamplayerapp.profile.presentation.screens +package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews -import com.codandotv.streamplayerapp.profile.presentation.widget.ProfilePickerStreamToolbar +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerStreamToolbar @ThemePreviews @Composable diff --git a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/SetupProfilePickerScreenPreview.kt b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt similarity index 57% rename from feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/SetupProfilePickerScreenPreview.kt rename to feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt index d985a6bc..a115fed7 100644 --- a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/SetupProfilePickerScreenPreview.kt +++ b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt @@ -1,9 +1,9 @@ -package com.codandotv.streamplayerapp.profile.presentation.screens +package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.compose.runtime.Composable import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews -import com.codandotv.streamplayerapp.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream @ThemePreviews @Composable @@ -11,7 +11,11 @@ fun SetupProfilePickerScreenPreview() { ThemePreview { SetupProfilePickerScreen( uiState = ProfilePickerStreamsUIState( - selectedItem = ProfileStream("1", "Name", ""), + selectedItem = ProfileStream( + "1", + "Name", + "" + ), ) ) } diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt similarity index 58% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt index 827f6151..0fd48802 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamRepository.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt @@ -1,29 +1,29 @@ -package com.codandotv.streamplayerapp.profile.data +package com.codandotv.streamplayerapp.feature.profile.data import com.codandotv.streamplayerapp.core_networking.handleError.toFlow import com.codandotv.streamplayerapp.core_networking.handleError.toResult -import com.codandotv.streamplayerapp.profile.domain.ProfileStream -import com.codandotv.streamplayerapp.profile.domain.toProfiles +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.domain.toProfiles import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map import org.koin.core.annotation.Factory interface ProfilePickerStreamRepository { - suspend fun getProfiles(): Flow> + suspend fun getProfiles(): Flow> } @Factory class ProfilePickerStreamRepositoryImpl( - private val service: ProfilePickerStreamService -) : ProfilePickerStreamRepository { + private val service: com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamService +) : com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamRepository { - override suspend fun getProfiles(): Flow> { + override suspend fun getProfiles(): Flow> { with(service.getProfiles()) { if (this.toResult().isFailure || this.toResult().getOrNull() == null) { // Log.i("ProfilePickerStreamRepositoryImpl", "versão off carregada") - return flowOf(mockProfiles) + return flowOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.profile.data.mockProfiles) } else { return this.toFlow().map { it.toProfiles() } } @@ -33,32 +33,32 @@ class ProfilePickerStreamRepositoryImpl( private val mockProfiles = listOf( - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "1", name = "Chapei de Palha", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_1.png" ), - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "2", name = "Martha", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_2.png" ), - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "3", name = "Morningstar", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_3.png" ), - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "4", name = "Shelby", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_4.png" ), - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "5", name = "Mooncake", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_5.png" ), - ProfileStream( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "6", name = "CodandoTV", imageUrl = "https://raw.githubusercontent.com/git-jr/sample-files/main/profile%20pics/netflix_profile_pic_6.png" diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt similarity index 51% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt index f1d6ca32..8c21b7f6 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/ProfilePickerStreamService.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt @@ -1,22 +1,22 @@ -package com.codandotv.streamplayerapp.profile.data +package com.codandotv.streamplayerapp.feature.profile.data import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest -import com.codandotv.streamplayerapp.profile.data.model.ProfilesResponse +import com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse import io.ktor.client.HttpClient import io.ktor.client.request.url import org.koin.core.annotation.Factory import org.koin.core.annotation.Provided interface ProfilePickerStreamService { - suspend fun getProfiles(): NetworkResponse + suspend fun getProfiles(): NetworkResponse } @Factory class ProfilePickerStreamServiceImpl( @Provided private val client: HttpClient -) : ProfilePickerStreamService { - override suspend fun getProfiles(): NetworkResponse = +) : com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamService { + override suspend fun getProfiles(): NetworkResponse = client.safeRequest { url("profiles") } diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/model/ProfileStreamResponse.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/model/ProfileStreamResponse.kt similarity index 59% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/model/ProfileStreamResponse.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/model/ProfileStreamResponse.kt index 8c61aa6a..670210e8 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/data/model/ProfileStreamResponse.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/model/ProfileStreamResponse.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.data.model +package com.codandotv.streamplayerapp.feature.profile.data.model import kotlinx.serialization.Serializable @@ -12,5 +12,5 @@ data class ProfileStreamResponse( @Serializable data class ProfilesResponse( - val profiles: List + val profiles: List ) diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/di/ProfilePickerStreamModule.kt similarity index 76% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/di/ProfilePickerStreamModule.kt index f06a7da4..d3d7e66e 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/di/ProfilePickerStreamModule.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/di/ProfilePickerStreamModule.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.di +package com.codandotv.streamplayerapp.feature.profile.di import org.koin.core.annotation.ComponentScan import org.koin.core.annotation.Module diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt new file mode 100644 index 00000000..bd4ec6ee --- /dev/null +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt @@ -0,0 +1,11 @@ +package com.codandotv.streamplayerapp.feature.profile.domain + +import com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse + +fun com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse.toProfiles(): List = this.profiles.map { profileResponse -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( + id = profileResponse.id, + name = profileResponse.name, + imageUrl = profileResponse.profile_url, + ) +} diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt similarity index 77% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt index 490d855b..97a17305 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamUseCase.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt @@ -1,12 +1,13 @@ @file:Suppress("MagicNumber") -package com.codandotv.streamplayerapp.profile.domain -import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepository +package com.codandotv.streamplayerapp.feature.profile.domain + +import com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamRepository import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface ProfilePickerStreamUseCase { - suspend fun getProfile(): Flow> + suspend fun getProfile(): Flow> fun getListOffsetProfiles( haltSizeImage: Int, oneThirdOfWidthScreen: Int, @@ -24,10 +25,10 @@ interface ProfilePickerStreamUseCase { @Factory class ProfilePickerStreamUseCaseImpl( - private val profilePickerStreamRepository: ProfilePickerStreamRepository -) : ProfilePickerStreamUseCase { + private val profilePickerStreamRepository: com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamRepository +) : com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase { - override suspend fun getProfile(): Flow> = + override suspend fun getProfile(): Flow> = profilePickerStreamRepository.getProfiles() override fun getListOffsetProfiles( diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfileStream.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfileStream.kt similarity index 61% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfileStream.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfileStream.kt index 3eaa2cb8..1dd1f510 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfileStream.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfileStream.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.domain +package com.codandotv.streamplayerapp.feature.profile.domain data class ProfileStream( val id: String, diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt similarity index 71% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt index a50acfc5..81f1bbd6 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/navigation/ProfilePickerStreamNavigation.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.navigation +package com.codandotv.streamplayerapp.feature.profile.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController @@ -6,13 +6,13 @@ import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.HOME import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamScreen +import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamScreen import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) fun NavGraphBuilder.profilePickerStreamNavGraph(navController: NavHostController) { composable(Routes.PROFILE_PICKER) { - ProfilePickerStreamScreen( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamScreen( onNavigateListStreams = { profilePic -> navController.navigate("$HOME?$PROFILE_ID=$profilePic") } diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamScreen.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt similarity index 72% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamScreen.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt index 31162930..5839bdfc 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamScreen.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.screens +package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.animateDpAsState @@ -15,13 +15,13 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.profile.domain.ProfileStream -import com.codandotv.streamplayerapp.profile.presentation.widget.LoadScreen -import com.codandotv.streamplayerapp.profile.presentation.widget.ProfilePickerOpacityLayer -import com.codandotv.streamplayerapp.profile.presentation.widget.ProfilePickerProfilesGrid -import com.codandotv.streamplayerapp.profile.presentation.widget.ProfilePickerSelectedProfileContainer -import com.codandotv.streamplayerapp.profile.presentation.widget.ProfilePickerStreamToolbar -import com.codandotv.streamplayerapp.profile.presentation.widget.dpToPx +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.LoadScreen +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerOpacityLayer +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerProfilesGrid +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerSelectedProfileContainer +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerStreamToolbar +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.dpToPx import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_profile.generated.resources.Res @@ -29,18 +29,19 @@ import streamplayerapp_kmp.feature_profile.generated.resources.profile_animation import streamplayerapp_kmp.feature_profile.generated.resources.profile_animation_selected_image_position import streamplayerapp_kmp.feature_profile.generated.resources.profile_animation_selected_image_size import streamplayerapp_kmp.feature_profile.generated.resources.profile_animation_showing_all_profiles +import kotlin.collections.indexOf @Composable fun ProfilePickerStreamScreen( - viewModel: ProfilePickerStreamViewModel = koinViewModel(), + viewModel: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamViewModel = koinViewModel(), onNavigateListStreams: (String) -> Unit = {}, ) { val uiState by viewModel.uiState.collectAsState() if (uiState.isLoading) { - LoadScreen() + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.LoadScreen() } else { - SetupProfilePickerScreen( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.SetupProfilePickerScreen( uiState = uiState, onSetCenterImageAlpha = { viewModel.setCenterImageAlpha(it) }, onSetLastItemPositioned = { viewModel.setLastItemPositioned(it) }, @@ -58,13 +59,13 @@ fun ProfilePickerStreamScreen( @Suppress("LongMethod", "LongParameterList") @Composable fun SetupProfilePickerScreen( - uiState: ProfilePickerStreamsUIState, + uiState: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState, onSetCenterImageAlpha: (Float) -> Unit = {}, onSetScreenSize: (Float, Float, Int, Int) -> Unit = { _, _, _, _ -> }, onSetLastItemPositioned: (Boolean) -> Unit = {}, onSetHaltSizeImage: (Int) -> Unit = { }, onSetHalfExpandedSizeImage: (Int) -> Unit = { }, - onClickSelectedProfile: (ProfileStream) -> Unit = {}, + onClickSelectedProfile: (com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream) -> Unit = {}, onNavigateListStreams: (String) -> Unit = {} ) { val animatedOpacityBackground by animateColorAsState( @@ -83,7 +84,9 @@ fun SetupProfilePickerScreen( Scaffold( topBar = { - ProfilePickerStreamToolbar(modifier = Modifier.background(animatedOpacityBackground)) + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerStreamToolbar( + modifier = Modifier.background(animatedOpacityBackground) + ) }, content = { _ -> with(uiState) { @@ -116,7 +119,10 @@ fun SetupProfilePickerScreen( } else { if (uiState.profilesStream.isNotEmpty() && offsetProfiles.isNotEmpty()) { with(offsetProfiles[uiState.profilesStream.indexOf(selectedItem)]) { - IntOffset(first, second) + IntOffset( + _root_ide_package_.kotlin.Pair.first, + _root_ide_package_.kotlin.Pair.second + ) } } else { IntOffset(0, 0) @@ -126,7 +132,7 @@ fun SetupProfilePickerScreen( animationSpec = tween(durationMillis = if (!showCenterImage) 100 else 800) ) - ProfilePickerProfilesGrid( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerProfilesGrid( uiState = uiState, animatedProfileAlpha = animatedProfileAlpha, onSetScreenSize = onSetScreenSize, @@ -134,9 +140,11 @@ fun SetupProfilePickerScreen( onSetLastItemPositioned = onSetLastItemPositioned ) - ProfilePickerOpacityLayer(animatedOpacityBackground) + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerOpacityLayer( + animatedOpacityBackground + ) - ProfilePickerSelectedProfileContainer( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerSelectedProfileContainer( state = uiState, offsetSelectedProfileImage = animatedOffsetSelectedProfileImage, animatedSizeImage = animatedSizeImage diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt similarity index 84% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt index 2dc3c90f..aeb4b08c 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamViewModel.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt @@ -1,10 +1,10 @@ -package com.codandotv.streamplayerapp.profile.presentation.screens +package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.profile.domain.ProfilePickerStreamUseCase -import com.codandotv.streamplayerapp.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -15,10 +15,10 @@ import org.koin.android.annotation.KoinViewModel @KoinViewModel class ProfilePickerStreamViewModel( - private val useCase: ProfilePickerStreamUseCase, + private val useCase: com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase, ) : ViewModel() { - private val _uiState = MutableStateFlow(ProfilePickerStreamsUIState()) + private val _uiState = MutableStateFlow(_root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState()) val uiState = _uiState.stateIn( viewModelScope, SharingStarted.Eagerly, @@ -33,7 +33,7 @@ class ProfilePickerStreamViewModel( } .collect { profilePickerStream -> _uiState.update { - ProfilePickerStreamsUIState( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState( profilesStream = profilePickerStream, selectedItem = profilePickerStream.first(), isLoading = false @@ -107,7 +107,7 @@ class ProfilePickerStreamViewModel( } @Suppress("MagicNumber") - fun moveSelectedProfileToCenterImage(profile: ProfileStream) { + fun moveSelectedProfileToCenterImage(profile: com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream) { viewModelScope.launch { with(_uiState.value) { // move hide image to the position of the clicked item diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamsUIState.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt similarity index 67% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamsUIState.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt index 0ca2751b..8be3f78f 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/screens/ProfilePickerStreamsUIState.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt @@ -1,11 +1,11 @@ -package com.codandotv.streamplayerapp.profile.presentation.screens +package com.codandotv.streamplayerapp.feature.profile.presentation.screens -import com.codandotv.streamplayerapp.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream data class ProfilePickerStreamsUIState( - val profilesStream: List = emptyList(), - val selectedItem: ProfileStream? = null, + val profilesStream: List = emptyList(), + val selectedItem: com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream? = null, val isLoading: Boolean = true, val showCenterImage: Boolean = false, val centerImageAlpha: Float = 1f, diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ComposeExtensions.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ComposeExtensions.kt similarity index 74% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ComposeExtensions.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ComposeExtensions.kt index 64e6de7c..ad3a9f60 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ComposeExtensions.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ComposeExtensions.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalDensity diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerOpacityLayer.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerOpacityLayer.kt similarity index 85% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerOpacityLayer.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerOpacityLayer.kt index efbd403f..387985e7 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerOpacityLayer.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerOpacityLayer.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerProfilesGrid.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt similarity index 78% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerProfilesGrid.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt index 6b99fe34..9b6ac17b 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerProfilesGrid.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.BoxWithConstraints @@ -22,8 +22,9 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.profile.domain.ProfileStream -import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamsUIState +import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState +import com.codandotv.streamplayerapp.feature.profile.presentation.widget.dpToPx import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_profile.generated.resources.Res @@ -32,10 +33,10 @@ import streamplayerapp_kmp.feature_profile.generated.resources.profile_current_p @Composable fun ProfilePickerProfilesGrid( - uiState: ProfilePickerStreamsUIState, + uiState: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState, animatedProfileAlpha: Float, onSetScreenSize: (Float, Float, Int, Int) -> Unit, - onClickSelectedProfile: (ProfileStream) -> Unit, + onClickSelectedProfile: (com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream) -> Unit, onSetLastItemPositioned: (Boolean) -> Unit ) { BoxWithConstraints( @@ -58,13 +59,16 @@ fun ProfilePickerProfilesGrid( profilesStream.forEach { profile -> val profileItemPosition = if (offsetProfiles.isNotEmpty()) { with(offsetProfiles[profilesStream.indexOf(profile)]) { - IntOffset(first, second) + IntOffset( + _root_ide_package_.kotlin.Pair.first, + _root_ide_package_.kotlin.Pair.second + ) } } else { IntOffset(0, 0) } - ProfileItem( + _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfileItem( state = uiState, profileItemPosition, profile, onClickSelectedProfile ) @@ -80,10 +84,10 @@ fun ProfilePickerProfilesGrid( @Suppress("MagicNumber") @Composable private fun ProfileItem( - state: ProfilePickerStreamsUIState, + state: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState, profileItemPosition: IntOffset, - profile: ProfileStream, - onClickSelectedProfile: (ProfileStream) -> Unit + profile: com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream, + onClickSelectedProfile: (com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream) -> Unit ) { with(state) { Column( diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt similarity index 89% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt index b54ed2e8..07f48bab 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column @@ -17,7 +17,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamsUIState +import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_profile.generated.resources.Res import streamplayerapp_kmp.feature_profile.generated.resources.profile_current_profile_name @@ -25,7 +25,7 @@ import streamplayerapp_kmp.feature_profile.generated.resources.profile_current_p @Suppress("MagicNumber") @Composable fun ProfilePickerSelectedProfileContainer( - state: ProfilePickerStreamsUIState, + state: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState, offsetSelectedProfileImage: IntOffset, animatedSizeImage: Dp ) { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamLoad.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt similarity index 86% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamLoad.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt index a2746cbd..dda82969 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamLoad.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamToolbar.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt similarity index 96% rename from feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamToolbar.kt rename to feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt index b94752f2..2b272f5b 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/presentation/widget/ProfilePickerStreamToolbar.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.profile.presentation.widget +package com.codandotv.streamplayerapp.feature.profile.presentation.widget import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Arrangement diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamMapper.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamMapper.kt deleted file mode 100644 index ff732549..00000000 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/profile/domain/ProfilePickerStreamMapper.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.codandotv.streamplayerapp.profile.domain - -import com.codandotv.streamplayerapp.profile.data.model.ProfilesResponse - -fun ProfilesResponse.toProfiles(): List = this.profiles.map { profileResponse -> - ProfileStream( - id = profileResponse.id, - name = profileResponse.name, - imageUrl = profileResponse.profile_url, - ) -} From eb6cb405b9f97daabc355fae1fec6307fd6d66eb Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:54:13 -0300 Subject: [PATCH 08/33] Refactor feature news package structure and update imports --- .../kotlin/com.codandotv.streamplayerapp/di/AppModule.kt | 5 +---- .../navigation/NavigationGraph.kt | 2 +- .../{feature_news => feature/news}/di/NewsScreenModule.kt | 2 +- .../news}/presentation/NewsScreenViewModel.kt | 2 +- .../news}/presentation/navigation/NewsNavigation.kt | 4 ++-- .../news}/presentation/screens/NewsScreen.kt | 8 ++++---- .../news}/presentation/widget/ImageCaptureHandler.kt | 2 +- .../news}/presentation/widget/ImagePickerCameraGallery.kt | 2 +- 8 files changed, 12 insertions(+), 15 deletions(-) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/di/NewsScreenModule.kt (76%) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/presentation/NewsScreenViewModel.kt (97%) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/presentation/navigation/NewsNavigation.kt (79%) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/presentation/screens/NewsScreen.kt (95%) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/presentation/widget/ImageCaptureHandler.kt (78%) rename feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_news => feature/news}/presentation/widget/ImagePickerCameraGallery.kt (97%) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index d1fdbef6..8d9b55a2 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -5,10 +5,7 @@ import com.codandotv.streamplayerapp.core_local_storage.di.LocalStorageModule import com.codandotv.streamplayerapp.core_networking.di.NetworkModule import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModule -import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule -import com.codandotv.streamplayerapp.feature.search.di.SearchModule -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError -import com.codandotv.streamplayerapp.feature.profile.di.ProfilePickerStreamModule +import com.codandotv.streamplayerapp.feature.news.di.NewsScreenModule import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index 703a89b5..00214a58 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -21,7 +21,7 @@ import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.navi import com.codandotv.streamplayerapp.feature.profile.presentation.navigation.profilePickerStreamNavGraph import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph import com.codandotv.streamplayerapp.feature_detail.presentation.navigation.detailStreamNavGraph -import com.codandotv.streamplayerapp.feature_news.presentation.navigation.newsStreamNavGraph +import com.codandotv.streamplayerapp.feature.news.presentation.navigation.newsStreamNavGraph import com.codandotv.streamplayerapp.feature.search.presentation.navigation.searchStreamsNavGraph @Composable diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/di/NewsScreenModule.kt similarity index 76% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/di/NewsScreenModule.kt index 0b1ab285..e703d583 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/di/NewsScreenModule.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/di/NewsScreenModule.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_news.di +package com.codandotv.streamplayerapp.feature.news.di import org.koin.core.annotation.ComponentScan import org.koin.core.annotation.Module diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt similarity index 97% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt index 005fe60d..45a6dcfc 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/NewsScreenViewModel.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_news.presentation +package com.codandotv.streamplayerapp.feature.news.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt similarity index 79% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt index 56ada54d..3e883938 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/navigation/NewsNavigation.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt @@ -1,10 +1,10 @@ -package com.codandotv.streamplayerapp.feature_news.presentation.navigation +package com.codandotv.streamplayerapp.feature.news.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes -import com.codandotv.streamplayerapp.feature_news.presentation.screens.NewsScreenContent +import com.codandotv.streamplayerapp.feature.news.presentation.screens.NewsScreenContent import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/screens/NewsScreen.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt similarity index 95% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/screens/NewsScreen.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt index ff0265ce..3ba234c4 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/screens/NewsScreen.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_news.presentation.screens +package com.codandotv.streamplayerapp.feature.news.presentation.screens import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -25,9 +25,9 @@ import com.codandotv.streamplayerapp.core_camera_gallery.camera.rememberCameraMa import com.codandotv.streamplayerapp.core_camera_gallery.gallery.rememberGalleryManager import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation import com.codandotv.streamplayerapp.core_permission.permission.PermissionDeniedDialog -import com.codandotv.streamplayerapp.feature_news.presentation.NewsScreenActionTakeImage -import com.codandotv.streamplayerapp.feature_news.presentation.NewsScreenViewModel -import com.codandotv.streamplayerapp.feature_news.presentation.widget.ImagePickerContent +import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenActionTakeImage +import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenViewModel +import com.codandotv.streamplayerapp.feature.news.presentation.widget.ImagePickerContent import dev.icerock.moko.permissions.compose.BindEffect import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImageCaptureHandler.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImageCaptureHandler.kt similarity index 78% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImageCaptureHandler.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImageCaptureHandler.kt index e5220f9f..3109f010 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImageCaptureHandler.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImageCaptureHandler.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_news.presentation.widget +package com.codandotv.streamplayerapp.feature.news.presentation.widget class ImageCaptureHandler( val onCameraRequest: () -> Unit, diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImagePickerCameraGallery.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt similarity index 97% rename from feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImagePickerCameraGallery.kt rename to feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt index c975b994..ec660dba 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_news/presentation/widget/ImagePickerCameraGallery.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_news.presentation.widget +package com.codandotv.streamplayerapp.feature.news.presentation.widget import androidx.compose.foundation.Image import androidx.compose.foundation.background From 31a2f71603b5b88183b192dbe7f1fde68f925f55 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:55:43 -0300 Subject: [PATCH 09/33] Refactor feature liststreams package structure and update imports --- .../di/AppModule.kt | 4 +- .../navigation/NavigationGraph.kt | 2 +- .../core_background_work/SyncManager.kt | 8 +-- .../screen/ListStreamsScreenPreview.kt | 14 +++++ .../widgets/HighlightBannerPreview.kt | 17 +++-- .../screen/ListStreamsScreenPreview.kt | 12 ---- .../liststreams}/core/ContentType.kt | 2 +- .../list/data/ListStreamRepository.kt | 55 ++++++++++++++++ .../list/data/ListStreamService.kt | 10 +-- .../list/data/StreamDataSource.kt | 18 +++--- .../list/data/model/GenresResponse.kt | 14 +++++ .../list/data/model/ListStreamResponse.kt | 0 .../liststreams/list/di/ListStreamModule.kt | 63 +++++++++++++++++++ .../list/domain/GetGenresUseCase.kt | 17 +++++ .../list/domain/GetLatestMovieUseCase.kt | 17 +++++ .../list/domain/ListMovieUseCase.kt | 19 ++++++ .../list/domain/ListStreamAnalytics.kt | 7 +++ .../list/domain/ListStreamMapper.kt | 33 ++++++++++ .../liststreams/list/domain/model/Genre.kt | 6 ++ .../list/domain/model/HighlightBanner.kt | 20 ++++++ .../list/domain/model/ListStream.kt | 4 +- .../navigation/ListStreamsNavigation.kt | 13 ++-- .../screens/ListStreamViewModel.kt | 49 ++++++++------- .../presentation/screens/ListStreamsScreen.kt | 10 +-- .../screens/ListStreamsUIState.kt | 10 +++ .../presentation/widgets/HighlightBanner.kt | 43 ++++++++----- .../list/data/ListStreamRepository.kt | 51 --------------- .../list/data/model/GenresResponse.kt | 14 ----- .../list/di/ListStreamModule.kt | 63 ------------------- .../list/domain/GetGenresUseCase.kt | 17 ----- .../list/domain/GetLatestMovieUseCase.kt | 17 ----- .../list/domain/ListMovieUseCase.kt | 19 ------ .../list/domain/ListStreamAnalytics.kt | 6 -- .../list/domain/ListStreamMapper.kt | 28 --------- .../list/domain/model/Genre.kt | 6 -- .../list/domain/model/HighlightBanner.kt | 20 ------ .../screens/ListStreamsUIState.kt | 10 --- 37 files changed, 373 insertions(+), 345 deletions(-) create mode 100644 feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt rename feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams/list => feature/liststreams}/presentation/widgets/HighlightBannerPreview.kt (70%) delete mode 100644 feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screen/ListStreamsScreenPreview.kt rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/core/ContentType.kt (94%) create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/data/ListStreamService.kt (76%) rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/data/StreamDataSource.kt (53%) create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/data/model/ListStreamResponse.kt (100%) create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/Genre.kt create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/domain/model/ListStream.kt (51%) rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/presentation/navigation/ListStreamsNavigation.kt (67%) rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/presentation/screens/ListStreamViewModel.kt (60%) rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/presentation/screens/ListStreamsScreen.kt (87%) create mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt rename feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_list_streams => feature/liststreams}/list/presentation/widgets/HighlightBanner.kt (79%) delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamRepository.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/GenresResponse.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/di/ListStreamModule.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetGenresUseCase.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetLatestMovieUseCase.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListMovieUseCase.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamAnalytics.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamMapper.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/Genre.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/HighlightBanner.kt delete mode 100644 feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsUIState.kt diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 8d9b55a2..0b72f12b 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -4,7 +4,7 @@ import com.codandotv.streamplayerapp.core_background_work.di.SyncModule import com.codandotv.streamplayerapp.core_local_storage.di.LocalStorageModule import com.codandotv.streamplayerapp.core_networking.di.NetworkModule import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO -import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModule +import com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule import com.codandotv.streamplayerapp.feature.news.di.NewsScreenModule import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers @@ -31,7 +31,7 @@ fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinAppl SyncModule.module, // region feature_modules - ListStreamModule.module, + com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule.module, com.codandotv.streamplayerapp.feature.search.di.SearchModule().module, NewsScreenModule().module, com.codandotv.streamplayerapp.feature.profile.di.ProfilePickerStreamModule().module diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index 00214a58..7ab836cc 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -17,7 +17,7 @@ import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.navigation.listStreamsNavGraph +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation.listStreamsNavGraph import com.codandotv.streamplayerapp.feature.profile.presentation.navigation.profilePickerStreamNavGraph import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph import com.codandotv.streamplayerapp.feature_detail.presentation.navigation.detailStreamNavGraph diff --git a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt index 83fea714..e71f01f3 100644 --- a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt +++ b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt @@ -1,16 +1,16 @@ package com.codandotv.streamplayerapp.core_background_work -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream import kotlinx.coroutines.delay import kotlinx.coroutines.flow.first class SyncManager( - private val repository: ListStreamRepository + private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository ) { suspend fun syncData() { - val title: Stream = repository.topRatedStream().first() + val title: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream = repository.topRatedStream().first() val messageTitle = "${title.name} -Já disponível no app!" val messageBody = "Confira a sinopse: ${title.description}" val imageUrl = title.posterPathUrl diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt new file mode 100644 index 00000000..9fe014aa --- /dev/null +++ b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt @@ -0,0 +1,14 @@ +package com.codandotv.streamplayerapp.feature.liststreams.presentation.screen + +import androidx.compose.runtime.Composable +import androidx.navigation.compose.rememberNavController +import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews + +@ThemePreviews +@Composable +fun ListStreamsScreenPreview() { + com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen( + navController = rememberNavController(), + profilePicture = "" + ) +} diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBannerPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt similarity index 70% rename from feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBannerPreview.kt rename to feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt index deae77b4..da8eebfb 100644 --- a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBannerPreview.kt +++ b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt @@ -1,8 +1,7 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets +package com.codandotv.streamplayerapp.feature.liststreams.presentation.widgets import androidx.compose.runtime.Composable import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.IconAndTextInfo import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.core_shared_ui.generated.resources.Res import streamplayerapp_kmp.core_shared_ui.generated.resources.app_name @@ -14,12 +13,12 @@ import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlig import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_info import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_watch -typealias ContentType = com.codandotv.streamplayerapp.feature_list_streams.core.ContentType +typealias ContentType = com.codandotv.streamplayerapp.feature.liststreams.core.ContentType @ThemePreviews @Composable fun HighlightBannerPreview() { - HighlightBanner( - data = com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.HighlightBanner( + com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner( + data = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner( name = stringResource(Res.string.app_name), imageUrl = String(), contentType = ContentType.getContentName( @@ -28,21 +27,21 @@ fun HighlightBannerPreview() { contentTypeAsPlural = ContentType.getContentNameAsPlural( ContentType.SHOW ), - extraInfo = IconAndTextInfo( + extraInfo = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( streamplayerapp_kmp.feature_list_streams.generated.resources.Res.drawable.ic_top_10, ContentType.getContentName( ContentType.SHOW ) ), - leftButton = IconAndTextInfo( + leftButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( Res.drawable.ic_add, streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_add ), - centralButton = IconAndTextInfo( + centralButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( Res.drawable.ic_play, streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_watch ), - rightButton = IconAndTextInfo( + rightButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( Res.drawable.ic_info, streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_info ), diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screen/ListStreamsScreenPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screen/ListStreamsScreenPreview.kt deleted file mode 100644 index 0717265b..00000000 --- a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screen/ListStreamsScreenPreview.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screen - -import androidx.compose.runtime.Composable -import androidx.navigation.compose.rememberNavController -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews -import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamsScreen - -@ThemePreviews -@Composable -fun ListStreamsScreenPreview() { - ListStreamsScreen(navController = rememberNavController(), profilePicture = "") -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/core/ContentType.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/core/ContentType.kt similarity index 94% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/core/ContentType.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/core/ContentType.kt index 576308ba..d8d7ae86 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/core/ContentType.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/core/ContentType.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_list_streams.core +package com.codandotv.streamplayerapp.feature.liststreams.core import org.jetbrains.compose.resources.StringResource import streamplayerapp_kmp.feature_list_streams.generated.resources.Res diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt new file mode 100644 index 00000000..6fed7abb --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt @@ -0,0 +1,55 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.data + +import androidx.paging.Pager +import androidx.paging.PagingConfig +import androidx.paging.PagingData +import com.codandotv.streamplayerapp.core_networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toGenres +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toStream +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +interface ListStreamRepository { + suspend fun getGenres(): Flow> + + suspend fun topRatedStream(): Flow + + fun loadMovies(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> +} + +class ListStreamRepositoryImpl( + private val service: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService, +) : com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository { + + override suspend fun getGenres(): Flow> { + return service.getGenres().toFlow().map { it.toGenres() } + } + + override suspend fun topRatedStream() = service.getTopRatedMovies().toFlow().map { + it.results.first { it.poster_path != null }.toStream() + } + + override fun loadMovies(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> { + return Pager( + config = PagingConfig( + pageSize = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl.Companion.PAGE_SIZE, + maxSize = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl.Companion.MAX_SIZE, + ), + pagingSourceFactory = { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.StreamDataSource( + service, + genreName = genre.name, + genreId = genre.id + ) + }, + initialKey = 1 + ).flow + } + + companion object { + private const val PAGE_SIZE = 20 + private const val MAX_SIZE = 500 + } +} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamService.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt similarity index 76% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamService.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt index e2634895..77b9589c 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamService.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt @@ -1,9 +1,9 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.data +package com.codandotv.streamplayerapp.feature.liststreams.list.data import ListStreamResponse import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest -import com.codandotv.streamplayerapp.feature_list_streams.list.data.model.GenresResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse import io.ktor.client.HttpClient import io.ktor.client.request.parameter import io.ktor.client.request.url @@ -11,7 +11,7 @@ import io.ktor.client.request.url interface ListStreamService { suspend fun getMovies(genres: String): NetworkResponse suspend fun getPaginatedMovies(genres: String, page: Int): NetworkResponse - suspend fun getGenres(): NetworkResponse + suspend fun getGenres(): NetworkResponse suspend fun getTopRatedMovies( sortBy: String = "vote_average.desc", page: Int = 1 @@ -20,7 +20,7 @@ interface ListStreamService { class ListStreamServiceImpl( private val client: HttpClient -) : ListStreamService { +) : com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService { override suspend fun getMovies(genres: String): NetworkResponse { return client.safeRequest { @@ -40,7 +40,7 @@ class ListStreamServiceImpl( } } - override suspend fun getGenres(): NetworkResponse { + override suspend fun getGenres(): NetworkResponse { return client.safeRequest { url("genre/movie/list") } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/StreamDataSource.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt similarity index 53% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/StreamDataSource.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt index cf89dd96..2f1b9406 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/StreamDataSource.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt @@ -1,20 +1,20 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.data +package com.codandotv.streamplayerapp.feature.liststreams.list.data import androidx.paging.PagingSource import androidx.paging.PagingState import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.toListStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toListStream @Suppress("TooGenericExceptionCaught", "UseCheckOrError") class StreamDataSource( - private val service: ListStreamService, + private val service: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService, private val genreId: Long, private val genreName: String, -) : PagingSource() { +) : PagingSource() { - override suspend fun load(params: LoadParams): LoadResult { - val nextPageNumber = params.key ?: START_PAGE_INDEX + override suspend fun load(params: LoadParams): LoadResult { + val nextPageNumber = params.key ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.StreamDataSource.Companion.START_PAGE_INDEX return try { val response = service.getPaginatedMovies( @@ -22,7 +22,7 @@ class StreamDataSource( page = nextPageNumber ) - if (response is NetworkResponse.Success) { + if (response is com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse.Success) { LoadResult.Page( data = response.value.toListStream(genreName).streams, prevKey = if (nextPageNumber > 1) nextPageNumber - 1 else null, @@ -36,7 +36,7 @@ class StreamDataSource( } } - override fun getRefreshKey(state: PagingState): Int? = null + override fun getRefreshKey(state: PagingState): Int? = null companion object { private const val START_PAGE_INDEX = 1 diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt new file mode 100644 index 00000000..7dc429bf --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt @@ -0,0 +1,14 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.data.model + +import kotlinx.serialization.Serializable + +@Serializable +data class GenreResponse( + val id: Long, + val name: String +) + +@Serializable +data class GenresResponse( + val genres: List +) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/ListStreamResponse.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt similarity index 100% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/ListStreamResponse.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt new file mode 100644 index 00000000..02f46e7e --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt @@ -0,0 +1,63 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.di + +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamServiceImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCaseImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStreamImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalytics +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalyticsImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCaseImpl +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamViewModel +import org.koin.core.module.dsl.viewModel +import org.koin.dsl.module + +object ListStreamModule { + val module = module { + viewModel { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamViewModel( + listStreams = get(), + listGenres = get(), + latestStream = get() + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCaseImpl( + repository = get() + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCaseImpl( + repository = get() + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStreamImpl( + repository = get() + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalyticsImpl() + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl( + service = get(), + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamServiceImpl( + client = get() + ) + } + } +} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt new file mode 100644 index 00000000..de04d22c --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt @@ -0,0 +1,17 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain + +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import kotlinx.coroutines.flow.Flow + +interface GetGenresUseCase { + suspend operator fun invoke(): Flow> +} + +class GetGenresUseCaseImpl( + private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase { + override suspend fun invoke(): Flow> { + return repository.getGenres() + } +} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt new file mode 100644 index 00000000..db62bd8f --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt @@ -0,0 +1,17 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain + +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import kotlinx.coroutines.flow.Flow + +interface GetTopRatedStream { + suspend operator fun invoke(): Flow +} + +class GetTopRatedStreamImpl( + private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream { + override suspend operator fun invoke(): Flow { + return repository.topRatedStream() + } +} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt new file mode 100644 index 00000000..c9552b9a --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt @@ -0,0 +1,19 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain + +import androidx.paging.PagingData +import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import kotlinx.coroutines.flow.Flow + +interface ListStreamUseCase { + operator fun invoke(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> +} + +class ListStreamUseCaseImpl( + private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository +) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase { + override operator fun invoke(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> { + return repository.loadMovies(genre) + } +} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt new file mode 100644 index 00000000..fa766b90 --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt @@ -0,0 +1,7 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain + + +interface ListStreamAnalytics + +class ListStreamAnalyticsImpl : + com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalytics diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt new file mode 100644 index 00000000..ca0fb367 --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt @@ -0,0 +1,33 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain + +import ListStreamResponse +import StreamResponse +import com.codandotv.streamplayerapp.core_shared.Url +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toStream + +fun ListStreamResponse.toListStream(genre: String): com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream( + categoryName = genre, + streams = this.results.map { streamResponse -> + streamResponse.toStream() + } + ) + +fun com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse.toGenres(): List = this.genres.map { genreResponse -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre( + id = genreResponse.id, + name = genreResponse.name + ) +} + +fun StreamResponse.toStream(): com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream( + description = overview, + name = title, + posterPathUrl = "${Url.IMAGE_URL_SIZE_300}${poster_path}", + id = id.toString() + ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/Genre.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/Genre.kt new file mode 100644 index 00000000..66bb9796 --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/Genre.kt @@ -0,0 +1,6 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain.model + +data class Genre( + val id: Long, + val name: String +) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt new file mode 100644 index 00000000..66b09247 --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt @@ -0,0 +1,20 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.domain.model + +import org.jetbrains.compose.resources.DrawableResource +import org.jetbrains.compose.resources.StringResource + +data class HighlightBanner( + val name: String, + val imageUrl: String, + val contentType: StringResource, + val contentTypeAsPlural: StringResource, + val extraInfo: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, + val leftButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, + val centralButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, + val rightButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo +) + +data class IconAndTextInfo( + val icon: DrawableResource, + val text: StringResource +) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/ListStream.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt similarity index 51% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/ListStream.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt index c79aa627..c35356e4 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/ListStream.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain.model +package com.codandotv.streamplayerapp.feature.liststreams.list.domain.model data class Stream( val id : String, @@ -8,5 +8,5 @@ data class Stream( ) data class ListStream( val categoryName: String, - val streams: List + val streams: List ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/navigation/ListStreamsNavigation.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt similarity index 67% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/navigation/ListStreamsNavigation.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt index f7055ea9..c1ec9746 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/navigation/ListStreamsNavigation.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.navigation +package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController @@ -8,8 +8,8 @@ import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARA import com.codandotv.streamplayerapp.core_navigation.routes.Routes import com.codandotv.streamplayerapp.core_navigation.routes.Routes.DETAIL import com.codandotv.streamplayerapp.core_navigation.routes.Routes.PROFILE_PICKER -import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModule -import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamsScreen +import com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI @@ -19,10 +19,10 @@ internal const val DEFAULT_ID = "" fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) { composable(HOME_COMPLETE) { nav -> rememberKoinModules { - listOf(ListStreamModule.module) + listOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule.module) } - ListStreamsScreen( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen( navController = navController, onNavigateDetailList = { id -> navController.navigate("${DETAIL}${id}") @@ -33,7 +33,8 @@ fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) { onNavigateSearchScreen = { navController.navigate(Routes.SEARCH) }, - profilePicture = nav.savedStateHandle.get(PROFILE_ID) ?: DEFAULT_ID + profilePicture = nav.savedStateHandle.get(PROFILE_ID) + ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation.DEFAULT_ID ) } } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamViewModel.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt similarity index 60% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamViewModel.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt index 0a38de37..e989ceb4 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamViewModel.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt @@ -1,18 +1,18 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens +package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.paging.cachedIn import androidx.paging.map import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.feature_list_streams.core.ContentType -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetGenresUseCase -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetTopRatedStream -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamUseCase -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.IconAndTextInfo -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream +import com.codandotv.streamplayerapp.feature.liststreams.core.ContentType +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCardContent import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarouselContent import kotlinx.coroutines.flow.MutableStateFlow @@ -34,15 +34,16 @@ import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlig import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_info import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_stream_ranking import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_watch +import kotlin.collections.map class ListStreamViewModel( - private val listStreams: ListStreamUseCase, - private val listGenres: GetGenresUseCase, - private val latestStream: GetTopRatedStream + private val listStreams: com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase, + private val listGenres: com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase, + private val latestStream: com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream ) : ViewModel() { private val _uiState = MutableStateFlow( - ListStreamsUIState( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsUIState( streamsCarouselContent = emptyList(), isLoading = false ) @@ -82,32 +83,36 @@ class ListStreamViewModel( } } - private fun getHighlightBanner(latest: Stream) = - HighlightBanner( + private fun getHighlightBanner(latest: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream) = + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner( name = latest.name, imageUrl = latest.posterPathUrl, - contentType = ContentType.getContentName(ContentType.FILM), - contentTypeAsPlural = ContentType.getContentNameAsPlural(ContentType.FILM), - extraInfo = IconAndTextInfo( + contentType = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.Companion.getContentName( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.FILM + ), + contentTypeAsPlural = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.Companion.getContentNameAsPlural( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.FILM + ), + extraInfo = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( Res.drawable.ic_top_10, Res.string.list_highlight_banner_stream_ranking ), - leftButton = IconAndTextInfo( + leftButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( SharedRes.drawable.ic_add, Res.string.list_highlight_banner_add ), - centralButton = IconAndTextInfo( + centralButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( SharedRes.drawable.ic_play, Res.string.list_highlight_banner_watch ), - rightButton = IconAndTextInfo( + rightButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( SharedRes.drawable.ic_info, Res.string.list_highlight_banner_info ), ) - private fun getStreamsByGenre(genre: Genre): StreamsCarouselContent { + private fun getStreamsByGenre(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): StreamsCarouselContent { return StreamsCarouselContent( genre.name, listStreams(genre).map { diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsScreen.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt similarity index 87% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsScreen.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt index 7f254a4b..699ae0db 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsScreen.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens +package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -26,7 +26,7 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamPlayerTopBar -import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarousel import org.koin.compose.viewmodel.koinViewModel @@ -34,7 +34,7 @@ import org.koin.compose.viewmodel.koinViewModel @OptIn(ExperimentalMaterial3Api::class) @Composable fun ListStreamsScreen( - viewModel: ListStreamViewModel = koinViewModel(), + viewModel: com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamViewModel = koinViewModel(), navController: NavController, onNavigateDetailList: (String) -> Unit = {}, onNavigateProfilePicker: () -> Unit = {}, @@ -81,7 +81,9 @@ fun ListStreamsScreen( .verticalScroll(baseScrollState) ) { - HighlightBanner(data = uiState.highlightBanner) + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner( + data = uiState.highlightBanner + ) uiState.streamsCarouselContent.forEach { streamCarouselContent -> StreamsCarousel( diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt new file mode 100644 index 00000000..9ff02d03 --- /dev/null +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt @@ -0,0 +1,10 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens + +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarouselContent + +data class ListStreamsUIState( + val highlightBanner: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner? = null, + val streamsCarouselContent: List, + val isLoading: Boolean +) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt similarity index 79% rename from feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBanner.kt rename to feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt index 8b411424..62f1a4f7 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/widgets/HighlightBanner.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.widgets +package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box @@ -32,8 +32,8 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.IconAndTextInfo +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @@ -53,7 +53,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.Res as SharedRes @Suppress("MagicNumber") @Composable -fun HighlightBanner(modifier: Modifier = Modifier, data: HighlightBanner?) { +fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner?) { data ?: return Box( @@ -61,8 +61,10 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: HighlightBanner?) { .fillMaxWidth() .height(500.dp) ) { - ContentImage(imageUrl = data.imageUrl) - BackgroundGradient() + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentImage( + imageUrl = data.imageUrl + ) + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.BackgroundGradient() Column( modifier = Modifier .align(Alignment.BottomEnd) @@ -70,13 +72,20 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: HighlightBanner?) { horizontalAlignment = Alignment.CenterHorizontally ) { Spacer(modifier = Modifier.weight(1F)) - ContentType(contentType = data.contentType) - ContentName(name = data.name) - ContentRanking( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentType( + contentType = data.contentType + ) + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentName( + name = data.name + ) + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentRanking( extraInfo = data.extraInfo, contentTypeAsPlural = data.contentTypeAsPlural ) - ActionButtons(Modifier.weight(0.3F), data) + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ActionButtons( + Modifier.weight(0.3F), + data + ) } } } @@ -123,7 +132,7 @@ fun ContentName(modifier: Modifier = Modifier, name: String) { @Composable fun ContentRanking( modifier: Modifier = Modifier, - extraInfo: IconAndTextInfo, + extraInfo: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, contentTypeAsPlural: StringResource ) { Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) { @@ -164,19 +173,19 @@ fun ContentType(modifier: Modifier = Modifier, contentType: StringResource) { } @Composable -fun ActionButtons(modifier: Modifier, data: HighlightBanner) { +fun ActionButtons(modifier: Modifier, data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner) { Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) { - AddToListButton( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.AddToListButton( modifier = Modifier .weight(1F) .fillMaxSize(), data ) { /* todo */ } - PlayButton { + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.PlayButton { /* todo */ } - InfoButton( + _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.InfoButton( modifier = Modifier .weight(1F) .fillMaxSize(), data @@ -189,7 +198,7 @@ fun ActionButtons(modifier: Modifier, data: HighlightBanner) { @Composable fun AddToListButton( modifier: Modifier = Modifier, - data: HighlightBanner, + data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner, onClick: () -> Unit ) { IconButton(onClick = { onClick.invoke() }, modifier = modifier) { @@ -211,7 +220,7 @@ fun AddToListButton( @Composable fun InfoButton( modifier: Modifier = Modifier, - data: HighlightBanner, + data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner, onClick: () -> Unit ) { IconButton(onClick = { onClick.invoke() }, modifier = modifier) { diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamRepository.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamRepository.kt deleted file mode 100644 index 04030707..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/ListStreamRepository.kt +++ /dev/null @@ -1,51 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.data - -import androidx.paging.Pager -import androidx.paging.PagingConfig -import androidx.paging.PagingData -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.toGenres -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.toStream -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map - -interface ListStreamRepository { - suspend fun getGenres(): Flow> - - suspend fun topRatedStream(): Flow - - fun loadMovies(genre: Genre): Flow> -} - -class ListStreamRepositoryImpl( - private val service: ListStreamService, -) : ListStreamRepository { - - override suspend fun getGenres(): Flow> { - return service.getGenres().toFlow().map { it.toGenres() } - } - - override suspend fun topRatedStream() = service.getTopRatedMovies().toFlow().map { - it.results.first { it.poster_path != null }.toStream() - } - - override fun loadMovies(genre: Genre): Flow> { - return Pager( - config = PagingConfig( - pageSize = PAGE_SIZE, - maxSize = MAX_SIZE, - ), - pagingSourceFactory = { - StreamDataSource(service, genreName = genre.name, genreId = genre.id) - }, - initialKey = 1 - ).flow - } - - companion object { - private const val PAGE_SIZE = 20 - private const val MAX_SIZE = 500 - } -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/GenresResponse.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/GenresResponse.kt deleted file mode 100644 index 4ad38d13..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/data/model/GenresResponse.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.data.model - -import kotlinx.serialization.Serializable - -@Serializable -data class GenreResponse( - val id: Long, - val name: String -) - -@Serializable -data class GenresResponse( - val genres: List -) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/di/ListStreamModule.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/di/ListStreamModule.kt deleted file mode 100644 index 02a1cf6d..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/di/ListStreamModule.kt +++ /dev/null @@ -1,63 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.di - -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepositoryImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamService -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamServiceImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetGenresUseCase -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetGenresUseCaseImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetTopRatedStream -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetTopRatedStreamImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamAnalytics -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamAnalyticsImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamUseCase -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamUseCaseImpl -import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamViewModel -import org.koin.core.module.dsl.viewModel -import org.koin.dsl.module - -object ListStreamModule { - val module = module { - viewModel { - ListStreamViewModel( - listStreams = get(), - listGenres = get(), - latestStream = get() - ) - } - - factory { - ListStreamUseCaseImpl( - repository = get() - ) - } - - factory { - GetGenresUseCaseImpl( - repository = get() - ) - } - - factory { - GetTopRatedStreamImpl( - repository = get() - ) - } - - factory { - ListStreamAnalyticsImpl() - } - - factory { - ListStreamRepositoryImpl( - service = get(), - ) - } - - factory { - ListStreamServiceImpl( - client = get() - ) - } - } -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetGenresUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetGenresUseCase.kt deleted file mode 100644 index c798d16f..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetGenresUseCase.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain - -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre -import kotlinx.coroutines.flow.Flow - -interface GetGenresUseCase { - suspend operator fun invoke(): Flow> -} - -class GetGenresUseCaseImpl( - private val repository: ListStreamRepository -) : GetGenresUseCase { - override suspend fun invoke(): Flow> { - return repository.getGenres() - } -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetLatestMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetLatestMovieUseCase.kt deleted file mode 100644 index 921d6ac6..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/GetLatestMovieUseCase.kt +++ /dev/null @@ -1,17 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain - -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream -import kotlinx.coroutines.flow.Flow - -interface GetTopRatedStream { - suspend operator fun invoke(): Flow -} - -class GetTopRatedStreamImpl( - private val repository: ListStreamRepository -) : GetTopRatedStream { - override suspend operator fun invoke(): Flow { - return repository.topRatedStream() - } -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListMovieUseCase.kt deleted file mode 100644 index a2705721..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListMovieUseCase.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain - -import androidx.paging.PagingData -import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream -import kotlinx.coroutines.flow.Flow - -interface ListStreamUseCase { - operator fun invoke(genre: Genre): Flow> -} - -class ListStreamUseCaseImpl( - private val repository: ListStreamRepository -) : ListStreamUseCase { - override operator fun invoke(genre: Genre): Flow> { - return repository.loadMovies(genre) - } -} diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamAnalytics.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamAnalytics.kt deleted file mode 100644 index fba556a0..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamAnalytics.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain - - -interface ListStreamAnalytics - -class ListStreamAnalyticsImpl : ListStreamAnalytics diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamMapper.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamMapper.kt deleted file mode 100644 index 7cab23fe..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/ListStreamMapper.kt +++ /dev/null @@ -1,28 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain - -import ListStreamResponse -import StreamResponse -import com.codandotv.streamplayerapp.core_shared.Url -import com.codandotv.streamplayerapp.feature_list_streams.list.data.model.GenresResponse -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.ListStream -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream - -fun ListStreamResponse.toListStream(genre: String): ListStream = - ListStream( - categoryName = genre, - streams = this.results.map { streamResponse -> - streamResponse.toStream() - } - ) - -fun GenresResponse.toGenres(): List = this.genres.map { genreResponse -> - Genre(id = genreResponse.id, name = genreResponse.name) -} - -fun StreamResponse.toStream(): Stream = Stream( - description = overview, - name = title, - posterPathUrl = "${Url.IMAGE_URL_SIZE_300}${poster_path}", - id = id.toString() -) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/Genre.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/Genre.kt deleted file mode 100644 index aa3c00ee..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/Genre.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain.model - -data class Genre( - val id: Long, - val name: String -) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/HighlightBanner.kt deleted file mode 100644 index 20786df5..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/domain/model/HighlightBanner.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.domain.model - -import org.jetbrains.compose.resources.DrawableResource -import org.jetbrains.compose.resources.StringResource - -data class HighlightBanner( - val name: String, - val imageUrl: String, - val contentType: StringResource, - val contentTypeAsPlural: StringResource, - val extraInfo: IconAndTextInfo, - val leftButton: IconAndTextInfo, - val centralButton: IconAndTextInfo, - val rightButton: IconAndTextInfo -) - -data class IconAndTextInfo( - val icon: DrawableResource, - val text: StringResource -) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsUIState.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsUIState.kt deleted file mode 100644 index 3e444dfa..00000000 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_list_streams/list/presentation/screens/ListStreamsUIState.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens - -import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarouselContent - -data class ListStreamsUIState( - val highlightBanner: HighlightBanner? = null, - val streamsCarouselContent: List, - val isLoading: Boolean -) From bc2f8494da3e7cf10181102263ba192a79020d83 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:57:56 -0300 Subject: [PATCH 10/33] Refactor feature detail package structure and update imports --- .../navigation/NavigationGraph.kt | 2 +- .../detail/data/DetailStreamRepository.kt | 54 ++++++++++++++++ .../detail}/data/DetailStreamService.kt | 16 ++--- .../data/model/DetailStreamResponse.kt | 2 +- .../detail}/data/model/VideoStreamResponse.kt | 4 +- .../feature/detail/di/DetailStreamModule.kt | 62 +++++++++++++++++++ .../detail}/domain/DetailStream.kt | 2 +- .../detail/domain/DetailStreamMapper.kt | 35 +++++++++++ .../detail/domain/DetailStreamUseCase.kt | 26 ++++++++ .../detail}/domain/VideoStream.kt | 2 +- .../detail/domain/VideoStreamsUseCase.kt | 16 +++++ .../navigation/DetailStreamNavigation.kt | 15 +++-- .../screens/DetailStreamViewModel.kt | 28 +++++---- .../screens/DetailStreamsScreen.kt | 34 +++++----- .../screens/DetailStreamsUIState.kt | 12 ++++ .../widget/DetailStreamActionOption.kt | 8 +-- .../widget/DetailStreamButtonAction.kt | 2 +- .../widget/DetailStreamImagePreview.kt | 6 +- .../widget/DetailStreamRowHeader.kt | 2 +- .../data/DetailStreamRepository.kt | 54 ---------------- .../feature_detail/di/DetailStreamModule.kt | 62 ------------------- .../domain/DetailStreamMapper.kt | 35 ----------- .../domain/DetailStreamUseCase.kt | 26 -------- .../domain/VideoStreamsUseCase.kt | 16 ----- .../screens/DetailStreamsUIState.kt | 12 ---- .../streamplayerapp/feature/detail/Shared.kt | 34 ++++++++++ .../data}/DetailStreamRepositoryTest.kt | 24 +++---- .../detail/domain}/DetailStreamUseCaseTest.kt | 15 +++-- .../fake/FakeDetailStreamRepository.kt | 6 +- .../detail}/fake/FakeDetailStreamService.kt | 11 ++-- .../detail}/fake/FakeDetailStreamUseCase.kt | 11 ++-- .../feature/detail}/fake/FakeFavoriteDao.kt | 2 +- .../detail}/fake/FakeVideoStreamsUseCase.kt | 11 ++-- .../DetailStreamViewModelTest.kt | 22 ++++--- .../kotlin/feature_detail/Shared.kt | 34 ---------- 35 files changed, 356 insertions(+), 347 deletions(-) create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/data/DetailStreamService.kt (52%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/data/model/DetailStreamResponse.kt (81%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/data/model/VideoStreamResponse.kt (65%) create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/domain/DetailStream.kt (77%) create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/domain/VideoStream.kt (55%) create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/navigation/DetailStreamNavigation.kt (59%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/screens/DetailStreamViewModel.kt (57%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/screens/DetailStreamsScreen.kt (79%) create mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/widget/DetailStreamActionOption.kt (90%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/widget/DetailStreamButtonAction.kt (96%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/widget/DetailStreamImagePreview.kt (91%) rename feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/{feature_detail => feature/detail}/presentation/widget/DetailStreamRowHeader.kt (96%) delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamRepository.kt delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/di/DetailStreamModule.kt delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamMapper.kt delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamUseCase.kt delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStreamsUseCase.kt delete mode 100644 feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsUIState.kt create mode 100644 feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail/data}/DetailStreamRepositoryTest.kt (66%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail/domain}/DetailStreamUseCaseTest.kt (66%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail}/fake/FakeDetailStreamRepository.kt (83%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail}/fake/FakeDetailStreamService.kt (78%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail}/fake/FakeDetailStreamUseCase.kt (57%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail}/fake/FakeFavoriteDao.kt (93%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail}/fake/FakeVideoStreamsUseCase.kt (54%) rename feature-detail/src/commonTest/kotlin/{feature_detail => com/codandotv/streamplayerapp/feature/detail/presentation}/DetailStreamViewModelTest.kt (67%) delete mode 100644 feature-detail/src/commonTest/kotlin/feature_detail/Shared.kt diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index 7ab836cc..f30bea6b 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -20,7 +20,7 @@ import com.codandotv.streamplayerapp.core_navigation.routes.Routes import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation.listStreamsNavGraph import com.codandotv.streamplayerapp.feature.profile.presentation.navigation.profilePickerStreamNavGraph import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph -import com.codandotv.streamplayerapp.feature_detail.presentation.navigation.detailStreamNavGraph +import com.codandotv.streamplayerapp.feature.detail.presentation.navigation.detailStreamNavGraph import com.codandotv.streamplayerapp.feature.news.presentation.navigation.newsStreamNavGraph import com.codandotv.streamplayerapp.feature.search.presentation.navigation.searchStreamsNavGraph diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt new file mode 100644 index 00000000..b2bc5d72 --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt @@ -0,0 +1,54 @@ +package com.codandotv.streamplayerapp.feature.detail.data + +import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao +import com.codandotv.streamplayerapp.core_networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStream +import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStreamLocal +import com.codandotv.streamplayerapp.feature.detail.domain.toVideoStreams +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +interface DetailStreamRepository { + suspend fun getMovie(): Flow + suspend fun deleteFromMyList(movie: String) + suspend fun insertToMyList(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) + suspend fun isFavorite(movieId:String) : Boolean + suspend fun getVideoStreams(): Flow> +} + +class DetailStreamRepositoryImpl( + private val movieId: String, + private val service: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService, + private val favoriteDao: FavoriteDao, +) : com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository { + + override suspend fun getMovie(): Flow = + service.getMovie(movieId) + .toFlow() + .map { + it.toDetailStream(isFavorite(movieId)) + } + + + override suspend fun deleteFromMyList(movie: String) = favoriteDao.delete(movie) + + override suspend fun insertToMyList(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) = favoriteDao.insert(movie.toDetailStreamLocal()) + + /** + * Verify if movieId was saved as favorite + * @param movieId + * @return Boolean + */ + override suspend fun isFavorite(movieId: String) : Boolean = favoriteDao.fetchAll().any { + movie -> movie.id == movieId + } + + override suspend fun getVideoStreams(): Flow> = + service.getVideoStreams(movieId) + .toFlow() + .map { + it.toVideoStreams() + } +} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamService.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt similarity index 52% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamService.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt index f4c69ba1..f9af21cb 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamService.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt @@ -1,27 +1,27 @@ -package com.codandotv.streamplayerapp.feature_detail.data +package com.codandotv.streamplayerapp.feature.detail.data import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest -import com.codandotv.streamplayerapp.feature_detail.data.model.DetailStreamResponse -import com.codandotv.streamplayerapp.feature_detail.data.model.VideoStreamsResponse +import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse +import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse import io.ktor.client.HttpClient import io.ktor.client.request.url interface DetailStreamService { - suspend fun getMovie(movieId: String): NetworkResponse - suspend fun getVideoStreams(movieId: String): NetworkResponse + suspend fun getMovie(movieId: String): NetworkResponse + suspend fun getVideoStreams(movieId: String): NetworkResponse } class DetailStreamServiceImpl( private val client: HttpClient -) : DetailStreamService { +) : com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService { - override suspend fun getMovie(movieId: String): NetworkResponse = + override suspend fun getMovie(movieId: String): NetworkResponse = client.safeRequest { url("movie/$movieId") } - override suspend fun getVideoStreams(movieId: String): NetworkResponse = + override suspend fun getVideoStreams(movieId: String): NetworkResponse = client.safeRequest { url("movie/$movieId/videos") } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/DetailStreamResponse.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt similarity index 81% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/DetailStreamResponse.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt index 18ef31d9..058c87c1 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/DetailStreamResponse.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.data.model +package com.codandotv.streamplayerapp.feature.detail.data.model import kotlinx.serialization.Serializable diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/VideoStreamResponse.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt similarity index 65% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/VideoStreamResponse.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt index 6dd12400..26bef652 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/model/VideoStreamResponse.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.data.model +package com.codandotv.streamplayerapp.feature.detail.data.model import kotlinx.serialization.Serializable @@ -16,5 +16,5 @@ data class VideoStreamResponse( @Serializable data class VideoStreamsResponse( val id: Long, - val results: List + val results: List ) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt new file mode 100644 index 00000000..b6a7ba39 --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt @@ -0,0 +1,62 @@ +package com.codandotv.streamplayerapp.feature.detail.di + +import com.codandotv.streamplayerapp.core_shared_ui.widget.getSharedHandlerPlatform +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamServiceImpl +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCaseImpl +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO +import org.koin.core.module.dsl.viewModel +import org.koin.core.parameter.parametersOf +import org.koin.dsl.module + +object DetailStreamModule { + val module = module { + viewModel { (id: String) -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel( + detailStreamUseCase = get { + parametersOf(id) + }, + videoStreamsUseCase = get { + parametersOf(id) + }, + dispatcher = Dispatchers.IO + ) + } + factory { (id: String) -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl( + detailStreamRepository = get { + parametersOf(id) + } + ) + } + factory { (id: String) -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCaseImpl( + detailStreamRepository = get { + parametersOf(id) + } + ) + } + factory { (id: String) -> + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl( + favoriteDao = get(), + service = get(), + movieId = id, + ) + } + + factory { + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamServiceImpl( + client = get() + ) + } + + factory { getSharedHandlerPlatform() } + } +} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStream.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt similarity index 77% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStream.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt index 7d9e59f9..693c0ef9 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStream.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.domain +package com.codandotv.streamplayerapp.feature.detail.domain data class DetailStream( val id : String, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt new file mode 100644 index 00000000..77f0b08d --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt @@ -0,0 +1,35 @@ +package com.codandotv.streamplayerapp.feature.detail.domain + +import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity +import com.codandotv.streamplayerapp.core_shared.Url.IMAGE_URL_SIZE_500 +import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse +import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse + +fun com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): com.codandotv.streamplayerapp.feature.detail.domain.DetailStream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStream( + id = this.id.toString(), + title = this.title, + overview = this.overview, + tagline = this.tagline, + url = "$IMAGE_URL_SIZE_500${this.backdrop_path}", + releaseYear = this.release_date.substring(0, 4), + isFavorite = isFavorite + ) + +fun com.codandotv.streamplayerapp.feature.detail.domain.DetailStream.toDetailStreamLocal(): MovieEntity = + MovieEntity( + id = this.id, + title = this.title, + overview = this.overview, + tagline = this.tagline, + url = this.url, + releaseYear = this.releaseYear, + ) + +fun com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse.toVideoStreams(): List = + results.map { + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.VideoStream( + videoId = it.key, + movieId = this.id + ) + } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt new file mode 100644 index 00000000..f24dd6b2 --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt @@ -0,0 +1,26 @@ +package com.codandotv.streamplayerapp.feature.detail.domain + +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +import kotlinx.coroutines.flow.Flow + +interface DetailStreamUseCase { + suspend fun getMovie(): Flow + + suspend fun toggleItemInFavorites(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) +} + +class DetailStreamUseCaseImpl( + private val detailStreamRepository: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +) : com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase { + + override suspend fun getMovie(): Flow = + detailStreamRepository.getMovie() + + override suspend fun toggleItemInFavorites(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) { + if (detailStreamRepository.isFavorite(movie.id)) { + detailStreamRepository.deleteFromMyList(movie.id) + } else { + detailStreamRepository.insertToMyList(movie) + } + } +} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStream.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStream.kt similarity index 55% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStream.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStream.kt index 1daa73f9..541139dd 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStream.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStream.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.domain +package com.codandotv.streamplayerapp.feature.detail.domain data class VideoStream( val movieId: Long, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt new file mode 100644 index 00000000..974c0d4f --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt @@ -0,0 +1,16 @@ +package com.codandotv.streamplayerapp.feature.detail.domain + +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +import kotlinx.coroutines.flow.Flow + +interface VideoStreamsUseCase { + suspend fun getVideoStreams(): Flow> +} + +class VideoStreamsUseCaseImpl( + private val detailStreamRepository: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +) : com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase { + override suspend fun getVideoStreams(): Flow> { + return detailStreamRepository.getVideoStreams() + } +} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/navigation/DetailStreamNavigation.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt similarity index 59% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/navigation/DetailStreamNavigation.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt index 27ca3eb4..b387f085 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/navigation/DetailStreamNavigation.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt @@ -1,12 +1,12 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.navigation +package com.codandotv.streamplayerapp.feature.detail.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core_navigation.routes.Routes.DETAIL_COMPLETE import com.codandotv.streamplayerapp.core_navigation.routes.Routes.PARAM.ID -import com.codandotv.streamplayerapp.feature_detail.di.DetailStreamModule -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamScreen +import com.codandotv.streamplayerapp.feature.detail.di.DetailStreamModule +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamScreen import org.koin.compose.getKoin import org.koin.compose.module.rememberKoinModules import org.koin.compose.viewmodel.koinViewModel @@ -19,11 +19,14 @@ internal const val DEFAULT_ID = "0" fun NavGraphBuilder.detailStreamNavGraph(navController: NavHostController) { composable(DETAIL_COMPLETE) { nav -> rememberKoinModules { - listOf(DetailStreamModule.module) + listOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.detail.di.DetailStreamModule.module) } - DetailStreamScreen( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamScreen( viewModel = koinViewModel { - parametersOf(nav.savedStateHandle.get(ID)?: DEFAULT_ID) + parametersOf( + nav.savedStateHandle.get(ID) + ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.navigation.DEFAULT_ID + ) }, navController = navController, sharedHandlerPlatform = getKoin().get(), diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamViewModel.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt similarity index 57% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamViewModel.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt index cac14ad2..dbc19957 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamViewModel.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt @@ -1,14 +1,14 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.screens +package com.codandotv.streamplayerapp.feature.detail.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure import com.codandotv.streamplayerapp.core_networking.resources.StringNetworking -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCase -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStreamsUseCase -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -21,8 +21,8 @@ import kotlinx.coroutines.flow.zip import kotlinx.coroutines.launch class DetailStreamViewModel( - private val detailStreamUseCase: DetailStreamUseCase, - private val videoStreamsUseCase: VideoStreamsUseCase, + private val detailStreamUseCase: com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase, + private val videoStreamsUseCase: com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase, private val dispatcher: CoroutineDispatcher ) : ViewModel() { @@ -30,8 +30,10 @@ class DetailStreamViewModel( loadDetail() } - private val _uiState = MutableStateFlow(LoadingStreamUIState) - val uiState: StateFlow = _uiState.stateIn( + private val _uiState = MutableStateFlow( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState + ) + val uiState: StateFlow = _uiState.stateIn( viewModelScope, SharingStarted.Eagerly, initialValue = _uiState.value @@ -41,7 +43,7 @@ class DetailStreamViewModel( viewModelScope.launch { detailStreamUseCase.getMovie() .zip(videoStreamsUseCase.getVideoStreams()) { detailStream, videoUrl -> - DetailStreamsLoadedUIState( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState( detailStream = detailStream, videoId = videoUrl.firstOrNull()?.videoId ) @@ -60,10 +62,10 @@ class DetailStreamViewModel( } private fun onLoading() { - _uiState.update { LoadingStreamUIState } + _uiState.update { _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState } } - fun toggleItemInFavorites(detailStream: DetailStream) { + fun toggleItemInFavorites(detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) { viewModelScope.launch { detailStreamUseCase.toggleItemInFavorites(detailStream) } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsScreen.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt similarity index 79% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsScreen.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt index e92cd470..37b01900 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsScreen.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.screens +package com.codandotv.streamplayerapp.feature.detail.presentation.screens import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -33,11 +33,11 @@ import androidx.navigation.NavController import com.codandotv.streamplayerapp.core_shared_ui.widget.BasicToolbar import com.codandotv.streamplayerapp.core_shared_ui.widget.SharedHandlerPlatform import com.codandotv.streamplayerapp.core_shared_ui.widget.SharingStreamPlatform -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.presentation.widget.DetailStreamActionOption -import com.codandotv.streamplayerapp.feature_detail.presentation.widget.DetailStreamButtonAction -import com.codandotv.streamplayerapp.feature_detail.presentation.widget.DetailStreamImagePreview -import com.codandotv.streamplayerapp.feature_detail.presentation.widget.DetailStreamRowHeader +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamActionOption +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamImagePreview +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamRowHeader import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_detail.generated.resources.Res @@ -46,17 +46,17 @@ import streamplayerapp_kmp.feature_detail.generated.resources.detail_watch_prima @Composable fun DetailStreamScreen( - viewModel: DetailStreamViewModel = koinViewModel(), + viewModel: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel = koinViewModel(), navController: NavController, sharedHandlerPlatform: SharedHandlerPlatform, ) { val uiState by viewModel.uiState.collectAsState() when (uiState) { - is DetailStreamsUIState.DetailStreamsLoadedUIState -> { - SetupDetailScreen( + is com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState -> { + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.SetupDetailScreen( onToggleToMyList = { detailStream -> viewModel.toggleItemInFavorites(detailStream) }, - uiState = uiState as DetailStreamsUIState.DetailStreamsLoadedUIState, + uiState = uiState as com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, navController = navController, sharedHandlerPlatform = sharedHandlerPlatform ) @@ -78,8 +78,8 @@ fun DetailStreamScreen( @Suppress("LongMethod") @Composable private fun SetupDetailScreen( - onToggleToMyList: (DetailStream) -> Unit, - uiState: DetailStreamsUIState.DetailStreamsLoadedUIState, + onToggleToMyList: (com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) -> Unit, + uiState: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, navController: NavController, sharedHandlerPlatform: SharedHandlerPlatform, ) { @@ -100,7 +100,7 @@ private fun SetupDetailScreen( .verticalScroll(rememberScrollState()) .padding(innerPadding) ) { - DetailStreamImagePreview( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamImagePreview( uiState = uiState, onPlayEvent = { showPlayer = true @@ -112,7 +112,7 @@ private fun SetupDetailScreen( .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, top = 8.dp) ) { - DetailStreamRowHeader() + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamRowHeader() Text( text = uiState.detailStream.title, style = MaterialTheme.typography.headlineMedium.copy( @@ -128,7 +128,7 @@ private fun SetupDetailScreen( ) ) Spacer(modifier = Modifier.height(8.dp)) - DetailStreamButtonAction( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction( buttonsColors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.surface ), @@ -138,7 +138,7 @@ private fun SetupDetailScreen( textColor = MaterialTheme.colorScheme.onSurface ) Spacer(modifier = Modifier.height(4.dp)) - DetailStreamButtonAction( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction( buttonsColors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.onSurfaceVariant ), @@ -157,7 +157,7 @@ private fun SetupDetailScreen( modifier = Modifier.padding(top = 8.dp, bottom = 16.dp) ) Spacer(modifier = Modifier.height(8.dp)) - DetailStreamActionOption( + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamActionOption( uiState.detailStream, onToggleToMyList, { showDialog.value = true }) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt new file mode 100644 index 00000000..8faf57c0 --- /dev/null +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt @@ -0,0 +1,12 @@ +package com.codandotv.streamplayerapp.feature.detail.presentation.screens + +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream + +sealed class DetailStreamsUIState { + data class DetailStreamsLoadedUIState( + val detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream, + val videoId: String?, + ) : com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState() + + object LoadingStreamUIState : com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState() +} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamActionOption.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt similarity index 90% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamActionOption.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt index 1b6b8623..024e97b7 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamActionOption.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.widget +package com.codandotv.streamplayerapp.feature.detail.presentation.widget import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row @@ -18,7 +18,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import com.codandotv.streamplayerapp.core_shared_ui.widget.IconWithText -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.detail_classification @@ -28,8 +28,8 @@ import streamplayerapp_kmp.feature_detail.generated.resources.detail_share @Composable fun DetailStreamActionOption( - detailStream: DetailStream, - onToggleToMyList: (DetailStream) -> Unit, + detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream, + onToggleToMyList: (com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) -> Unit, onShowSharingOptions: () -> Unit, modifier: Modifier = Modifier.fillMaxWidth() ) { diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamButtonAction.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamButtonAction.kt similarity index 96% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamButtonAction.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamButtonAction.kt index d2cd3161..712d593e 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamButtonAction.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamButtonAction.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.widget +package com.codandotv.streamplayerapp.feature.detail.presentation.widget import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamImagePreview.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt similarity index 91% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamImagePreview.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt index 121c3f8e..1cdbdbba 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamImagePreview.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.widget +package com.codandotv.streamplayerapp.feature.detail.presentation.widget import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -18,7 +18,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp import com.codandotv.streamplayerapp.core_shared_ui.widget.YoutubePlayerComponentPlatform import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState import org.jetbrains.compose.resources.painterResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.play_circle @@ -26,7 +26,7 @@ import streamplayerapp_kmp.feature_detail.generated.resources.play_circle @Suppress("MagicNumber") @Composable fun DetailStreamImagePreview( - uiState: DetailStreamsLoadedUIState, + uiState: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, modifier: Modifier = Modifier, showPlayer: Boolean = false, onPlayEvent: (() -> Unit) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamRowHeader.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamRowHeader.kt similarity index 96% rename from feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamRowHeader.kt rename to feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamRowHeader.kt index 96e7b07d..9e918a72 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/widget/DetailStreamRowHeader.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamRowHeader.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.widget +package com.codandotv.streamplayerapp.feature.detail.presentation.widget import androidx.compose.foundation.Image import androidx.compose.foundation.layout.Row diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamRepository.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamRepository.kt deleted file mode 100644 index 8b6244da..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/data/DetailStreamRepository.kt +++ /dev/null @@ -1,54 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.data - -import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStream -import com.codandotv.streamplayerapp.feature_detail.domain.toDetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.toDetailStreamLocal -import com.codandotv.streamplayerapp.feature_detail.domain.toVideoStreams -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.map - -interface DetailStreamRepository { - suspend fun getMovie(): Flow - suspend fun deleteFromMyList(movie: String) - suspend fun insertToMyList(movie: DetailStream) - suspend fun isFavorite(movieId:String) : Boolean - suspend fun getVideoStreams(): Flow> -} - -class DetailStreamRepositoryImpl( - private val movieId: String, - private val service: DetailStreamService, - private val favoriteDao: FavoriteDao, -) : DetailStreamRepository { - - override suspend fun getMovie(): Flow = - service.getMovie(movieId) - .toFlow() - .map { - it.toDetailStream(isFavorite(movieId)) - } - - - override suspend fun deleteFromMyList(movie: String) = favoriteDao.delete(movie) - - override suspend fun insertToMyList(movie: DetailStream) = favoriteDao.insert(movie.toDetailStreamLocal()) - - /** - * Verify if movieId was saved as favorite - * @param movieId - * @return Boolean - */ - override suspend fun isFavorite(movieId: String) : Boolean = favoriteDao.fetchAll().any { - movie -> movie.id == movieId - } - - override suspend fun getVideoStreams(): Flow> = - service.getVideoStreams(movieId) - .toFlow() - .map { - it.toVideoStreams() - } -} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/di/DetailStreamModule.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/di/DetailStreamModule.kt deleted file mode 100644 index bfe42650..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/di/DetailStreamModule.kt +++ /dev/null @@ -1,62 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.di - -import com.codandotv.streamplayerapp.core_shared_ui.widget.getSharedHandlerPlatform -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepository -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepositoryImpl -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamService -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamServiceImpl -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCase -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCaseImpl -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStreamsUseCase -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStreamsUseCaseImpl -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamViewModel -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.IO -import org.koin.core.module.dsl.viewModel -import org.koin.core.parameter.parametersOf -import org.koin.dsl.module - -object DetailStreamModule { - val module = module { - viewModel { (id: String) -> - DetailStreamViewModel( - detailStreamUseCase = get { - parametersOf(id) - }, - videoStreamsUseCase = get { - parametersOf(id) - }, - dispatcher = Dispatchers.IO - ) - } - factory { (id: String) -> - DetailStreamUseCaseImpl( - detailStreamRepository = get { - parametersOf(id) - } - ) - } - factory { (id: String) -> - VideoStreamsUseCaseImpl( - detailStreamRepository = get { - parametersOf(id) - } - ) - } - factory { (id: String) -> - DetailStreamRepositoryImpl( - favoriteDao = get(), - service = get(), - movieId = id, - ) - } - - factory { - DetailStreamServiceImpl( - client = get() - ) - } - - factory { getSharedHandlerPlatform() } - } -} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamMapper.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamMapper.kt deleted file mode 100644 index e12cf78f..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamMapper.kt +++ /dev/null @@ -1,35 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.domain - -import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity -import com.codandotv.streamplayerapp.core_shared.Url.IMAGE_URL_SIZE_500 -import com.codandotv.streamplayerapp.feature_detail.data.model.DetailStreamResponse -import com.codandotv.streamplayerapp.feature_detail.data.model.VideoStreamsResponse - -fun DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): DetailStream = - DetailStream( - id = this.id.toString(), - title = this.title, - overview = this.overview, - tagline = this.tagline, - url = "$IMAGE_URL_SIZE_500${this.backdrop_path}", - releaseYear = this.release_date.substring(0, 4), - isFavorite = isFavorite - ) - -fun DetailStream.toDetailStreamLocal(): MovieEntity = - MovieEntity( - id = this.id, - title = this.title, - overview = this.overview, - tagline = this.tagline, - url = this.url, - releaseYear = this.releaseYear, - ) - -fun VideoStreamsResponse.toVideoStreams(): List = - results.map { - VideoStream( - videoId = it.key, - movieId = this.id - ) - } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamUseCase.kt deleted file mode 100644 index e2b4ade9..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/DetailStreamUseCase.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.domain - -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepository -import kotlinx.coroutines.flow.Flow - -interface DetailStreamUseCase { - suspend fun getMovie(): Flow - - suspend fun toggleItemInFavorites(movie: DetailStream) -} - -class DetailStreamUseCaseImpl( - private val detailStreamRepository: DetailStreamRepository -) : DetailStreamUseCase { - - override suspend fun getMovie(): Flow = - detailStreamRepository.getMovie() - - override suspend fun toggleItemInFavorites(movie: DetailStream) { - if (detailStreamRepository.isFavorite(movie.id)) { - detailStreamRepository.deleteFromMyList(movie.id) - } else { - detailStreamRepository.insertToMyList(movie) - } - } -} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStreamsUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStreamsUseCase.kt deleted file mode 100644 index 06c9af38..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/domain/VideoStreamsUseCase.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.domain - -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepository -import kotlinx.coroutines.flow.Flow - -interface VideoStreamsUseCase { - suspend fun getVideoStreams(): Flow> -} - -class VideoStreamsUseCaseImpl( - private val detailStreamRepository: DetailStreamRepository -) : VideoStreamsUseCase { - override suspend fun getVideoStreams(): Flow> { - return detailStreamRepository.getVideoStreams() - } -} diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsUIState.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsUIState.kt deleted file mode 100644 index 66c2a144..00000000 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature_detail/presentation/screens/DetailStreamsUIState.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.codandotv.streamplayerapp.feature_detail.presentation.screens - -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream - -sealed class DetailStreamsUIState { - data class DetailStreamsLoadedUIState( - val detailStream: DetailStream, - val videoId: String?, - ) : DetailStreamsUIState() - - object LoadingStreamUIState : DetailStreamsUIState() -} diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt new file mode 100644 index 00000000..53ecbc17 --- /dev/null +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt @@ -0,0 +1,34 @@ +package com.codandotv.streamplayerapp.feature.detail + +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState + +val videoStream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.VideoStream( + movieId = 123, + videoId = "123" + ) + +val fakeStream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStream( + id = "1", + title = "Fake Movie", + overview = "Overview of the fake movie", + tagline = "The ultimate test movie", + url = "https://example.com/fake.jpg", + releaseYear = "2025", + isFavorite = false + ) + +val expectedDetailStream = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse( + id = 1L, + title = "Fake Movie", + overview = "This is a fake overview.", + tagline = "Fake Tagline", + backdrop_path = "aaaa", + release_date = "2025" + ) +val expectedDetailStreamLoadedUI = DetailStreamsUIState.DetailStreamsLoadedUIState( + detailStream = fakeStream, + videoId = "123" +) diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamRepositoryTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt similarity index 66% rename from feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamRepositoryTest.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt index 5706b2e2..75ad394a 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamRepositoryTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt @@ -1,11 +1,10 @@ -package feature_detail +package com.codandotv.streamplayerapp.feature.detail.data import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepository -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepositoryImpl -import com.codandotv.streamplayerapp.feature_detail.domain.toDetailStream -import feature_detail.fake.FakeDetailStreamService -import feature_detail.fake.FakeFavoriteDao +import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStream +import com.codandotv.streamplayerapp.feature.detail.expectedDetailStream +import com.codandotv.streamplayerapp.feature.detail.fake.FakeDetailStreamService +import com.codandotv.streamplayerapp.feature.detail.fake.FakeFavoriteDao import kotlinx.coroutines.test.runTest import kotlin.test.BeforeTest import kotlin.test.Test @@ -22,11 +21,12 @@ class DetailStreamRepositoryTest { fun setUp() { service = FakeDetailStreamService() favoriteDao = FakeFavoriteDao() - repository = DetailStreamRepositoryImpl( - movieId = movieId, - service = service, - favoriteDao = favoriteDao - ) + repository = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl( + movieId = movieId, + service = service, + favoriteDao = favoriteDao + ) } @Test @@ -43,4 +43,4 @@ class DetailStreamRepositoryTest { assertTrue(service.getMovieCalled, "Service should have been called") assertTrue(favoriteDao.fetchAllCalled, "FavoriteDao should have been called") } -} +} \ No newline at end of file diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamUseCaseTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt similarity index 66% rename from feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamUseCaseTest.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt index cbdc5e96..af244f01 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamUseCaseTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt @@ -1,9 +1,7 @@ -package feature_detail +package com.codandotv.streamplayerapp.feature.detail.domain import FakeDetailStreamRepository -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCase -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCaseImpl +import com.codandotv.streamplayerapp.feature.detail.fakeStream import kotlinx.coroutines.test.runTest import kotlin.test.BeforeTest import kotlin.test.Test @@ -17,9 +15,10 @@ class DetailStreamUseCaseTest { @BeforeTest fun setUp() { detailStreamRepository = FakeDetailStreamRepository(movie = fakeStream) - detailStreamUseCase = DetailStreamUseCaseImpl( - detailStreamRepository = detailStreamRepository - ) + detailStreamUseCase = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl( + detailStreamRepository = detailStreamRepository + ) } @Test @@ -33,4 +32,4 @@ class DetailStreamUseCaseTest { assertEquals(fakeStream, collected) assertTrue(detailStreamRepository.getMovieCalled) } -} +} \ No newline at end of file diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamRepository.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamRepository.kt similarity index 83% rename from feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamRepository.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamRepository.kt index 2c465860..232716d1 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamRepository.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamRepository.kt @@ -1,6 +1,6 @@ -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamRepository -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStream +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStream import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamService.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt similarity index 78% rename from feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamService.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt index 2625aace..64071038 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamService.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt @@ -1,11 +1,12 @@ -package feature_detail.fake +package com.codandotv.streamplayerapp.feature.detail.fake import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.feature_detail.data.DetailStreamService -import com.codandotv.streamplayerapp.feature_detail.data.model.DetailStreamResponse -import com.codandotv.streamplayerapp.feature_detail.data.model.VideoStreamsResponse +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService +import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse +import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse -class FakeDetailStreamService : DetailStreamService { +class FakeDetailStreamService : + DetailStreamService { var getMovieCalled = false var getVideoStreamsCalled = false diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamUseCase.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamUseCase.kt similarity index 57% rename from feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamUseCase.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamUseCase.kt index 98ec0f12..4790aeb6 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeDetailStreamUseCase.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamUseCase.kt @@ -1,12 +1,13 @@ -package feature_detail.fake +package com.codandotv.streamplayerapp.feature.detail.fake -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStreamUseCase -import feature_detail.fakeStream +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.fakeStream import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -class FakeDetailStreamUseCase : DetailStreamUseCase { +class FakeDetailStreamUseCase : + DetailStreamUseCase { var getMovieCalled = false var lastToggledMovie: DetailStream? = null diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeFavoriteDao.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt similarity index 93% rename from feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeFavoriteDao.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt index 5b768408..c7cc9c63 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeFavoriteDao.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt @@ -1,4 +1,4 @@ -package feature_detail.fake +package com.codandotv.streamplayerapp.feature.detail.fake import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeVideoStreamsUseCase.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeVideoStreamsUseCase.kt similarity index 54% rename from feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeVideoStreamsUseCase.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeVideoStreamsUseCase.kt index f548cdab..a1f75dd0 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/fake/FakeVideoStreamsUseCase.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeVideoStreamsUseCase.kt @@ -1,12 +1,13 @@ -package feature_detail.fake +package com.codandotv.streamplayerapp.feature.detail.fake -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStream -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStreamsUseCase -import feature_detail.videoStream +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStream +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.videoStream import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -class FakeVideoStreamsUseCase : VideoStreamsUseCase { +class FakeVideoStreamsUseCase : + VideoStreamsUseCase { var getVideoStreamsCalled = false var videoStreamsToReturn: List = listOf(videoStream) diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamViewModelTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt similarity index 67% rename from feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamViewModelTest.kt rename to feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt index 3505225b..418052e2 100644 --- a/feature-detail/src/commonTest/kotlin/feature_detail/DetailStreamViewModelTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt @@ -1,8 +1,9 @@ -package feature_detail +package com.codandotv.streamplayerapp.feature.detail.presentation -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamViewModel -import feature_detail.fake.FakeDetailStreamUseCase -import feature_detail.fake.FakeVideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.expectedDetailStreamLoadedUI +import com.codandotv.streamplayerapp.feature.detail.fake.FakeDetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.fake.FakeVideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher @@ -28,11 +29,12 @@ class DetailStreamViewModelTest { detailUseCase = FakeDetailStreamUseCase() videoUseCase = FakeVideoStreamsUseCase() - detailStreamViewModel = DetailStreamViewModel( - detailStreamUseCase = detailUseCase, - videoStreamsUseCase = videoUseCase, - dispatcher = StandardTestDispatcher() - ) + detailStreamViewModel = + _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel( + detailStreamUseCase = detailUseCase, + videoStreamsUseCase = videoUseCase, + dispatcher = StandardTestDispatcher() + ) } @OptIn(ExperimentalCoroutinesApi::class) @@ -51,4 +53,4 @@ class DetailStreamViewModelTest { fun after() { Dispatchers.resetMain() } -} +} \ No newline at end of file diff --git a/feature-detail/src/commonTest/kotlin/feature_detail/Shared.kt b/feature-detail/src/commonTest/kotlin/feature_detail/Shared.kt deleted file mode 100644 index f8be4c4d..00000000 --- a/feature-detail/src/commonTest/kotlin/feature_detail/Shared.kt +++ /dev/null @@ -1,34 +0,0 @@ -package feature_detail - -import com.codandotv.streamplayerapp.feature_detail.data.model.DetailStreamResponse -import com.codandotv.streamplayerapp.feature_detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature_detail.domain.VideoStream -import com.codandotv.streamplayerapp.feature_detail.presentation.screens.DetailStreamsUIState - -val videoStream = VideoStream( - movieId = 123, - videoId = "123" -) - -val fakeStream = DetailStream( - id = "1", - title = "Fake Movie", - overview = "Overview of the fake movie", - tagline = "The ultimate test movie", - url = "https://example.com/fake.jpg", - releaseYear = "2025", - isFavorite = false -) - -val expectedDetailStream = DetailStreamResponse( - id = 1L, - title = "Fake Movie", - overview = "This is a fake overview.", - tagline = "Fake Tagline", - backdrop_path = "aaaa", - release_date = "2025" -) -val expectedDetailStreamLoadedUI = DetailStreamsUIState.DetailStreamsLoadedUIState( - detailStream = fakeStream, - videoId = "123" -) From 7e4723d2889ff03418b5e3c023ebbeae3a217198 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 09:59:57 -0300 Subject: [PATCH 11/33] Refactor core shared ui package structure and update imports --- .../StreamPlayerApp.kt | 4 +-- config/detekt/detekt.yml | 4 +-- .../shared/ui}/extension/PackageExtension.kt | 2 +- .../shared/ui}/theme/ThemePreviews.kt | 2 +- .../ui}/utils/SharingPlatform.android.kt | 4 +-- .../widget/SharedHandlerPlatform.android.kt | 6 ++--- .../ui}/widget/StreamPlayerTopBarPreview.kt | 6 ++--- .../shared/ui}/widget/StreamsCardPreview.kt | 2 +- .../ui}/widget/StreamsCarouselPreview.kt | 2 +- .../widget/YoutubePlayerComponent.android.kt | 5 ++-- .../shared/ui}/resources/Colors.kt | 10 +++---- .../core/shared/ui/theme/StreamPlayerTheme.kt | 27 +++++++++++++++++++ .../shared/ui}/utils/Sharing.kt | 2 +- .../shared/ui}/utils/SharingPlatform.kt | 2 +- .../shared/ui}/widget/BasicToolbar.kt | 2 +- .../shared/ui}/widget/CloseButton.kt | 4 +-- .../shared/ui}/widget/DefaultIcon.kt | 2 +- .../shared/ui}/widget/IconWithText.kt | 2 +- .../shared/ui}/widget/MicButton.kt | 4 +-- .../shared/ui}/widget/SearchIcon.kt | 4 +-- .../ui}/widget/SharedHandlerPlatform.kt | 4 +-- .../ui}/widget/SharingStreamPlatform.kt | 5 ++-- .../shared/ui}/widget/StreamPlayerTopBar.kt | 13 +++++---- .../shared/ui}/widget/StreamsCard.kt | 4 +-- .../shared/ui}/widget/StreamsCarousel.kt | 8 +++--- .../shared/ui}/widget/WebImage.kt | 2 +- .../widget/YoutubePlayerComponentPlatform.kt | 2 +- .../core_shared_ui/theme/StreamPlayerTheme.kt | 25 ----------------- .../shared/ui}/utils/SharingPlatform.ios.kt | 2 +- .../ui}/widget/SharedHandlerPlatform.ios.kt | 5 ++-- .../YoutubePlayerComponentPlatform.ios.kt | 3 ++- .../feature/detail/di/DetailStreamModule.kt | 13 ++------- .../screens/DetailStreamsScreen.kt | 19 +++++-------- .../widget/DetailStreamActionOption.kt | 11 ++++---- .../widget/DetailStreamImagePreview.kt | 9 +++---- .../screen/ListStreamsScreenPreview.kt | 2 +- .../widgets/HighlightBannerPreview.kt | 2 +- .../screens/ListStreamViewModel.kt | 18 ++++--------- .../presentation/screens/ListStreamsScreen.kt | 10 +++---- .../screens/ListStreamsUIState.kt | 5 ++-- .../presentation/widgets/HighlightBanner.kt | 6 ++--- .../ProfilePickerStreamToolbarPreview.kt | 2 +- .../SetupProfilePickerScreenPreview.kt | 4 +-- .../widget/ProfilePickerProfilesGrid.kt | 9 ++----- .../ProfilePickerSelectedProfileContainer.kt | 7 +++-- .../widgets/SearchStreamCardPreview.kt | 2 +- .../presentation/widgets/SearchCarousel.kt | 8 +++--- .../presentation/widgets/SearchStreamCard.kt | 4 +-- .../presentation/widgets/SearchStreams.kt | 18 +++++++------ 49 files changed, 147 insertions(+), 171 deletions(-) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/extension/PackageExtension.kt (87%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/theme/ThemePreviews.kt (90%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/utils/SharingPlatform.android.kt (73%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/SharedHandlerPlatform.android.kt (92%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamPlayerTopBarPreview.kt (76%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamsCardPreview.kt (85%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamsCarouselPreview.kt (85%) rename core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/YoutubePlayerComponent.android.kt (88%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/resources/Colors.kt (63%) create mode 100644 core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/utils/Sharing.kt (91%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/utils/SharingPlatform.kt (66%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/BasicToolbar.kt (94%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/CloseButton.kt (80%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/DefaultIcon.kt (93%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/IconWithText.kt (95%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/MicButton.kt (80%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/SearchIcon.kt (80%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/SharedHandlerPlatform.kt (60%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/SharingStreamPlatform.kt (95%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamPlayerTopBar.kt (90%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamsCard.kt (89%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/StreamsCarousel.kt (85%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/WebImage.kt (96%) rename core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/YoutubePlayerComponentPlatform.kt (91%) delete mode 100644 core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/StreamPlayerTheme.kt rename core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/utils/SharingPlatform.ios.kt (70%) rename core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/SharedHandlerPlatform.ios.kt (90%) rename core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_shared_ui => core/shared/ui}/widget/YoutubePlayerComponentPlatform.ios.kt (89%) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/StreamPlayerApp.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/StreamPlayerApp.kt index 98362c68..fc835885 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/StreamPlayerApp.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/StreamPlayerApp.kt @@ -2,12 +2,12 @@ package com.codandotv.streamplayerapp import androidx.compose.runtime.Composable import androidx.navigation.compose.rememberNavController -import com.codandotv.streamplayerapp.core_shared_ui.theme.StreamPlayerTheme +import com.codandotv.streamplayerapp.core.shared.ui.theme.StreamPlayerTheme import com.codandotv.streamplayerapp.navigation.NavigationGraph @Composable fun StreamPlayerApp() { - StreamPlayerTheme { + com.codandotv.streamplayerapp.core.shared.ui.theme.StreamPlayerTheme { val navController = rememberNavController() NavigationGraph(navController = navController) } diff --git a/config/detekt/detekt.yml b/config/detekt/detekt.yml index 9a3d4b6c..1c9ccdbd 100644 --- a/config/detekt/detekt.yml +++ b/config/detekt/detekt.yml @@ -938,6 +938,6 @@ style: formatting: TrailingCommaOnCallSite: - active: true + active: false TrailingCommaOnDeclarationSite: - active: true \ No newline at end of file + active: false \ No newline at end of file diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/extension/PackageExtension.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt similarity index 87% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/extension/PackageExtension.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt index b2131aad..aeee3435 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/extension/PackageExtension.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.extension +package com.codandotv.streamplayerapp.core.shared.ui.extension import android.content.pm.PackageInfo import android.content.pm.PackageManager diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/ThemePreviews.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/ThemePreviews.kt similarity index 90% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/ThemePreviews.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/ThemePreviews.kt index c25a6fdf..3a4f1365 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/ThemePreviews.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/ThemePreviews.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.theme +package com.codandotv.streamplayerapp.core.shared.ui.theme import android.content.res.Configuration import androidx.compose.material3.Surface diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.android.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.android.kt similarity index 73% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.android.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.android.kt index 265a6719..aadf064b 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.android.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.android.kt @@ -1,8 +1,8 @@ -package com.codandotv.streamplayerapp.core_shared_ui.utils +package com.codandotv.streamplayerapp.core.shared.ui.utils import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalContext -import com.codandotv.streamplayerapp.core_shared_ui.extension.getPackageInfoCompat +import com.codandotv.streamplayerapp.core.shared.ui.extension.getPackageInfoCompat @Composable actual fun isPackageInstalled(packageName: String): Boolean { diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.android.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt similarity index 92% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.android.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt index 8d7fcf9c..cb25f745 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.android.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import android.content.ClipData import android.content.ClipboardManager @@ -6,7 +6,6 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.widget.Toast -import androidx.core.content.ContextCompat import org.koin.core.component.KoinComponent import org.koin.core.component.inject @@ -74,4 +73,5 @@ actual class SharedHandlerPlatform : KoinComponent { } } -actual fun getSharedHandlerPlatform(): SharedHandlerPlatform = SharedHandlerPlatform() +actual fun getSharedHandlerPlatform(): SharedHandlerPlatform = + SharedHandlerPlatform() diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBarPreview.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBarPreview.kt similarity index 76% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBarPreview.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBarPreview.kt index 593f0b50..52a45f79 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBarPreview.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBarPreview.kt @@ -1,11 +1,11 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.material3.rememberTopAppBarState import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreview +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews @OptIn(ExperimentalMaterial3Api::class) @ThemePreviews diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCardPreview.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCardPreview.kt similarity index 85% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCardPreview.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCardPreview.kt index 8d4841c8..682c422b 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCardPreview.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCardPreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarouselPreview.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarouselPreview.kt similarity index 85% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarouselPreview.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarouselPreview.kt index 3146f326..f90d889c 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarouselPreview.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarouselPreview.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponent.android.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt similarity index 88% rename from core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponent.android.kt rename to core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt index 6ea60aad..39167957 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponent.android.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import android.annotation.SuppressLint import android.view.ViewGroup @@ -10,7 +10,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView -import com.codandotv.streamplayerapp.core_shared_ui.resources.COLOR_BACKGROUND +import com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND +import com.codandotv.streamplayerapp.core.shared.ui.widget.videoIdToEmbedHTML @SuppressLint("SetJavaScriptEnabled") @Composable diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/resources/Colors.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt similarity index 63% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/resources/Colors.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt index 82a86b72..c865ec31 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/resources/Colors.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.resources +package com.codandotv.streamplayerapp.core.shared.ui.resources import androidx.compose.material3.darkColorScheme import androidx.compose.material3.lightColorScheme @@ -12,9 +12,9 @@ object Colors { val Gray100 = Color(0xFF2C2C2C) val LightColors = lightColorScheme( - primary = COLOR_PRIMARY, + primary = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_PRIMARY, secondary = Color(0xFFF5F5F1), - background = COLOR_BACKGROUND, + background = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND, onBackground = Color(0xFFFFFFFF), surface = Color(0xFF121212), onSurface = Color(0xFFF5F5F1), @@ -22,9 +22,9 @@ object Colors { ) val DarkColors = darkColorScheme( - primary = COLOR_PRIMARY, + primary = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_PRIMARY, secondary = Color(0xFFF5F5F1), - background = COLOR_BACKGROUND, + background = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND, onBackground = Color(0xFFFFFFFF), surface = Color(0xFF121212), onSurface = Color(0xFFF5F5F1), diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt new file mode 100644 index 00000000..9836772e --- /dev/null +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt @@ -0,0 +1,27 @@ +package com.codandotv.streamplayerapp.core.shared.ui.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import com.codandotv.streamplayerapp.core.shared.ui.resources.Colors + +@Composable +fun StreamPlayerTheme( + isDarkTheme: Boolean = isSystemInDarkTheme(), + content: @Composable () -> Unit +) { + + MaterialTheme( + colorScheme = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.theme.getColorScheme( + isDarkTheme + ), + content = content, + ) +} + +private fun getColorScheme(isDarkTheme: Boolean) = + if (isDarkTheme) { + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.DarkColors + } else { + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.LightColors + } diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/Sharing.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/Sharing.kt similarity index 91% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/Sharing.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/Sharing.kt index 2f1886fe..1a81ab38 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/Sharing.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/Sharing.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.utils +package com.codandotv.streamplayerapp.core.shared.ui.utils object Sharing { const val SHARING_DATA_TYPE_TEXT = "text/plain" diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt similarity index 66% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt index fa31771b..ab17e3d4 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.utils +package com.codandotv.streamplayerapp.core.shared.ui.utils import androidx.compose.runtime.Composable diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/BasicToolbar.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/BasicToolbar.kt similarity index 94% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/BasicToolbar.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/BasicToolbar.kt index 70b083d2..51ce5eef 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/BasicToolbar.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/BasicToolbar.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.statusBarsPadding diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/CloseButton.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt similarity index 80% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/CloseButton.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt index 02993088..9de8cf2c 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/CloseButton.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Close @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_close @Composable fun CloseButton(action: () -> Unit = {}) { - DefaultIcon( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( searchIcon = Icons.Default.Close, contentDescription = stringResource(Res.string.icon_close), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/DefaultIcon.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/DefaultIcon.kt similarity index 93% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/DefaultIcon.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/DefaultIcon.kt index 8ec6b8d2..ac928d27 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/DefaultIcon.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/DefaultIcon.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Search diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/IconWithText.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt similarity index 95% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/IconWithText.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt index b7573f89..0a99128a 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/IconWithText.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/MicButton.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt similarity index 80% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/MicButton.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt index ae9f19e6..0547123d 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/MicButton.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_mic @Composable fun MicButton(action: () -> Unit = {}) { - DefaultIcon( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( searchIcon = Icons.Default.Check, contentDescription = stringResource(Res.string.icon_mic), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SearchIcon.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt similarity index 80% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SearchIcon.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt index bbc9161a..3b686974 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SearchIcon.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Search @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_search @Composable fun SearchIcon(action: () -> Unit = {}) { - DefaultIcon( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( searchIcon = Icons.Filled.Search, contentDescription = stringResource(Res.string.icon_search), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt similarity index 60% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt index 6854b3ac..735140d1 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget expect class SharedHandlerPlatform{ @@ -9,4 +9,4 @@ expect class SharedHandlerPlatform{ fun shareMoreOptions(title: String, url: String) } -expect fun getSharedHandlerPlatform() : SharedHandlerPlatform +expect fun getSharedHandlerPlatform() : com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharingStreamPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt similarity index 95% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharingStreamPlatform.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt index 8244d152..db139f31 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharingStreamPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt @@ -1,5 +1,6 @@ @file:Suppress("LongMethod") -package com.codandotv.streamplayerapp.core_shared_ui.widget + +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Column @@ -28,7 +29,7 @@ fun SharingStreamPlatform( contentTitle: String, contentUrl: String, setShowDialog: (Boolean) -> Unit, - shareHandler: SharedHandlerPlatform + shareHandler: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform ) { val coroutineScope = rememberCoroutineScope() val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBar.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt similarity index 90% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBar.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt index 90e8a5b8..a13e896c 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamPlayerTopBar.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement @@ -26,7 +26,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage -import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors +import com.codandotv.streamplayerapp.core.shared.ui.resources.Colors import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.core_shared_ui.generated.resources.Res @@ -48,15 +48,18 @@ fun StreamPlayerTopBar( onSelectedProfilePicture: String ) { Box( - modifier = Modifier.background(color = Colors.Dark10) + modifier = Modifier.background(color = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Dark10) .statusBarsPadding() ) { - StreamPlayerTopBar( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerTopBar( onNavigateProfilePicker = { onNavigateProfilePicker() }, onNavigateSearchScreen = { onNavigateSearchScreen() }, profilePicture = onSelectedProfilePicture ) - StreamPlayerOptionsTopBar(modifier = Modifier.padding(top = 50.dp), scrollBehavior) + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerOptionsTopBar( + modifier = Modifier.padding(top = 50.dp), + scrollBehavior + ) } } diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCard.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt similarity index 89% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCard.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt index 6d2a6f0e..fec6ebac 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCard.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.fillMaxSize @@ -14,7 +14,7 @@ import coil3.compose.AsyncImage @Composable fun StreamsCard( - content: StreamsCardContent, + content: com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent, onNavigateDetailList: (String) -> Unit = {}, ) { Card( diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarousel.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt similarity index 85% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarousel.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt index 1e6e1b76..2b55958a 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/StreamsCarousel.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer @@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.Flow @Composable fun StreamsCarousel( - content: StreamsCarouselContent, + content: com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent, modifier: Modifier = Modifier, onNavigateDetailList: (String) -> Unit = {}, ) { @@ -53,7 +53,7 @@ fun StreamsCarousel( ) { index -> val item = lazyPagingItems[index] item?.let { - StreamsCard( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCard( content = it, onNavigateDetailList ) @@ -65,5 +65,5 @@ fun StreamsCarousel( data class StreamsCarouselContent( val genreTitle: String, - val contentList: Flow> + val contentList: Flow> ) diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/WebImage.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/WebImage.kt similarity index 96% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/WebImage.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/WebImage.kt index 9a7134e9..fd613c84 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/WebImage.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/WebImage.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.heightIn diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt similarity index 91% rename from core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.kt rename to core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt index a23a9702..b42da9b6 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt @@ -1,6 +1,6 @@ @file:Suppress("EXPECT_AND_ACTUAL_IN_THE_SAME_MODULE") -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/StreamPlayerTheme.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/StreamPlayerTheme.kt deleted file mode 100644 index 194d0e39..00000000 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/theme/StreamPlayerTheme.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.codandotv.streamplayerapp.core_shared_ui.theme - -import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.MaterialTheme -import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors - -@Composable -fun StreamPlayerTheme( - isDarkTheme: Boolean = isSystemInDarkTheme(), - content: @Composable () -> Unit -) { - - MaterialTheme( - colorScheme = getColorScheme(isDarkTheme), - content = content, - ) -} - -private fun getColorScheme(isDarkTheme: Boolean) = - if (isDarkTheme) { - Colors.DarkColors - } else { - Colors.LightColors - } diff --git a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.ios.kt b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.ios.kt similarity index 70% rename from core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.ios.kt rename to core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.ios.kt index 750907a2..591a8a7b 100644 --- a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/utils/SharingPlatform.ios.kt +++ b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.ios.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.utils +package com.codandotv.streamplayerapp.core.shared.ui.utils import androidx.compose.runtime.Composable diff --git a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.ios.kt b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.ios.kt similarity index 90% rename from core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.ios.kt rename to core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.ios.kt index 7abde7c4..3d01447e 100644 --- a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/SharedHandlerPlatform.ios.kt +++ b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.ios.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import platform.Foundation.NSURL import platform.UIKit.UIAlertAction import platform.UIKit.UIAlertActionStyleDefault @@ -53,4 +53,5 @@ actual class SharedHandlerPlatform { } } -actual fun getSharedHandlerPlatform(): SharedHandlerPlatform = SharedHandlerPlatform() +actual fun getSharedHandlerPlatform(): SharedHandlerPlatform = + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform() diff --git a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.ios.kt b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.ios.kt similarity index 89% rename from core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.ios.kt rename to core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.ios.kt index 3d449ac3..f07dc39d 100644 --- a/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_shared_ui/widget/YoutubePlayerComponentPlatform.ios.kt +++ b/core-shared-ui/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.ios.kt @@ -1,11 +1,12 @@ @file:Suppress("PARAMETER_NAME_CHANGED_ON_OVERRIDE") -package com.codandotv.streamplayerapp.core_shared_ui.widget +package com.codandotv.streamplayerapp.core.shared.ui.widget import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.UIKitView +import com.codandotv.streamplayerapp.core.shared.ui.widget.videoIdToEmbedHTML import platform.Foundation.NSURL import platform.WebKit.WKWebView import platform.WebKit.WKWebViewConfiguration diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt index b6a7ba39..49c997b6 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt @@ -1,15 +1,6 @@ package com.codandotv.streamplayerapp.feature.detail.di -import com.codandotv.streamplayerapp.core_shared_ui.widget.getSharedHandlerPlatform -import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository -import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl -import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService -import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamServiceImpl -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl -import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase -import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCaseImpl -import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel +import com.codandotv.streamplayerapp.core.shared.ui.widget.getSharedHandlerPlatform import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import org.koin.core.module.dsl.viewModel @@ -57,6 +48,6 @@ object DetailStreamModule { ) } - factory { getSharedHandlerPlatform() } + factory { _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.getSharedHandlerPlatform() } } } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt index 37b01900..c20f00b6 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt @@ -30,14 +30,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.em import androidx.compose.ui.unit.sp import androidx.navigation.NavController -import com.codandotv.streamplayerapp.core_shared_ui.widget.BasicToolbar -import com.codandotv.streamplayerapp.core_shared_ui.widget.SharedHandlerPlatform -import com.codandotv.streamplayerapp.core_shared_ui.widget.SharingStreamPlatform -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamActionOption -import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction -import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamImagePreview -import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamRowHeader +import com.codandotv.streamplayerapp.core.shared.ui.widget.BasicToolbar +import com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform +import com.codandotv.streamplayerapp.core.shared.ui.widget.SharingStreamPlatform import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_detail.generated.resources.Res @@ -48,7 +43,7 @@ import streamplayerapp_kmp.feature_detail.generated.resources.detail_watch_prima fun DetailStreamScreen( viewModel: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel = koinViewModel(), navController: NavController, - sharedHandlerPlatform: SharedHandlerPlatform, + sharedHandlerPlatform: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform, ) { val uiState by viewModel.uiState.collectAsState() @@ -81,7 +76,7 @@ private fun SetupDetailScreen( onToggleToMyList: (com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) -> Unit, uiState: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, navController: NavController, - sharedHandlerPlatform: SharedHandlerPlatform, + sharedHandlerPlatform: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform, ) { val showDialog = remember { mutableStateOf(false) } @@ -89,7 +84,7 @@ private fun SetupDetailScreen( Scaffold( topBar = { - BasicToolbar( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.BasicToolbar( navController = navController, ) }, @@ -165,7 +160,7 @@ private fun SetupDetailScreen( } } if (showDialog.value) { - SharingStreamPlatform( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.SharingStreamPlatform( contentTitle = uiState.detailStream.title, contentUrl = uiState.detailStream.url, shareHandler = sharedHandlerPlatform, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt index 024e97b7..0afe33e1 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt @@ -17,8 +17,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import com.codandotv.streamplayerapp.core_shared_ui.widget.IconWithText -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.detail_classification @@ -45,7 +44,7 @@ fun DetailStreamActionOption( modifier = modifier, horizontalArrangement = Arrangement.SpaceEvenly ) { - IconWithText( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( onClick = { checked = !checked onToggleToMyList(detailStream) @@ -55,21 +54,21 @@ fun DetailStreamActionOption( text = stringResource(Res.string.detail_my_list), textColor = Color.Gray, ) - IconWithText( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( onClick = { TODO("Implementar mecanismo de classificação.") }, imageVector = Icons.Filled.ThumbUp, imageColor = Color.White, text = stringResource(Res.string.detail_classification), textColor = Color.Gray, ) - IconWithText( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( onClick = { onShowSharingOptions.invoke() }, imageVector = Icons.Filled.Share, imageColor = Color.White, text = stringResource(Res.string.detail_share), textColor = Color.Gray, ) - IconWithText( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( onClick = { TODO("Implementar mecanismo de download.") }, imageVector = Icons.Filled.Share, imageColor = Color.White, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt index 1cdbdbba..486fb42c 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt @@ -16,9 +16,8 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core_shared_ui.widget.YoutubePlayerComponentPlatform -import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState +import com.codandotv.streamplayerapp.core.shared.ui.widget.YoutubePlayerComponentPlatform +import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage import org.jetbrains.compose.resources.painterResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.play_circle @@ -38,14 +37,14 @@ fun DetailStreamImagePreview( contentAlignment = Alignment.Center ) { if (showPlayer) { - YoutubePlayerComponentPlatform( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.YoutubePlayerComponentPlatform( videoId = uiState.videoId.orEmpty(), modifier = Modifier .align(Alignment.TopCenter) .fillMaxSize() ) } else { - WebImage( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( imageUrl = uiState.detailStream.url, contentScale = ContentScale.Fit, contentDescription = uiState.detailStream.tagline, diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt index 9fe014aa..12cd5539 100644 --- a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt +++ b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/screen/ListStreamsScreenPreview.kt @@ -2,7 +2,7 @@ package com.codandotv.streamplayerapp.feature.liststreams.presentation.screen import androidx.compose.runtime.Composable import androidx.navigation.compose.rememberNavController -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews @ThemePreviews @Composable diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt index da8eebfb..751326d7 100644 --- a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt +++ b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt @@ -1,7 +1,7 @@ package com.codandotv.streamplayerapp.feature.liststreams.presentation.widgets import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.core_shared_ui.generated.resources.Res import streamplayerapp_kmp.core_shared_ui.generated.resources.app_name diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt index e989ceb4..f501f238 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt @@ -5,16 +5,8 @@ import androidx.lifecycle.viewModelScope import androidx.paging.cachedIn import androidx.paging.map import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.feature.liststreams.core.ContentType -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCardContent -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarouselContent +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine @@ -112,12 +104,12 @@ class ListStreamViewModel( ) - private fun getStreamsByGenre(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): StreamsCarouselContent { - return StreamsCarouselContent( + private fun getStreamsByGenre(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent { + return _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent( genre.name, listStreams(genre).map { it.map { stream -> - StreamsCardContent( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent( contentDescription = stream.name, url = stream.posterPathUrl, id = stream.id diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt index 699ae0db..60fa6ae3 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material3.CircularProgressIndicator @@ -25,9 +24,8 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamPlayerTopBar -import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarousel +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerTopBar +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarousel import org.koin.compose.viewmodel.koinViewModel @Suppress("LongParameterList") @@ -50,7 +48,7 @@ fun ListStreamsScreen( modifier = Modifier .nestedScroll(scrollBehavior.nestedScrollConnection), topBar = { - StreamPlayerTopBar( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerTopBar( scrollBehavior = scrollBehavior, onNavigateProfilePicker = onNavigateProfilePicker, onNavigateSearchScreen = onNavigateSearchScreen, @@ -86,7 +84,7 @@ fun ListStreamsScreen( ) uiState.streamsCarouselContent.forEach { streamCarouselContent -> - StreamsCarousel( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarousel( content = streamCarouselContent, onNavigateDetailList = onNavigateDetailList, ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt index 9ff02d03..287521c0 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt @@ -1,10 +1,9 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCarouselContent +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent data class ListStreamsUIState( val highlightBanner: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner? = null, - val streamsCarouselContent: List, + val streamsCarouselContent: List, val isLoading: Boolean ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt index 62f1a4f7..fc10aebc 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt @@ -31,9 +31,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo +import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @@ -92,7 +90,7 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streampla @Composable fun ContentImage(modifier: Modifier = Modifier, imageUrl: String) { - WebImage( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( modifier = modifier.fillMaxSize(), imageUrl = imageUrl, contentScale = ContentScale.Crop, diff --git a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt index 0e050258..63912647 100644 --- a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt +++ b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamToolbarPreview.kt @@ -2,7 +2,7 @@ package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews import com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerStreamToolbar @ThemePreviews diff --git a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt index a115fed7..59dff3c3 100644 --- a/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt +++ b/feature-profile/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/SetupProfilePickerScreenPreview.kt @@ -1,8 +1,8 @@ package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreview -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreview +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream @ThemePreviews diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt index 9b6ac17b..063b6a3d 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt @@ -21,14 +21,9 @@ import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream -import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState -import com.codandotv.streamplayerapp.feature.profile.presentation.widget.dpToPx -import org.jetbrains.compose.resources.painterResource +import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_profile.generated.resources.Res -import streamplayerapp_kmp.feature_profile.generated.resources.image_placeholder import streamplayerapp_kmp.feature_profile.generated.resources.profile_current_profile_name @Composable @@ -97,7 +92,7 @@ private fun ProfileItem( profileItemPosition } ) { - WebImage( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( imageUrl = profile.imageUrl, //placeholder = painterResource(Res.drawable.image_placeholder), contentDescription = stringResource( diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt index 07f48bab..a709242a 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerSelectedProfileContainer.kt @@ -16,8 +16,7 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage -import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState +import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_profile.generated.resources.Res import streamplayerapp_kmp.feature_profile.generated.resources.profile_current_profile_name @@ -42,8 +41,8 @@ fun ProfilePickerSelectedProfileContainer( .offset { offsetSelectedProfileImage } ) { selectedItem?.imageUrl?.let { imageUrl -> - WebImage( - imageUrl =imageUrl, + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( + imageUrl = imageUrl, contentScale = ContentScale.Fit, contentDescription = stringResource( Res.string.profile_current_profile_name, diff --git a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt index e0531259..923389b1 100644 --- a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt +++ b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt @@ -2,7 +2,7 @@ package com.codandotv.streamplayerapp.feature.search.presentation.widgets import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import com.codandotv.streamplayerapp.core_shared_ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews @ThemePreviews diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt index 389802b0..05a2ad9e 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt @@ -29,8 +29,8 @@ import androidx.paging.PagingData import app.cash.paging.compose.collectAsLazyPagingItems import app.cash.paging.compose.itemContentType import app.cash.paging.compose.itemKey -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCard -import com.codandotv.streamplayerapp.core_shared_ui.widget.StreamsCardContent +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCard +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent import kotlinx.coroutines.flow.Flow import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_search.generated.resources.Res @@ -42,7 +42,7 @@ import streamplayerapp_kmp.feature_search.generated.resources.search_list_error data class SearchCarousel( val genreTitle: String, - val contentList: Flow> + val contentList: Flow> ) @Composable @@ -72,7 +72,7 @@ fun SearchCarouselStream( ) { index -> val item = lazyPagingItems[index] item?.let { - StreamsCard( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCard( content = it, onNavigateDetailList = onNavigateDetailList ) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt index 3866c0dd..cb8266d6 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.codandotv.streamplayerapp.core_shared_ui.widget.WebImage +import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage @Suppress("MagicNumber") @Composable @@ -79,7 +79,7 @@ fun ImageStream(modifier: Modifier, url: String) { shape = RoundedCornerShape(4.dp), modifier = modifier ) { - WebImage( + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( imageUrl = url, contentScale = ContentScale.FillBounds, contentDescription = "", diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt index 47ddfae9..4de8ea23 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt @@ -27,10 +27,10 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core_shared_ui.resources.Colors -import com.codandotv.streamplayerapp.core_shared_ui.widget.CloseButton -import com.codandotv.streamplayerapp.core_shared_ui.widget.MicButton -import com.codandotv.streamplayerapp.core_shared_ui.widget.SearchIcon +import com.codandotv.streamplayerapp.core.shared.ui.resources.Colors +import com.codandotv.streamplayerapp.core.shared.ui.widget.CloseButton +import com.codandotv.streamplayerapp.core.shared.ui.widget.MicButton +import com.codandotv.streamplayerapp.core.shared.ui.widget.SearchIcon import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_back @@ -127,13 +127,13 @@ fun SearchTopBar( modifier = Modifier .fillMaxWidth() .height(56.dp) - .background(Colors.Gray100) + .background(_root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Gray100) ) { TextField( modifier = Modifier.fillMaxWidth(), value = currentSearchText, colors = TextFieldDefaults.colors( - focusedContainerColor = Colors.Gray100, + focusedContainerColor = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Gray100, focusedIndicatorColor = Color.Transparent, disabledIndicatorColor = Color.Transparent, unfocusedIndicatorColor = Color.Transparent, @@ -155,10 +155,12 @@ fun SearchTopBar( singleLine = true, maxLines = 1, leadingIcon = { - SearchIcon(action = onSearchIconPressed) + _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.SearchIcon( + action = onSearchIconPressed + ) }, trailingIcon = { - if (currentSearchText.isEmpty()) MicButton() else CloseButton( + if (currentSearchText.isEmpty()) _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.MicButton() else _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.CloseButton( action = onCleanTextPressed ) }, From 997c576dc810a98533febc979df3a2cf21525fb0 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 10:00:33 -0300 Subject: [PATCH 12/33] Refactor core shared package structure and update imports --- .../kotlin/com.codandotv.streamplayerapp/di/AppModule.kt | 3 +-- .../streamplayerapp/{core_shared => core/shared}/Url.kt | 2 +- .../shared}/qualifier/QualifierDispatcherIO.kt | 2 +- .../feature/detail/domain/DetailStreamMapper.kt | 4 +--- .../feature/liststreams/list/domain/ListStreamMapper.kt | 7 +------ .../feature/search/domain/mapper/SearchMapper.kt | 4 +--- 6 files changed, 6 insertions(+), 16 deletions(-) rename core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared => core/shared}/Url.kt (81%) rename core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_shared => core/shared}/qualifier/QualifierDispatcherIO.kt (77%) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 0b72f12b..b3467aa0 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -3,8 +3,7 @@ package com.codandotv.streamplayerapp.di import com.codandotv.streamplayerapp.core_background_work.di.SyncModule import com.codandotv.streamplayerapp.core_local_storage.di.LocalStorageModule import com.codandotv.streamplayerapp.core_networking.di.NetworkModule -import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO -import com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule +import com.codandotv.streamplayerapp.core.shared.qualifier.QualifierDispatcherIO import com.codandotv.streamplayerapp.feature.news.di.NewsScreenModule import io.kotzilla.generated.monitoring import kotlinx.coroutines.Dispatchers diff --git a/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/Url.kt b/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/Url.kt similarity index 81% rename from core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/Url.kt rename to core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/Url.kt index 8ea4c8e2..9c9ca120 100644 --- a/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/Url.kt +++ b/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/Url.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared +package com.codandotv.streamplayerapp.core.shared object Url { const val IMAGE_URL_SIZE_200 = "https://image.tmdb.org/t/p/w200/" diff --git a/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/qualifier/QualifierDispatcherIO.kt b/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/qualifier/QualifierDispatcherIO.kt similarity index 77% rename from core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/qualifier/QualifierDispatcherIO.kt rename to core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/qualifier/QualifierDispatcherIO.kt index 73eb989d..b9477d00 100644 --- a/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_shared/qualifier/QualifierDispatcherIO.kt +++ b/core-shared/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/qualifier/QualifierDispatcherIO.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_shared.qualifier +package com.codandotv.streamplayerapp.core.shared.qualifier import org.koin.core.qualifier.Qualifier import org.koin.core.qualifier.QualifierValue diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt index 77f0b08d..ed5dc162 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt @@ -1,9 +1,7 @@ package com.codandotv.streamplayerapp.feature.detail.domain import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity -import com.codandotv.streamplayerapp.core_shared.Url.IMAGE_URL_SIZE_500 -import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse -import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse +import com.codandotv.streamplayerapp.core.shared.Url.IMAGE_URL_SIZE_500 fun com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): com.codandotv.streamplayerapp.feature.detail.domain.DetailStream = _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStream( diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt index ca0fb367..94f6d79a 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt @@ -2,12 +2,7 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.domain import ListStreamResponse import StreamResponse -import com.codandotv.streamplayerapp.core_shared.Url -import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toStream +import com.codandotv.streamplayerapp.core.shared.Url fun ListStreamResponse.toListStream(genre: String): com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream( diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt index 4bcebf4a..18160e35 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt @@ -1,8 +1,6 @@ package com.codandotv.streamplayerapp.feature.search.domain.mapper -import com.codandotv.streamplayerapp.core_shared.Url -import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse.SearchStreamResponse -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel +import com.codandotv.streamplayerapp.core.shared.Url fun com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse.SearchStreamResponse.toSearchStreamCardModel() = _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel( From 66e4a6adfda9faaa344131a993afec45fe76a407 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 10:08:55 -0300 Subject: [PATCH 13/33] Refactor permission package structure and update imports --- .../PermissionsFactotyPlatform.android.kt | 2 +- .../permission/PermissionDeniedDialog.kt | 2 +- .../permission/PermissionsFactotyPlatform.kt | 2 +- .../permission/PermissionsManager.kt | 2 +- .../core/permission/di/PermissionsModule.kt | 17 ++++++++++++++ .../core_permission/di/PermissionsModule.kt | 15 ------------- .../PermissionsFactotyPlatform.ios.kt | 2 +- .../news/presentation/NewsScreenViewModel.kt | 6 ++--- .../news/presentation/screens/NewsScreen.kt | 2 +- .../screens/ProfilePickerStreamScreen.kt | 22 +++++++++---------- .../widget/ProfilePickerProfilesGrid.kt | 6 ++--- 11 files changed, 40 insertions(+), 38 deletions(-) rename core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_permission => core}/permission/PermissionsFactotyPlatform.android.kt (89%) rename core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_permission => core}/permission/PermissionDeniedDialog.kt (97%) rename core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_permission => core}/permission/PermissionsFactotyPlatform.kt (73%) rename core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_permission => core}/permission/PermissionsManager.kt (97%) create mode 100644 core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/di/PermissionsModule.kt delete mode 100644 core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt rename core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_permission => core}/permission/PermissionsFactotyPlatform.ios.kt (83%) diff --git a/core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.android.kt b/core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.android.kt similarity index 89% rename from core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.android.kt rename to core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.android.kt index dde61887..409f6a56 100644 --- a/core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.android.kt +++ b/core-permission/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_permission.permission +package com.codandotv.streamplayerapp.core.permission import android.content.Context import dev.icerock.moko.permissions.PermissionsController diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionDeniedDialog.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionDeniedDialog.kt similarity index 97% rename from core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionDeniedDialog.kt rename to core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionDeniedDialog.kt index 9663b959..7ce507e0 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionDeniedDialog.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionDeniedDialog.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_permission.permission +package com.codandotv.streamplayerapp.core.permission import androidx.compose.material3.AlertDialog import androidx.compose.material3.ButtonDefaults.textButtonColors diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt similarity index 73% rename from core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.kt rename to core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt index 079a2583..6f1a8cca 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_permission.permission +package com.codandotv.streamplayerapp.core.permission import dev.icerock.moko.permissions.compose.PermissionsControllerFactory diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsManager.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt similarity index 97% rename from core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsManager.kt rename to core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt index 4ef63b60..a3b59cc2 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsManager.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_permission.permission +package com.codandotv.streamplayerapp.core.permission import dev.icerock.moko.permissions.DeniedAlwaysException import dev.icerock.moko.permissions.DeniedException diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/di/PermissionsModule.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/di/PermissionsModule.kt new file mode 100644 index 00000000..713ed84f --- /dev/null +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/di/PermissionsModule.kt @@ -0,0 +1,17 @@ + +import com.codandotv.streamplayerapp.core.permission.PermissionFactory +import com.codandotv.streamplayerapp.core.permission.PermissionsManager +import com.codandotv.streamplayerapp.core.permission.PermissionsManagerImpl +import org.koin.dsl.lazyModule + +object PermissionsModule { + val module = lazyModule { + single { + PermissionsManagerImpl( + controller = PermissionFactory() + .getPermissionFactory() + .createPermissionsController() + ) + } + } +} diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt deleted file mode 100644 index 281c3461..00000000 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_permission/di/PermissionsModule.kt +++ /dev/null @@ -1,15 +0,0 @@ - -import com.codandotv.streamplayerapp.core_permission.permission.PermissionsManager -import org.koin.dsl.lazyModule - -object PermissionsModule { - val module = lazyModule { - single { - com.codandotv.streamplayerapp.core_permission.permission.PermissionsManagerImpl( - controller = com.codandotv.streamplayerapp.core_permission.permission.PermissionFactory() - .getPermissionFactory() - .createPermissionsController() - ) - } - } -} diff --git a/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.ios.kt b/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt similarity index 83% rename from core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.ios.kt rename to core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt index a1a24952..99a3983e 100644 --- a/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_permission/permission/PermissionsFactotyPlatform.ios.kt +++ b/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_permission.permission +package com.codandotv.streamplayerapp.core.permission import dev.icerock.moko.permissions.compose.PermissionsControllerFactory import dev.icerock.moko.permissions.ios.PermissionsController diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt index 45a6dcfc..b33df42e 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/NewsScreenViewModel.kt @@ -2,9 +2,9 @@ package com.codandotv.streamplayerapp.feature.news.presentation import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.codandotv.streamplayerapp.core_permission.permission.AppPermission -import com.codandotv.streamplayerapp.core_permission.permission.PermissionStatus -import com.codandotv.streamplayerapp.core_permission.permission.PermissionsManager +import com.codandotv.streamplayerapp.core.permission.AppPermission +import com.codandotv.streamplayerapp.core.permission.PermissionStatus +import com.codandotv.streamplayerapp.core.permission.PermissionsManager import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt index 3ba234c4..6c748ba3 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt @@ -20,11 +20,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.navigation.NavController +import com.codandotv.streamplayerapp.core.permission.PermissionDeniedDialog import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage import com.codandotv.streamplayerapp.core_camera_gallery.camera.rememberCameraManager import com.codandotv.streamplayerapp.core_camera_gallery.gallery.rememberGalleryManager import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation -import com.codandotv.streamplayerapp.core_permission.permission.PermissionDeniedDialog import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenActionTakeImage import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenViewModel import com.codandotv.streamplayerapp.feature.news.presentation.widget.ImagePickerContent diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt index 5839bdfc..d582ea59 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamScreen.kt @@ -33,15 +33,15 @@ import kotlin.collections.indexOf @Composable fun ProfilePickerStreamScreen( - viewModel: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamViewModel = koinViewModel(), + viewModel: ProfilePickerStreamViewModel = koinViewModel(), onNavigateListStreams: (String) -> Unit = {}, ) { val uiState by viewModel.uiState.collectAsState() if (uiState.isLoading) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.LoadScreen() + LoadScreen() } else { - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.SetupProfilePickerScreen( + SetupProfilePickerScreen( uiState = uiState, onSetCenterImageAlpha = { viewModel.setCenterImageAlpha(it) }, onSetLastItemPositioned = { viewModel.setLastItemPositioned(it) }, @@ -59,13 +59,13 @@ fun ProfilePickerStreamScreen( @Suppress("LongMethod", "LongParameterList") @Composable fun SetupProfilePickerScreen( - uiState: com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState, + uiState: ProfilePickerStreamsUIState, onSetCenterImageAlpha: (Float) -> Unit = {}, onSetScreenSize: (Float, Float, Int, Int) -> Unit = { _, _, _, _ -> }, onSetLastItemPositioned: (Boolean) -> Unit = {}, onSetHaltSizeImage: (Int) -> Unit = { }, onSetHalfExpandedSizeImage: (Int) -> Unit = { }, - onClickSelectedProfile: (com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream) -> Unit = {}, + onClickSelectedProfile: (ProfileStream) -> Unit = {}, onNavigateListStreams: (String) -> Unit = {} ) { val animatedOpacityBackground by animateColorAsState( @@ -84,7 +84,7 @@ fun SetupProfilePickerScreen( Scaffold( topBar = { - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerStreamToolbar( + ProfilePickerStreamToolbar( modifier = Modifier.background(animatedOpacityBackground) ) }, @@ -120,8 +120,8 @@ fun SetupProfilePickerScreen( if (uiState.profilesStream.isNotEmpty() && offsetProfiles.isNotEmpty()) { with(offsetProfiles[uiState.profilesStream.indexOf(selectedItem)]) { IntOffset( - _root_ide_package_.kotlin.Pair.first, - _root_ide_package_.kotlin.Pair.second + first, + second ) } } else { @@ -132,7 +132,7 @@ fun SetupProfilePickerScreen( animationSpec = tween(durationMillis = if (!showCenterImage) 100 else 800) ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerProfilesGrid( + ProfilePickerProfilesGrid( uiState = uiState, animatedProfileAlpha = animatedProfileAlpha, onSetScreenSize = onSetScreenSize, @@ -140,11 +140,11 @@ fun SetupProfilePickerScreen( onSetLastItemPositioned = onSetLastItemPositioned ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerOpacityLayer( + ProfilePickerOpacityLayer( animatedOpacityBackground ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfilePickerSelectedProfileContainer( + ProfilePickerSelectedProfileContainer( state = uiState, offsetSelectedProfileImage = animatedOffsetSelectedProfileImage, animatedSizeImage = animatedSizeImage diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt index 063b6a3d..b6d5acc0 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt @@ -55,8 +55,8 @@ fun ProfilePickerProfilesGrid( val profileItemPosition = if (offsetProfiles.isNotEmpty()) { with(offsetProfiles[profilesStream.indexOf(profile)]) { IntOffset( - _root_ide_package_.kotlin.Pair.first, - _root_ide_package_.kotlin.Pair.second + first, + second ) } } else { @@ -92,7 +92,7 @@ private fun ProfileItem( profileItemPosition } ) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( + WebImage( imageUrl = profile.imageUrl, //placeholder = painterResource(Res.drawable.image_placeholder), contentDescription = stringResource( From 712367b1848ec2d31dbb6dbacd1cab04444e1525 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 10:15:03 -0300 Subject: [PATCH 14/33] Refactor core local data base structure and update imports --- .../com.codandotv.streamplayerapp/di/AppModule.kt | 4 ++-- .../navigation/NavigationGraph.kt | 6 +++--- .../presentation/navigation/SplashNavigation.kt | 4 ++-- .../data/database/AppDatabasePlatform.android.kt | 2 +- .../local/storage}/data/dao/FavoriteDao.kt | 4 ++-- .../storage}/data/database/AppDatabasePlatform.kt | 6 +++--- .../local/storage}/di/LocalStorageModule.kt | 6 +++--- .../local/storage}/domain/model/MovieEntity.kt | 2 +- .../data/database/AppDatabasePlatform.ios.kt | 4 ++-- .../navigation}/bottomnavigation/BottomNavItem.kt | 4 ++-- .../bottomnavigation/StreamPlayerBottomNavigation.kt | 4 ++-- .../navigation}/extensions/NavControllerExtension.kt | 2 +- .../navigation}/helper/NavigationHelper.kt | 2 +- .../navigation}/routes/BottomNavRoutes.kt | 4 ++-- .../navigation}/routes/Routes.kt | 4 ++-- .../HttpClientEngineProviderPlatform.android.kt | 2 +- .../networking}/HttpClientBuilder.kt | 12 ++++++------ .../networking}/HttpClientEngineProviderPlatform.kt | 2 +- .../networking}/di/NetworkModule.kt | 4 ++-- .../networking}/di/QualifierNetworking.kt | 2 +- .../networking}/handleError/Failure.kt | 4 ++-- .../handleError/HttpClientConfigExtensions.kt | 2 +- .../networking}/handleError/NetworkResponse.kt | 2 +- .../networking}/handleError/ResultExtensions.kt | 5 +++-- .../networking}/resources/StringNetworking.kt | 2 +- .../HttpClientEngineProviderPlatform.ios.kt | 2 +- .../feature/detail/data/DetailStreamRepository.kt | 6 ++---- .../feature/detail/data/DetailStreamService.kt | 12 ++++++------ .../feature/detail/domain/DetailStreamMapper.kt | 2 +- .../navigation/DetailStreamNavigation.kt | 6 ++---- .../presentation/screens/DetailStreamViewModel.kt | 11 +++-------- .../detail/data/DetailStreamRepositoryTest.kt | 2 +- .../feature/detail/fake/FakeDetailStreamService.kt | 2 +- .../feature/detail/fake/FakeFavoriteDao.kt | 4 ++-- .../liststreams/list/data/ListStreamRepository.kt | 4 +--- .../liststreams/list/data/ListStreamService.kt | 8 ++++---- .../liststreams/list/data/StreamDataSource.kt | 5 ++--- .../presentation/navigation/ListStreamsNavigation.kt | 12 +++++------- .../list/presentation/screens/ListStreamViewModel.kt | 4 +--- .../list/presentation/screens/ListStreamsScreen.kt | 4 +--- .../news/presentation/navigation/NewsNavigation.kt | 2 +- .../feature/news/presentation/screens/NewsScreen.kt | 2 +- .../profile/data/ProfilePickerStreamRepository.kt | 5 ++--- .../profile/data/ProfilePickerStreamService.kt | 8 ++++---- .../navigation/ProfilePickerStreamNavigation.kt | 7 +++---- .../screens/ProfilePickerStreamViewModel.kt | 6 ++---- .../search/data/api/MostPopularMoviesService.kt | 10 ++++------ .../feature/search/data/api/SearchStreamService.kt | 9 ++++----- .../data/datasource/MostPopularMoviesDataSource.kt | 4 +--- .../search/data/datasource/SearchStreamDataSource.kt | 4 +--- .../navigation/SearchStreamNavigation.kt | 3 +-- .../search/presentation/screens/SearchScreen.kt | 6 +----- .../search/presentation/screens/SearchViewModel.kt | 12 +++++------- 53 files changed, 111 insertions(+), 146 deletions(-) rename core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/data/database/AppDatabasePlatform.android.kt (79%) rename core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/data/dao/FavoriteDao.kt (78%) rename core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/data/database/AppDatabasePlatform.kt (78%) rename core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/di/LocalStorageModule.kt (54%) rename core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/domain/model/MovieEntity.kt (86%) rename core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_local_storage => core/local/storage}/data/database/AppDatabasePlatform.ios.kt (90%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/bottomnavigation/BottomNavItem.kt (94%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/bottomnavigation/StreamPlayerBottomNavigation.kt (95%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/extensions/NavControllerExtension.kt (58%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/helper/NavigationHelper.kt (86%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/routes/BottomNavRoutes.kt (72%) rename core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_navigation => core/navigation}/routes/Routes.kt (69%) rename core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/HttpClientEngineProviderPlatform.android.kt (81%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/HttpClientBuilder.kt (89%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/HttpClientEngineProviderPlatform.kt (65%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/di/NetworkModule.kt (84%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/di/QualifierNetworking.kt (79%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/handleError/Failure.kt (93%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/handleError/HttpClientConfigExtensions.kt (87%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/handleError/NetworkResponse.kt (94%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/handleError/ResultExtensions.kt (68%) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/resources/StringNetworking.kt (95%) rename core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_networking => core/networking}/HttpClientEngineProviderPlatform.ios.kt (76%) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index b3467aa0..0e9930b6 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -1,8 +1,8 @@ package com.codandotv.streamplayerapp.di import com.codandotv.streamplayerapp.core_background_work.di.SyncModule -import com.codandotv.streamplayerapp.core_local_storage.di.LocalStorageModule -import com.codandotv.streamplayerapp.core_networking.di.NetworkModule +import com.codandotv.streamplayerapp.core.local.storage.di.LocalStorageModule +import com.codandotv.streamplayerapp.core.networking.di.NetworkModule import com.codandotv.streamplayerapp.core.shared.qualifier.QualifierDispatcherIO import com.codandotv.streamplayerapp.feature.news.di.NewsScreenModule import io.kotzilla.generated.monitoring diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt index f30bea6b..586e0155 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/navigation/NavigationGraph.kt @@ -14,9 +14,9 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes -import com.codandotv.streamplayerapp.core_navigation.routes.Routes +import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes +import com.codandotv.streamplayerapp.core.navigation.routes.Routes import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation.listStreamsNavGraph import com.codandotv.streamplayerapp.feature.profile.presentation.navigation.profilePickerStreamNavGraph import com.codandotv.streamplayerapp.presentation.navigation.splashNavGraph diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/presentation/navigation/SplashNavigation.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/presentation/navigation/SplashNavigation.kt index 1813487a..31e64375 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/presentation/navigation/SplashNavigation.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/presentation/navigation/SplashNavigation.kt @@ -3,8 +3,8 @@ package com.codandotv.streamplayerapp.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes -import com.codandotv.streamplayerapp.core_navigation.routes.Routes +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes +import com.codandotv.streamplayerapp.core.navigation.routes.Routes import com.codandotv.streamplayerapp.presentation.screens.SplashScreen fun NavGraphBuilder.splashNavGraph(navController: NavHostController) { diff --git a/core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.android.kt b/core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.android.kt similarity index 79% rename from core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.android.kt rename to core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.android.kt index ca347ace..e108800d 100644 --- a/core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.android.kt +++ b/core-local-storage/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_local_storage.data.database +package com.codandotv.streamplayerapp.core.local.storage.data.database import androidx.room.Room import org.koin.mp.KoinPlatform diff --git a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/dao/FavoriteDao.kt b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/dao/FavoriteDao.kt similarity index 78% rename from core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/dao/FavoriteDao.kt rename to core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/dao/FavoriteDao.kt index f2a759de..6cba7f9a 100644 --- a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/dao/FavoriteDao.kt +++ b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/dao/FavoriteDao.kt @@ -1,10 +1,10 @@ -package com.codandotv.streamplayerapp.core_local_storage.data.dao +package com.codandotv.streamplayerapp.core.local.storage.data.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query -import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity +import com.codandotv.streamplayerapp.core.local.storage.domain.model.MovieEntity @Dao interface FavoriteDao { diff --git a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.kt b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.kt similarity index 78% rename from core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.kt rename to core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.kt index 58ea6b4d..fda90db0 100644 --- a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.kt +++ b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.kt @@ -1,11 +1,11 @@ -package com.codandotv.streamplayerapp.core_local_storage.data.database +package com.codandotv.streamplayerapp.core.local.storage.data.database import androidx.room.ConstructedBy import androidx.room.Database import androidx.room.RoomDatabase import androidx.room.RoomDatabaseConstructor -import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao -import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity +import com.codandotv.streamplayerapp.core.local.storage.data.dao.FavoriteDao +import com.codandotv.streamplayerapp.core.local.storage.domain.model.MovieEntity @Database(entities = [MovieEntity::class], version = 1, exportSchema = false) @ConstructedBy(AppDatabaseConstructor::class) diff --git a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/di/LocalStorageModule.kt b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/di/LocalStorageModule.kt similarity index 54% rename from core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/di/LocalStorageModule.kt rename to core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/di/LocalStorageModule.kt index d836b517..95f5507f 100644 --- a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/di/LocalStorageModule.kt +++ b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/di/LocalStorageModule.kt @@ -1,7 +1,7 @@ -package com.codandotv.streamplayerapp.core_local_storage.di +package com.codandotv.streamplayerapp.core.local.storage.di -import com.codandotv.streamplayerapp.core_local_storage.data.database.AppDatabase -import com.codandotv.streamplayerapp.core_local_storage.data.database.databaseInstance +import com.codandotv.streamplayerapp.core.local.storage.data.database.AppDatabase +import com.codandotv.streamplayerapp.core.local.storage.data.database.databaseInstance import org.koin.dsl.module object LocalStorageModule { diff --git a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/domain/model/MovieEntity.kt b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/domain/model/MovieEntity.kt similarity index 86% rename from core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/domain/model/MovieEntity.kt rename to core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/domain/model/MovieEntity.kt index c81bb34e..27f3f58f 100644 --- a/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/domain/model/MovieEntity.kt +++ b/core-local-storage/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/domain/model/MovieEntity.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_local_storage.domain.model +package com.codandotv.streamplayerapp.core.local.storage.domain.model import androidx.room.ColumnInfo import androidx.room.Entity diff --git a/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.ios.kt b/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt similarity index 90% rename from core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.ios.kt rename to core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt index 442e6682..42d2a849 100644 --- a/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_local_storage/data/database/AppDatabasePlatform.ios.kt +++ b/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_local_storage.data.database +package com.codandotv.streamplayerapp.core.local.storage.data.database import androidx.room.Room import androidx.room.util.findDatabaseConstructorAndInitDatabaseImpl @@ -24,7 +24,7 @@ private fun documentDirectory(): String { } actual fun databaseInstance(): AppDatabase { - val dbFile = "${documentDirectory()}/$DB_FILE_NAME" + val dbFile = "${documentDirectory()}/${DB_FILE_NAME}" return Room.databaseBuilder( name = dbFile, factory = { findDatabaseConstructorAndInitDatabaseImpl(AppDatabase::class) } diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/BottomNavItem.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/BottomNavItem.kt similarity index 94% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/BottomNavItem.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/BottomNavItem.kt index 752441dd..20568340 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/BottomNavItem.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/BottomNavItem.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_navigation.bottomnavigation +package com.codandotv.streamplayerapp.core.navigation.bottomnavigation -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes import org.jetbrains.compose.resources.DrawableResource import org.jetbrains.compose.resources.StringResource import streamplayerapp_kmp.core_navigation.generated.resources.Res diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/StreamPlayerBottomNavigation.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/StreamPlayerBottomNavigation.kt similarity index 95% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/StreamPlayerBottomNavigation.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/StreamPlayerBottomNavigation.kt index 8bf88b86..a5dea569 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/bottomnavigation/StreamPlayerBottomNavigation.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/bottomnavigation/StreamPlayerBottomNavigation.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_navigation.bottomnavigation +package com.codandotv.streamplayerapp.core.navigation.bottomnavigation import androidx.compose.material3.Icon import androidx.compose.material3.LocalAbsoluteTonalElevation @@ -10,7 +10,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.surfaceColorAtElevation import androidx.compose.runtime.Composable import androidx.navigation.NavController -import com.codandotv.streamplayerapp.core_navigation.helper.currentRoute +import com.codandotv.streamplayerapp.core.navigation.helper.currentRoute import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/extensions/NavControllerExtension.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/extensions/NavControllerExtension.kt similarity index 58% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/extensions/NavControllerExtension.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/extensions/NavControllerExtension.kt index ca315735..aa2c20f3 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/extensions/NavControllerExtension.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/extensions/NavControllerExtension.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_navigation.extensions +package com.codandotv.streamplayerapp.core.navigation.extensions import androidx.navigation.NavController diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/helper/NavigationHelper.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/helper/NavigationHelper.kt similarity index 86% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/helper/NavigationHelper.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/helper/NavigationHelper.kt index 105d79c8..568980d2 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/helper/NavigationHelper.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/helper/NavigationHelper.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_navigation.helper +package com.codandotv.streamplayerapp.core.navigation.helper import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/BottomNavRoutes.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/BottomNavRoutes.kt similarity index 72% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/BottomNavRoutes.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/BottomNavRoutes.kt index e1ba66d5..61853910 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/BottomNavRoutes.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/BottomNavRoutes.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_navigation.routes +package com.codandotv.streamplayerapp.core.navigation.routes -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID object BottomNavRoutes { const val HOME = "bottomHome" diff --git a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/Routes.kt b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/Routes.kt similarity index 69% rename from core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/Routes.kt rename to core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/Routes.kt index 552cfc46..5782b5db 100644 --- a/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_navigation/routes/Routes.kt +++ b/core-navigation/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/navigation/routes/Routes.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_navigation.routes +package com.codandotv.streamplayerapp.core.navigation.routes -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.PARAM.ID +import com.codandotv.streamplayerapp.core.navigation.routes.Routes.PARAM.ID object Routes { const val DETAIL = "DetailList/" diff --git a/core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.android.kt b/core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.android.kt similarity index 81% rename from core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.android.kt rename to core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.android.kt index 3adf371a..0990bf06 100644 --- a/core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.android.kt +++ b/core-networking/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking +package com.codandotv.streamplayerapp.core.networking import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.okhttp.OkHttpConfig diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientBuilder.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientBuilder.kt similarity index 89% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientBuilder.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientBuilder.kt index c3dd4fe0..e909374f 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientBuilder.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientBuilder.kt @@ -1,7 +1,7 @@ -package com.codandotv.streamplayerapp.core_networking +package com.codandotv.streamplayerapp.core.networking -import com.codandotv.streamplayerapp.core_networking.di.Network.TIMEOUT -import com.codandotv.streamplayerapp.core_networking.handleError.Failure +import com.codandotv.streamplayerapp.core.networking.handleError.Failure +import com.codandotv.streamplayerapp.core.networking.di.Network import core.networking.BuildKonfig import io.ktor.client.HttpClient import io.ktor.client.plugins.ClientRequestException @@ -36,9 +36,9 @@ internal object HttpClientBuilder { } install(HttpTimeout) { - socketTimeoutMillis = TIMEOUT - requestTimeoutMillis = TIMEOUT - connectTimeoutMillis = TIMEOUT + socketTimeoutMillis = Network.TIMEOUT + requestTimeoutMillis = Network.TIMEOUT + connectTimeoutMillis = Network.TIMEOUT } defaultRequest { diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.kt similarity index 65% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.kt index 4096cb84..e5205f8a 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking +package com.codandotv.streamplayerapp.core.networking import io.ktor.client.engine.HttpClientEngine diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/NetworkModule.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/NetworkModule.kt similarity index 84% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/NetworkModule.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/NetworkModule.kt index 82334c45..9858dd2e 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/NetworkModule.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/NetworkModule.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_networking.di +package com.codandotv.streamplayerapp.core.networking.di -import com.codandotv.streamplayerapp.core_networking.HttpClientBuilder +import com.codandotv.streamplayerapp.core.networking.HttpClientBuilder import core.networking.BuildKonfig import io.ktor.client.HttpClient import org.koin.core.annotation.Module diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/QualifierNetworking.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierNetworking.kt similarity index 79% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/QualifierNetworking.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierNetworking.kt index fe2a9482..9e767f36 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/di/QualifierNetworking.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierNetworking.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking.di +package com.codandotv.streamplayerapp.core.networking.di import org.koin.core.qualifier.Qualifier import org.koin.core.qualifier.QualifierValue diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/Failure.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/Failure.kt similarity index 93% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/Failure.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/Failure.kt index 183c6568..ea87c5d1 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/Failure.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/Failure.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_networking.handleError +package com.codandotv.streamplayerapp.core.networking.handleError -import com.codandotv.streamplayerapp.core_networking.resources.StringNetworking +import com.codandotv.streamplayerapp.core.networking.resources.StringNetworking import kotlinx.serialization.Serializable import org.koin.core.component.KoinComponent diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/HttpClientConfigExtensions.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/HttpClientConfigExtensions.kt similarity index 87% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/HttpClientConfigExtensions.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/HttpClientConfigExtensions.kt index ab9b83f4..8955ac2f 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/HttpClientConfigExtensions.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/HttpClientConfigExtensions.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking.handleError +package com.codandotv.streamplayerapp.core.networking.handleError import io.ktor.client.HttpClient import io.ktor.client.call.body diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/NetworkResponse.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/NetworkResponse.kt similarity index 94% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/NetworkResponse.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/NetworkResponse.kt index 51378aab..1876a9fb 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/NetworkResponse.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/NetworkResponse.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking.handleError +package com.codandotv.streamplayerapp.core.networking.handleError import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/ResultExtensions.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/ResultExtensions.kt similarity index 68% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/ResultExtensions.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/ResultExtensions.kt index eb58e23a..67e6a56d 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/handleError/ResultExtensions.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/handleError/ResultExtensions.kt @@ -1,6 +1,7 @@ -package com.codandotv.streamplayerapp.core_networking.handleError +package com.codandotv.streamplayerapp.core.networking.handleError import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.FlowCollector import kotlinx.coroutines.flow.catch inline fun Result.onError(action: (exception: Failure) -> Unit): Result { @@ -11,7 +12,7 @@ inline fun Result.onError(action: (exception: Failure) -> Unit): Result Flow.catchFailure(action: suspend kotlinx.coroutines.flow.FlowCollector.(Failure) -> Unit): Flow = +fun Flow.catchFailure(action: suspend FlowCollector.(Failure) -> Unit): Flow = catch { if(it is Failure){ action(it) diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/resources/StringNetworking.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/resources/StringNetworking.kt similarity index 95% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/resources/StringNetworking.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/resources/StringNetworking.kt index 8c2341eb..3b92cfd5 100644 --- a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_networking/resources/StringNetworking.kt +++ b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/resources/StringNetworking.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking.resources +package com.codandotv.streamplayerapp.core.networking.resources import org.jetbrains.compose.resources.StringResource import streamplayerapp_kmp.core_networking.generated.resources.Res diff --git a/core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.ios.kt b/core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.ios.kt similarity index 76% rename from core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.ios.kt rename to core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.ios.kt index 5ddce88d..f859cf84 100644 --- a/core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_networking/HttpClientEngineProviderPlatform.ios.kt +++ b/core-networking/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/networking/HttpClientEngineProviderPlatform.ios.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_networking +package com.codandotv.streamplayerapp.core.networking import io.ktor.client.engine.HttpClientEngine import io.ktor.client.engine.darwin.Darwin diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt index b2bc5d72..6f6be528 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt @@ -1,9 +1,7 @@ package com.codandotv.streamplayerapp.feature.detail.data -import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature.detail.domain.VideoStream +import com.codandotv.streamplayerapp.core.local.storage.data.dao.FavoriteDao +import com.codandotv.streamplayerapp.core.networking.handleError.toFlow import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStream import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStreamLocal import com.codandotv.streamplayerapp.feature.detail.domain.toVideoStreams diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt index f9af21cb..7490a1be 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt @@ -1,27 +1,27 @@ package com.codandotv.streamplayerapp.feature.detail.data -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse import io.ktor.client.HttpClient import io.ktor.client.request.url interface DetailStreamService { - suspend fun getMovie(movieId: String): NetworkResponse - suspend fun getVideoStreams(movieId: String): NetworkResponse + suspend fun getMovie(movieId: String): NetworkResponse + suspend fun getVideoStreams(movieId: String): NetworkResponse } class DetailStreamServiceImpl( private val client: HttpClient ) : com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService { - override suspend fun getMovie(movieId: String): NetworkResponse = + override suspend fun getMovie(movieId: String): NetworkResponse = client.safeRequest { url("movie/$movieId") } - override suspend fun getVideoStreams(movieId: String): NetworkResponse = + override suspend fun getVideoStreams(movieId: String): NetworkResponse = client.safeRequest { url("movie/$movieId/videos") } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt index ed5dc162..611fdab6 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt @@ -1,6 +1,6 @@ package com.codandotv.streamplayerapp.feature.detail.domain -import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity +import com.codandotv.streamplayerapp.core.local.storage.domain.model.MovieEntity import com.codandotv.streamplayerapp.core.shared.Url.IMAGE_URL_SIZE_500 fun com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): com.codandotv.streamplayerapp.feature.detail.domain.DetailStream = diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt index b387f085..65543c45 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt @@ -3,10 +3,8 @@ package com.codandotv.streamplayerapp.feature.detail.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.DETAIL_COMPLETE -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.PARAM.ID -import com.codandotv.streamplayerapp.feature.detail.di.DetailStreamModule -import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamScreen +import com.codandotv.streamplayerapp.core.navigation.routes.Routes.DETAIL_COMPLETE +import com.codandotv.streamplayerapp.core.navigation.routes.Routes.PARAM.ID import org.koin.compose.getKoin import org.koin.compose.module.rememberKoinModules import org.koin.compose.viewmodel.koinViewModel diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt index dbc19957..59789057 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt @@ -2,13 +2,8 @@ package com.codandotv.streamplayerapp.feature.detail.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.core_networking.resources.StringNetworking -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream -import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase -import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase -import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState -import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState +import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure +import com.codandotv.streamplayerapp.core.networking.resources.StringNetworking import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -43,7 +38,7 @@ class DetailStreamViewModel( viewModelScope.launch { detailStreamUseCase.getMovie() .zip(videoStreamsUseCase.getVideoStreams()) { detailStream, videoUrl -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState( + DetailStreamsUIState.DetailStreamsLoadedUIState( detailStream = detailStream, videoId = videoUrl.firstOrNull()?.videoId ) diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt index 75ad394a..604ed7ef 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt @@ -1,6 +1,6 @@ package com.codandotv.streamplayerapp.feature.detail.data -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStream import com.codandotv.streamplayerapp.feature.detail.expectedDetailStream import com.codandotv.streamplayerapp.feature.detail.fake.FakeDetailStreamService diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt index 64071038..1786a2cb 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt @@ -1,6 +1,6 @@ package com.codandotv.streamplayerapp.feature.detail.fake -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt index c7cc9c63..8c798ce2 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeFavoriteDao.kt @@ -1,7 +1,7 @@ package com.codandotv.streamplayerapp.feature.detail.fake -import com.codandotv.streamplayerapp.core_local_storage.data.dao.FavoriteDao -import com.codandotv.streamplayerapp.core_local_storage.domain.model.MovieEntity +import com.codandotv.streamplayerapp.core.local.storage.data.dao.FavoriteDao +import com.codandotv.streamplayerapp.core.local.storage.domain.model.MovieEntity class FakeFavoriteDao : FavoriteDao { private val movies = mutableListOf() diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt index 6fed7abb..d7a4784a 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt @@ -3,9 +3,7 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.data import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import com.codandotv.streamplayerapp.core.networking.handleError.toFlow import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toGenres import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toStream import kotlinx.coroutines.flow.Flow diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt index 77b9589c..33db0108 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt @@ -1,8 +1,8 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.data import ListStreamResponse -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse import io.ktor.client.HttpClient import io.ktor.client.request.parameter @@ -11,7 +11,7 @@ import io.ktor.client.request.url interface ListStreamService { suspend fun getMovies(genres: String): NetworkResponse suspend fun getPaginatedMovies(genres: String, page: Int): NetworkResponse - suspend fun getGenres(): NetworkResponse + suspend fun getGenres(): NetworkResponse suspend fun getTopRatedMovies( sortBy: String = "vote_average.desc", page: Int = 1 @@ -40,7 +40,7 @@ class ListStreamServiceImpl( } } - override suspend fun getGenres(): NetworkResponse { + override suspend fun getGenres(): NetworkResponse { return client.safeRequest { url("genre/movie/list") } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt index 2f1b9406..421bfbd4 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt @@ -2,8 +2,7 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.data import androidx.paging.PagingSource import androidx.paging.PagingState -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toListStream @Suppress("TooGenericExceptionCaught", "UseCheckOrError") @@ -22,7 +21,7 @@ class StreamDataSource( page = nextPageNumber ) - if (response is com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse.Success) { + if (response is NetworkResponse.Success) { LoadResult.Page( data = response.value.toListStream(genreName).streams, prevKey = if (nextPageNumber > 1) nextPageNumber - 1 else null, diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt index c1ec9746..c6edd5e0 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt @@ -3,13 +3,11 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navi import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.HOME_COMPLETE -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID -import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.DETAIL -import com.codandotv.streamplayerapp.core_navigation.routes.Routes.PROFILE_PICKER -import com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule -import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.HOME_COMPLETE +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID +import com.codandotv.streamplayerapp.core.navigation.routes.Routes +import com.codandotv.streamplayerapp.core.navigation.routes.Routes.DETAIL +import com.codandotv.streamplayerapp.core.navigation.routes.Routes.PROFILE_PICKER import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt index f501f238..017b4294 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt @@ -4,9 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.paging.cachedIn import androidx.paging.map -import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent -import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent +import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt index 60fa6ae3..29880853 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt @@ -23,9 +23,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.unit.dp import androidx.navigation.NavController -import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation -import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerTopBar -import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarousel +import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation import org.koin.compose.viewmodel.koinViewModel @Suppress("LongParameterList") diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt index 3e883938..27ae635b 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/navigation/NewsNavigation.kt @@ -3,7 +3,7 @@ package com.codandotv.streamplayerapp.feature.news.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes import com.codandotv.streamplayerapp.feature.news.presentation.screens.NewsScreenContent import org.koin.core.annotation.KoinExperimentalAPI diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt index 6c748ba3..ceb128a8 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt @@ -24,7 +24,7 @@ import com.codandotv.streamplayerapp.core.permission.PermissionDeniedDialog import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage import com.codandotv.streamplayerapp.core_camera_gallery.camera.rememberCameraManager import com.codandotv.streamplayerapp.core_camera_gallery.gallery.rememberGalleryManager -import com.codandotv.streamplayerapp.core_navigation.bottomnavigation.StreamPlayerBottomNavigation +import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenActionTakeImage import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenViewModel import com.codandotv.streamplayerapp.feature.news.presentation.widget.ImagePickerContent diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt index 0fd48802..e5177605 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt @@ -1,8 +1,7 @@ package com.codandotv.streamplayerapp.feature.profile.data -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.core_networking.handleError.toResult -import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.core.networking.handleError.toFlow +import com.codandotv.streamplayerapp.core.networking.handleError.toResult import com.codandotv.streamplayerapp.feature.profile.domain.toProfiles import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt index 8c21b7f6..e8be02e4 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt @@ -1,7 +1,7 @@ package com.codandotv.streamplayerapp.feature.profile.data -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse import io.ktor.client.HttpClient import io.ktor.client.request.url @@ -9,14 +9,14 @@ import org.koin.core.annotation.Factory import org.koin.core.annotation.Provided interface ProfilePickerStreamService { - suspend fun getProfiles(): NetworkResponse + suspend fun getProfiles(): NetworkResponse } @Factory class ProfilePickerStreamServiceImpl( @Provided private val client: HttpClient ) : com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamService { - override suspend fun getProfiles(): NetworkResponse = + override suspend fun getProfiles(): NetworkResponse = client.safeRequest { url("profiles") } diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt index 81f1bbd6..24154986 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/navigation/ProfilePickerStreamNavigation.kt @@ -3,10 +3,9 @@ package com.codandotv.streamplayerapp.feature.profile.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.HOME -import com.codandotv.streamplayerapp.core_navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID -import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamScreen +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.HOME +import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.PARAM.PROFILE_ID +import com.codandotv.streamplayerapp.core.navigation.routes.Routes import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt index aeb4b08c..58a1dde1 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt @@ -2,9 +2,7 @@ package com.codandotv.streamplayerapp.feature.profile.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase -import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream +import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure import kotlinx.coroutines.delay import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -33,7 +31,7 @@ class ProfilePickerStreamViewModel( } .collect { profilePickerStream -> _uiState.update { - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState( + ProfilePickerStreamsUIState( profilesStream = profilePickerStream, selectedItem = profilePickerStream.first(), isLoading = false diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt index d7915443..bad92b78 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt @@ -1,24 +1,22 @@ package com.codandotv.streamplayerapp.feature.search.data.api -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import io.ktor.client.HttpClient -import io.ktor.client.call.body -import io.ktor.client.request.get import io.ktor.client.request.url import org.koin.core.annotation.Factory import org.koin.core.annotation.Provided interface MostPopularMoviesService { - suspend fun getPopular(): NetworkResponse + suspend fun getPopular(): NetworkResponse } @Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService::class]) class MostPopularMoviesServiceImpl( @Provided private val client: HttpClient ) : com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService { - override suspend fun getPopular(): NetworkResponse = + override suspend fun getPopular(): NetworkResponse = client.safeRequest { url("movie/popular") } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt index 198103c9..3d4be30a 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/SearchStreamService.kt @@ -1,24 +1,23 @@ package com.codandotv.streamplayerapp.feature.search.data.api -import com.codandotv.streamplayerapp.core_networking.handleError.NetworkResponse -import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest +import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import io.ktor.client.HttpClient import io.ktor.client.request.parameter import io.ktor.client.request.url import org.koin.core.annotation.Factory import org.koin.core.annotation.Provided -import org.koin.meta.annotations.ExternalDefinition interface SearchStreamService { - suspend fun getSearch(query: String): NetworkResponse + suspend fun getSearch(query: String): NetworkResponse } @Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService::class]) class SearchStreamServiceImpl( @Provided private val client: HttpClient ) : com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService { - override suspend fun getSearch(query: String): NetworkResponse = + override suspend fun getSearch(query: String): NetworkResponse = client.safeRequest { url("search/movie") parameter("query", query) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt index 3e5a16e6..e75ba43d 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt @@ -1,8 +1,6 @@ package com.codandotv.streamplayerapp.feature.search.data.datasource -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService +import com.codandotv.streamplayerapp.core.networking.handleError.toFlow import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt index a30a5d4e..543aace6 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt @@ -1,8 +1,6 @@ package com.codandotv.streamplayerapp.feature.search.data.datasource -import com.codandotv.streamplayerapp.core_networking.handleError.toFlow -import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse -import com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService +import com.codandotv.streamplayerapp.core.networking.handleError.toFlow import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt index c3f06e08..684e439c 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt @@ -3,8 +3,7 @@ package com.codandotv.streamplayerapp.feature.search.presentation.navigation import androidx.navigation.NavGraphBuilder import androidx.navigation.NavHostController import androidx.navigation.compose.composable -import com.codandotv.streamplayerapp.core_navigation.routes.Routes -import com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchScreen +import com.codandotv.streamplayerapp.core.navigation.routes.Routes import org.koin.core.annotation.KoinExperimentalAPI @OptIn(KoinExperimentalAPI::class) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt index 39be9f7a..bbfd96ef 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt @@ -20,12 +20,8 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController -import com.codandotv.streamplayerapp.core_navigation.extensions.goBack +import com.codandotv.streamplayerapp.core.navigation.extensions.goBack import com.codandotv.streamplayerapp.feature.search.domain.mapper.toSearchStreamCardModel -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCard -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchableTopBar -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsEmpty -import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_search.generated.resources.Res diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt index ea519c71..d8ca62f5 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt @@ -2,9 +2,7 @@ package com.codandotv.streamplayerapp.feature.search.presentation.screens import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.codandotv.streamplayerapp.core_networking.handleError.catchFailure -import com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase -import com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase +import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow @@ -59,9 +57,9 @@ class SearchViewModel( }.collect { result -> _uiState.update { if (result.results.isEmpty()) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty + SearchUIState.Empty } else { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success(result) + SearchUIState.Success(result) } } } @@ -79,9 +77,9 @@ class SearchViewModel( }.collect { result -> _uiState.update { if (result.results.isEmpty()) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty + SearchUIState.Empty } else { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success(result) + SearchUIState.Success(result) } } } From a76c0a71f965bf27cd9993646ef81eaf1869cb78 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 11:29:57 -0300 Subject: [PATCH 15/33] Refactor core camera gallery base structure and update imports --- .../camera/gallery}/SharedImage.kt | 2 +- .../camera/gallery}/camera/CameraExtensions.kt | 6 +++--- .../camera/gallery}/camera/CameraManager.android.kt | 6 +++--- .../camera/gallery}/camera/ComposeFileProvider.kt | 4 ++-- .../camera/gallery}/gallery/GalleryManager.android.kt | 6 +++--- .../camera/gallery}/SharedImage.kt | 2 +- .../camera/gallery}/camera/CameraManager.kt | 4 ++-- .../camera/gallery}/gallery/GalleryManager.kt | 4 ++-- .../camera/gallery}/SharedImage.kt | 2 +- .../camera/gallery}/camera/CameraManager.ios.kt | 5 +++-- .../camera/gallery}/gallery/GalleryManager.ios.kt | 5 +++-- .../feature/news/presentation/screens/NewsScreen.kt | 6 +++--- .../news/presentation/widget/ImagePickerCameraGallery.kt | 2 +- 13 files changed, 28 insertions(+), 26 deletions(-) rename core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/SharedImage.kt (90%) rename core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/camera/CameraExtensions.kt (91%) rename core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/camera/CameraManager.android.kt (89%) rename core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/camera/ComposeFileProvider.kt (85%) rename core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/gallery/GalleryManager.android.kt (87%) rename core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/SharedImage.kt (72%) rename core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/camera/CameraManager.kt (63%) rename core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/gallery/GalleryManager.kt (64%) rename core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/SharedImage.kt (95%) rename core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/camera/CameraManager.ios.kt (91%) rename core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/{core_camera_gallery => core/camera/gallery}/gallery/GalleryManager.ios.kt (90%) diff --git a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt similarity index 90% rename from core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt rename to core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt index 0f994b17..92d63199 100644 --- a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt +++ b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery +package com.codandotv.streamplayerapp.core.camera.gallery import android.graphics.Bitmap import androidx.compose.ui.graphics.ImageBitmap diff --git a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraExtensions.kt b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraExtensions.kt similarity index 91% rename from core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraExtensions.kt rename to core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraExtensions.kt index a7704f89..8e664398 100644 --- a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraExtensions.kt +++ b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraExtensions.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.camera +package com.codandotv.streamplayerapp.core.camera.gallery.camera import android.content.ContentResolver import android.graphics.Bitmap @@ -11,7 +11,7 @@ import java.io.InputStream internal fun Uri.getBitmapFromUri(contentResolver: ContentResolver): Bitmap? { - return kotlin.runCatching { + return runCatching { val inputStreamForBitmap = contentResolver.openInputStream(this) val bitmap = inputStreamForBitmap?.use { BitmapFactory.decodeStream(it) @@ -28,7 +28,7 @@ internal fun Uri.getBitmapFromUri(contentResolver: ContentResolver): Bitmap? { internal fun Bitmap.rotateImageIfRequired(inputStream: InputStream?): Bitmap { if (inputStream == null) return this - return kotlin.runCatching { + return runCatching { val exif = ExifInterface(inputStream) val orientation = exif.getAttributeInt( ExifInterface.TAG_ORIENTATION, diff --git a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.android.kt b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.android.kt similarity index 89% rename from core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.android.kt rename to core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.android.kt index 9f642570..63177c8a 100644 --- a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.android.kt +++ b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.camera +package com.codandotv.streamplayerapp.core.camera.gallery.camera import android.content.ContentResolver import android.net.Uri @@ -10,7 +10,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.platform.LocalContext -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage @Composable actual fun rememberCameraManager(onResult: (SharedImage?) -> Unit): CameraManager { @@ -33,7 +33,7 @@ actual fun rememberCameraManager(onResult: (SharedImage?) -> Unit): CameraManage ComposeFileProvider.getImageUri(context)?.let { tempPhotoUri = it cameraLauncher.launch(tempPhotoUri) - }?: run { onResult.invoke(null) } + } ?: run { onResult.invoke(null) } } ) } diff --git a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/ComposeFileProvider.kt b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/ComposeFileProvider.kt similarity index 85% rename from core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/ComposeFileProvider.kt rename to core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/ComposeFileProvider.kt index 248a9acc..f19b01f3 100644 --- a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/ComposeFileProvider.kt +++ b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/ComposeFileProvider.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.camera +package com.codandotv.streamplayerapp.core.camera.gallery.camera import android.content.Context import android.net.Uri @@ -11,7 +11,7 @@ class ComposeFileProvider : FileProvider( R.xml.path_provider ) { companion object { - fun getImageUri(context: Context): Uri? = kotlin.runCatching { + fun getImageUri(context: Context): Uri? = runCatching { val tempFile = File.createTempFile( "picture_${System.currentTimeMillis()}", ".png", context.cacheDir ).apply { diff --git a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.android.kt b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.android.kt similarity index 87% rename from core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.android.kt rename to core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.android.kt index 3e4fdd67..f7dd365d 100644 --- a/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.android.kt +++ b/core-camera-gallery/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.android.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.gallery +package com.codandotv.streamplayerapp.core.camera.gallery.gallery import android.content.ContentResolver import androidx.activity.compose.rememberLauncherForActivityResult @@ -7,8 +7,8 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage -import com.codandotv.streamplayerapp.core_camera_gallery.camera.getBitmapFromUri +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.camera.getBitmapFromUri @Composable actual fun rememberGalleryManager(onImageSelected: (SharedImage?) -> Unit): GalleryManager { diff --git a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt similarity index 72% rename from core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt rename to core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt index 465b27e1..b19b7b12 100644 --- a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt +++ b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery +package com.codandotv.streamplayerapp.core.camera.gallery import androidx.compose.ui.graphics.ImageBitmap diff --git a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.kt b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.kt similarity index 63% rename from core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.kt rename to core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.kt index d144844e..b07a12e3 100644 --- a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.kt +++ b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.kt @@ -1,7 +1,7 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.camera +package com.codandotv.streamplayerapp.core.camera.gallery.camera import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage @Composable expect fun rememberCameraManager(onResult: (SharedImage?) -> Unit): CameraManager diff --git a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.kt b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.kt similarity index 64% rename from core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.kt rename to core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.kt index 5d0f1a71..24791459 100644 --- a/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.kt +++ b/core-camera-gallery/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.kt @@ -1,7 +1,7 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.gallery +package com.codandotv.streamplayerapp.core.camera.gallery.gallery import androidx.compose.runtime.Composable -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage expect class GalleryManager( onLaunch: () -> Unit diff --git a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt similarity index 95% rename from core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt rename to core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt index 25769ff4..5e49388c 100644 --- a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/SharedImage.kt +++ b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/SharedImage.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_camera_gallery +package com.codandotv.streamplayerapp.core.camera.gallery import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.toComposeImageBitmap diff --git a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.ios.kt b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.ios.kt similarity index 91% rename from core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.ios.kt rename to core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.ios.kt index f00423e6..789fa2f1 100644 --- a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/camera/CameraManager.ios.kt +++ b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/camera/CameraManager.ios.kt @@ -1,8 +1,9 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.camera +package com.codandotv.streamplayerapp.core.camera.gallery.camera import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.camera.CameraManager import platform.UIKit.UIApplication import platform.UIKit.UIImage import platform.UIKit.UIImagePickerController diff --git a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.ios.kt b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.ios.kt similarity index 90% rename from core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.ios.kt rename to core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.ios.kt index 125a9007..2ddc1440 100644 --- a/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core_camera_gallery/gallery/GalleryManager.ios.kt +++ b/core-camera-gallery/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/camera/gallery/gallery/GalleryManager.ios.kt @@ -1,8 +1,9 @@ -package com.codandotv.streamplayerapp.core_camera_gallery.gallery +package com.codandotv.streamplayerapp.core.camera.gallery.gallery import androidx.compose.runtime.Composable import androidx.compose.runtime.remember -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.gallery.GalleryManager import platform.UIKit.UIApplication import platform.UIKit.UIImage import platform.UIKit.UIImagePickerController diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt index ceb128a8..78389270 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt @@ -21,9 +21,9 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core.permission.PermissionDeniedDialog -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage -import com.codandotv.streamplayerapp.core_camera_gallery.camera.rememberCameraManager -import com.codandotv.streamplayerapp.core_camera_gallery.gallery.rememberGalleryManager +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.camera.rememberCameraManager +import com.codandotv.streamplayerapp.core.camera.gallery.gallery.rememberGalleryManager import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenActionTakeImage import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenViewModel diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt index ec660dba..afc65740 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt @@ -23,7 +23,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core_camera_gallery.SharedImage +import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_news.generated.resources.Res import streamplayerapp_kmp.feature_news.generated.resources.open_camera From a76b76156d1d77f39431e759badd1df5a2db6bc1 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 11:38:44 -0300 Subject: [PATCH 16/33] Refactor core background work base structure and update imports --- .../streamplayerapp/presentation/CustomApplication.kt | 2 +- .../kotlin/com.codandotv.streamplayerapp/SyncBridge.kt | 4 +--- .../kotlin/com.codandotv.streamplayerapp/di/AppModule.kt | 2 +- .../worker => core/background/work}/SyncWorker.kt | 3 +-- .../worker => core/background/work}/WorkScheduler.kt | 2 +- .../background/work}/NotifierHelper.kt | 2 +- .../background/work}/SyncManager.kt | 6 +++--- .../background/work}/di/SyncModule.kt | 4 ++-- 8 files changed, 11 insertions(+), 14 deletions(-) rename core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_background_work/worker => core/background/work}/SyncWorker.kt (80%) rename core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/{core_background_work/worker => core/background/work}/WorkScheduler.kt (89%) rename core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_background_work => core/background/work}/NotifierHelper.kt (93%) rename core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_background_work => core/background/work}/SyncManager.kt (72%) rename core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/{core_background_work => core/background/work}/di/SyncModule.kt (54%) diff --git a/androidApp/src/main/kotlin/com/codandotv/streamplayerapp/presentation/CustomApplication.kt b/androidApp/src/main/kotlin/com/codandotv/streamplayerapp/presentation/CustomApplication.kt index a5a52b6e..e04178ee 100644 --- a/androidApp/src/main/kotlin/com/codandotv/streamplayerapp/presentation/CustomApplication.kt +++ b/androidApp/src/main/kotlin/com/codandotv/streamplayerapp/presentation/CustomApplication.kt @@ -2,7 +2,7 @@ package com.codandotv.streamplayerapp.presentation import android.app.Application import com.codandotv.streamplayerapp.core.shared.ui.R -import com.codandotv.streamplayerapp.core_background_work.worker.WorkScheduler +import com.codandotv.streamplayerapp.core.background.work.WorkScheduler import com.codandotv.streamplayerapp.di.streamPlayerApplication import com.mmk.kmpnotifier.notification.NotifierManager import com.mmk.kmpnotifier.notification.configuration.NotificationPlatformConfiguration diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/SyncBridge.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/SyncBridge.kt index 0d3a785c..4979e292 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/SyncBridge.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/SyncBridge.kt @@ -1,11 +1,9 @@ package com.codandotv.streamplayerapp -import com.codandotv.streamplayerapp.core_background_work.SyncManager +import com.codandotv.streamplayerapp.core.background.work.SyncManager import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import org.koin.core.context.startKoin -import org.koin.dsl.module import org.koin.mp.KoinPlatform.getKoin object SyncBridge { diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 0e9930b6..846fe742 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -1,6 +1,6 @@ package com.codandotv.streamplayerapp.di -import com.codandotv.streamplayerapp.core_background_work.di.SyncModule +import com.codandotv.streamplayerapp.core.background.work.di.SyncModule import com.codandotv.streamplayerapp.core.local.storage.di.LocalStorageModule import com.codandotv.streamplayerapp.core.networking.di.NetworkModule import com.codandotv.streamplayerapp.core.shared.qualifier.QualifierDispatcherIO diff --git a/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/SyncWorker.kt b/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncWorker.kt similarity index 80% rename from core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/SyncWorker.kt rename to core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncWorker.kt index 298d5a11..488ed90e 100644 --- a/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/SyncWorker.kt +++ b/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncWorker.kt @@ -1,9 +1,8 @@ -package com.codandotv.streamplayerapp.core_background_work.worker +package com.codandotv.streamplayerapp.core.background.work import android.content.Context import androidx.work.CoroutineWorker import androidx.work.WorkerParameters -import com.codandotv.streamplayerapp.core_background_work.SyncManager import org.koin.core.component.KoinComponent import org.koin.core.component.inject diff --git a/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/WorkScheduler.kt b/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/WorkScheduler.kt similarity index 89% rename from core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/WorkScheduler.kt rename to core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/WorkScheduler.kt index 22bb8e72..64815be5 100644 --- a/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core_background_work/worker/WorkScheduler.kt +++ b/core-background-work/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/background/work/WorkScheduler.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_background_work.worker +package com.codandotv.streamplayerapp.core.background.work import android.content.Context import androidx.work.ExistingPeriodicWorkPolicy diff --git a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/NotifierHelper.kt b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/NotifierHelper.kt similarity index 93% rename from core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/NotifierHelper.kt rename to core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/NotifierHelper.kt index ae487888..bb9cf3d8 100644 --- a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/NotifierHelper.kt +++ b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/NotifierHelper.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_background_work +package com.codandotv.streamplayerapp.core.background.work import com.mmk.kmpnotifier.notification.NotificationImage import com.mmk.kmpnotifier.notification.Notifier diff --git a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncManager.kt similarity index 72% rename from core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt rename to core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncManager.kt index e71f01f3..60e81600 100644 --- a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/SyncManager.kt +++ b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/SyncManager.kt @@ -1,4 +1,4 @@ -package com.codandotv.streamplayerapp.core_background_work +package com.codandotv.streamplayerapp.core.background.work import com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream @@ -6,11 +6,11 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.flow.first class SyncManager( - private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository + private val repository: ListStreamRepository ) { suspend fun syncData() { - val title: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream = repository.topRatedStream().first() + val title: Stream = repository.topRatedStream().first() val messageTitle = "${title.name} -Já disponível no app!" val messageBody = "Confira a sinopse: ${title.description}" val imageUrl = title.posterPathUrl diff --git a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/di/SyncModule.kt b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/di/SyncModule.kt similarity index 54% rename from core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/di/SyncModule.kt rename to core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/di/SyncModule.kt index 2acae685..d5531135 100644 --- a/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core_background_work/di/SyncModule.kt +++ b/core-background-work/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/background/work/di/SyncModule.kt @@ -1,6 +1,6 @@ -package com.codandotv.streamplayerapp.core_background_work.di +package com.codandotv.streamplayerapp.core.background.work.di -import com.codandotv.streamplayerapp.core_background_work.SyncManager +import com.codandotv.streamplayerapp.core.background.work.SyncManager import org.koin.dsl.module object SyncModule { From 184d6fd5d6cfe3ae6214139f37e1451c9d5a149a Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 13:38:25 -0300 Subject: [PATCH 17/33] feature-search no detekt rule violation --- .../di/AppModule.kt | 1 - .../components/LottieComponentPlatform.ios.kt | 3 +- .../components/LottieViewProvider.kt | 2 +- .../data/database/AppDatabasePlatform.ios.kt | 1 - ...rking.kt => QualifierProfileHttpClient.kt} | 0 .../permission/PermissionsFactotyPlatform.kt | 2 +- .../core/permission/PermissionsManager.kt | 17 ++++++----- .../PermissionsFactotyPlatform.ios.kt | 2 +- .../widgets/SearchStreamCardPreview.kt | 1 - .../data/api/MostPopularMoviesService.kt | 4 +-- .../datasource/MostPopularMoviesDataSource.kt | 9 +++--- .../data/datasource/SearchStreamDataSource.kt | 9 +++--- .../repository/MostPopularMoviesRepository.kt | 12 ++++---- .../data/repository/SearchStreamRepository.kt | 11 ++++--- .../search/domain/MostPopularMoviesUseCase.kt | 10 +++---- .../feature/search/domain/SearchUseCase.kt | 9 +++--- .../search/domain/mapper/SearchMapper.kt | 8 +++-- .../navigation/SearchStreamNavigation.kt | 2 +- .../presentation/screens/SearchScreen.kt | 29 ++++++++++--------- .../presentation/screens/SearchUIState.kt | 8 ++--- .../presentation/screens/SearchViewModel.kt | 11 +++---- .../presentation/widgets/SearchCarousel.kt | 7 ++--- .../presentation/widgets/SearchStreamCard.kt | 16 +++++----- .../presentation/widgets/SearchStreams.kt | 20 ++++++++----- 24 files changed, 100 insertions(+), 94 deletions(-) rename core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/{QualifierNetworking.kt => QualifierProfileHttpClient.kt} (100%) diff --git a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt index 846fe742..acf386fd 100644 --- a/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt +++ b/composeApp/src/commonMain/kotlin/com.codandotv.streamplayerapp/di/AppModule.kt @@ -44,4 +44,3 @@ fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinAppl } } } - diff --git a/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieComponentPlatform.ios.kt b/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieComponentPlatform.ios.kt index 3d95d39c..6da0ba3b 100644 --- a/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieComponentPlatform.ios.kt +++ b/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieComponentPlatform.ios.kt @@ -5,7 +5,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.viewinterop.UIKitView import org.koin.mp.KoinPlatform import platform.UIKit.UIColor -import platform.UIKit.UIView @Composable actual fun LottieComponent( @@ -18,7 +17,7 @@ actual fun LottieComponent( UIKitView( modifier = modifier, factory = { - val view = provider.provideLottieView(jsonString,onAnimationFinished) + val view = provider.provideLottieView(jsonString, onAnimationFinished) view.backgroundColor = UIColor.blackColor() view } diff --git a/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieViewProvider.kt b/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieViewProvider.kt index c2d0ea37..4e5047b6 100644 --- a/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieViewProvider.kt +++ b/composeApp/src/iosMain/kotlin/com.codandotv.streamplayerapp/presentation/components/LottieViewProvider.kt @@ -3,5 +3,5 @@ package com.codandotv.streamplayerapp.presentation.components import platform.UIKit.UIView interface LottieViewProvider { - fun provideLottieView(lottieAnimationJson: String, onAnimationFinish : () -> Unit) : UIView + fun provideLottieView(lottieAnimationJson: String, onAnimationFinish: () -> Unit): UIView } diff --git a/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt b/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt index 42d2a849..bb652f01 100644 --- a/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt +++ b/core-local-storage/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/local/storage/data/database/AppDatabasePlatform.ios.kt @@ -32,4 +32,3 @@ actual fun databaseInstance(): AppDatabase { .setQueryCoroutineContext(Dispatchers.IO) .build() } - diff --git a/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierNetworking.kt b/core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierProfileHttpClient.kt similarity index 100% rename from core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierNetworking.kt rename to core-networking/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/networking/di/QualifierProfileHttpClient.kt diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt index 6f1a8cca..b4d49c8e 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.kt @@ -4,5 +4,5 @@ import dev.icerock.moko.permissions.compose.PermissionsControllerFactory internal expect class PermissionFactory() { - fun getPermissionFactory() : PermissionsControllerFactory + fun getPermissionFactory(): PermissionsControllerFactory } diff --git a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt index a3b59cc2..2c1d2a7a 100644 --- a/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt +++ b/core-permission/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsManager.kt @@ -20,16 +20,18 @@ enum class PermissionStatus { DENIED_ALWAYS } -interface PermissionsManager{ +interface PermissionsManager { suspend fun request( vararg permissions: AppPermission, - blockDenied : () -> Unit, - blockDeniedAlways : () -> Unit, - blockSuccess : (Map) -> Unit + blockDenied: () -> Unit, + blockDeniedAlways: () -> Unit, + blockSuccess: (Map) -> Unit ) + fun openSettings() val controller: PermissionsController } + class PermissionsManagerImpl( override val controller: PermissionsController ) : PermissionsManager { @@ -42,15 +44,16 @@ class PermissionsManagerImpl( PermissionState.Granted -> PermissionStatus.GRANTED PermissionState.NotGranted, PermissionState.Denied -> PermissionStatus.DENIED + PermissionState.DeniedAlways -> PermissionStatus.DENIED_ALWAYS PermissionState.NotDetermined -> PermissionStatus.NOT_DETERMINED } override suspend fun request( vararg permissions: AppPermission, - blockDenied : () -> Unit, - blockDeniedAlways : () -> Unit, - blockSuccess : (Map) -> Unit + blockDenied: () -> Unit, + blockDeniedAlways: () -> Unit, + blockSuccess: (Map) -> Unit ) { runCatching { permissions.forEach { diff --git a/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt b/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt index 99a3983e..25d9a590 100644 --- a/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt +++ b/core-permission/src/iosMain/kotlin/com/codandotv/streamplayerapp/core/permission/PermissionsFactotyPlatform.ios.kt @@ -7,5 +7,5 @@ internal actual class PermissionFactory { actual fun getPermissionFactory(): PermissionsControllerFactory = PermissionsControllerFactory { PermissionsController() - } + } } diff --git a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt index 923389b1..6c01fcfe 100644 --- a/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt +++ b/feature-search/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCardPreview.kt @@ -4,7 +4,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews - @ThemePreviews @Composable fun SearchStreamCardPreview() { diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt index bad92b78..74c6dabb 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/api/MostPopularMoviesService.kt @@ -12,10 +12,10 @@ interface MostPopularMoviesService { suspend fun getPopular(): NetworkResponse } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService::class]) +@Factory(binds = [MostPopularMoviesService::class]) class MostPopularMoviesServiceImpl( @Provided private val client: HttpClient -) : com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService { +) : MostPopularMoviesService { override suspend fun getPopular(): NetworkResponse = client.safeRequest { url("movie/popular") diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt index e75ba43d..52248c24 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/MostPopularMoviesDataSource.kt @@ -1,18 +1,19 @@ package com.codandotv.streamplayerapp.feature.search.data.datasource import com.codandotv.streamplayerapp.core.networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface MostPopularMoviesDataSource { - suspend fun getMostPopularMovies(): Flow + suspend fun getMostPopularMovies(): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource::class]) +@Factory(binds = [MostPopularMoviesDataSource::class]) class MostPopularMoviesDataSourceImpl( private val service: com.codandotv.streamplayerapp.feature.search.data.api.MostPopularMoviesService -) : com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource { +) : MostPopularMoviesDataSource { - override suspend fun getMostPopularMovies(): Flow = + override suspend fun getMostPopularMovies(): Flow = service.getPopular().toFlow() } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt index 543aace6..33b351d0 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/datasource/SearchStreamDataSource.kt @@ -1,18 +1,19 @@ package com.codandotv.streamplayerapp.feature.search.data.datasource import com.codandotv.streamplayerapp.core.networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface SearchStreamDataSource { - suspend fun getMovieSearch(query: String): Flow + suspend fun getMovieSearch(query: String): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource::class]) +@Factory(binds = [SearchStreamDataSource::class]) class SearchStreamDataSourceImpl( private val service: com.codandotv.streamplayerapp.feature.search.data.api.SearchStreamService -): com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource { +) : SearchStreamDataSource { - override suspend fun getMovieSearch(query:String): Flow = + override suspend fun getMovieSearch(query: String): Flow = service.getSearch(query = query).toFlow() } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt index 67590bfd..01610e73 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/MostPopularMoviesRepository.kt @@ -1,18 +1,18 @@ package com.codandotv.streamplayerapp.feature.search.data.repository -import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface MostPopularMoviesRepository { - suspend fun getMostPopularMovies(): Flow + suspend fun getMostPopularMovies(): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository::class]) +@Factory(binds = [MostPopularMoviesRepository::class]) class MostPopularMoviesRepositoryImpl( - private val dataSource: com.codandotv.streamplayerapp.feature.search.data.datasource.MostPopularMoviesDataSource -) : com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository { - override suspend fun getMostPopularMovies(): Flow = + private val dataSource: MostPopularMoviesDataSource +) : MostPopularMoviesRepository { + override suspend fun getMostPopularMovies(): Flow = dataSource.getMostPopularMovies() } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt index 84337a35..33f22a64 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/data/repository/SearchStreamRepository.kt @@ -6,14 +6,13 @@ import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface SearchStreamRepository { - suspend fun getMovieSearch(query: String): Flow - + suspend fun getMovieSearch(query: String): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository::class]) +@Factory(binds = [SearchStreamRepository::class]) class SearchStreamRepositoryImp( - private val dataSource: com.codandotv.streamplayerapp.feature.search.data.datasource.SearchStreamDataSource -) : com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository { - override suspend fun getMovieSearch(query: String): Flow = + private val dataSource: SearchStreamDataSource +) : SearchStreamRepository { + override suspend fun getMovieSearch(query: String): Flow = dataSource.getMovieSearch(query) } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt index 03ed9941..7308cbb0 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/MostPopularMoviesUseCase.kt @@ -6,14 +6,14 @@ import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface MostPopularMoviesUseCase { - suspend operator fun invoke(): Flow + suspend operator fun invoke(): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase::class]) +@Factory(binds = [MostPopularMoviesUseCase::class]) class MostPopularMoviesUseCaseImpl( - val repository: com.codandotv.streamplayerapp.feature.search.data.repository.MostPopularMoviesRepository -) : com.codandotv.streamplayerapp.feature.search.domain.MostPopularMoviesUseCase { - override suspend operator fun invoke(): Flow { + val repository: MostPopularMoviesRepository +) : MostPopularMoviesUseCase { + override suspend operator fun invoke(): Flow { return repository.getMostPopularMovies() } } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt index 5771525c..3a4ada37 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/SearchUseCase.kt @@ -6,13 +6,12 @@ import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface SearchUseCase { - suspend operator fun invoke(query:String): Flow + suspend operator fun invoke(query: String): Flow } -@Factory(binds = [_root_ide_package_.com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase::class]) -class SearchUseCaseImpl(val repository: com.codandotv.streamplayerapp.feature.search.data.repository.SearchStreamRepository) : - com.codandotv.streamplayerapp.feature.search.domain.SearchUseCase { - override suspend operator fun invoke(query:String): Flow { +@Factory(binds = [SearchUseCase::class]) +class SearchUseCaseImpl(val repository: SearchStreamRepository) : SearchUseCase { + override suspend operator fun invoke(query: String): Flow { return repository.getMovieSearch(query = query) } } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt index 18160e35..78fa8b16 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/domain/mapper/SearchMapper.kt @@ -1,10 +1,12 @@ package com.codandotv.streamplayerapp.feature.search.domain.mapper import com.codandotv.streamplayerapp.core.shared.Url +import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel -fun com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse.SearchStreamResponse.toSearchStreamCardModel() = - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel( +fun ListSearchStreamResponse.SearchStreamResponse.toSearchStreamCardModel() = + SearchStreamCardModel( id = id.toString(), title = title, - url = "${Url.IMAGE_URL_SIZE_200}${posterPath}" + url = "${Url.IMAGE_URL_SIZE_200}$posterPath" ) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt index 684e439c..f325f653 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/navigation/SearchStreamNavigation.kt @@ -12,7 +12,7 @@ fun NavGraphBuilder.searchStreamsNavGraph(navController: NavHostController) { _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchScreen( navController = navController, onNavigateDetailList = { id -> - navController.navigate("${Routes.DETAIL}${id}") + navController.navigate("${Routes.DETAIL}$id") } ) } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt index bbfd96ef..a11768b4 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchScreen.kt @@ -22,6 +22,8 @@ import androidx.compose.ui.unit.sp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core.navigation.extensions.goBack import com.codandotv.streamplayerapp.feature.search.domain.mapper.toSearchStreamCardModel +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCard +import com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_search.generated.resources.Res @@ -29,33 +31,32 @@ import streamplayerapp_kmp.feature_search.generated.resources.search_list_descri @Composable fun SearchScreen( - viewModel: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchViewModel = koinViewModel(), + viewModel: SearchViewModel = koinViewModel(), onNavigateDetailList: (String) -> Unit = {}, navController: NavController, ) { - val uiState by viewModel.uiState.collectAsState() when (uiState) { - is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success -> { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SetupSearchScreen( + is SearchUIState.Success -> { + SetupSearchScreen( navController = navController, - uiState = uiState as com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success, + uiState = uiState as SearchUIState.Success, viewModel = viewModel, onNavigateDetailList = onNavigateDetailList ) } - is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Error -> { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamsError( + is SearchUIState.Error -> { + StreamsError( onRetry = { viewModel.onTryAgain() }, onCloseButton = { navController.goBack() } ) } - is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty -> { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SetupSearchScreen( + is SearchUIState.Empty -> { + SetupSearchScreen( navController = navController, - uiState = uiState as com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Empty, + uiState = uiState as SearchUIState.Empty, viewModel = viewModel, onNavigateDetailList = onNavigateDetailList ) @@ -77,8 +78,8 @@ fun SearchScreen( private fun SetupSearchScreen( onNavigateDetailList: (String) -> Unit = {}, navController: NavController, - uiState: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState, - viewModel: com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchViewModel + uiState: SearchUIState, + viewModel: SearchViewModel ) { Scaffold( topBar = { @@ -107,7 +108,7 @@ private fun SetupSearchScreen( } ) { paddingValues -> - if (uiState is com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Success) { + if (uiState is SearchUIState.Success) { Column( modifier = Modifier .padding(paddingValues) @@ -121,7 +122,7 @@ private fun SetupSearchScreen( modifier = Modifier.padding(vertical = 8.dp) ) uiState.listCharacters.results.map { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCard( + SearchStreamCard( content = it.toSearchStreamCardModel(), onSearchStreamPressed = { id -> onNavigateDetailList(id) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt index 2f1fadae..8b60b6ba 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchUIState.kt @@ -3,8 +3,8 @@ package com.codandotv.streamplayerapp.feature.search.presentation.screens import com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse sealed class SearchUIState { - data class Success(val listCharacters: com.codandotv.streamplayerapp.feature.search.data.model.ListSearchStreamResponse) : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() - data class Error(val messageError: String = "") : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() - object Loading : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() - object Empty : com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState() + data class Success(val listCharacters: ListSearchStreamResponse) : SearchUIState() + data class Error(val messageError: String = "") : SearchUIState() + object Loading : SearchUIState() + object Empty : SearchUIState() } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt index d8ca62f5..288633d4 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/screens/SearchViewModel.kt @@ -21,9 +21,10 @@ class SearchViewModel( private var tryAgain: () -> Unit = {} - private val _uiState = MutableStateFlow( - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Loading) - val uiState: StateFlow = _uiState.stateIn( + private val _uiState = MutableStateFlow( + SearchUIState.Loading + ) + val uiState: StateFlow = _uiState.stateIn( scope = viewModelScope, started = SharingStarted.Eagerly, initialValue = _uiState.value @@ -88,13 +89,13 @@ class SearchViewModel( private fun showError(messageError: String) { _uiState.update { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Error(messageError = messageError) + SearchUIState.Error(messageError = messageError) } } private fun showLoading() { _uiState.update { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.screens.SearchUIState.Loading + SearchUIState.Loading } } diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt index 05a2ad9e..44ea0f25 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchCarousel.kt @@ -29,7 +29,6 @@ import androidx.paging.PagingData import app.cash.paging.compose.collectAsLazyPagingItems import app.cash.paging.compose.itemContentType import app.cash.paging.compose.itemKey -import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCard import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent import kotlinx.coroutines.flow.Flow import org.jetbrains.compose.resources.stringResource @@ -42,12 +41,12 @@ import streamplayerapp_kmp.feature_search.generated.resources.search_list_error data class SearchCarousel( val genreTitle: String, - val contentList: Flow> + val contentList: Flow> ) @Composable fun SearchCarouselStream( - content: com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchCarousel, + content: SearchCarousel, onNavigateDetailList: (String) -> Unit = {}, modifier: Modifier = Modifier ) { @@ -106,7 +105,7 @@ fun StreamsError( color = Color.White, fontWeight = FontWeight.SemiBold, fontSize = 20.sp, - textAlign= TextAlign.Center, + textAlign = TextAlign.Center, modifier = Modifier .align(Alignment.Center) ) diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt index cb8266d6..8d1cbbb4 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreamCard.kt @@ -4,10 +4,6 @@ import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box -import androidx.compose.material3.Icon -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -17,8 +13,12 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.PlayArrow import androidx.compose.material3.Card +import androidx.compose.material3.Icon import androidx.compose.material3.Text +import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -29,7 +29,7 @@ import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage @Suppress("MagicNumber") @Composable fun SearchStreamCard( - content: com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchStreamCardModel, + content: SearchStreamCardModel, onSearchStreamPressed: (id: String) -> Unit ) { Row( @@ -43,7 +43,7 @@ fun SearchStreamCard( onSearchStreamPressed(content.id) } ) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.ImageStream( + ImageStream( url = content.url, modifier = Modifier .weight(2.5f) @@ -59,7 +59,7 @@ fun SearchStreamCard( fontSize = 18.sp, overflow = TextOverflow.Ellipsis ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.PlayerIcon( + PlayerIcon( modifier = Modifier .weight(2f) .padding(2.dp) @@ -79,7 +79,7 @@ fun ImageStream(modifier: Modifier, url: String) { shape = RoundedCornerShape(4.dp), modifier = modifier ) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( + WebImage( imageUrl = url, contentScale = ContentScale.FillBounds, contentDescription = "", diff --git a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt index 4de8ea23..0c3e30bd 100644 --- a/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt +++ b/feature-search/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/search/presentation/widgets/SearchStreams.kt @@ -53,10 +53,10 @@ fun SearchableTopBar( modifier: Modifier = Modifier, ) { Column(modifier = modifier) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.StreamPlayerTopBar( + StreamPlayerTopBar( onBackPressed = onBackPressed ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.search.presentation.widgets.SearchTopBar( + SearchTopBar( currentSearchText = currentSearchText, onSearchTextChanged = onSearchTextChanged, onSearchDispatched = onSearchDispatched, @@ -127,13 +127,13 @@ fun SearchTopBar( modifier = Modifier .fillMaxWidth() .height(56.dp) - .background(_root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Gray100) + .background(Colors.Gray100) ) { TextField( modifier = Modifier.fillMaxWidth(), value = currentSearchText, colors = TextFieldDefaults.colors( - focusedContainerColor = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Gray100, + focusedContainerColor = Colors.Gray100, focusedIndicatorColor = Color.Transparent, disabledIndicatorColor = Color.Transparent, unfocusedIndicatorColor = Color.Transparent, @@ -155,14 +155,18 @@ fun SearchTopBar( singleLine = true, maxLines = 1, leadingIcon = { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.SearchIcon( + SearchIcon( action = onSearchIconPressed ) }, trailingIcon = { - if (currentSearchText.isEmpty()) _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.MicButton() else _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.CloseButton( - action = onCleanTextPressed - ) + if (currentSearchText.isEmpty()) { + MicButton() + } else { + CloseButton( + action = onCleanTextPressed + ) + } }, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search), keyboardActions = KeyboardActions(onSearch = { From cbb88546b1f1f734268ffaf909e0321862c03a6d Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 13:46:07 -0300 Subject: [PATCH 18/33] feature-profile no detekt rule violation --- .../profile/data/ProfilePickerStreamRepository.kt | 9 +++------ .../feature/profile/data/ProfilePickerStreamService.kt | 2 +- .../feature/profile/domain/ProfilePickerStreamMapper.kt | 4 ++-- .../feature/profile/domain/ProfilePickerStreamUseCase.kt | 9 ++++----- .../presentation/screens/ProfilePickerStreamViewModel.kt | 3 +-- .../presentation/screens/ProfilePickerStreamsUIState.kt | 6 ++---- .../presentation/widget/ProfilePickerProfilesGrid.kt | 8 ++++---- .../presentation/widget/ProfilePickerStreamLoad.kt | 1 - .../presentation/widget/ProfilePickerStreamToolbar.kt | 1 - 9 files changed, 17 insertions(+), 26 deletions(-) diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt index e5177605..4b1ae4af 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamRepository.kt @@ -14,15 +14,13 @@ interface ProfilePickerStreamRepository { @Factory class ProfilePickerStreamRepositoryImpl( - private val service: com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamService -) : com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamRepository { + private val service: ProfilePickerStreamService +) : ProfilePickerStreamRepository { override suspend fun getProfiles(): Flow> { - with(service.getProfiles()) { if (this.toResult().isFailure || this.toResult().getOrNull() == null) { - // Log.i("ProfilePickerStreamRepositoryImpl", "versão off carregada") - return flowOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.profile.data.mockProfiles) + return flowOf(mockProfiles) } else { return this.toFlow().map { it.toProfiles() } } @@ -30,7 +28,6 @@ class ProfilePickerStreamRepositoryImpl( } } - private val mockProfiles = listOf( _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( id = "1", diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt index e8be02e4..9e94da44 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/data/ProfilePickerStreamService.kt @@ -15,7 +15,7 @@ interface ProfilePickerStreamService { @Factory class ProfilePickerStreamServiceImpl( @Provided private val client: HttpClient -) : com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamService { +) : ProfilePickerStreamService { override suspend fun getProfiles(): NetworkResponse = client.safeRequest { url("profiles") diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt index bd4ec6ee..e7662781 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamMapper.kt @@ -2,8 +2,8 @@ package com.codandotv.streamplayerapp.feature.profile.domain import com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse -fun com.codandotv.streamplayerapp.feature.profile.data.model.ProfilesResponse.toProfiles(): List = this.profiles.map { profileResponse -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream( +fun ProfilesResponse.toProfiles(): List = this.profiles.map { profileResponse -> + ProfileStream( id = profileResponse.id, name = profileResponse.name, imageUrl = profileResponse.profile_url, diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt index 97a17305..934fb029 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/domain/ProfilePickerStreamUseCase.kt @@ -7,7 +7,7 @@ import kotlinx.coroutines.flow.Flow import org.koin.core.annotation.Factory interface ProfilePickerStreamUseCase { - suspend fun getProfile(): Flow> + suspend fun getProfile(): Flow> fun getListOffsetProfiles( haltSizeImage: Int, oneThirdOfWidthScreen: Int, @@ -25,10 +25,10 @@ interface ProfilePickerStreamUseCase { @Factory class ProfilePickerStreamUseCaseImpl( - private val profilePickerStreamRepository: com.codandotv.streamplayerapp.feature.profile.data.ProfilePickerStreamRepository -) : com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase { + private val profilePickerStreamRepository: ProfilePickerStreamRepository +) : ProfilePickerStreamUseCase { - override suspend fun getProfile(): Flow> = + override suspend fun getProfile(): Flow> = profilePickerStreamRepository.getProfiles() override fun getListOffsetProfiles( @@ -36,7 +36,6 @@ class ProfilePickerStreamUseCaseImpl( oneThirdOfWidthScreen: Int, oneQuarterOfHeightScreen: Int ): List> { - return listOf( Pair(oneThirdOfWidthScreen - haltSizeImage, 0), Pair(oneThirdOfWidthScreen * 2 - haltSizeImage, 0), diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt index 58a1dde1..ea57880f 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamViewModel.kt @@ -16,7 +16,7 @@ class ProfilePickerStreamViewModel( private val useCase: com.codandotv.streamplayerapp.feature.profile.domain.ProfilePickerStreamUseCase, ) : ViewModel() { - private val _uiState = MutableStateFlow(_root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.screens.ProfilePickerStreamsUIState()) + private val _uiState = MutableStateFlow(ProfilePickerStreamsUIState()) val uiState = _uiState.stateIn( viewModelScope, SharingStarted.Eagerly, @@ -135,5 +135,4 @@ class ProfilePickerStreamViewModel( } } } - } diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt index 8be3f78f..977a1857 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/screens/ProfilePickerStreamsUIState.kt @@ -2,10 +2,9 @@ package com.codandotv.streamplayerapp.feature.profile.presentation.screens import com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream - data class ProfilePickerStreamsUIState( - val profilesStream: List = emptyList(), - val selectedItem: com.codandotv.streamplayerapp.feature.profile.domain.ProfileStream? = null, + val profilesStream: List = emptyList(), + val selectedItem: ProfileStream? = null, val isLoading: Boolean = true, val showCenterImage: Boolean = false, val centerImageAlpha: Float = 1f, @@ -26,4 +25,3 @@ data class ProfilePickerStreamsUIState( val selectedImageAlpha: Float = 1f, val centerScreen: Pair = Pair(0, 0), ) - diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt index b6d5acc0..dbb31c72 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerProfilesGrid.kt @@ -50,7 +50,6 @@ fun ProfilePickerProfilesGrid( ) with(uiState) { - profilesStream.forEach { profile -> val profileItemPosition = if (offsetProfiles.isNotEmpty()) { with(offsetProfiles[profilesStream.indexOf(profile)]) { @@ -63,9 +62,11 @@ fun ProfilePickerProfilesGrid( IntOffset(0, 0) } - _root_ide_package_.com.codandotv.streamplayerapp.feature.profile.presentation.widget.ProfileItem( + ProfileItem( state = uiState, - profileItemPosition, profile, onClickSelectedProfile + profileItemPosition, + profile, + onClickSelectedProfile ) if (profilesStream.indexOf(profile) == profilesStream.size - 1) { @@ -94,7 +95,6 @@ private fun ProfileItem( ) { WebImage( imageUrl = profile.imageUrl, - //placeholder = painterResource(Res.drawable.image_placeholder), contentDescription = stringResource( Res.string.profile_current_profile_name, profile.name diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt index dda82969..eb34f489 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamLoad.kt @@ -7,7 +7,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier - @Composable fun LoadScreen() { Box(Modifier.fillMaxSize()) { diff --git a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt index 2b272f5b..1df38e39 100644 --- a/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt +++ b/feature-profile/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/profile/presentation/widget/ProfilePickerStreamToolbar.kt @@ -22,7 +22,6 @@ import streamplayerapp_kmp.feature_profile.generated.resources.netflix_horizonta @Composable fun ProfilePickerStreamToolbar(modifier: Modifier = Modifier) { - Box( modifier .fillMaxWidth() From 76ea53273f03abfc7e09bcabcb247c5c6dd0dd2c Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 13:48:07 -0300 Subject: [PATCH 19/33] feature-news no detekt rule violation --- .../feature/news/presentation/screens/NewsScreen.kt | 5 ++--- .../news/presentation/widget/ImagePickerCameraGallery.kt | 2 ++ 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt index 78389270..93b82ffd 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/screens/NewsScreen.kt @@ -20,11 +20,11 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.navigation.NavController -import com.codandotv.streamplayerapp.core.permission.PermissionDeniedDialog import com.codandotv.streamplayerapp.core.camera.gallery.SharedImage import com.codandotv.streamplayerapp.core.camera.gallery.camera.rememberCameraManager import com.codandotv.streamplayerapp.core.camera.gallery.gallery.rememberGalleryManager import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation +import com.codandotv.streamplayerapp.core.permission.PermissionDeniedDialog import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenActionTakeImage import com.codandotv.streamplayerapp.feature.news.presentation.NewsScreenViewModel import com.codandotv.streamplayerapp.feature.news.presentation.widget.ImagePickerContent @@ -36,7 +36,6 @@ import streamplayerapp_kmp.feature_news.generated.resources.error_image_loaded import streamplayerapp_kmp.feature_news.generated.resources.select_image_subtitle import streamplayerapp_kmp.feature_news.generated.resources.select_image_title - @Composable fun NewsScreenContent( navController: NavController, @@ -65,7 +64,7 @@ fun NewsScreenContent( LaunchedEffect(Unit) { viewModel.actionTakeImage.collect { action -> - when(action) { + when (action) { NewsScreenActionTakeImage.Camera -> cameraManager.launch() NewsScreenActionTakeImage.Gallery -> galleryManager.launch() } diff --git a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt index afc65740..eae2cdca 100644 --- a/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt +++ b/feature-news/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/news/presentation/widget/ImagePickerCameraGallery.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber") + package com.codandotv.streamplayerapp.feature.news.presentation.widget import androidx.compose.foundation.Image From 1bf24bb6267ebeb8fa2d4620e846090a6d48c1e3 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 15:30:41 -0300 Subject: [PATCH 20/33] feature-list no detekt rule violation --- .../widgets/HighlightBannerPreview.kt | 25 +++++---- .../list/data/ListStreamRepository.kt | 24 +++++---- .../list/data/ListStreamService.kt | 4 +- .../liststreams/list/data/StreamDataSource.kt | 11 ++-- .../list/data/model/GenresResponse.kt | 2 +- .../list/data/model/ListStreamResponse.kt | 6 ++- .../liststreams/list/di/ListStreamModule.kt | 26 +++++----- .../list/domain/GetGenresUseCase.kt | 8 +-- .../list/domain/GetLatestMovieUseCase.kt | 8 +-- .../list/domain/ListMovieUseCase.kt | 8 +-- .../list/domain/ListStreamAnalytics.kt | 4 +- .../list/domain/ListStreamMapper.kt | 22 ++++---- .../list/domain/model/HighlightBanner.kt | 8 +-- .../list/domain/model/ListStream.kt | 9 ++-- .../navigation/ListStreamsNavigation.kt | 10 ++-- .../screens/ListStreamViewModel.kt | 51 +++++++++++-------- .../presentation/screens/ListStreamsScreen.kt | 8 +-- .../screens/ListStreamsUIState.kt | 5 +- .../presentation/widgets/HighlightBanner.kt | 40 ++++++++------- 19 files changed, 157 insertions(+), 122 deletions(-) diff --git a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt index 751326d7..435a547d 100644 --- a/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt +++ b/feature-list-streams/src/androidMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/presentation/widgets/HighlightBannerPreview.kt @@ -2,6 +2,9 @@ package com.codandotv.streamplayerapp.feature.liststreams.presentation.widgets import androidx.compose.runtime.Composable import com.codandotv.streamplayerapp.core.shared.ui.theme.ThemePreviews +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.core_shared_ui.generated.resources.Res import streamplayerapp_kmp.core_shared_ui.generated.resources.app_name @@ -14,11 +17,13 @@ import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlig import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_watch typealias ContentType = com.codandotv.streamplayerapp.feature.liststreams.core.ContentType +typealias HighlightBannerModel = HighlightBanner + @ThemePreviews @Composable fun HighlightBannerPreview() { - com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner( - data = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner( + HighlightBanner( + data = HighlightBannerModel( name = stringResource(Res.string.app_name), imageUrl = String(), contentType = ContentType.getContentName( @@ -27,23 +32,23 @@ fun HighlightBannerPreview() { contentTypeAsPlural = ContentType.getContentNameAsPlural( ContentType.SHOW ), - extraInfo = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( - streamplayerapp_kmp.feature_list_streams.generated.resources.Res.drawable.ic_top_10, + extraInfo = IconAndTextInfo( + Res.drawable.ic_top_10, ContentType.getContentName( ContentType.SHOW ) ), - leftButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + leftButton = IconAndTextInfo( Res.drawable.ic_add, - streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_add + Res.string.list_highlight_banner_add ), - centralButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + centralButton = IconAndTextInfo( Res.drawable.ic_play, - streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_watch + Res.string.list_highlight_banner_watch ), - rightButton = com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + rightButton = IconAndTextInfo( Res.drawable.ic_info, - streamplayerapp_kmp.feature_list_streams.generated.resources.Res.string.list_highlight_banner_info + Res.string.list_highlight_banner_info ), ) ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt index d7a4784a..2c2f434b 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamRepository.kt @@ -4,39 +4,41 @@ import androidx.paging.Pager import androidx.paging.PagingConfig import androidx.paging.PagingData import com.codandotv.streamplayerapp.core.networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toGenres import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toStream import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map interface ListStreamRepository { - suspend fun getGenres(): Flow> + suspend fun getGenres(): Flow> - suspend fun topRatedStream(): Flow + suspend fun topRatedStream(): Flow - fun loadMovies(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> + fun loadMovies(genre: Genre): Flow> } class ListStreamRepositoryImpl( - private val service: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService, -) : com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository { + private val service: ListStreamService, +) : ListStreamRepository { - override suspend fun getGenres(): Flow> { + override suspend fun getGenres(): Flow> { return service.getGenres().toFlow().map { it.toGenres() } } override suspend fun topRatedStream() = service.getTopRatedMovies().toFlow().map { - it.results.first { it.poster_path != null }.toStream() + it.results.first { it.posterPath != null }.toStream() } - override fun loadMovies(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> { + override fun loadMovies(genre: Genre): Flow> { return Pager( config = PagingConfig( - pageSize = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl.Companion.PAGE_SIZE, - maxSize = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl.Companion.MAX_SIZE, + pageSize = PAGE_SIZE, + maxSize = MAX_SIZE, ), pagingSourceFactory = { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.StreamDataSource( + StreamDataSource( service, genreName = genre.name, genreId = genre.id diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt index 33db0108..6dccadf5 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/ListStreamService.kt @@ -1,9 +1,9 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.data -import ListStreamResponse import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse import com.codandotv.streamplayerapp.core.networking.handleError.safeRequest import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.ListStreamResponse import io.ktor.client.HttpClient import io.ktor.client.request.parameter import io.ktor.client.request.url @@ -20,7 +20,7 @@ interface ListStreamService { class ListStreamServiceImpl( private val client: HttpClient -) : com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService { +) : ListStreamService { override suspend fun getMovies(genres: String): NetworkResponse { return client.safeRequest { diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt index 421bfbd4..2a59eb2a 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/StreamDataSource.kt @@ -3,17 +3,18 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.data import androidx.paging.PagingSource import androidx.paging.PagingState import com.codandotv.streamplayerapp.core.networking.handleError.NetworkResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream import com.codandotv.streamplayerapp.feature.liststreams.list.domain.toListStream @Suppress("TooGenericExceptionCaught", "UseCheckOrError") class StreamDataSource( - private val service: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamService, + private val service: ListStreamService, private val genreId: Long, private val genreName: String, -) : PagingSource() { +) : PagingSource() { - override suspend fun load(params: LoadParams): LoadResult { - val nextPageNumber = params.key ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.StreamDataSource.Companion.START_PAGE_INDEX + override suspend fun load(params: LoadParams): LoadResult { + val nextPageNumber = params.key ?: START_PAGE_INDEX return try { val response = service.getPaginatedMovies( @@ -35,7 +36,7 @@ class StreamDataSource( } } - override fun getRefreshKey(state: PagingState): Int? = null + override fun getRefreshKey(state: PagingState): Int? = null companion object { private const val START_PAGE_INDEX = 1 diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt index 7dc429bf..52c82fe3 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/GenresResponse.kt @@ -10,5 +10,5 @@ data class GenreResponse( @Serializable data class GenresResponse( - val genres: List + val genres: List ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt index 89574e2c..e2802b43 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/data/model/ListStreamResponse.kt @@ -1,3 +1,6 @@ +package com.codandotv.streamplayerapp.feature.liststreams.list.data.model + +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable @@ -5,7 +8,8 @@ data class StreamResponse( val id: Int, val title: String, val overview: String, - val poster_path: String? = null + @SerialName("poster_path") + val posterPath: String? = null ) @Serializable diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt index 02f46e7e..3a97de4b 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/di/ListStreamModule.kt @@ -19,43 +19,43 @@ import org.koin.dsl.module object ListStreamModule { val module = module { viewModel { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamViewModel( + ListStreamViewModel( listStreams = get(), listGenres = get(), latestStream = get() ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCaseImpl( + factory { + ListStreamUseCaseImpl( repository = get() ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCaseImpl( + factory { + GetGenresUseCaseImpl( repository = get() ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStreamImpl( + factory { + GetTopRatedStreamImpl( repository = get() ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalyticsImpl() + factory { + ListStreamAnalyticsImpl() } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepositoryImpl( + factory { + ListStreamRepositoryImpl( service = get(), ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamServiceImpl( + factory { + ListStreamServiceImpl( client = get() ) } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt index de04d22c..59740cde 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetGenresUseCase.kt @@ -5,13 +5,13 @@ import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre import kotlinx.coroutines.flow.Flow interface GetGenresUseCase { - suspend operator fun invoke(): Flow> + suspend operator fun invoke(): Flow> } class GetGenresUseCaseImpl( - private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository -) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase { - override suspend fun invoke(): Flow> { + private val repository: ListStreamRepository +) : GetGenresUseCase { + override suspend fun invoke(): Flow> { return repository.getGenres() } } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt index db62bd8f..197ab984 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/GetLatestMovieUseCase.kt @@ -5,13 +5,13 @@ import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Strea import kotlinx.coroutines.flow.Flow interface GetTopRatedStream { - suspend operator fun invoke(): Flow + suspend operator fun invoke(): Flow } class GetTopRatedStreamImpl( - private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository -) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream { - override suspend operator fun invoke(): Flow { + private val repository: ListStreamRepository +) : GetTopRatedStream { + override suspend operator fun invoke(): Flow { return repository.topRatedStream() } } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt index c9552b9a..79b5fbf6 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListMovieUseCase.kt @@ -7,13 +7,13 @@ import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Strea import kotlinx.coroutines.flow.Flow interface ListStreamUseCase { - operator fun invoke(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> + operator fun invoke(genre: Genre): Flow> } class ListStreamUseCaseImpl( - private val repository: com.codandotv.streamplayerapp.feature.liststreams.list.data.ListStreamRepository -) : com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase { - override operator fun invoke(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): Flow> { + private val repository: ListStreamRepository +) : ListStreamUseCase { + override operator fun invoke(genre: Genre): Flow> { return repository.loadMovies(genre) } } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt index fa766b90..28cd930f 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamAnalytics.kt @@ -1,7 +1,5 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.domain - interface ListStreamAnalytics -class ListStreamAnalyticsImpl : - com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamAnalytics +class ListStreamAnalyticsImpl : ListStreamAnalytics diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt index 94f6d79a..38bdcfbf 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/ListStreamMapper.kt @@ -1,28 +1,32 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.domain -import ListStreamResponse -import StreamResponse import com.codandotv.streamplayerapp.core.shared.Url +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.ListStreamResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.data.model.StreamResponse +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream -fun ListStreamResponse.toListStream(genre: String): com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream = - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.ListStream( +fun ListStreamResponse.toListStream(genre: String): ListStream = + ListStream( categoryName = genre, streams = this.results.map { streamResponse -> streamResponse.toStream() } ) -fun com.codandotv.streamplayerapp.feature.liststreams.list.data.model.GenresResponse.toGenres(): List = this.genres.map { genreResponse -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre( +fun GenresResponse.toGenres(): List = this.genres.map { genreResponse -> + Genre( id = genreResponse.id, name = genreResponse.name ) } -fun StreamResponse.toStream(): com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream = - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream( +fun StreamResponse.toStream(): Stream = + Stream( description = overview, name = title, - posterPathUrl = "${Url.IMAGE_URL_SIZE_300}${poster_path}", + posterPathUrl = "${Url.IMAGE_URL_SIZE_300}$posterPath", id = id.toString() ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt index 66b09247..ca0c052a 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/HighlightBanner.kt @@ -8,10 +8,10 @@ data class HighlightBanner( val imageUrl: String, val contentType: StringResource, val contentTypeAsPlural: StringResource, - val extraInfo: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, - val leftButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, - val centralButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo, - val rightButton: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo + val extraInfo: IconAndTextInfo, + val leftButton: IconAndTextInfo, + val centralButton: IconAndTextInfo, + val rightButton: IconAndTextInfo ) data class IconAndTextInfo( diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt index c35356e4..6e180ac3 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/domain/model/ListStream.kt @@ -1,12 +1,13 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.domain.model data class Stream( - val id : String, - val name : String, - val description : String, + val id: String, + val name: String, + val description: String, val posterPathUrl: String, ) + data class ListStream( val categoryName: String, - val streams: List + val streams: List ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt index c6edd5e0..b2d3c6a4 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/navigation/ListStreamsNavigation.kt @@ -8,6 +8,8 @@ import com.codandotv.streamplayerapp.core.navigation.routes.BottomNavRoutes.PARA import com.codandotv.streamplayerapp.core.navigation.routes.Routes import com.codandotv.streamplayerapp.core.navigation.routes.Routes.DETAIL import com.codandotv.streamplayerapp.core.navigation.routes.Routes.PROFILE_PICKER +import com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen import org.koin.compose.module.rememberKoinModules import org.koin.core.annotation.KoinExperimentalAPI @@ -17,13 +19,13 @@ internal const val DEFAULT_ID = "" fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) { composable(HOME_COMPLETE) { nav -> rememberKoinModules { - listOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.di.ListStreamModule.module) + listOf(ListStreamModule.module) } - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsScreen( + ListStreamsScreen( navController = navController, onNavigateDetailList = { id -> - navController.navigate("${DETAIL}${id}") + navController.navigate("${DETAIL}$id") }, onNavigateProfilePicker = { navController.navigate(PROFILE_PICKER) @@ -32,7 +34,7 @@ fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) { navController.navigate(Routes.SEARCH) }, profilePicture = nav.savedStateHandle.get(PROFILE_ID) - ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.navigation.DEFAULT_ID + ?: DEFAULT_ID ) } } diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt index 017b4294..b5665b61 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamViewModel.kt @@ -1,3 +1,5 @@ +@file:Suppress("ImportOrdering") + package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens import androidx.lifecycle.ViewModel @@ -5,6 +7,16 @@ import androidx.lifecycle.viewModelScope import androidx.paging.cachedIn import androidx.paging.map import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent +import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent +import com.codandotv.streamplayerapp.feature.liststreams.core.ContentType +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.combine @@ -17,23 +29,23 @@ import kotlinx.coroutines.launch import streamplayerapp_kmp.core_shared_ui.generated.resources.ic_add import streamplayerapp_kmp.core_shared_ui.generated.resources.ic_info import streamplayerapp_kmp.core_shared_ui.generated.resources.ic_play -import streamplayerapp_kmp.feature_list_streams.generated.resources.Res import streamplayerapp_kmp.feature_list_streams.generated.resources.ic_top_10 -import streamplayerapp_kmp.core_shared_ui.generated.resources.Res as SharedRes import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_add import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_info import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_stream_ranking import streamplayerapp_kmp.feature_list_streams.generated.resources.list_highlight_banner_watch +import streamplayerapp_kmp.feature_list_streams.generated.resources.Res import kotlin.collections.map +import streamplayerapp_kmp.core_shared_ui.generated.resources.Res as SharedRes class ListStreamViewModel( - private val listStreams: com.codandotv.streamplayerapp.feature.liststreams.list.domain.ListStreamUseCase, - private val listGenres: com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetGenresUseCase, - private val latestStream: com.codandotv.streamplayerapp.feature.liststreams.list.domain.GetTopRatedStream + private val listStreams: ListStreamUseCase, + private val listGenres: GetGenresUseCase, + private val latestStream: GetTopRatedStream ) : ViewModel() { private val _uiState = MutableStateFlow( - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamsUIState( + ListStreamsUIState( streamsCarouselContent = emptyList(), isLoading = false ) @@ -73,41 +85,40 @@ class ListStreamViewModel( } } - private fun getHighlightBanner(latest: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Stream) = - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner( + private fun getHighlightBanner(latest: Stream) = + HighlightBanner( name = latest.name, imageUrl = latest.posterPathUrl, - contentType = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.Companion.getContentName( - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.FILM + contentType = ContentType.getContentName( + ContentType.FILM ), - contentTypeAsPlural = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.Companion.getContentNameAsPlural( - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.core.ContentType.FILM + contentTypeAsPlural = ContentType.getContentNameAsPlural( + ContentType.FILM ), - extraInfo = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + extraInfo = IconAndTextInfo( Res.drawable.ic_top_10, Res.string.list_highlight_banner_stream_ranking ), - leftButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + leftButton = IconAndTextInfo( SharedRes.drawable.ic_add, Res.string.list_highlight_banner_add ), - centralButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + centralButton = IconAndTextInfo( SharedRes.drawable.ic_play, Res.string.list_highlight_banner_watch ), - rightButton = _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.IconAndTextInfo( + rightButton = IconAndTextInfo( SharedRes.drawable.ic_info, Res.string.list_highlight_banner_info ), ) - - private fun getStreamsByGenre(genre: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.Genre): com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent { - return _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent( + private fun getStreamsByGenre(genre: Genre): StreamsCarouselContent { + return StreamsCarouselContent( genre.name, listStreams(genre).map { it.map { stream -> - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent( + StreamsCardContent( contentDescription = stream.name, url = stream.posterPathUrl, id = stream.id diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt index 29880853..eecb7287 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsScreen.kt @@ -24,13 +24,15 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.unit.dp import androidx.navigation.NavController import com.codandotv.streamplayerapp.core.navigation.bottomnavigation.StreamPlayerBottomNavigation +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner +import com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner import org.koin.compose.viewmodel.koinViewModel @Suppress("LongParameterList") @OptIn(ExperimentalMaterial3Api::class) @Composable fun ListStreamsScreen( - viewModel: com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens.ListStreamViewModel = koinViewModel(), + viewModel: ListStreamViewModel = koinViewModel(), navController: NavController, onNavigateDetailList: (String) -> Unit = {}, onNavigateProfilePicker: () -> Unit = {}, @@ -76,8 +78,7 @@ fun ListStreamsScreen( .align(Alignment.TopCenter) .verticalScroll(baseScrollState) ) { - - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.HighlightBanner( + HighlightBanner( data = uiState.highlightBanner ) @@ -93,4 +94,3 @@ fun ListStreamsScreen( } } } - diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt index 287521c0..9c4eedd0 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/screens/ListStreamsUIState.kt @@ -1,9 +1,10 @@ package com.codandotv.streamplayerapp.feature.liststreams.list.presentation.screens import com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner data class ListStreamsUIState( - val highlightBanner: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner? = null, - val streamsCarouselContent: List, + val highlightBanner: HighlightBanner? = null, + val streamsCarouselContent: List, val isLoading: Boolean ) diff --git a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt index fc10aebc..c6a6ac68 100644 --- a/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt +++ b/feature-list-streams/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/liststreams/list/presentation/widgets/HighlightBanner.kt @@ -32,6 +32,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage +import com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner import org.jetbrains.compose.resources.StringResource import org.jetbrains.compose.resources.painterResource import org.jetbrains.compose.resources.stringResource @@ -51,7 +52,10 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.Res as SharedRes @Suppress("MagicNumber") @Composable -fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner?) { +fun HighlightBanner( + data: HighlightBanner?, + modifier: Modifier = Modifier, +) { data ?: return Box( @@ -59,10 +63,10 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streampla .fillMaxWidth() .height(500.dp) ) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentImage( + ContentImage( imageUrl = data.imageUrl ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.BackgroundGradient() + BackgroundGradient() Column( modifier = Modifier .align(Alignment.BottomEnd) @@ -70,17 +74,17 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streampla horizontalAlignment = Alignment.CenterHorizontally ) { Spacer(modifier = Modifier.weight(1F)) - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentType( + ContentType( contentType = data.contentType ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentName( + ContentName( name = data.name ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ContentRanking( + ContentRanking( extraInfo = data.extraInfo, contentTypeAsPlural = data.contentTypeAsPlural ) - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.ActionButtons( + ActionButtons( Modifier.weight(0.3F), data ) @@ -90,7 +94,7 @@ fun HighlightBanner(modifier: Modifier = Modifier, data: com.codandotv.streampla @Composable fun ContentImage(modifier: Modifier = Modifier, imageUrl: String) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( + WebImage( modifier = modifier.fillMaxSize(), imageUrl = imageUrl, contentScale = ContentScale.Crop, @@ -167,26 +171,28 @@ fun ContentType(modifier: Modifier = Modifier, contentType: StringResource) { letterSpacing = 4.sp ) } - } @Composable -fun ActionButtons(modifier: Modifier, data: com.codandotv.streamplayerapp.feature.liststreams.list.domain.model.HighlightBanner) { +fun ActionButtons( + modifier: Modifier, + data: HighlightBanner, +) { Row(verticalAlignment = Alignment.CenterVertically, modifier = modifier) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.AddToListButton( - modifier = Modifier - .weight(1F) - .fillMaxSize(), data + AddToListButton( + modifier = Modifier.weight(1F).fillMaxSize(), + data ) { /* todo */ } - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.PlayButton { + PlayButton { /* todo */ } - _root_ide_package_.com.codandotv.streamplayerapp.feature.liststreams.list.presentation.widgets.InfoButton( + InfoButton( modifier = Modifier .weight(1F) - .fillMaxSize(), data + .fillMaxSize(), + data ) { /* todo */ } From f32a7c4f17d85f58e94e67e5315c5b26a398edd7 Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 19:44:59 -0300 Subject: [PATCH 21/33] feature-details no detekt rule violation --- .../detail/data/DetailStreamRepository.kt | 31 ++++++------ .../detail/data/DetailStreamService.kt | 2 +- .../detail/data/model/DetailStreamResponse.kt | 15 +++--- .../detail/data/model/VideoStreamResponse.kt | 2 +- .../feature/detail/di/DetailStreamModule.kt | 29 +++++++---- .../feature/detail/domain/DetailStream.kt | 12 ++--- .../detail/domain/DetailStreamMapper.kt | 18 ++++--- .../detail/domain/DetailStreamUseCase.kt | 12 ++--- .../detail/domain/VideoStreamsUseCase.kt | 8 ++-- .../navigation/DetailStreamNavigation.kt | 5 +- .../screens/DetailStreamViewModel.kt | 16 ++++--- .../screens/DetailStreamsScreen.kt | 48 +++++++++++-------- .../screens/DetailStreamsUIState.kt | 6 +-- .../widget/DetailStreamActionOption.kt | 13 ++--- .../widget/DetailStreamImagePreview.kt | 9 ++-- .../streamplayerapp/feature/detail/Shared.kt | 4 +- .../detail/data/DetailStreamRepositoryTest.kt | 2 +- .../detail/domain/DetailStreamUseCaseTest.kt | 7 ++- .../detail/fake/FakeDetailStreamService.kt | 4 +- .../presentation/DetailStreamViewModelTest.kt | 11 ++--- 20 files changed, 142 insertions(+), 112 deletions(-) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt index 6f6be528..a917f821 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepository.kt @@ -2,6 +2,8 @@ package com.codandotv.streamplayerapp.feature.detail.data import com.codandotv.streamplayerapp.core.local.storage.data.dao.FavoriteDao import com.codandotv.streamplayerapp.core.networking.handleError.toFlow +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStream import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStream import com.codandotv.streamplayerapp.feature.detail.domain.toDetailStreamLocal import com.codandotv.streamplayerapp.feature.detail.domain.toVideoStreams @@ -9,41 +11,42 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map interface DetailStreamRepository { - suspend fun getMovie(): Flow + suspend fun getMovie(): Flow suspend fun deleteFromMyList(movie: String) - suspend fun insertToMyList(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) - suspend fun isFavorite(movieId:String) : Boolean - suspend fun getVideoStreams(): Flow> + suspend fun insertToMyList(movie: DetailStream) + suspend fun isFavorite(movieId: String): Boolean + suspend fun getVideoStreams(): Flow> } class DetailStreamRepositoryImpl( private val movieId: String, - private val service: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService, + private val service: DetailStreamService, private val favoriteDao: FavoriteDao, -) : com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository { +) : DetailStreamRepository { - override suspend fun getMovie(): Flow = + override suspend fun getMovie(): Flow = service.getMovie(movieId) .toFlow() .map { it.toDetailStream(isFavorite(movieId)) } - override suspend fun deleteFromMyList(movie: String) = favoriteDao.delete(movie) - override suspend fun insertToMyList(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) = favoriteDao.insert(movie.toDetailStreamLocal()) + override suspend fun insertToMyList(movie: DetailStream) = + favoriteDao.insert(movie.toDetailStreamLocal()) /** * Verify if movieId was saved as favorite * @param movieId * @return Boolean */ - override suspend fun isFavorite(movieId: String) : Boolean = favoriteDao.fetchAll().any { - movie -> movie.id == movieId - } - - override suspend fun getVideoStreams(): Flow> = + override suspend fun isFavorite(movieId: String): Boolean = + favoriteDao.fetchAll().any { movie -> + movie.id == movieId + } + + override suspend fun getVideoStreams(): Flow> = service.getVideoStreams(movieId) .toFlow() .map { diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt index 7490a1be..c1c73c9e 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamService.kt @@ -14,7 +14,7 @@ interface DetailStreamService { class DetailStreamServiceImpl( private val client: HttpClient -) : com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService { +) : DetailStreamService { override suspend fun getMovie(movieId: String): NetworkResponse = client.safeRequest { diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt index 058c87c1..11c10a2d 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/DetailStreamResponse.kt @@ -1,14 +1,17 @@ package com.codandotv.streamplayerapp.feature.detail.data.model +import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable @Suppress("ConstructorParameterNaming") data class DetailStreamResponse( - val id : Long, - val title : String, - val overview : String, - val tagline : String, - val backdrop_path : String, - val release_date : String + val id: Long, + val title: String, + val overview: String, + val tagline: String, + @SerialName("backdrop_path") + val backdropPath: String, + @SerialName("release_date") + val releaseDate: String ) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt index 26bef652..2c7f492c 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/data/model/VideoStreamResponse.kt @@ -16,5 +16,5 @@ data class VideoStreamResponse( @Serializable data class VideoStreamsResponse( val id: Long, - val results: List + val results: List ) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt index 49c997b6..93c21424 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/di/DetailStreamModule.kt @@ -1,6 +1,15 @@ package com.codandotv.streamplayerapp.feature.detail.di import com.codandotv.streamplayerapp.core.shared.ui.widget.getSharedHandlerPlatform +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamService +import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamServiceImpl +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCaseImpl +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.IO import org.koin.core.module.dsl.viewModel @@ -10,7 +19,7 @@ import org.koin.dsl.module object DetailStreamModule { val module = module { viewModel { (id: String) -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel( + DetailStreamViewModel( detailStreamUseCase = get { parametersOf(id) }, @@ -20,34 +29,34 @@ object DetailStreamModule { dispatcher = Dispatchers.IO ) } - factory { (id: String) -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl( + factory { (id: String) -> + DetailStreamUseCaseImpl( detailStreamRepository = get { parametersOf(id) } ) } - factory { (id: String) -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCaseImpl( + factory { (id: String) -> + VideoStreamsUseCaseImpl( detailStreamRepository = get { parametersOf(id) } ) } - factory { (id: String) -> - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl( + factory { (id: String) -> + DetailStreamRepositoryImpl( favoriteDao = get(), service = get(), movieId = id, ) } - factory { - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamServiceImpl( + factory { + DetailStreamServiceImpl( client = get() ) } - factory { _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.getSharedHandlerPlatform() } + factory { getSharedHandlerPlatform() } } } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt index 693c0ef9..13147573 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStream.kt @@ -1,11 +1,11 @@ package com.codandotv.streamplayerapp.feature.detail.domain data class DetailStream( - val id : String, - val title : String, - val overview : String, - val tagline : String, - val url : String, - val releaseYear : String, + val id: String, + val title: String, + val overview: String, + val tagline: String, + val url: String, + val releaseYear: String, val isFavorite: Boolean ) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt index 611fdab6..49bf6475 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamMapper.kt @@ -1,20 +1,24 @@ +@file:Suppress("MagicNumber") + package com.codandotv.streamplayerapp.feature.detail.domain import com.codandotv.streamplayerapp.core.local.storage.domain.model.MovieEntity import com.codandotv.streamplayerapp.core.shared.Url.IMAGE_URL_SIZE_500 +import com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse +import com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse -fun com.codandotv.streamplayerapp.feature.detail.data.model.DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): com.codandotv.streamplayerapp.feature.detail.domain.DetailStream = - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStream( +fun DetailStreamResponse.toDetailStream(isFavorite: Boolean = false): DetailStream = + DetailStream( id = this.id.toString(), title = this.title, overview = this.overview, tagline = this.tagline, - url = "$IMAGE_URL_SIZE_500${this.backdrop_path}", - releaseYear = this.release_date.substring(0, 4), + url = "$IMAGE_URL_SIZE_500${this.backdropPath}", + releaseYear = this.releaseDate.substring(0, 4), isFavorite = isFavorite ) -fun com.codandotv.streamplayerapp.feature.detail.domain.DetailStream.toDetailStreamLocal(): MovieEntity = +fun DetailStream.toDetailStreamLocal(): MovieEntity = MovieEntity( id = this.id, title = this.title, @@ -24,9 +28,9 @@ fun com.codandotv.streamplayerapp.feature.detail.domain.DetailStream.toDetailStr releaseYear = this.releaseYear, ) -fun com.codandotv.streamplayerapp.feature.detail.data.model.VideoStreamsResponse.toVideoStreams(): List = +fun VideoStreamsResponse.toVideoStreams(): List = results.map { - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.VideoStream( + VideoStream( videoId = it.key, movieId = this.id ) diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt index f24dd6b2..cf0f0b18 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCase.kt @@ -4,19 +4,19 @@ import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository import kotlinx.coroutines.flow.Flow interface DetailStreamUseCase { - suspend fun getMovie(): Flow + suspend fun getMovie(): Flow - suspend fun toggleItemInFavorites(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) + suspend fun toggleItemInFavorites(movie: DetailStream) } class DetailStreamUseCaseImpl( - private val detailStreamRepository: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository -) : com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase { + private val detailStreamRepository: DetailStreamRepository +) : DetailStreamUseCase { - override suspend fun getMovie(): Flow = + override suspend fun getMovie(): Flow = detailStreamRepository.getMovie() - override suspend fun toggleItemInFavorites(movie: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) { + override suspend fun toggleItemInFavorites(movie: DetailStream) { if (detailStreamRepository.isFavorite(movie.id)) { detailStreamRepository.deleteFromMyList(movie.id) } else { diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt index 974c0d4f..cf31c3d3 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/VideoStreamsUseCase.kt @@ -4,13 +4,13 @@ import com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository import kotlinx.coroutines.flow.Flow interface VideoStreamsUseCase { - suspend fun getVideoStreams(): Flow> + suspend fun getVideoStreams(): Flow> } class VideoStreamsUseCaseImpl( - private val detailStreamRepository: com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepository -) : com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase { - override suspend fun getVideoStreams(): Flow> { + private val detailStreamRepository: DetailStreamRepository +) : VideoStreamsUseCase { + override suspend fun getVideoStreams(): Flow> { return detailStreamRepository.getVideoStreams() } } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt index 65543c45..f84ec480 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/navigation/DetailStreamNavigation.kt @@ -5,6 +5,7 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.composable import com.codandotv.streamplayerapp.core.navigation.routes.Routes.DETAIL_COMPLETE import com.codandotv.streamplayerapp.core.navigation.routes.Routes.PARAM.ID +import com.codandotv.streamplayerapp.feature.detail.di.DetailStreamModule import org.koin.compose.getKoin import org.koin.compose.module.rememberKoinModules import org.koin.compose.viewmodel.koinViewModel @@ -17,13 +18,13 @@ internal const val DEFAULT_ID = "0" fun NavGraphBuilder.detailStreamNavGraph(navController: NavHostController) { composable(DETAIL_COMPLETE) { nav -> rememberKoinModules { - listOf(_root_ide_package_.com.codandotv.streamplayerapp.feature.detail.di.DetailStreamModule.module) + listOf(DetailStreamModule.module) } _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamScreen( viewModel = koinViewModel { parametersOf( nav.savedStateHandle.get(ID) - ?: _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.navigation.DEFAULT_ID + ?: DEFAULT_ID ) }, navController = navController, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt index 59789057..606b64e4 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamViewModel.kt @@ -4,6 +4,8 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.codandotv.streamplayerapp.core.networking.handleError.catchFailure import com.codandotv.streamplayerapp.core.networking.resources.StringNetworking +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase +import com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted @@ -15,9 +17,9 @@ import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.zip import kotlinx.coroutines.launch -class DetailStreamViewModel( - private val detailStreamUseCase: com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCase, - private val videoStreamsUseCase: com.codandotv.streamplayerapp.feature.detail.domain.VideoStreamsUseCase, +class DetailStreamViewModel( + private val detailStreamUseCase: DetailStreamUseCase, + private val videoStreamsUseCase: VideoStreamsUseCase, private val dispatcher: CoroutineDispatcher ) : ViewModel() { @@ -25,10 +27,10 @@ class DetailStreamViewModel( loadDetail() } - private val _uiState = MutableStateFlow( - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState + private val _uiState = MutableStateFlow( + DetailStreamsUIState.LoadingStreamUIState ) - val uiState: StateFlow = _uiState.stateIn( + val uiState: StateFlow = _uiState.stateIn( viewModelScope, SharingStarted.Eagerly, initialValue = _uiState.value @@ -57,7 +59,7 @@ class DetailStreamViewModel( } private fun onLoading() { - _uiState.update { _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.LoadingStreamUIState } + _uiState.update { DetailStreamsUIState.LoadingStreamUIState } } fun toggleItemInFavorites(detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) { diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt index c20f00b6..53b1098f 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsScreen.kt @@ -33,6 +33,10 @@ import androidx.navigation.NavController import com.codandotv.streamplayerapp.core.shared.ui.widget.BasicToolbar import com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform import com.codandotv.streamplayerapp.core.shared.ui.widget.SharingStreamPlatform +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamActionOption +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamImagePreview +import com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamRowHeader import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import streamplayerapp_kmp.feature_detail.generated.resources.Res @@ -41,17 +45,17 @@ import streamplayerapp_kmp.feature_detail.generated.resources.detail_watch_prima @Composable fun DetailStreamScreen( - viewModel: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel = koinViewModel(), + viewModel: DetailStreamViewModel = koinViewModel(), navController: NavController, - sharedHandlerPlatform: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform, + sharedHandlerPlatform: SharedHandlerPlatform, ) { val uiState by viewModel.uiState.collectAsState() when (uiState) { - is com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState -> { - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.SetupDetailScreen( + is DetailStreamsUIState.DetailStreamsLoadedUIState -> { + SetupDetailScreen( onToggleToMyList = { detailStream -> viewModel.toggleItemInFavorites(detailStream) }, - uiState = uiState as com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, + uiState = uiState as DetailStreamsUIState.DetailStreamsLoadedUIState, navController = navController, sharedHandlerPlatform = sharedHandlerPlatform ) @@ -66,7 +70,6 @@ fun DetailStreamScreen( ) } } - } } @@ -74,9 +77,9 @@ fun DetailStreamScreen( @Composable private fun SetupDetailScreen( onToggleToMyList: (com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) -> Unit, - uiState: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, + uiState: DetailStreamsUIState.DetailStreamsLoadedUIState, navController: NavController, - sharedHandlerPlatform: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform, + sharedHandlerPlatform: SharedHandlerPlatform, ) { val showDialog = remember { mutableStateOf(false) } @@ -84,7 +87,7 @@ private fun SetupDetailScreen( Scaffold( topBar = { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.BasicToolbar( + BasicToolbar( navController = navController, ) }, @@ -95,7 +98,7 @@ private fun SetupDetailScreen( .verticalScroll(rememberScrollState()) .padding(innerPadding) ) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamImagePreview( + DetailStreamImagePreview( uiState = uiState, onPlayEvent = { showPlayer = true @@ -107,11 +110,12 @@ private fun SetupDetailScreen( .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, top = 8.dp) ) { - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamRowHeader() + DetailStreamRowHeader() Text( text = uiState.detailStream.title, style = MaterialTheme.typography.headlineMedium.copy( - fontWeight = FontWeight.Bold, fontSize = 28.sp + fontWeight = FontWeight.Bold, + fontSize = 28.sp ) ) Spacer(modifier = Modifier.height(8.dp)) @@ -119,11 +123,12 @@ private fun SetupDetailScreen( text = uiState.detailStream.releaseYear, style = MaterialTheme.typography.headlineMedium.copy( color = MaterialTheme.colorScheme.onSurfaceVariant, - fontSize = 14.sp, fontWeight = FontWeight.Bold + fontSize = 14.sp, + fontWeight = FontWeight.Bold ) ) Spacer(modifier = Modifier.height(8.dp)) - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction( + DetailStreamButtonAction( buttonsColors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.surface ), @@ -133,7 +138,7 @@ private fun SetupDetailScreen( textColor = MaterialTheme.colorScheme.onSurface ) Spacer(modifier = Modifier.height(4.dp)) - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamButtonAction( + DetailStreamButtonAction( buttonsColors = ButtonDefaults.buttonColors( containerColor = MaterialTheme.colorScheme.onSurfaceVariant ), @@ -152,21 +157,24 @@ private fun SetupDetailScreen( modifier = Modifier.padding(top = 8.dp, bottom = 16.dp) ) Spacer(modifier = Modifier.height(8.dp)) - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.widget.DetailStreamActionOption( + DetailStreamActionOption( uiState.detailStream, onToggleToMyList, - { showDialog.value = true }) + { showDialog.value = true } + ) Spacer(modifier = Modifier.height(16.dp)) } } if (showDialog.value) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.SharingStreamPlatform( + SharingStreamPlatform( contentTitle = uiState.detailStream.title, contentUrl = uiState.detailStream.url, shareHandler = sharedHandlerPlatform, setShowDialog = { showDialog.value = it - }) + } + ) } - }) + } + ) } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt index 8faf57c0..df762976 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/screens/DetailStreamsUIState.kt @@ -4,9 +4,9 @@ import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream sealed class DetailStreamsUIState { data class DetailStreamsLoadedUIState( - val detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream, + val detailStream: DetailStream, val videoId: String?, - ) : com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState() + ) : DetailStreamsUIState() - object LoadingStreamUIState : com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState() + object LoadingStreamUIState : DetailStreamsUIState() } diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt index 0afe33e1..30d7a575 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamActionOption.kt @@ -18,6 +18,7 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText +import com.codandotv.streamplayerapp.feature.detail.domain.DetailStream import org.jetbrains.compose.resources.stringResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.detail_classification @@ -27,8 +28,8 @@ import streamplayerapp_kmp.feature_detail.generated.resources.detail_share @Composable fun DetailStreamActionOption( - detailStream: com.codandotv.streamplayerapp.feature.detail.domain.DetailStream, - onToggleToMyList: (com.codandotv.streamplayerapp.feature.detail.domain.DetailStream) -> Unit, + detailStream: DetailStream, + onToggleToMyList: (DetailStream) -> Unit, onShowSharingOptions: () -> Unit, modifier: Modifier = Modifier.fillMaxWidth() ) { @@ -44,7 +45,7 @@ fun DetailStreamActionOption( modifier = modifier, horizontalArrangement = Arrangement.SpaceEvenly ) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( + IconWithText( onClick = { checked = !checked onToggleToMyList(detailStream) @@ -54,21 +55,21 @@ fun DetailStreamActionOption( text = stringResource(Res.string.detail_my_list), textColor = Color.Gray, ) - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( + IconWithText( onClick = { TODO("Implementar mecanismo de classificação.") }, imageVector = Icons.Filled.ThumbUp, imageColor = Color.White, text = stringResource(Res.string.detail_classification), textColor = Color.Gray, ) - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( + IconWithText( onClick = { onShowSharingOptions.invoke() }, imageVector = Icons.Filled.Share, imageColor = Color.White, text = stringResource(Res.string.detail_share), textColor = Color.Gray, ) - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.IconWithText( + IconWithText( onClick = { TODO("Implementar mecanismo de download.") }, imageVector = Icons.Filled.Share, imageColor = Color.White, diff --git a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt index 486fb42c..c6a4bf97 100644 --- a/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt +++ b/feature-detail/src/commonMain/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/widget/DetailStreamImagePreview.kt @@ -16,8 +16,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.unit.dp -import com.codandotv.streamplayerapp.core.shared.ui.widget.YoutubePlayerComponentPlatform import com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage +import com.codandotv.streamplayerapp.core.shared.ui.widget.YoutubePlayerComponentPlatform +import com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState import org.jetbrains.compose.resources.painterResource import streamplayerapp_kmp.feature_detail.generated.resources.Res import streamplayerapp_kmp.feature_detail.generated.resources.play_circle @@ -25,7 +26,7 @@ import streamplayerapp_kmp.feature_detail.generated.resources.play_circle @Suppress("MagicNumber") @Composable fun DetailStreamImagePreview( - uiState: com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamsUIState.DetailStreamsLoadedUIState, + uiState: DetailStreamsUIState.DetailStreamsLoadedUIState, modifier: Modifier = Modifier, showPlayer: Boolean = false, onPlayEvent: (() -> Unit) @@ -37,14 +38,14 @@ fun DetailStreamImagePreview( contentAlignment = Alignment.Center ) { if (showPlayer) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.YoutubePlayerComponentPlatform( + YoutubePlayerComponentPlatform( videoId = uiState.videoId.orEmpty(), modifier = Modifier .align(Alignment.TopCenter) .fillMaxSize() ) } else { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.WebImage( + WebImage( imageUrl = uiState.detailStream.url, contentScale = ContentScale.Fit, contentDescription = uiState.detailStream.tagline, diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt index 53ecbc17..b046fc24 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/Shared.kt @@ -25,8 +25,8 @@ val expectedDetailStream = title = "Fake Movie", overview = "This is a fake overview.", tagline = "Fake Tagline", - backdrop_path = "aaaa", - release_date = "2025" + backdropPath = "aaaa", + releaseDate = "2025" ) val expectedDetailStreamLoadedUI = DetailStreamsUIState.DetailStreamsLoadedUIState( detailStream = fakeStream, diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt index 604ed7ef..59625914 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/data/DetailStreamRepositoryTest.kt @@ -22,7 +22,7 @@ class DetailStreamRepositoryTest { service = FakeDetailStreamService() favoriteDao = FakeFavoriteDao() repository = - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.data.DetailStreamRepositoryImpl( + DetailStreamRepositoryImpl( movieId = movieId, service = service, favoriteDao = favoriteDao diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt index af244f01..030d377c 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/domain/DetailStreamUseCaseTest.kt @@ -15,10 +15,9 @@ class DetailStreamUseCaseTest { @BeforeTest fun setUp() { detailStreamRepository = FakeDetailStreamRepository(movie = fakeStream) - detailStreamUseCase = - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.domain.DetailStreamUseCaseImpl( - detailStreamRepository = detailStreamRepository - ) + detailStreamUseCase = DetailStreamUseCaseImpl( + detailStreamRepository = detailStreamRepository + ) } @Test diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt index 1786a2cb..3b601afc 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/fake/FakeDetailStreamService.kt @@ -16,8 +16,8 @@ class FakeDetailStreamService : title = "Fake Movie", overview = "This is a fake overview.", tagline = "Fake Tagline", - backdrop_path = "/fake_backdrop.jpg", - release_date = "2025-01-01" + backdropPath = "/fake_backdrop.jpg", + releaseDate = "2025-01-01" ) ) diff --git a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt index 418052e2..fb31690e 100644 --- a/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt +++ b/feature-detail/src/commonTest/kotlin/com/codandotv/streamplayerapp/feature/detail/presentation/DetailStreamViewModelTest.kt @@ -29,12 +29,11 @@ class DetailStreamViewModelTest { detailUseCase = FakeDetailStreamUseCase() videoUseCase = FakeVideoStreamsUseCase() - detailStreamViewModel = - _root_ide_package_.com.codandotv.streamplayerapp.feature.detail.presentation.screens.DetailStreamViewModel( - detailStreamUseCase = detailUseCase, - videoStreamsUseCase = videoUseCase, - dispatcher = StandardTestDispatcher() - ) + detailStreamViewModel = DetailStreamViewModel( + detailStreamUseCase = detailUseCase, + videoStreamsUseCase = videoUseCase, + dispatcher = StandardTestDispatcher() + ) } @OptIn(ExperimentalCoroutinesApi::class) From 962b7a6ec5c862938c75caa2f40f5ac902e537fb Mon Sep 17 00:00:00 2001 From: gabrielmoro Date: Sat, 6 Jun 2026 19:51:57 -0300 Subject: [PATCH 22/33] core-shared-ui no detekt rule violation --- .../core/shared/ui/extension/PackageExtension.kt | 3 ++- .../shared/ui/widget/SharedHandlerPlatform.android.kt | 5 ++++- .../shared/ui/widget/YoutubePlayerComponent.android.kt | 1 - .../streamplayerapp/core/shared/ui/resources/Colors.kt | 10 ++++++---- .../core/shared/ui/theme/StreamPlayerTheme.kt | 7 +++---- .../core/shared/ui/utils/SharingPlatform.kt | 3 +-- .../core/shared/ui/widget/CloseButton.kt | 2 +- .../core/shared/ui/widget/IconWithText.kt | 6 ++++-- .../streamplayerapp/core/shared/ui/widget/MicButton.kt | 2 +- .../core/shared/ui/widget/SearchIcon.kt | 2 +- .../core/shared/ui/widget/SharedHandlerPlatform.kt | 5 ++--- .../core/shared/ui/widget/SharingStreamPlatform.kt | 2 +- .../core/shared/ui/widget/StreamPlayerTopBar.kt | 9 +++++---- .../core/shared/ui/widget/StreamsCard.kt | 2 +- .../core/shared/ui/widget/StreamsCarousel.kt | 6 +++--- .../shared/ui/widget/YoutubePlayerComponentPlatform.kt | 1 - .../core/shared/ui/widget/SharedHandlerPlatform.ios.kt | 5 +++-- .../ui/widget/YoutubePlayerComponentPlatform.ios.kt | 3 +-- 18 files changed, 39 insertions(+), 35 deletions(-) diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt index aeee3435..6c2f2c86 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/extension/PackageExtension.kt @@ -8,5 +8,6 @@ fun PackageManager.getPackageInfoCompat(packageName: String, flags: Int = 0): Pa if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(flags.toLong())) } else { - @Suppress("DEPRECATION") getPackageInfo(packageName, flags) + @Suppress("DEPRECATION") + getPackageInfo(packageName, flags) } diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt index cb25f745..adc0e3f0 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.android.kt @@ -1,3 +1,5 @@ +@file:Suppress("MatchingDeclarationName") + package com.codandotv.streamplayerapp.core.shared.ui.widget import android.content.ClipData @@ -35,7 +37,8 @@ actual class SharedHandlerPlatform : KoinComponent { runCatching { context.startActivity(intent) }.onFailure { - Toast.makeText(context, "Nenhum aplicativo de SMS encontrado.", Toast.LENGTH_SHORT).show() + Toast.makeText(context, "Nenhum aplicativo de SMS encontrado.", Toast.LENGTH_SHORT) + .show() } } diff --git a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt index 39167957..dde966e6 100644 --- a/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt +++ b/core-shared-ui/src/androidMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponent.android.kt @@ -11,7 +11,6 @@ import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.viewinterop.AndroidView import com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND -import com.codandotv.streamplayerapp.core.shared.ui.widget.videoIdToEmbedHTML @SuppressLint("SetJavaScriptEnabled") @Composable diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt index c865ec31..043dd49e 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/resources/Colors.kt @@ -1,3 +1,5 @@ +@file:Suppress("MagicNumber") + package com.codandotv.streamplayerapp.core.shared.ui.resources import androidx.compose.material3.darkColorScheme @@ -12,9 +14,9 @@ object Colors { val Gray100 = Color(0xFF2C2C2C) val LightColors = lightColorScheme( - primary = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_PRIMARY, + primary = COLOR_PRIMARY, secondary = Color(0xFFF5F5F1), - background = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND, + background = COLOR_BACKGROUND, onBackground = Color(0xFFFFFFFF), surface = Color(0xFF121212), onSurface = Color(0xFFF5F5F1), @@ -22,9 +24,9 @@ object Colors { ) val DarkColors = darkColorScheme( - primary = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_PRIMARY, + primary = COLOR_PRIMARY, secondary = Color(0xFFF5F5F1), - background = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.COLOR_BACKGROUND, + background = COLOR_BACKGROUND, onBackground = Color(0xFFFFFFFF), surface = Color(0xFF121212), onSurface = Color(0xFFF5F5F1), diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt index 9836772e..5bd78dd3 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/theme/StreamPlayerTheme.kt @@ -10,9 +10,8 @@ fun StreamPlayerTheme( isDarkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit ) { - MaterialTheme( - colorScheme = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.theme.getColorScheme( + colorScheme = getColorScheme( isDarkTheme ), content = content, @@ -21,7 +20,7 @@ fun StreamPlayerTheme( private fun getColorScheme(isDarkTheme: Boolean) = if (isDarkTheme) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.DarkColors + Colors.DarkColors } else { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.LightColors + Colors.LightColors } diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt index ab17e3d4..893708e9 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/utils/SharingPlatform.kt @@ -2,6 +2,5 @@ package com.codandotv.streamplayerapp.core.shared.ui.utils import androidx.compose.runtime.Composable - @Composable -expect fun isPackageInstalled(packageName: String) : Boolean +expect fun isPackageInstalled(packageName: String): Boolean diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt index 9de8cf2c..618f9e1b 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/CloseButton.kt @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_close @Composable fun CloseButton(action: () -> Unit = {}) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( + DefaultIcon( searchIcon = Icons.Default.Close, contentDescription = stringResource(Res.string.icon_close), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt index 0a99128a..7879bed6 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/IconWithText.kt @@ -26,10 +26,12 @@ fun IconWithText( textColor: Color, modifier: Modifier = Modifier ) { - Column( horizontalAlignment = Alignment.CenterHorizontally, - modifier = modifier.clickable { onClick() } ) { + modifier = modifier.clickable { + onClick() + } + ) { Icon( imageVector = imageVector, contentDescription = null, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt index 0547123d..3d55a6e3 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/MicButton.kt @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_mic @Composable fun MicButton(action: () -> Unit = {}) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( + DefaultIcon( searchIcon = Icons.Default.Check, contentDescription = stringResource(Res.string.icon_mic), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt index 3b686974..86a9b2f1 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SearchIcon.kt @@ -10,7 +10,7 @@ import streamplayerapp_kmp.core_shared_ui.generated.resources.icon_search @Composable fun SearchIcon(action: () -> Unit = {}) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.DefaultIcon( + DefaultIcon( searchIcon = Icons.Filled.Search, contentDescription = stringResource(Res.string.icon_search), onIconClickAction = action, diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt index 735140d1..0ce548a7 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharedHandlerPlatform.kt @@ -1,7 +1,6 @@ package com.codandotv.streamplayerapp.core.shared.ui.widget - -expect class SharedHandlerPlatform{ +expect class SharedHandlerPlatform { fun shareWhatsApp(title: String, url: String) fun shareSms(title: String, url: String) fun shareInstagram(url: String) @@ -9,4 +8,4 @@ expect class SharedHandlerPlatform{ fun shareMoreOptions(title: String, url: String) } -expect fun getSharedHandlerPlatform() : com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform +expect fun getSharedHandlerPlatform(): SharedHandlerPlatform diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt index db139f31..96db8334 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/SharingStreamPlatform.kt @@ -29,7 +29,7 @@ fun SharingStreamPlatform( contentTitle: String, contentUrl: String, setShowDialog: (Boolean) -> Unit, - shareHandler: com.codandotv.streamplayerapp.core.shared.ui.widget.SharedHandlerPlatform + shareHandler: SharedHandlerPlatform ) { val coroutineScope = rememberCoroutineScope() val bottomSheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt index a13e896c..bc29940f 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamPlayerTopBar.kt @@ -48,15 +48,15 @@ fun StreamPlayerTopBar( onSelectedProfilePicture: String ) { Box( - modifier = Modifier.background(color = _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.resources.Colors.Dark10) + modifier = Modifier.background(color = Colors.Dark10) .statusBarsPadding() ) { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerTopBar( + StreamPlayerTopBar( onNavigateProfilePicker = { onNavigateProfilePicker() }, onNavigateSearchScreen = { onNavigateSearchScreen() }, profilePicture = onSelectedProfilePicture ) - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamPlayerOptionsTopBar( + StreamPlayerOptionsTopBar( modifier = Modifier.padding(top = 50.dp), scrollBehavior ) @@ -146,6 +146,7 @@ private fun StreamPlayerOptionsTopBar(modifier: Modifier, scrollBehavior: TopApp color = Color.White ) } - }, colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent) + }, + colors = TopAppBarDefaults.topAppBarColors(containerColor = Color.Transparent) ) } diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt index fec6ebac..d16c4937 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCard.kt @@ -14,7 +14,7 @@ import coil3.compose.AsyncImage @Composable fun StreamsCard( - content: com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCardContent, + content: StreamsCardContent, onNavigateDetailList: (String) -> Unit = {}, ) { Card( diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt index 2b55958a..2b60526a 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/StreamsCarousel.kt @@ -22,7 +22,7 @@ import kotlinx.coroutines.flow.Flow @Composable fun StreamsCarousel( - content: com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCarouselContent, + content: StreamsCarouselContent, modifier: Modifier = Modifier, onNavigateDetailList: (String) -> Unit = {}, ) { @@ -53,7 +53,7 @@ fun StreamsCarousel( ) { index -> val item = lazyPagingItems[index] item?.let { - _root_ide_package_.com.codandotv.streamplayerapp.core.shared.ui.widget.StreamsCard( + StreamsCard( content = it, onNavigateDetailList ) @@ -65,5 +65,5 @@ fun StreamsCarousel( data class StreamsCarouselContent( val genreTitle: String, - val contentList: Flow> + val contentList: Flow> ) diff --git a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt index b42da9b6..4f1dee6d 100644 --- a/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt +++ b/core-shared-ui/src/commonMain/kotlin/com/codandotv/streamplayerapp/core/shared/ui/widget/YoutubePlayerComponentPlatform.kt @@ -8,7 +8,6 @@ import androidx.compose.ui.Modifier @Composable expect fun YoutubePlayerComponentPlatform(videoId: String, modifier: Modifier = Modifier) - internal fun String.videoIdToEmbedHTML(): String { return """