From 592eddd38415cd4579a6fa051dec57851d9ad89a Mon Sep 17 00:00:00 2001 From: Best Date: Tue, 12 Mar 2019 13:42:21 +0700 Subject: [PATCH 1/3] convert rxjava to live data in presentation layer --- app/build.gradle | 2 + .../enixma/sample/charity/domain/UseCase.kt | 4 +- .../createdonation/CreateDonationUseCase.kt | 8 ++- .../getcharitylist/GetCharityListUseCase.kt | 12 ++-- .../ValidateCreditCardUseCase.kt | 5 +- .../charitylist/CharityListFragment.kt | 3 +- .../charitylist/CharityListPresenter.kt | 55 +++++++++++-------- .../charitylist/di/CharityListModule.kt | 5 +- 8 files changed, 56 insertions(+), 38 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 543aa9e..ef81286 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,6 +76,8 @@ dependencies { // acc implementation "android.arch.lifecycle:extensions:1.1.0" implementation "android.arch.lifecycle:viewmodel:1.1.0" + implementation "android.arch.lifecycle:livedata:1.1.0" + implementation "android.arch.lifecycle:reactivestreams:1.1.0" kapt "android.arch.lifecycle:compiler:1.1.0" // rx diff --git a/app/src/main/java/com/enixma/sample/charity/domain/UseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/UseCase.kt index 6841bb6..10b4dfb 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/UseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/UseCase.kt @@ -1,10 +1,10 @@ package com.enixma.sample.charity.domain -import io.reactivex.Observable +import io.reactivex.Flowable interface UseCase { - fun execute(request: P): Observable + fun execute(request: P): Flowable interface Request diff --git a/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt index 6fd6550..377d04d 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt @@ -2,6 +2,8 @@ package com.enixma.sample.charity.domain.createdonation import com.enixma.sample.charity.data.repository.ICharityRepository import com.enixma.sample.charity.domain.UseCase +import io.reactivex.BackpressureStrategy +import io.reactivex.Flowable import io.reactivex.Observable import javax.inject.Inject @@ -12,8 +14,9 @@ class CreateDonationUseCase @Inject constructor(private val charityRepository: I FAIL } - override fun execute(request: CreateDonationUseCaseRequest): Observable { + override fun execute(request: CreateDonationUseCaseRequest): Flowable { return charityRepository.createDonation(request.donationEntity) + .toFlowable(BackpressureStrategy.LATEST) .flatMap { val result = it.let { val status = if (it.statusCode == 201 && it.isSuccess) STATUS.SUCCESS else STATUS.FAIL @@ -21,8 +24,7 @@ class CreateDonationUseCase @Inject constructor(private val charityRepository: I if (this.status == STATUS.FAIL) this.errorMessage = it.errorMessage } } - Observable.just(result) + Flowable.just(result) } - } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt index 0d605fd..4957bb2 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt @@ -2,25 +2,29 @@ package com.enixma.sample.charity.domain.getcharitylist import com.enixma.sample.charity.data.repository.ICharityRepository import com.enixma.sample.charity.domain.UseCase +import io.reactivex.BackpressureStrategy +import io.reactivex.Flowable import io.reactivex.Observable import javax.inject.Inject class GetCharityListUseCase @Inject constructor(private val charityRepository: ICharityRepository) : UseCase { enum class STATUS { + LOADING, SUCCESS, NO_DATA_FOUND } - override fun execute(request: GetCharityListUseCaseRequest): Observable { - return charityRepository.getCharityList() + override fun execute(request: GetCharityListUseCaseRequest): Flowable { + return Flowable.just(GetCharityListUseCaseResult(STATUS.LOADING, mutableListOf())).concatWith(charityRepository.getCharityList() + .toFlowable(BackpressureStrategy.LATEST) .flatMap { val result = it.let { val status = if (it.total <= 0) STATUS.NO_DATA_FOUND else STATUS.SUCCESS val charityList = it.data GetCharityListUseCaseResult(status, charityList) } - Observable.just(result) - } + Flowable.just(result) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/domain/validatecreditcard/ValidateCreditCardUseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/validatecreditcard/ValidateCreditCardUseCase.kt index e3492d0..6cbe9d3 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/validatecreditcard/ValidateCreditCardUseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/validatecreditcard/ValidateCreditCardUseCase.kt @@ -2,6 +2,7 @@ package com.enixma.sample.charity.domain.validatecreditcard import co.omise.android.CardNumber import com.enixma.sample.charity.domain.UseCase +import io.reactivex.Flowable import io.reactivex.Observable class ValidateCreditCardUseCase : UseCase { @@ -18,7 +19,7 @@ class ValidateCreditCardUseCase : UseCase { + override fun execute(request: ValidateCreditCardUseCaseRequest): Flowable { val errorList = ArrayList() validateCard(request.cardNumber, errorList) @@ -27,7 +28,7 @@ class ValidateCreditCardUseCase : UseCase = MutableLiveData() + private var resultObserver: Observer + + init { + resultObserver = Observer { result -> + processGetCharityListResult(result) + } + } override fun getCharityList() { - if (isLoading) { + if (result.value?.status == GetCharityListUseCase.STATUS.LOADING) { return } - isLoading = true - getCharityListDisposable = getCharityListUseCase.execute(GetCharityListUseCaseRequest()) - .doOnNext { result -> processGetCharityListResult(result) } - .subscribe() - } + result = LiveDataReactiveStreams + .fromPublisher(getCharityListUseCase.execute(GetCharityListUseCaseRequest())) + + result.observe(lifecycleOwner, resultObserver) - private fun processGetCharityListResult(result: GetCharityListUseCaseResult) { - isLoading = false - if (result.status == GetCharityListUseCase.STATUS.SUCCESS) { - view.populateList(result.charityList) - } else { - view.displayNoData() - } } - @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) - fun onPresenterDestroy() { - getCharityListDisposable?.dispose() + private fun processGetCharityListResult(result: GetCharityListUseCaseResult?) { + result?.let { + when (result.status) { + GetCharityListUseCase.STATUS.LOADING -> { + // do nothing + } + GetCharityListUseCase.STATUS.SUCCESS -> { + view.populateList(result.charityList) + } + else -> { + view.displayNoData() + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/di/CharityListModule.kt b/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/di/CharityListModule.kt index 370ccb7..6837a66 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/di/CharityListModule.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/di/CharityListModule.kt @@ -1,5 +1,6 @@ package com.enixma.sample.charity.presentation.charitylist.di +import android.arch.lifecycle.LifecycleOwner import com.enixma.sample.charity.domain.getcharitylist.GetCharityListUseCase import com.enixma.sample.charity.presentation.charitylist.CharityListContract import com.enixma.sample.charity.presentation.charitylist.CharityListPresenter @@ -8,10 +9,10 @@ import dagger.Provides import javax.inject.Inject @Module -class CharityListModule(private val view: CharityListContract.View) { +class CharityListModule(private val view: CharityListContract.View, private val lifecycleOwner: LifecycleOwner) { @Provides @Inject fun provideCharityListPresenter(getCharityListUseCase: GetCharityListUseCase): CharityListContract.Action { - return CharityListPresenter(view, getCharityListUseCase) + return CharityListPresenter(view, lifecycleOwner, getCharityListUseCase) } } From 7d519e09a8abcdab49a2fb89fcab1c27add4cc4d Mon Sep 17 00:00:00 2001 From: Best Date: Tue, 12 Mar 2019 14:19:53 +0700 Subject: [PATCH 2/3] convert RxJava to LiveData in Donation class --- .../createdonation/CreateDonationUseCase.kt | 25 ++++----- .../getcharitylist/GetCharityListUseCase.kt | 22 ++++---- .../charitylist/CharityListPresenter.kt | 9 ++-- .../presentation/donation/DonationFragment.kt | 13 +++-- .../donation/DonationPresenter.kt | 54 +++++++++++-------- .../donation/di/DonationModule.kt | 7 ++- 6 files changed, 73 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt index 377d04d..a3ecc74 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/createdonation/CreateDonationUseCase.kt @@ -4,27 +4,28 @@ import com.enixma.sample.charity.data.repository.ICharityRepository import com.enixma.sample.charity.domain.UseCase import io.reactivex.BackpressureStrategy import io.reactivex.Flowable -import io.reactivex.Observable import javax.inject.Inject class CreateDonationUseCase @Inject constructor(private val charityRepository: ICharityRepository) : UseCase { enum class STATUS { + LOADING, SUCCESS, FAIL } override fun execute(request: CreateDonationUseCaseRequest): Flowable { - return charityRepository.createDonation(request.donationEntity) - .toFlowable(BackpressureStrategy.LATEST) - .flatMap { - val result = it.let { - val status = if (it.statusCode == 201 && it.isSuccess) STATUS.SUCCESS else STATUS.FAIL - CreateDonationUseCaseResult(status).apply { - if (this.status == STATUS.FAIL) this.errorMessage = it.errorMessage - } - } - Flowable.just(result) - } + return Flowable.just(CreateDonationUseCaseResult(STATUS.LOADING)).concatWith( + charityRepository.createDonation(request.donationEntity) + .toFlowable(BackpressureStrategy.LATEST) + .flatMap { + val result = it.let { + val status = if (it.statusCode == 201 && it.isSuccess) STATUS.SUCCESS else STATUS.FAIL + CreateDonationUseCaseResult(status).apply { + if (this.status == STATUS.FAIL) this.errorMessage = it.errorMessage + } + } + Flowable.just(result) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt b/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt index 4957bb2..fb11159 100644 --- a/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt +++ b/app/src/main/java/com/enixma/sample/charity/domain/getcharitylist/GetCharityListUseCase.kt @@ -4,7 +4,6 @@ import com.enixma.sample.charity.data.repository.ICharityRepository import com.enixma.sample.charity.domain.UseCase import io.reactivex.BackpressureStrategy import io.reactivex.Flowable -import io.reactivex.Observable import javax.inject.Inject class GetCharityListUseCase @Inject constructor(private val charityRepository: ICharityRepository) : UseCase { @@ -16,15 +15,16 @@ class GetCharityListUseCase @Inject constructor(private val charityRepository: I } override fun execute(request: GetCharityListUseCaseRequest): Flowable { - return Flowable.just(GetCharityListUseCaseResult(STATUS.LOADING, mutableListOf())).concatWith(charityRepository.getCharityList() - .toFlowable(BackpressureStrategy.LATEST) - .flatMap { - val result = it.let { - val status = if (it.total <= 0) STATUS.NO_DATA_FOUND else STATUS.SUCCESS - val charityList = it.data - GetCharityListUseCaseResult(status, charityList) - } - Flowable.just(result) - }) + return Flowable.just(GetCharityListUseCaseResult(STATUS.LOADING, mutableListOf())).concatWith( + charityRepository.getCharityList() + .toFlowable(BackpressureStrategy.LATEST) + .flatMap { + val result = it.let { + val status = if (it.total <= 0) STATUS.NO_DATA_FOUND else STATUS.SUCCESS + val charityList = it.data + GetCharityListUseCaseResult(status, charityList) + } + Flowable.just(result) + }) } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/CharityListPresenter.kt b/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/CharityListPresenter.kt index 19e4be3..df32ad7 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/CharityListPresenter.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/charitylist/CharityListPresenter.kt @@ -26,21 +26,18 @@ class CharityListPresenter(private val view: CharityListContract.View, return } - result = LiveDataReactiveStreams - .fromPublisher(getCharityListUseCase.execute(GetCharityListUseCaseRequest())) - + result = LiveDataReactiveStreams.fromPublisher(getCharityListUseCase.execute(GetCharityListUseCaseRequest())) result.observe(lifecycleOwner, resultObserver) - } private fun processGetCharityListResult(result: GetCharityListUseCaseResult?) { result?.let { - when (result.status) { + when (it.status) { GetCharityListUseCase.STATUS.LOADING -> { // do nothing } GetCharityListUseCase.STATUS.SUCCESS -> { - view.populateList(result.charityList) + view.populateList(it.charityList) } else -> { view.displayNoData() diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt index d821f7c..39506d8 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt @@ -13,6 +13,7 @@ import android.view.View import android.view.ViewGroup import co.omise.android.models.Token import com.bumptech.glide.Glide +import com.enixma.sample.charity.BuildConfig import com.enixma.sample.charity.R import com.enixma.sample.charity.data.di.ServiceFactoryModule import com.enixma.sample.charity.data.di.CharityDataModule @@ -21,6 +22,7 @@ import com.enixma.sample.charity.presentation.creditcard.AddCreditCardActivity import com.enixma.sample.charity.presentation.donation.di.DaggerDonationComponent import com.enixma.sample.charity.presentation.donation.di.DonationModule import com.enixma.sample.charity.presentation.success.SuccessActivity +import org.json.JSONObject import javax.inject.Inject @@ -61,7 +63,7 @@ class DonationFragment : Fragment(), DonationContract.View { DaggerDonationComponent.builder() .serviceFactoryModule(ServiceFactoryModule(activity)) .charityDataModule(CharityDataModule(activity)) - .donationModule(DonationModule(this, viewModel)) + .donationModule(DonationModule(this, this, viewModel)) .build().inject(this) } @@ -74,7 +76,6 @@ class DonationFragment : Fragment(), DonationContract.View { override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - lifecycle.addObserver(presenter as DonationPresenter) initProgressDialog() initDonationAmountSelection() populateImage() @@ -82,7 +83,13 @@ class DonationFragment : Fragment(), DonationContract.View { displayAmountSelectionDialog() } binding.buttonDonate.setOnClickListener { - displayConfirmDialog() + if(!BuildConfig.DEBUG){ + displayConfirmDialog() + } else { + // skip add credit card + presenter.donate(Token(JSONObject())) + progressDialog.show() + } } } diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt index c050574..adb1552 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt @@ -1,8 +1,7 @@ package com.enixma.sample.charity.presentation.donation -import android.arch.lifecycle.Lifecycle -import android.arch.lifecycle.LifecycleObserver -import android.arch.lifecycle.OnLifecycleEvent +import android.arch.lifecycle.* +import android.util.Log import co.omise.android.models.Token import com.enixma.sample.charity.data.entity.DonationEntity import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCase @@ -11,40 +10,49 @@ import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCaseResu import io.reactivex.disposables.Disposable class DonationPresenter(private val view: DonationContract.View, + private val lifecycleOwner: LifecycleOwner, private val viewModel: DonationViewModel, - private val createDonationUseCase: CreateDonationUseCase) : DonationContract.Action, LifecycleObserver { + private val createDonationUseCase: CreateDonationUseCase) : DonationContract.Action { - private var createDonationDisposable: Disposable? = null - private var isLoading: Boolean = false + private var result: LiveData = MutableLiveData() + private var resultObserver: Observer + + init { + resultObserver = Observer { result -> + processDonationResult(result) + } + } override fun donate(token: Token) { - if (isLoading) { + + if(result.value?.status == CreateDonationUseCase.STATUS.LOADING){ return } - isLoading = true val request = DonationEntity().let { it.name = viewModel.name - it.token = token.id + it.token = token.id ?: "" it.amount = Integer.parseInt(viewModel.amount.get()) CreateDonationUseCaseRequest(it) } - createDonationDisposable = createDonationUseCase.execute(request) - .doOnNext { result -> processDonationResult(result) } - .subscribe() - } - private fun processDonationResult(result: CreateDonationUseCaseResult) { - isLoading = false - if (result.status == CreateDonationUseCase.STATUS.SUCCESS) { - view.goToSuccessScreen() - } else { - view.displayError(result.errorMessage) - } + result = LiveDataReactiveStreams.fromPublisher(createDonationUseCase.execute(request)) + result.observe(lifecycleOwner, resultObserver) } - @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY) - fun onPresenterDestroy() { - createDonationDisposable?.dispose() + private fun processDonationResult(result: CreateDonationUseCaseResult?) { + result?.let { + when(it.status) { + CreateDonationUseCase.STATUS.LOADING -> { + // do nothing + } + CreateDonationUseCase.STATUS.SUCCESS -> { + view.goToSuccessScreen() + } + else -> { + view.displayError(it.errorMessage) + } + } + } } } \ No newline at end of file diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/di/DonationModule.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/di/DonationModule.kt index 3121e7e..6c90098 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/di/DonationModule.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/di/DonationModule.kt @@ -1,5 +1,6 @@ package com.enixma.sample.charity.presentation.donation.di +import android.arch.lifecycle.LifecycleOwner import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCase import com.enixma.sample.charity.presentation.donation.DonationContract import com.enixma.sample.charity.presentation.donation.DonationPresenter @@ -9,11 +10,13 @@ import dagger.Provides import javax.inject.Inject @Module -class DonationModule(private val view: DonationContract.View, private val viewModel: DonationViewModel) { +class DonationModule(private val view: DonationContract.View, + private val lifecycleOwner: LifecycleOwner, + private val viewModel: DonationViewModel) { @Provides @Inject fun provideDonationPresenter(createDonationUseCase: CreateDonationUseCase): DonationContract.Action { - return DonationPresenter(view, viewModel, createDonationUseCase) + return DonationPresenter(view, lifecycleOwner, viewModel, createDonationUseCase) } } From 9d0377e129743025e5fa97cc9e00d0c1247564ca Mon Sep 17 00:00:00 2001 From: Best Date: Tue, 12 Mar 2019 15:37:29 +0700 Subject: [PATCH 3/3] move display loading dialog responsibility to presenter --- .../charity/presentation/donation/DonationContract.kt | 3 ++- .../charity/presentation/donation/DonationFragment.kt | 10 ++++++++-- .../charity/presentation/donation/DonationPresenter.kt | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationContract.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationContract.kt index d38ff86..1525af0 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationContract.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationContract.kt @@ -5,7 +5,8 @@ import co.omise.android.models.Token interface DonationContract { interface View { fun displayError(errorMessage: String) - + fun displayLoading() + fun dismissLoading() fun goToSuccessScreen() } diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt index 39506d8..5818d72 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationFragment.kt @@ -93,6 +93,14 @@ class DonationFragment : Fragment(), DonationContract.View { } } + override fun displayLoading() { + progressDialog.show() + } + + override fun dismissLoading() { + progressDialog.dismiss() + } + private fun initProgressDialog() { progressDialog = ProgressDialog(activity) progressDialog.setMessage(getString(R.string.alert_message_submit_donation)) @@ -148,12 +156,10 @@ class DonationFragment : Fragment(), DonationContract.View { } override fun goToSuccessScreen() { - progressDialog.dismiss() startActivityForResult(SuccessActivity.getIntent(activity, viewModel.name, viewModel.amount.get()), REQUEST_FINAL) } override fun displayError(errorMessage: String) { - progressDialog.dismiss() alertDialog = AlertDialog.Builder(activity).apply { var message = if (errorMessage.isNullOrBlank()) getString(R.string.alert_message_communication_error) else errorMessage this.setTitle(R.string.alert_title_error) diff --git a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt index adb1552..6d6da56 100644 --- a/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt +++ b/app/src/main/java/com/enixma/sample/charity/presentation/donation/DonationPresenter.kt @@ -1,13 +1,11 @@ package com.enixma.sample.charity.presentation.donation import android.arch.lifecycle.* -import android.util.Log import co.omise.android.models.Token import com.enixma.sample.charity.data.entity.DonationEntity import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCase import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCaseRequest import com.enixma.sample.charity.domain.createdonation.CreateDonationUseCaseResult -import io.reactivex.disposables.Disposable class DonationPresenter(private val view: DonationContract.View, private val lifecycleOwner: LifecycleOwner, @@ -44,12 +42,14 @@ class DonationPresenter(private val view: DonationContract.View, result?.let { when(it.status) { CreateDonationUseCase.STATUS.LOADING -> { - // do nothing + view.displayLoading() } CreateDonationUseCase.STATUS.SUCCESS -> { + view.dismissLoading() view.goToSuccessScreen() } else -> { + view.dismissLoading() view.displayError(it.errorMessage) } }