Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build-logic/src/main/java/Config.kt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ object Config {
const val compileSdkVersion = 36
const val minSdkVersion = 28
const val targetSdkVersion = 36
const val versionName = "1.4"
const val versionName = "1.5"
const val versionCode = 1
const val testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
5 changes: 3 additions & 2 deletions composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("com.streamplayer.kmp-library")
alias(libs.plugins.jetbrains.compose)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.kotzilla)
}

kotlin {
Expand All @@ -16,6 +17,7 @@ kotlin {
implementation(libs.firebase.crashlytics)
}
commonMain.dependencies {
implementation(libs.kotzilla.sdk.compose)
implementation(projects.featureListStreams)
implementation(projects.featureDetail)
implementation(projects.featureSearch)
Expand All @@ -33,9 +35,8 @@ kotlin {
implementation(libs.bundles.compose)

implementation(libs.koin.core)
implementation(libs.koin.core.coroutines)
api(libs.kmpnotifier)

implementation(libs.kotzilla.sdk.compose)
}
}
}
11 changes: 11 additions & 0 deletions composeApp/kotzilla.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"keys": [
{
"appId": "019cca1a-c2ae-79d5-bf91-20316edd8f11",
"applicationPackageName": "com.codandotv.streamplayerapp",
"keyId": "019dfef9-3830-749f-a89e-77c18e51f663",
"apiKey": "ktz-sdk-5N2sXcaobPbX6erWh9cF4lC1HGztC9qBIXzvMc873o8",
"isDefault": true
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,47 @@ 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.profile.di.ProfilePickerStreamModule
import io.kotzilla.generated.monitoring
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.IO
import org.koin.core.KoinApplication
import org.koin.core.context.startKoin
import org.koin.core.lazyModules
import org.koin.dsl.module
import org.koin.ksp.generated.module

fun streamPlayerApplication(platformBlock: KoinApplication.() -> Unit): KoinApplication {
return startKoin {
platformBlock()
lazyModules(PermissionsModule.module)

modules(
module { single(QualifierDispatcherIO) { Dispatchers.IO } },
module {
single(QualifierDispatcherIO) {
Dispatchers.IO
}
},
NetworkModule().module,
LocalStorageModule.module,
SyncModule.module,

// region feature_modules
ListStreamModule.module,
SearchModule().module,
NewsScreenModule().module,
ProfilePickerStreamModule().module
// endregion
)

monitoring {
onConfig {
useIosCrashReport = false
}
}
}
}

1 change: 1 addition & 0 deletions core-permission/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ kotlin {
implementation(libs.moko.permissions.camera)
implementation(libs.moko.permissions.gallery)
implementation(libs.koin.core)
implementation(libs.koin.core.coroutines)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@

import com.codandotv.streamplayerapp.core_permission.permission.PermissionsManager
import org.koin.dsl.module
import org.koin.dsl.lazyModule

object PermissionsModule {
val module = module {
val module = lazyModule {
single<PermissionsManager> {
com.codandotv.streamplayerapp.core_permission.permission.PermissionsManagerImpl(
controller = com.codandotv.streamplayerapp.core_permission.permission.PermissionFactory()
Expand Down
1 change: 1 addition & 0 deletions feature-news/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("com.streamplayer.kmp-library")
alias(libs.plugins.jetbrains.compose)
alias(libs.plugins.compose.compiler)
id("com.streamplayer.koin-annotations-setup")
}

kotlin {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
package com.codandotv.streamplayerapp.feature_news.di

import com.codandotv.streamplayerapp.feature_news.presentation.NewsScreenViewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module
import org.koin.core.annotation.ComponentScan
import org.koin.core.annotation.Module

object NewsScreenModule {
val module = module {
viewModel {
NewsScreenViewModel( permissionsManager = get())
}
}
}
@Module
@ComponentScan("com.codandotv.streamplayerapp.feature_news")
class NewsScreenModule
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koin.android.annotation.KoinViewModel
import org.koin.core.annotation.Provided

data class NewsScreenUiState(
val showPermissionDialog: Boolean = false,
Expand All @@ -23,8 +25,9 @@ sealed class NewsScreenActionTakeImage {
data object Gallery : NewsScreenActionTakeImage()
}

@KoinViewModel
class NewsScreenViewModel(
val permissionsManager: PermissionsManager
@Provided val permissionsManager: PermissionsManager
) : ViewModel() {
private val _actionTakeImage = MutableSharedFlow<NewsScreenActionTakeImage>()
val actionTakeImage: SharedFlow<NewsScreenActionTakeImage> = _actionTakeImage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,12 @@ 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.DETAIL_COMPLETE
import com.codandotv.streamplayerapp.feature_news.di.NewsScreenModule
import com.codandotv.streamplayerapp.feature_news.presentation.screens.NewsScreen
import com.codandotv.streamplayerapp.feature_news.presentation.screens.NewsScreenContent
import org.koin.compose.module.rememberKoinModules
import org.koin.core.annotation.KoinExperimentalAPI

@OptIn(KoinExperimentalAPI::class)
fun NavGraphBuilder.newsStreamNavGraph(navController: NavHostController) {
composable(BottomNavRoutes.NEWS) { _ ->
rememberKoinModules {
listOf(NewsScreenModule.module,PermissionsModule.module)
}
NewsScreenContent(navController)
}
}
1 change: 1 addition & 0 deletions feature-profile/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ plugins {
id("com.streamplayer.kmp-library")
alias(libs.plugins.jetbrains.compose)
alias(libs.plugins.compose.compiler)
id("com.streamplayer.koin-annotations-setup")
}

kotlin {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,13 @@ import com.codandotv.streamplayerapp.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<List<ProfileStream>>
}

@Factory
class ProfilePickerStreamRepositoryImpl(
private val service: ProfilePickerStreamService
) : ProfilePickerStreamRepository {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,16 @@ import com.codandotv.streamplayerapp.core_networking.handleError.safeRequest
import com.codandotv.streamplayerapp.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<ProfilesResponse>
}

@Factory
class ProfilePickerStreamServiceImpl(
private val client: HttpClient
@Provided private val client: HttpClient
) : ProfilePickerStreamService {
override suspend fun getProfiles(): NetworkResponse<ProfilesResponse> =
client.safeRequest {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,39 +1,8 @@
package com.codandotv.streamplayerapp.profile.di

import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepository
import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepositoryImpl
import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamService
import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamServiceImpl
import com.codandotv.streamplayerapp.profile.domain.ProfilePickerStreamUseCase
import com.codandotv.streamplayerapp.profile.domain.ProfilePickerStreamUseCaseImpl
import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamViewModel
import org.koin.core.module.dsl.viewModel
import org.koin.dsl.module
import org.koin.core.annotation.ComponentScan
import org.koin.core.annotation.Module

object ProfilePickerStreamModule {
val module = module {
viewModel {
ProfilePickerStreamViewModel(
useCase = get()
)
}

factory<ProfilePickerStreamUseCase> {
ProfilePickerStreamUseCaseImpl(
profilePickerStreamRepository = get()
)
}

factory<ProfilePickerStreamRepository> {
ProfilePickerStreamRepositoryImpl(
service = get()
)
}

factory<ProfilePickerStreamService> {
ProfilePickerStreamServiceImpl(
client = get()
)
}
}
}
@Module
@ComponentScan("com.codandotv.streamplayerapp.profile")
class ProfilePickerStreamModule
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.codandotv.streamplayerapp.profile.domain

import com.codandotv.streamplayerapp.profile.data.ProfilePickerStreamRepository
import kotlinx.coroutines.flow.Flow
import org.koin.core.annotation.Factory

interface ProfilePickerStreamUseCase {
suspend fun getProfile(): Flow<List<ProfileStream>>
Expand All @@ -21,6 +22,7 @@ interface ProfilePickerStreamUseCase {
): Pair<Int, Int>
}

@Factory
class ProfilePickerStreamUseCaseImpl(
private val profilePickerStreamRepository: ProfilePickerStreamRepository
) : ProfilePickerStreamUseCase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,17 +6,12 @@ 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.di.ProfilePickerStreamModule
import com.codandotv.streamplayerapp.profile.presentation.screens.ProfilePickerStreamScreen
import org.koin.compose.module.rememberKoinModules
import org.koin.core.annotation.KoinExperimentalAPI

@OptIn(KoinExperimentalAPI::class)
fun NavGraphBuilder.profilePickerStreamNavGraph(navController: NavHostController) {
composable(Routes.PROFILE_PICKER) {
rememberKoinModules {
listOf(ProfilePickerStreamModule.module)
}
ProfilePickerStreamScreen(
onNavigateListStreams = { profilePic ->
navController.navigate("$HOME?$PROFILE_ID=$profilePic")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,9 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koin.android.annotation.KoinViewModel

@KoinViewModel
class ProfilePickerStreamViewModel(
private val useCase: ProfilePickerStreamUseCase,
) : ViewModel() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,12 @@ 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.di.SearchModule
import com.codandotv.streamplayerapp.feature_search.presentation.screens.SearchScreen
import org.koin.compose.module.rememberKoinModules
import org.koin.core.annotation.KoinExperimentalAPI
import org.koin.ksp.generated.module

@OptIn(KoinExperimentalAPI::class)
fun NavGraphBuilder.searchStreamsNavGraph(navController: NavHostController) {
composable(Routes.SEARCH) { _ ->
rememberKoinModules {
listOf(
SearchModule().module
)
}
SearchScreen(
navController = navController,
onNavigateDetailList = { id ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
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
Expand Down Expand Up @@ -87,6 +88,7 @@ private fun SetupSearchScreen(
topBar = {
val currentText by viewModel.currentSearchText.collectAsState()
SearchableTopBar(
modifier = Modifier.statusBarsPadding(),
currentSearchText = currentText,
onSearchTextChanged = { value ->
viewModel.setCurrentSearchText(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,9 +49,10 @@ fun SearchableTopBar(
onSearchDispatched: () -> Unit,
onSearchIconPressed: () -> Unit,
onBackPressed: () -> Unit,
onCleanTextPressed: () -> Unit
onCleanTextPressed: () -> Unit,
modifier: Modifier = Modifier,
) {
Column {
Column(modifier = modifier) {
StreamPlayerTopBar(
onBackPressed = onBackPressed
)
Expand Down
Loading
Loading