diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/DataRepository.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/DataRepository.kt index 37194ad..d7e3b0b 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/DataRepository.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/DataRepository.kt @@ -8,6 +8,7 @@ package com.example.fluentfuncleanarchitecture.data import com.example.fluentfuncleanarchitecture.domain.MainEntity import com.example.fluentfuncleanarchitecture.domain.Repository import com.example.fluentfuncleanarchitecture.domain.RepositoryType +import com.example.fluentfuncleanarchitecture.domain.RepositoryWithParamsType import com.example.fluentfuncleanarchitecture.domain.Result import com.example.fluentfuncleanarchitecture.domain.Success import kotlinx.coroutines.delay @@ -45,4 +46,8 @@ class DataRepository @Inject constructor() : Repository { Success(MainEntity(3, "Reusable Result")) } + override val setParams: RepositoryWithParamsType = { + Success(MainEntity(3, it)) + } + } \ No newline at end of file diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/ObjectRepository.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/ObjectRepository.kt index 3a296e8..a632874 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/ObjectRepository.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/data/ObjectRepository.kt @@ -3,6 +3,7 @@ package com.example.fluentfuncleanarchitecture.data import com.example.fluentfuncleanarchitecture.domain.MainEntity import com.example.fluentfuncleanarchitecture.domain.Repository import com.example.fluentfuncleanarchitecture.domain.RepositoryType +import com.example.fluentfuncleanarchitecture.domain.RepositoryWithParamsType import com.example.fluentfuncleanarchitecture.domain.Result import com.example.fluentfuncleanarchitecture.domain.Success import kotlinx.coroutines.delay @@ -39,4 +40,8 @@ object ObjectRepository: Repository { Success(MainEntity(3, "Reusable Result")) } + override val setParams: RepositoryWithParamsType = { + Success(MainEntity(3, it)) + } + } \ No newline at end of file diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/DomainTypes.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/DomainTypes.kt index 718a40f..bd4b3dd 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/DomainTypes.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/DomainTypes.kt @@ -20,6 +20,9 @@ import kotlinx.coroutines.flow.Flow */ typealias RepositoryType = suspend () -> GenericResult +typealias RepositoryWithParamsType = suspend (String) -> GenericResult + + /** * A generic type for handling UseCase. * @@ -52,3 +55,7 @@ typealias ComposeUseCase = suspend GenericResu typealias FlowUseCaseType = suspend GenericRepository.() -> Flow + +typealias UseCaseWithParamsType = suspend GenericRepository.(String) -> GenericResult + + diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/Repository.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/Repository.kt index ed02fdc..a628390 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/Repository.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/Repository.kt @@ -19,4 +19,6 @@ interface Repository { val getSampleResult: RepositoryType + val setParams: RepositoryWithParamsType + } \ No newline at end of file diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/UseCase.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/UseCase.kt index 261d4d2..bdd341c 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/UseCase.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/domain/UseCase.kt @@ -41,6 +41,10 @@ val sampleResult: UseCaseType = { getThirdResult() } +val resultWithParams: UseCaseWithParamsType = { + setParams(it) +} + private val firstResult: UseCaseType = { getResult() diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainActivity.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainActivity.kt index 2cd9252..74b728b 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainActivity.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainActivity.kt @@ -27,6 +27,7 @@ class MainActivity : AppCompatActivity() { } private fun MainViewModel.load() { + accept("accept any params") loadResult() loadFlowResult() } diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainViewModel.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainViewModel.kt index 69a1f1c..bc930da 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainViewModel.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/MainViewModel.kt @@ -5,6 +5,7 @@ package com.example.fluentfuncleanarchitecture.presentation +import android.util.Log import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.example.fluentfuncleanarchitecture.domain.Error @@ -12,6 +13,7 @@ import com.example.fluentfuncleanarchitecture.domain.Result import com.example.fluentfuncleanarchitecture.domain.Success import com.example.fluentfuncleanarchitecture.domain.allResultWhenComposed import com.example.fluentfuncleanarchitecture.domain.resultFlow +import com.example.fluentfuncleanarchitecture.domain.resultWithParams import com.example.fluentfuncleanarchitecture.domain.sampleResult import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow @@ -27,6 +29,14 @@ class MainViewModel @Inject constructor(myUseCase: UseCase) : ViewModel() { private val _flow: MutableStateFlow = MutableStateFlow(EmptyState) val flow: StateFlow = _flow.asStateFlow() + val accept: (String) -> Unit = { input -> + viewModelScope.launch { + myUseCase.accepts(resultWithParams, input).also { + Log.d("AcceptWithParams", "accepts: $it") + } + } + } + val loadResult = { viewModelScope.launch { _flow.update { diff --git a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/UseCaseExecutor.kt b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/UseCaseExecutor.kt index dbd6a6d..392732a 100644 --- a/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/UseCaseExecutor.kt +++ b/FluentFunCleanArchitecture/app/src/main/java/com/example/fluentfuncleanarchitecture/presentation/UseCaseExecutor.kt @@ -4,6 +4,7 @@ import com.example.fluentfuncleanarchitecture.domain.FlowUseCaseType import com.example.fluentfuncleanarchitecture.domain.Repository import com.example.fluentfuncleanarchitecture.domain.Result import com.example.fluentfuncleanarchitecture.domain.UseCaseType +import com.example.fluentfuncleanarchitecture.domain.UseCaseWithParamsType import kotlinx.coroutines.flow.Flow import javax.inject.Inject @@ -15,4 +16,8 @@ class UseCase @Inject constructor(private val repository: Repository) { suspend infix fun prepares(useCase: FlowUseCaseType): Flow { return repository.useCase() } + + suspend fun accepts(useCase: UseCaseWithParamsType, params: String): Result { + return repository.useCase(params) + } } \ No newline at end of file diff --git a/FluentFunCleanArchitecture/app/src/main/res/font/virgil.ttf b/FluentFunCleanArchitecture/app/src/main/res/font/virgil.ttf new file mode 100644 index 0000000..602083a Binary files /dev/null and b/FluentFunCleanArchitecture/app/src/main/res/font/virgil.ttf differ diff --git a/FluentFunCleanArchitecture/app/src/main/res/layout/activity_main.xml b/FluentFunCleanArchitecture/app/src/main/res/layout/activity_main.xml index 0649109..a71edab 100644 --- a/FluentFunCleanArchitecture/app/src/main/res/layout/activity_main.xml +++ b/FluentFunCleanArchitecture/app/src/main/res/layout/activity_main.xml @@ -15,6 +15,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" + android:textSize="50sp" + app:fontFamily="@font/virgil" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"