From f0cbb35ac80dc9fab35758f198f180948b681a81 Mon Sep 17 00:00:00 2001 From: Michael Manahan Date: Tue, 13 Sep 2022 13:26:22 -0400 Subject: [PATCH 01/11] WIP RIBs Kotlin Demo --- .idea/compiler.xml | 2 +- .idea/deploymentTargetDropDown.xml | 17 +++++++++ .idea/gradle.xml | 1 + .idea/misc.xml | 15 +++++++- .idea/vcs.xml | 6 +++ app/build.gradle | 5 ++- .../repository/CatalogueRepositoryImpl.kt | 14 +++---- .../repository/CategoryRepositoryImpl.kt | 7 ++-- .../repository/DetailsRepositoryImpl.kt | 7 ++-- .../ribs_demo_android/ribs/MainActivity.kt | 37 ++++++++++++++++++- .../ribs/root/category/CategoryBuilder.kt | 8 ++++ .../ribs/root/category/CategoryInteractor.kt | 15 ++++---- .../root/category/adapter/CategoryAdapter.kt | 4 +- .../ribs/root/home/HomeBuilder.kt | 7 ++++ .../root/home/catalogue/CatalogueBuilder.kt | 7 ++++ .../home/catalogue/CatalogueInteractor.kt | 17 +++++---- .../ribs/root/home/catalogue/CatalogueView.kt | 4 +- .../catalogue/details/DetailsInteractor.kt | 22 +++++------ .../ribs_demo_android/util/Resource.kt | 3 +- app/src/main/res/layout/catalogue_rib.xml | 3 +- app/src/main/res/layout/category_rib.xml | 1 + app/src/main/res/layout/item_catalogue.xml | 4 ++ app/src/main/res/layout/item_category.xml | 1 + 23 files changed, 153 insertions(+), 54 deletions(-) create mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 .idea/vcs.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 61a9130..fb7f4a8 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..27dedce --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index fd81426..e9969a1 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -1,5 +1,6 @@ + diff --git a/.idea/misc.xml b/.idea/misc.xml index e6c954e..7e5d394 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -13,7 +13,7 @@ - + diff --git a/app/build.gradle b/app/build.gradle index a9dbce1..82ff674 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -61,6 +61,8 @@ dependencies { def retrofit_version = "2.9.0" implementation "com.squareup.retrofit2:retrofit:$retrofit_version" implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" + implementation "com.squareup.retrofit2:adapter-rxjava3:$retrofit_version" + def glide_version = "4.11.0" implementation "com.github.bumptech.glide:glide:$glide_version" @@ -80,4 +82,5 @@ dependencies { implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1' + implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0' } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt b/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt index 8e9add5..27782b5 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt @@ -2,7 +2,7 @@ package com.example.ribs_demo_android.network import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.models.CatalogueResponse -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path import retrofit2.http.Query diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt index bc81c52..068c383 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt @@ -6,11 +6,11 @@ import com.example.ribs_demo_android.network.CatalogueService import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueScheduler import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable -import io.reactivex.Observer -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.Consumer -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.core.Observer +import io.reactivex.rxjava3.functions.Consumer +import io.reactivex.rxjava3.schedulers.Schedulers class CatalogueRepositoryImpl( private val catalogueService: CatalogueService, @@ -18,46 +18,24 @@ class CatalogueRepositoryImpl( ) : CatalogueRepository { override fun getAll(page: Int): Observable> { - return object : Observable>() { - override fun subscribeActual(observer: Observer>?) { - observer?.onNext(Resource.Loading()) - catalogueService.getAll(page) - .subscribeOn(scheduler.io) - .observeOn(scheduler.main) - .subscribe( - object : Consumer { - override fun accept(t: CatalogueResponse?) { - t?.let { - observer?.onNext(Resource.Success(it)) - } - } - } - ) { - observer?.onNext(Resource.Error(it.message.toString())) - } - } - } + return createResult(catalogueService.getAll(page)) } override fun getDetail(name: String): Observable> { - return object : Observable>() { - override fun subscribeActual(observer: Observer>?) { - observer?.onNext(Resource.Loading()) - catalogueService.getDetail(name) - .subscribeOn(scheduler.io) - .observeOn(scheduler.main) - .subscribe( - object : Consumer { - override fun accept(t: CatalogueDetail?) { - t?.let { - observer?.onNext(Resource.Success(it)) - } - } - } - ) { - observer?.onNext(Resource.Error(it.message.toString())) - } - } - } + return createResult(catalogueService.getDetail(name)) + } +} + +fun createResult(apiObserver: Observable): Observable> { + return Observable.create { emitter -> + emitter.onNext(Resource.Loading()) + + apiObserver + .subscribeOn(Schedulers.io()) + .subscribe ({ + if (!emitter.isDisposed) { + emitter.onNext(Resource.Success(it)) + } + }){emitter.onNext(Resource.Error(it.message.toString()))} } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt index 9a41f95..88ed33c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt @@ -21,6 +21,7 @@ import dagger.Provides import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory import retrofit2.converter.gson.GsonConverterFactory import java.lang.annotation.Retention import java.lang.annotation.RetentionPolicy.CLASS @@ -105,8 +106,14 @@ class HomeBuilder(dependency: ParentComponent) : @Provides @JvmStatic internal fun provideService( - retrofit: Retrofit + gsonConverterFactory: GsonConverterFactory ): CatalogueService { + val retrofit = Retrofit.Builder() + .baseUrl(Constants.BASE_URL) + .addConverterFactory(gsonConverterFactory) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .client(clientHome) + .build() return retrofit.create(CatalogueService::class.java) } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt index d653ec7..2f36b48 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt @@ -6,7 +6,6 @@ import com.example.ribs_demo_android.R import com.example.ribs_demo_android.network.CatalogueService import com.example.ribs_demo_android.network.DetailsService import com.example.ribs_demo_android.network.repository.DetailsRepositoryImpl -import com.example.ribs_demo_android.ribs.root.home.HomeBuilder import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsBuilder import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsInteractor import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsScheduler @@ -46,6 +45,7 @@ class CatalogueBuilder(dependency: ParentComponent) : */ fun build(parentViewGroup: ViewGroup): CatalogueRouter { val view = createView(parentViewGroup) + view.initViewIds() val interactor = CatalogueInteractor() val component = DaggerCatalogueBuilder_Component.builder() .parentComponent(dependency) diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt index 7c19002..f52f322 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt @@ -1,22 +1,19 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue +import android.util.Log import com.example.ribs_demo_android.models.Catalogue import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.network.CatalogueService import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsInteractor import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository import com.example.ribs_demo_android.util.Resource -import com.uber.autodispose.AutoDispose import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor -import io.reactivex.Observable -import io.reactivex.Scheduler -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.Consumer -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.CompositeDisposable +import io.reactivex.rxjava3.functions.Consumer import javax.inject.Inject -import javax.inject.Named /** * Coordinates Business Logic for [CatalogueScope]. @@ -25,7 +22,9 @@ import javax.inject.Named */ @RibInteractor class CatalogueInteractor : Interactor() { - + companion object { + const val TAG = "CatalogueInteractor" + } @Inject lateinit var presenter: CataloguePresenter @@ -44,54 +43,47 @@ class CatalogueInteractor : Interactor> { - override fun accept(t: Resource?) { - t?.let { state -> - when(state) { - is Resource.Loading -> { - presenter.updateProgressbarState(true) - } - is Resource.Success -> { - presenter.updateProgressbarState(false) - presenter.setupUI(state.data!!.brawlers) - .subscribeOn(catalogueScheduler.io) - .observeOn(catalogueScheduler.main) - .subscribe( - object : Consumer { - override fun accept(t: String?) { - t?.let { - router.attachDetails() - dataStream.setData(it) - } - } - } - ) { - it.printStackTrace() - } - } - is Resource.Error -> { - presenter.updateProgressbarState(false) - } - else -> Unit - } - } - } - } - ) { - it.printStackTrace() + .doOnSubscribe { disposables.add(it) } + .subscribe({result -> handleResult(result)}) { + Log.e(TAG, it.toString()) } handleCategoryToggle() + handleCategoryTaps() + } + + private fun handleCategoryTaps() { + presenter.categoryTaps() + .doOnSubscribe { disposables.add(it) } + .observeOn(catalogueScheduler.main) + .subscribe({ category -> + router.attachDetails() + dataStream.setData(category) + }) {Log.e(TAG, it.toString())} + } + + private fun handleResult(state: Resource) { + when (state) { + is Resource.Loading -> { + presenter.updateProgressbarState(true) + } + is Resource.Success -> { + presenter.updateProgressbarState(false) + presenter.setupUI(state.data!!.brawlers) + } + is Resource.Error -> { + presenter.updateProgressbarState(false) + } + } } fun getInitialData(page: Int): Observable> { @@ -102,29 +94,36 @@ class CatalogueInteractor : Interactor { - override fun accept(t: Boolean?) { - t?.let { - catalogueListener.onClick() - } + .doOnSubscribe { disposables.add(it) } + .subscribe { t -> + Log.e( + "CategoryInteractor", + "handleCategoryToggle:Subscribe block${Thread.currentThread().name}" + ) + t.let { + catalogueListener.onClick() } - }) + } } override fun willResignActive() { + // TODO: Perform any required clean up here, or delete this method entirely if not needed. super.willResignActive() - // TODO: Perform any required clean up here, or delete this method entirely if not needed. + if (!disposables.isDisposed){ + disposables.dispose() + disposables = CompositeDisposable() + } } /** * Presenter interface implemented by this RIB's view. */ interface CataloguePresenter { - fun setupUI(items: List): Observable + fun setupUI(items: List) fun updateProgressbarState(isVisible: Boolean) fun onCategoryToggle(): Observable + fun categoryTaps(): Observable } interface CatalogueListener { diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt index c789320..fa8fee9 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt @@ -1,8 +1,9 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue -import io.reactivex.Scheduler -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Scheduler +import io.reactivex.rxjava3.schedulers.Schedulers + interface CatalogueScheduler { val io: Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt index 90e8bdf..71672c3 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt @@ -7,13 +7,13 @@ import android.widget.ProgressBar import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.ribs_demo_android.R import com.example.ribs_demo_android.ribs.root.home.catalogue.adapter.CatalogueAdapter.CatalogueAdapter import com.example.ribs_demo_android.models.Catalogue -import io.reactivex.Observable -import io.reactivex.Observer +import com.jakewharton.rxbinding4.view.clicks +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.PublishSubject /** * Top level view for {@link CatalogueBuilder.CatalogueScope}. @@ -23,37 +23,38 @@ class CatalogueView @JvmOverloads constructor( attrs: AttributeSet? = null, defStyle: Int = 0 ) : ConstraintLayout(context, attrs, defStyle), CatalogueInteractor.CataloguePresenter { + private lateinit var catalogueRecycler: RecyclerView + private lateinit var progressBar: ProgressBar + private lateinit var tvFilters: TextView - private var adapter: CatalogueAdapter? = null - private var listener: ((String) -> Unit)? = null + private lateinit var adapter: CatalogueAdapter + private val itemTaps = PublishSubject.create() + private val filterTaps = PublishSubject.create() - override fun setupUI(items: List): Observable { - adapter = CatalogueAdapter(items) { name -> - listener?.invoke(name) - } - findViewById(R.id.RecyclerView).adapter = adapter - return object : Observable() { - override fun subscribeActual(observer: Observer?) { - listener = { name -> - observer?.onNext(name) - } - } + fun initViewIds() { + this.catalogueRecycler = findViewById(R.id.RecyclerView) + this.progressBar = findViewById(R.id.progressbar_catalogue) + this.tvFilters = findViewById(R.id.filters) + adapter = CatalogueAdapter { name -> + itemTaps.onNext(name) } + tvFilters.setOnClickListener { filterTaps.onNext(true) } + catalogueRecycler.adapter = adapter + } + + override fun setupUI(items: List) { + adapter.setItems(items) + } + + override fun categoryTaps(): Observable { + return itemTaps } override fun updateProgressbarState(isVisible: Boolean) { - findViewById(R.id.progressbar_catalogue).isVisible = isVisible + progressBar.isVisible = isVisible } override fun onCategoryToggle(): Observable { - return object : Observable() { - override fun subscribeActual(observer: Observer?) { - fun printCurrentThread(tag: String) = println("$tag: ${Thread.currentThread().name.substringBefore("-")}") - printCurrentThread("main thread name") - findViewById(R.id.filters).setOnClickListener { - observer?.onNext(true) - } - } - } + return filterTaps } } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt index d6eeb5b..a44d8f1 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt @@ -10,9 +10,13 @@ import com.example.ribs_demo_android.databinding.ItemCatalogueBinding import com.example.ribs_demo_android.models.Catalogue class CatalogueAdapter( - private val items: List, private val onClick: (String) -> Unit ) : RecyclerView.Adapter() { + private var items: List = emptyList() + fun setItems(items: List){ + this.items = items + notifyDataSetChanged() + } inner class ViewHolder(private val binding: ItemCatalogueBinding) : RecyclerView.ViewHolder(binding.root) { diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt index fbec933..79f0753 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt @@ -3,7 +3,7 @@ package com.example.ribs_demo_android.ribs.root.repository import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable interface CatalogueRepository { From 82bc13434161b975190c550b595ed3b1bad77c0e Mon Sep 17 00:00:00 2001 From: Abhishek Date: Wed, 14 Sep 2022 19:32:38 +0200 Subject: [PATCH 03/11] updated category view --- .../ribs_demo_android/network/ApiCallUtils.kt | 19 +++++ .../network/CategoryService.kt | 2 +- .../repository/CatalogueRepositoryImpl.kt | 14 +-- .../repository/CategoryRepositoryImpl.kt | 27 +----- .../ribs/root/category/CategoryBuilder.kt | 4 +- .../ribs/root/category/CategoryInteractor.kt | 85 +++++++++---------- .../ribs/root/category/CategoryScheduler.kt | 6 +- .../ribs/root/category/CategoryView.kt | 57 ++++++------- .../root/category/adapter/CategoryAdapter.kt | 7 +- .../home/catalogue/CatalogueInteractor.kt | 10 +-- .../root/repository/CategoryRepository.kt | 3 +- 11 files changed, 107 insertions(+), 127 deletions(-) create mode 100644 app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt diff --git a/app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt b/app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt new file mode 100644 index 0000000..0a43bde --- /dev/null +++ b/app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt @@ -0,0 +1,19 @@ +package com.example.ribs_demo_android.network + +import com.example.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.schedulers.Schedulers + +fun createResult(apiObserver: Observable): Observable> { + return Observable.create { emitter -> + emitter.onNext(Resource.Loading()) + + apiObserver + .subscribeOn(Schedulers.io()) + .subscribe ({ + if (!emitter.isDisposed) { + emitter.onNext(Resource.Success(it)) + } + }){emitter.onNext(Resource.Error(it.message.toString()))} + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt b/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt index af80094..41e0e79 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt @@ -2,7 +2,7 @@ package com.example.ribs_demo_android.network import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.models.CatalogueResponse -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt index 068c383..9a52067 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt @@ -3,6 +3,7 @@ package com.example.ribs_demo_android.network.repository import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.network.CatalogueService +import com.example.ribs_demo_android.network.createResult import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueScheduler import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository import com.example.ribs_demo_android.util.Resource @@ -26,16 +27,3 @@ class CatalogueRepositoryImpl( } } -fun createResult(apiObserver: Observable): Observable> { - return Observable.create { emitter -> - emitter.onNext(Resource.Loading()) - - apiObserver - .subscribeOn(Schedulers.io()) - .subscribe ({ - if (!emitter.isDisposed) { - emitter.onNext(Resource.Success(it)) - } - }){emitter.onNext(Resource.Error(it.message.toString()))} - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt index ca9ed20..c6aded2 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt @@ -2,14 +2,11 @@ package com.example.ribs_demo_android.network.repository import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.network.CategoryService +import com.example.ribs_demo_android.network.createResult import com.example.ribs_demo_android.ribs.root.category.CategoryScheduler import com.example.ribs_demo_android.ribs.root.repository.CategoryRepository import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable -import io.reactivex.Observer -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.Consumer -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.core.Observable class CategoryRepositoryImpl( private val categoryService: CategoryService, @@ -17,24 +14,6 @@ class CategoryRepositoryImpl( ) : CategoryRepository { override fun getByRarity(rarity: String): Observable> { - return object : Observable>() { - override fun subscribeActual(observer: Observer>?) { - observer?.onNext(Resource.Loading()) - categoryService.getByRarity(rarity) - .subscribeOn(categoryScheduler.io) - .observeOn(categoryScheduler.main) - .subscribe( - object : Consumer { - override fun accept(t: CatalogueResponse?) { - t?.let { - observer?.onNext(Resource.Success(it)) - } - } - } - ) { - observer?.onNext(Resource.Error(it.message.toString())) - } - } - } + return createResult(categoryService.getByRarity(rarity)) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt index 29b04e5..3fa657f 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt @@ -24,6 +24,7 @@ import javax.inject.Named import javax.inject.Qualifier import javax.inject.Scope import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory /** * Builder for the {@link CategoryScope}. @@ -42,6 +43,7 @@ class CategoryBuilder(dependency: ParentComponent) : fun build(parentViewGroup: ViewGroup): CategoryRouter { val view = createView(parentViewGroup) + view.initViewIds() val interactor = CategoryInteractor() val component = DaggerCategoryBuilder_Component.builder() .parentComponent(dependency) @@ -89,7 +91,7 @@ class CategoryBuilder(dependency: ParentComponent) : ): Retrofit { return Retrofit.Builder() .baseUrl(Constants.BASE_URL) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .addConverterFactory(gsonConverterFactory) .client(client) .build() diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt index e703174..7b534f2 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt @@ -1,6 +1,6 @@ package com.example.ribs_demo_android.ribs.root.category -import androidx.annotation.VisibleForTesting +import android.util.Log import com.example.ribs_demo_android.models.Catalogue import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.network.CategoryService @@ -10,10 +10,8 @@ import com.example.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.functions.Consumer -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.CompositeDisposable import javax.inject.Inject import javax.inject.Named @@ -24,7 +22,9 @@ import javax.inject.Named */ @RibInteractor class CategoryInteractor : Interactor() { - + companion object { + const val TAG = "CategoryInteractor" + } @Inject lateinit var presenter: CategoryPresenter @@ -43,6 +43,7 @@ class CategoryInteractor : Interactor { - override fun accept(t: Boolean?) { - t?.let { - categoryToggleListener.toggleCategory() - } - } - }) + .doOnSubscribe { disposables.add(it)} + .subscribe({ + Log.e(TAG, "handleToggleSuccess::$it :: Thread:: ${Thread.currentThread().name}") + categoryToggleListener.toggleCategory() + }) { + Log.e(TAG, "handleToggleFailed::$it :: Thread:: ${Thread.currentThread().name}") + } } fun getChip() { presenter.getChip() + .doOnSubscribe { disposables.add(it)} .subscribeOn(categoryScheduler.io) .observeOn(categoryScheduler.main) - .subscribe(object : Consumer { - override fun accept(t: String?) { - t?.let { - getByRarity(it) - } - } - } - ) { - it.printStackTrace() + .subscribe({getByRarity(it)}){ + Log.e(TAG, "getChip$it") } } fun getByRarity(rarity: String) { categoryRepository.getByRarity(rarity) .subscribeOn(categoryScheduler.io) + .doOnSubscribe { disposables.add(it)} .observeOn(categoryScheduler.main) - .subscribe( - object : Consumer> { - override fun accept(t: Resource?) { - t?.let { - when (it) { - is Resource.Loading -> { - presenter.updateProgressbarState(true) - } - is Resource.Success -> { - presenter.setup(it.data?.brawlers!!) - presenter.updateProgressbarState(false) - } - is Resource.Error -> { - presenter.updateProgressbarState(false) - } - } - } - } - } - ) { - it.printStackTrace() + .subscribe({handleResult(it)}) { + Log.e(TAG, "getByRarity::$it") } } + private fun handleResult(result: Resource) { + when (result) { + is Resource.Loading -> { + presenter.updateProgressbarState(true) + } + is Resource.Success -> { + presenter.setup(result.data?.brawlers!!) + presenter.updateProgressbarState(false) + } + is Resource.Error -> { + presenter.updateProgressbarState(false) + } + } + } + override fun willResignActive() { super.willResignActive() - + if (!disposables.isDisposed) { + disposables.dispose() + disposables = CompositeDisposable() + } // TODO: Perform any required clean up here, or delete this method entirely if not needed. } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt index e3dd17a..b70e60f 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt @@ -1,8 +1,8 @@ package com.example.ribs_demo_android.ribs.root.category -import io.reactivex.Scheduler -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Scheduler +import io.reactivex.rxjava3.schedulers.Schedulers interface CategoryScheduler { val io: Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt index 9c72f77..419028c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt @@ -2,12 +2,9 @@ package com.example.ribs_demo_android.ribs.root.category import android.content.Context import android.util.AttributeSet -import android.view.View -import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.RelativeLayout import android.widget.TextView -import androidx.core.view.forEach import androidx.core.view.forEachIndexed import androidx.core.view.get import androidx.core.view.isVisible @@ -17,8 +14,9 @@ import com.example.ribs_demo_android.models.Catalogue import com.example.ribs_demo_android.ribs.root.category.adapter.CategoryAdapter import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup -import io.reactivex.Observable -import io.reactivex.Observer +import com.jakewharton.rxbinding4.view.clicks +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.PublishSubject /** * Top level view for {@link CategoryBuilder.CategoryScope}. @@ -28,41 +26,42 @@ class CategoryView @JvmOverloads constructor( attrs: AttributeSet? = null, defStyle: Int = 0 ) : RelativeLayout(context, attrs, defStyle), CategoryInteractor.CategoryPresenter { + private lateinit var categoryRecyclerView: RecyclerView + private lateinit var tvHome: TextView + private lateinit var chipGroup: ChipGroup + private lateinit var progressBar: ProgressBar + private val chipTaps = PublishSubject.create() - private var adapter: CategoryAdapter? = null + private val adapter: CategoryAdapter = CategoryAdapter {} - override fun setup(items: List) { - adapter = CategoryAdapter(items) { + fun initViewIds() { + this.categoryRecyclerView = findViewById(R.id.rvCategory) + this.categoryRecyclerView.adapter = adapter + this.tvHome = findViewById(R.id.home) + this.chipGroup = findViewById(R.id.chipgroup) + this.progressBar = findViewById(R.id.progressbar_category) + this.chipGroup.setOnCheckedChangeListener { group, checkedId -> + group.forEachIndexed { index, view -> + if (view.id == checkedId) { + val chip = group[index] as Chip + val query = chip.text.toString().toLowerCase() + chipTaps.onNext(query) + } + } } + } - findViewById(R.id.rvCategory).adapter = adapter + override fun setup(items: List) { + adapter.setItems(items) } override fun toggle(): Observable { - return object : Observable() { - override fun subscribeActual(observer: Observer?) { - findViewById(R.id.home).setOnClickListener { - observer?.onNext(true) - } - } - } + return tvHome.clicks().map { true } } override fun getChip(): Observable { - return object : Observable() { - override fun subscribeActual(observer: Observer?) { - findViewById(R.id.chipgroup).setOnCheckedChangeListener { group, checkedId -> - group.forEachIndexed { index, view -> - if (view.id == checkedId) { - val chip = group[index] as Chip - val query = chip.text.toString().toLowerCase() - observer?.onNext(query) - } - } - } - } - } + return chipTaps } override fun updateProgressbarState(isVisible: Boolean) { diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt index 28ce5ff..e3de82c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt @@ -11,9 +11,14 @@ import com.example.ribs_demo_android.databinding.ItemCategoryBinding import com.example.ribs_demo_android.models.Catalogue class CategoryAdapter( - private val items: List, private val onClick: (String) -> Unit ) : RecyclerView.Adapter() { + private var items: List = emptyList() + + fun setItems(items:List){ + this.items = items + notifyDataSetChanged() + } inner class ViewHolder(private val binding: ItemCategoryBinding) : RecyclerView.ViewHolder(binding.root) { diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt index f52f322..90d093b 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt @@ -95,14 +95,8 @@ class CatalogueInteractor : Interactor - Log.e( - "CategoryInteractor", - "handleCategoryToggle:Subscribe block${Thread.currentThread().name}" - ) - t.let { - catalogueListener.onClick() - } + .subscribe({catalogueListener.onClick()}) { + Log.e(TAG, "handleCategoryToggle:: $it") } } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt index 7057d7d..989f623 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt @@ -2,7 +2,8 @@ package com.example.ribs_demo_android.ribs.root.repository import com.example.ribs_demo_android.models.CatalogueResponse import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable + interface CategoryRepository { From 834a53c327f20ee8ab9d51c26bcb97a01cfe71c4 Mon Sep 17 00:00:00 2001 From: Abhishek Date: Wed, 14 Sep 2022 20:03:04 +0200 Subject: [PATCH 04/11] fix rx issue in details screen --- .../network/DetailsService.kt | 2 +- .../repository/DetailsRepositoryImpl.kt | 25 +----- .../ribs/root/category/CategoryInteractor.kt | 3 +- .../root/home/catalogue/CatalogueBuilder.kt | 3 +- .../home/catalogue/details/DetailsBuilder.kt | 1 + .../catalogue/details/DetailsInteractor.kt | 87 +++++++------------ .../catalogue/details/DetailsScheduler.kt | 6 +- .../home/catalogue/details/DetailsView.kt | 42 +++++---- .../ribs/root/repository/DetailsRepository.kt | 2 +- 9 files changed, 68 insertions(+), 103 deletions(-) diff --git a/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt b/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt index 6c1840e..fc113a2 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt @@ -1,7 +1,7 @@ package com.example.ribs_demo_android.network import com.example.ribs_demo_android.models.CatalogueDetail -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt index 14e54fc..08f0a6d 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt +++ b/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt @@ -2,12 +2,11 @@ package com.example.ribs_demo_android.network.repository import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.network.DetailsService +import com.example.ribs_demo_android.network.createResult import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsScheduler import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable -import io.reactivex.Observer -import io.reactivex.functions.Consumer +import io.reactivex.rxjava3.core.Observable class DetailsRepositoryImpl( private val detailsService: DetailsService, @@ -15,24 +14,6 @@ class DetailsRepositoryImpl( ) : DetailsRepository { override fun getDetail(name: String): Observable> { - return object : Observable>() { - override fun subscribeActual(observer: Observer>?) { - observer?.onNext(Resource.Loading()) - detailsService.getDetail(name) - .subscribeOn(detailsScheduler.io) - .observeOn(detailsScheduler.main) - .subscribe( - object : Consumer { - override fun accept(t: CatalogueDetail?) { - t?.let { - observer?.onNext(Resource.Success(it)) - } - } - } - ) { - observer?.onNext(Resource.Error(it.message.toString())) - } - } - } + return createResult(detailsService.getDetail(name)) } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt index 7b534f2..ff6b4a2 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt @@ -66,10 +66,9 @@ class CategoryInteractor : Interactor() { + companion object { + const val TAG = "DetailsInteractor" + } @Inject lateinit var presenter: DetailsPresenter @@ -58,58 +54,41 @@ class DetailsInteractor : Interactor { - override fun accept(t: String?) { - t?.let { - detailsRepository.getDetail(it) - .subscribeOn(detailsScheduler.io) - .observeOn(detailsScheduler.main) - .subscribe( - object : Consumer> { - override fun accept(t: Resource?) { - t?.let { - when (it) { - is Resource.Loading -> { - presenter.updateProgressbarState(true) - } - is Resource.Success -> { - presenter.setData(it.data!!) - presenter.updateProgressbarState(false) - } - is Resource.Error -> { - presenter.updateProgressbarState(false) - } - } - } - } - } - ) { e -> - e.printStackTrace() - } - } - } - } - ) { - it.printStackTrace() + .subscribe({fetchDetails(it)}) { + Log.e(TAG, it.toString()) } } + private fun fetchDetails(detail: String) { + detailsRepository.getDetail(detail) + .subscribeOn(detailsScheduler.io) + .observeOn(detailsScheduler.main) + .subscribe({ res -> handleResult(res) }) { + Log.e(TAG, it.toString()) + } + } + + private fun handleResult(result: Resource) { + when (result) { + is Resource.Loading -> { + presenter.updateProgressbarState(true) + } + is Resource.Success -> { + presenter.setData(result.data!!) + presenter.updateProgressbarState(false) + } + is Resource.Error -> { + presenter.updateProgressbarState(false) + } + } + } + fun onBack() { presenter.onBack() - .subscribeOn(detailsScheduler.io) + .subscribeOn(detailsScheduler.main) .observeOn(detailsScheduler.main) - .`as`(AutoDispose.autoDisposable(this)) - .subscribe( - object : Consumer { - override fun accept(t: Boolean?) { - t?.let { - detailsListener.onBackPress() - } - } - } - ) { - it.printStackTrace() + .subscribe({detailsListener.onBackPress()}) { + Log.e(TAG, it.toString()) } } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt index 51e9afc..8eab963 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt @@ -1,8 +1,8 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue.details -import io.reactivex.Scheduler -import io.reactivex.android.schedulers.AndroidSchedulers -import io.reactivex.schedulers.Schedulers +import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers +import io.reactivex.rxjava3.core.Scheduler +import io.reactivex.rxjava3.schedulers.Schedulers interface DetailsScheduler { val io: Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt index 97c4806..ae48baa 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt @@ -3,7 +3,6 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue.details import android.content.Context import android.util.AttributeSet import android.widget.ImageView -import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout @@ -12,8 +11,8 @@ import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.example.ribs_demo_android.R import com.example.ribs_demo_android.models.CatalogueDetail -import io.reactivex.Observable -import io.reactivex.Observer +import com.jakewharton.rxbinding4.view.clicks +import io.reactivex.rxjava3.core.Observable /** * Top level view for {@link DetailsBuilder.DetailsScope}. @@ -23,22 +22,31 @@ class DetailsView @JvmOverloads constructor( attrs: AttributeSet? = null, defStyle: Int = 0 ) : ConstraintLayout(context, attrs, defStyle), DetailsInteractor.DetailsPresenter { + private lateinit var tvName: TextView + private lateinit var tvRarity: TextView + private lateinit var tvHp: TextView + private lateinit var tvType: TextView + private lateinit var progressDetails: ProgressBar + private lateinit var imgBack: ImageView + + fun initViewIds() { + tvName = findViewById(R.id.name) + tvRarity = findViewById(R.id.rarity) + tvHp = findViewById(R.id.hp) + tvType = findViewById(R.id.type) + progressDetails = findViewById(R.id.progressbar_details) + imgBack = findViewById(R.id.back) + } override fun onBack(): Observable { - return object : Observable() { - override fun subscribeActual(observer: Observer?) { - findViewById(R.id.back).setOnClickListener { - observer?.onNext(true) - } - } - } + return imgBack.clicks().map { true } } override fun setData(data: CatalogueDetail) { - findViewById(R.id.name).text = data.name - findViewById(R.id.rarity).text = data.rarity - findViewById(R.id.hp).text = data.hp - findViewById(R.id.type).text = data.type + tvName.text = data.name + tvRarity.text = data.rarity + tvHp.text = data.hp + tvType.text = data.type Glide.with(context) .load(data.imageUrl) @@ -47,10 +55,6 @@ class DetailsView @JvmOverloads constructor( } override fun updateProgressbarState(isVisible: Boolean) { - findViewById(R.id.progressbar_details).isVisible = isVisible - findViewById(R.id.name_label).isVisible = !isVisible - findViewById(R.id.hp_label).isVisible = !isVisible - findViewById(R.id.rarity_label).isVisible = !isVisible - findViewById(R.id.type_label).isVisible = !isVisible + progressDetails.isVisible = isVisible } } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt index f486758..37a2066 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt @@ -2,7 +2,7 @@ package com.example.ribs_demo_android.ribs.root.repository import com.example.ribs_demo_android.models.CatalogueDetail import com.example.ribs_demo_android.util.Resource -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable interface DetailsRepository { From c3d36a111d82466500ea468d82b6616df646fb2a Mon Sep 17 00:00:00 2001 From: Abhishek Date: Wed, 14 Sep 2022 20:07:37 +0200 Subject: [PATCH 05/11] remove rx java2 dependency --- app/build.gradle | 7 +------ .../ribs/root/category/CategoryBuilder.kt | 5 ----- .../ribs_demo_android/ribs/root/home/HomeBuilder.kt | 12 ++---------- .../ribs/root/home/catalogue/CatalogueBuilder.kt | 1 - 4 files changed, 3 insertions(+), 22 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 82ff674..3d9fbcd 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,15 +63,12 @@ dependencies { implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" implementation "com.squareup.retrofit2:adapter-rxjava3:$retrofit_version" + implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0' def glide_version = "4.11.0" implementation "com.github.bumptech.glide:glide:$glide_version" kapt "com.github.bumptech.glide:compiler:$glide_version" - implementation 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0' - implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' - implementation 'io.reactivex.rxjava2:rxjava:2.2.4' - testImplementation 'junit:junit:4.12' testImplementation "org.mockito:mockito-core:3.10.0" testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0" @@ -81,6 +78,4 @@ dependencies { testImplementation 'org.mockito:mockito-inline:2.13.0' implementation 'com.squareup.okhttp3:logging-interceptor:4.2.1' - - implementation 'com.jakewharton.rxbinding4:rxbinding-core:4.0.0' } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt index 3fa657f..656e928 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt @@ -4,12 +4,7 @@ import android.view.LayoutInflater import android.view.ViewGroup import com.example.ribs_demo_android.R import com.example.ribs_demo_android.network.CategoryService -import com.example.ribs_demo_android.network.repository.CategoryRepositoryImpl -import com.example.ribs_demo_android.ribs.root.RootBuilder -import com.example.ribs_demo_android.ribs.root.home.HomeBuilder -import com.example.ribs_demo_android.ribs.root.repository.CategoryRepository import com.example.ribs_demo_android.util.Constants -import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt index 88ed33c..4397378 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt @@ -5,14 +5,12 @@ import android.view.ViewGroup import com.example.ribs_demo_android.R import com.example.ribs_demo_android.network.CatalogueService import com.example.ribs_demo_android.network.repository.CatalogueRepositoryImpl -import com.example.ribs_demo_android.ribs.root.category.CategoryInteractor import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueBuilder import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueInteractor import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueScheduler import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueSchedulerImpl import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository import com.example.ribs_demo_android.util.Constants -import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds @@ -96,7 +94,7 @@ class HomeBuilder(dependency: ParentComponent) : ): Retrofit { return Retrofit.Builder() .baseUrl(Constants.BASE_URL) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) .addConverterFactory(gsonConverterFactory) .client(clientHome) .build() @@ -106,14 +104,8 @@ class HomeBuilder(dependency: ParentComponent) : @Provides @JvmStatic internal fun provideService( - gsonConverterFactory: GsonConverterFactory + retrofit: Retrofit, ): CatalogueService { - val retrofit = Retrofit.Builder() - .baseUrl(Constants.BASE_URL) - .addConverterFactory(gsonConverterFactory) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .client(clientHome) - .build() return retrofit.create(CatalogueService::class.java) } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt index b404691..d8189d1 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt @@ -13,7 +13,6 @@ import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsSch import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository import com.example.ribs_demo_android.util.Constants -import com.jakewharton.retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds From fc9d6b39e1c5528dea7ec5d915b75a9cf5490c3f Mon Sep 17 00:00:00 2001 From: Abhishek Date: Thu, 15 Sep 2022 18:30:32 +0200 Subject: [PATCH 06/11] on item click bug fix --- .idea/.gitignore | 3 --- .idea/.name | 1 - .idea/compiler.xml | 6 ----- .idea/deploymentTargetDropDown.xml | 17 -------------- .idea/gradle.xml | 20 ----------------- .idea/misc.xml | 22 ------------------- .idea/vcs.xml | 6 ----- .../home/catalogue/CatalogueInteractor.kt | 1 + .../ribs/root/home/catalogue/CatalogueView.kt | 4 +++- .../ribs/root/home/catalogue/DataStream.kt | 2 +- .../root/home/catalogue/MutableDataStream.kt | 12 +++++----- .../CatalogueAdapter/CatalogueAdapter.kt | 10 ++++++--- .../catalogue/details/DetailsInteractor.kt | 13 +++++++++-- 13 files changed, 29 insertions(+), 88 deletions(-) delete mode 100644 .idea/.gitignore delete mode 100644 .idea/.name delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/deploymentTargetDropDown.xml delete mode 100644 .idea/gradle.xml delete mode 100644 .idea/misc.xml delete mode 100644 .idea/vcs.xml diff --git a/.idea/.gitignore b/.idea/.gitignore deleted file mode 100644 index 26d3352..0000000 --- a/.idea/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -# Default ignored files -/shelf/ -/workspace.xml diff --git a/.idea/.name b/.idea/.name deleted file mode 100644 index 3a3df10..0000000 --- a/.idea/.name +++ /dev/null @@ -1 +0,0 @@ -Ribs-Demo-Android \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index fb7f4a8..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml deleted file mode 100644 index 27dedce..0000000 --- a/.idea/deploymentTargetDropDown.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 7b46144..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 7e5d394..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 35eb1dd..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt index 90d093b..f4916d8 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt @@ -66,6 +66,7 @@ class CatalogueInteractor : Interactor + Log.e(this.javaClass.name, "itemClickedObserved: $category") router.attachDetails() dataStream.setData(category) }) {Log.e(TAG, it.toString())} diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt index 71672c3..8a55355 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt @@ -2,6 +2,7 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue import android.content.Context import android.util.AttributeSet +import android.util.Log import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.TextView @@ -36,7 +37,8 @@ class CatalogueView @JvmOverloads constructor( this.progressBar = findViewById(R.id.progressbar_catalogue) this.tvFilters = findViewById(R.id.filters) adapter = CatalogueAdapter { name -> - itemTaps.onNext(name) + Log.e(this.javaClass.name, "itemClicked: $name") + itemTaps.onNext(name) } tvFilters.setOnClickListener { filterTaps.onNext(true) } catalogueRecycler.adapter = adapter diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt index 1ae4f6f..baa5804 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt @@ -1,6 +1,6 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable /** * Created by Mehul Bisht on 05-01-2022 diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt index 493f8ec..d419c43 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt @@ -1,7 +1,7 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue -import com.jakewharton.rxrelay2.BehaviorRelay -import io.reactivex.Observable +import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.subjects.PublishSubject /** * Created by Mehul Bisht on 05-01-2022 @@ -9,17 +9,17 @@ import io.reactivex.Observable class MutableDataStream(data: String): DataStream { - private val behaviorRelay: BehaviorRelay = BehaviorRelay.create() + private val behaviorRelay = PublishSubject.create() init { - behaviorRelay.accept(data) + behaviorRelay.onNext(data) } fun setData(data: String) { - behaviorRelay.accept(data) + behaviorRelay.onNext(data) } override fun data(): Observable { - return behaviorRelay.hide() + return behaviorRelay } } \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt index a44d8f1..7203ebf 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt @@ -1,5 +1,6 @@ package com.example.ribs_demo_android.ribs.root.home.catalogue.adapter.CatalogueAdapter +import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView @@ -20,14 +21,17 @@ class CatalogueAdapter( inner class ViewHolder(private val binding: ItemCatalogueBinding) : RecyclerView.ViewHolder(binding.root) { + init { + binding.root.setOnClickListener { v -> + onClick(items[adapterPosition].name) + } + } fun bind(item: Catalogue?) { item?.let { binding.name.text = it.name binding.rarity.text = it.rarity - binding.root.setOnClickListener { v -> - onClick(it.name) - } + Glide.with(binding.root) .load(it.imageUrl) diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt index ca48480..936636c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt +++ b/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt @@ -11,6 +11,7 @@ import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor import io.reactivex.rxjava3.core.Observable +import io.reactivex.rxjava3.disposables.CompositeDisposable import javax.inject.Inject /** @@ -42,6 +43,8 @@ class DetailsInteractor : Interactor handleResult(res) }) { @@ -87,6 +92,7 @@ class DetailsInteractor : Interactor Date: Thu, 15 Sep 2022 18:31:53 +0200 Subject: [PATCH 07/11] fix on item click issue --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index aa724b7..1bc29aa 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /.idea/workspace.xml /.idea/navEditor.xml /.idea/assetWizardSettings.xml +/.idea .DS_Store /build /captures From ce36bdcb0c8c9c9a9f70050ea9887244669c5c58 Mon Sep 17 00:00:00 2001 From: Michael Manahan Date: Fri, 16 Sep 2022 20:04:54 -0400 Subject: [PATCH 08/11] App Reorganization Reorganize packages to better match our generator --- .../ExampleInstrumentedTest.kt | 2 +- app/src/main/AndroidManifest.xml | 6 +- .../repository/CatalogueRepositoryImpl.kt | 29 --------- .../repository/CategoryRepositoryImpl.kt | 19 ------ .../repository/DetailsRepositoryImpl.kt | 19 ------ .../root/repository/CatalogueRepository.kt | 13 ---- .../root/repository/CategoryRepository.kt | 11 ---- .../ribs/root/repository/DetailsRepository.kt | 10 ---- .../ribs_demo_android/App.kt | 3 +- .../ribs_demo_android/models/Catalogue.kt | 2 +- .../models/CatalogueDetail.kt | 2 +- .../models/CatalogueResponse.kt | 2 +- .../ribs_demo_android/network/ApiCallUtils.kt | 4 +- .../network/CatalogueService.kt | 6 +- .../network/CategoryService.kt | 6 +- .../network/DetailsService.kt | 4 +- .../repository/CatalogueRepository.kt | 13 ++++ .../repository/CatalogueRepositoryImpl.kt | 24 ++++++++ .../repository/CategoryRepository.kt | 11 ++++ .../repository/CategoryRepositoryImpl.kt | 18 ++++++ .../repository/DetailsRepository.kt | 10 ++++ .../repository/DetailsRepositoryImpl.kt | 18 ++++++ .../ribs_demo_android/ribs/MainActivity.kt | 4 +- .../ribs}/catalogue/CatalogueBuilder.kt | 59 ++++++++++--------- .../ribs}/catalogue/CatalogueInteractor.kt | 15 +++-- .../ribs}/catalogue/CatalogueRouter.kt | 6 +- .../ribs}/catalogue/CatalogueScheduler.kt | 2 +- .../ribs}/catalogue/CatalogueView.kt | 10 ++-- .../ribs}/catalogue/DataStream.kt | 2 +- .../ribs}/catalogue/MutableDataStream.kt | 2 +- .../CatalogueAdapter/CatalogueAdapter.kt | 9 ++- .../ribs}/category/CategoryBuilder.kt | 8 +-- .../ribs}/category/CategoryInteractor.kt | 14 ++--- .../ribs}/category/CategoryRouter.kt | 7 +-- .../ribs}/category/CategoryScheduler.kt | 2 +- .../ribs}/category/CategoryView.kt | 8 +-- .../ribs}/category/adapter/CategoryAdapter.kt | 9 ++- .../ribs}/details/DetailsBuilder.kt | 12 ++-- .../ribs}/details/DetailsInteractor.kt | 13 ++-- .../ribs}/details/DetailsRouter.kt | 2 +- .../ribs}/details/DetailsScheduler.kt | 2 +- .../ribs}/details/DetailsView.kt | 6 +- .../ribs}/home/HomeBuilder.kt | 23 ++++---- .../ribs}/home/HomeInteractor.kt | 5 +- .../ribs}/home/HomeRouter.kt | 6 +- .../ribs_demo_android/ribs}/home/HomeView.kt | 2 +- .../ribs/root/RootBuilder.kt | 12 ++-- .../ribs/root/RootInteractor.kt | 7 +-- .../ribs_demo_android/ribs/root/RootRouter.kt | 10 ++-- .../ribs_demo_android/ribs/root/RootView.kt | 3 +- .../ribs_demo_android/util/Constants.kt | 2 +- .../ribs_demo_android/util/Resource.kt | 2 +- app/src/main/res/layout/catalogue_rib.xml | 4 +- app/src/main/res/layout/category_rib.xml | 4 +- app/src/main/res/layout/details_rib.xml | 4 +- app/src/main/res/layout/home_rib.xml | 4 +- app/src/main/res/layout/root_rib.xml | 4 +- .../ribs_demo_android/ExampleUnitTest.kt | 2 +- .../ribs_demo_android/network/FakeResponse.kt | 10 ++-- .../repository/CatalogueRepositoryTest.kt | 11 ++-- .../repository/FakeCatalogueRepository.kt | 13 ++-- .../root/category/CategoryInteractorTest.kt | 15 ++--- .../root/category/FakeCategoryScheduler.kt | 3 +- .../home/catalogue/CatalogueInteractorTest.kt | 21 +++---- .../home/catalogue/FakeCatalogueScheduler.kt | 3 +- .../details/DetailsInteractorTest.kt | 19 +++--- .../catalogue/details/FakeDetailsScheduler.kt | 3 +- 67 files changed, 301 insertions(+), 315 deletions(-) rename app/src/androidTest/java/com/{example => solacestudios}/ribs_demo_android/ExampleInstrumentedTest.kt (93%) delete mode 100644 app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt delete mode 100644 app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt delete mode 100644 app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt delete mode 100644 app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt delete mode 100644 app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt delete mode 100644 app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/App.kt (65%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/models/Catalogue.kt (81%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/models/CatalogueDetail.kt (86%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/models/CatalogueResponse.kt (85%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/network/ApiCallUtils.kt (81%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/network/CatalogueService.kt (67%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/network/CategoryService.kt (68%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/network/DetailsService.kt (66%) create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/ribs/MainActivity.kt (94%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/CatalogueBuilder.kt (87%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/CatalogueInteractor.kt (88%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/CatalogueRouter.kt (78%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/CatalogueScheduler.kt (89%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/CatalogueView.kt (84%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/DataStream.kt (70%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/MutableDataStream.kt (88%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home => solacestudios/ribs_demo_android/ribs}/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt (85%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/CategoryBuilder.kt (95%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/CategoryInteractor.kt (88%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/CategoryRouter.kt (57%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/CategoryScheduler.kt (90%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/CategoryView.kt (90%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/category/adapter/CategoryAdapter.kt (85%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home/catalogue => solacestudios/ribs_demo_android/ribs}/details/DetailsBuilder.kt (89%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home/catalogue => solacestudios/ribs_demo_android/ribs}/details/DetailsInteractor.kt (88%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home/catalogue => solacestudios/ribs_demo_android/ribs}/details/DetailsRouter.kt (84%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home/catalogue => solacestudios/ribs_demo_android/ribs}/details/DetailsScheduler.kt (88%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root/home/catalogue => solacestudios/ribs_demo_android/ribs}/details/DetailsView.kt (91%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/home/HomeBuilder.kt (87%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/home/HomeInteractor.kt (86%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/home/HomeRouter.kt (79%) rename app/src/main/java/com/{example/ribs_demo_android/ribs/root => solacestudios/ribs_demo_android/ribs}/home/HomeView.kt (86%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/RootBuilder.kt (91%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/RootInteractor.kt (85%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/RootRouter.kt (78%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/RootView.kt (82%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/util/Constants.kt (61%) rename app/src/main/java/com/{example => solacestudios}/ribs_demo_android/util/Resource.kt (84%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ExampleUnitTest.kt (87%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/network/FakeResponse.kt (78%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt (85%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/network/repository/FakeCatalogueRepository.kt (60%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt (86%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt (71%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt (84%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt (70%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt (84%) rename app/src/test/java/com/{example => solacestudios}/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt (69%) diff --git a/app/src/androidTest/java/com/example/ribs_demo_android/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt similarity index 93% rename from app/src/androidTest/java/com/example/ribs_demo_android/ExampleInstrumentedTest.kt rename to app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt index 255d0b0..6b9ae8c 100644 --- a/app/src/androidTest/java/com/example/ribs_demo_android/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android +package com.solacestudios.ribs_demo_android import androidx.test.platform.app.InstrumentationRegistry import androidx.test.ext.junit.runners.AndroidJUnit4 diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3b071d4..36ee150 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,11 +1,11 @@ + package="com.solacestudios.ribs_demo_android"> diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt deleted file mode 100644 index 9a52067..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryImpl.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.example.ribs_demo_android.network.repository - -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.createResult -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueScheduler -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers -import io.reactivex.rxjava3.core.Observable -import io.reactivex.rxjava3.core.Observer -import io.reactivex.rxjava3.functions.Consumer -import io.reactivex.rxjava3.schedulers.Schedulers - -class CatalogueRepositoryImpl( - private val catalogueService: CatalogueService, - private val scheduler: CatalogueScheduler -) : CatalogueRepository { - - override fun getAll(page: Int): Observable> { - return createResult(catalogueService.getAll(page)) - } - - override fun getDetail(name: String): Observable> { - return createResult(catalogueService.getDetail(name)) - } -} - diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt deleted file mode 100644 index c6aded2..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/CategoryRepositoryImpl.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.ribs_demo_android.network.repository - -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.network.CategoryService -import com.example.ribs_demo_android.network.createResult -import com.example.ribs_demo_android.ribs.root.category.CategoryScheduler -import com.example.ribs_demo_android.ribs.root.repository.CategoryRepository -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -class CategoryRepositoryImpl( - private val categoryService: CategoryService, - private val categoryScheduler: CategoryScheduler -) : CategoryRepository { - - override fun getByRarity(rarity: String): Observable> { - return createResult(categoryService.getByRarity(rarity)) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt b/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt deleted file mode 100644 index 08f0a6d..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/network/repository/DetailsRepositoryImpl.kt +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.ribs_demo_android.network.repository - -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.network.DetailsService -import com.example.ribs_demo_android.network.createResult -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsScheduler -import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -class DetailsRepositoryImpl( - private val detailsService: DetailsService, - private val detailsScheduler: DetailsScheduler -) : DetailsRepository { - - override fun getDetail(name: String): Observable> { - return createResult(detailsService.getDetail(name)) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt deleted file mode 100644 index 79f0753..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CatalogueRepository.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.ribs_demo_android.ribs.root.repository - -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -interface CatalogueRepository { - - fun getAll(page: Int): Observable> - - fun getDetail(name: String): Observable> -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt deleted file mode 100644 index 989f623..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/CategoryRepository.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.example.ribs_demo_android.ribs.root.repository - -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - - -interface CategoryRepository { - - fun getByRarity(rarity: String): Observable> -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt b/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt deleted file mode 100644 index 37a2066..0000000 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/repository/DetailsRepository.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.example.ribs_demo_android.ribs.root.repository - -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -interface DetailsRepository { - - fun getDetail(name: String): Observable> -} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/App.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/App.kt similarity index 65% rename from app/src/main/java/com/example/ribs_demo_android/App.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/App.kt index 18b2575..65569bd 100644 --- a/app/src/main/java/com/example/ribs_demo_android/App.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/App.kt @@ -1,7 +1,6 @@ -package com.example.ribs_demo_android +package com.solacestudios.ribs_demo_android import android.app.Application -import androidx.annotation.VisibleForTesting class App: Application() { diff --git a/app/src/main/java/com/example/ribs_demo_android/models/Catalogue.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/models/Catalogue.kt similarity index 81% rename from app/src/main/java/com/example/ribs_demo_android/models/Catalogue.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/models/Catalogue.kt index 432156e..ce8da34 100644 --- a/app/src/main/java/com/example/ribs_demo_android/models/Catalogue.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/models/Catalogue.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.models +package com.solacestudios.ribs_demo_android.models import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/example/ribs_demo_android/models/CatalogueDetail.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueDetail.kt similarity index 86% rename from app/src/main/java/com/example/ribs_demo_android/models/CatalogueDetail.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueDetail.kt index c15638a..c184e5e 100644 --- a/app/src/main/java/com/example/ribs_demo_android/models/CatalogueDetail.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueDetail.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.models +package com.solacestudios.ribs_demo_android.models import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/example/ribs_demo_android/models/CatalogueResponse.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueResponse.kt similarity index 85% rename from app/src/main/java/com/example/ribs_demo_android/models/CatalogueResponse.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueResponse.kt index 751fcd7..f4f84cb 100644 --- a/app/src/main/java/com/example/ribs_demo_android/models/CatalogueResponse.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/models/CatalogueResponse.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.models +package com.solacestudios.ribs_demo_android.models import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/network/ApiCallUtils.kt similarity index 81% rename from app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/network/ApiCallUtils.kt index 0a43bde..cad241e 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/ApiCallUtils.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/network/ApiCallUtils.kt @@ -1,6 +1,6 @@ -package com.example.ribs_demo_android.network +package com.solacestudios.ribs_demo_android.network -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.schedulers.Schedulers diff --git a/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/network/CatalogueService.kt similarity index 67% rename from app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/network/CatalogueService.kt index 27782b5..fbdeab9 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/CatalogueService.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/network/CatalogueService.kt @@ -1,7 +1,7 @@ -package com.example.ribs_demo_android.network +package com.solacestudios.ribs_demo_android.network -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path diff --git a/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/network/CategoryService.kt similarity index 68% rename from app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/network/CategoryService.kt index 41e0e79..5cc026c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/CategoryService.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/network/CategoryService.kt @@ -1,7 +1,7 @@ -package com.example.ribs_demo_android.network +package com.solacestudios.ribs_demo_android.network -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path diff --git a/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/network/DetailsService.kt similarity index 66% rename from app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/network/DetailsService.kt index fc113a2..f491926 100644 --- a/app/src/main/java/com/example/ribs_demo_android/network/DetailsService.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/network/DetailsService.kt @@ -1,6 +1,6 @@ -package com.example.ribs_demo_android.network +package com.solacestudios.ribs_demo_android.network -import com.example.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueDetail import io.reactivex.rxjava3.core.Observable import retrofit2.http.GET import retrofit2.http.Path diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt new file mode 100644 index 0000000..9ba6f47 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt @@ -0,0 +1,13 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + +interface CatalogueRepository { + + fun getAll(page: Int): Observable> + + fun getDetail(name: String): Observable> +} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt new file mode 100644 index 0000000..837e39b --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt @@ -0,0 +1,24 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.createResult +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueScheduler +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + +class CatalogueRepositoryImpl( + private val catalogueService: CatalogueService, + private val scheduler: CatalogueScheduler +) : CatalogueRepository { + + override fun getAll(page: Int): Observable> { + return createResult(catalogueService.getAll(page)) + } + + override fun getDetail(name: String): Observable> { + return createResult(catalogueService.getDetail(name)) + } +} + diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt new file mode 100644 index 0000000..c68616f --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt @@ -0,0 +1,11 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + + +interface CategoryRepository { + + fun getByRarity(rarity: String): Observable> +} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt new file mode 100644 index 0000000..b5c154f --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt @@ -0,0 +1,18 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.network.createResult +import com.solacestudios.ribs_demo_android.ribs.category.CategoryScheduler +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + +class CategoryRepositoryImpl( + private val categoryService: CategoryService, + private val categoryScheduler: CategoryScheduler +) : CategoryRepository { + + override fun getByRarity(rarity: String): Observable> { + return createResult(categoryService.getByRarity(rarity)) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt new file mode 100644 index 0000000..be310e6 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt @@ -0,0 +1,10 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + +interface DetailsRepository { + + fun getDetail(name: String): Observable> +} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt new file mode 100644 index 0000000..d19d8f4 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt @@ -0,0 +1,18 @@ +package com.solacestudios.ribs_demo_android.repository + +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.network.createResult +import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler +import com.solacestudios.ribs_demo_android.util.Resource +import io.reactivex.rxjava3.core.Observable + +class DetailsRepositoryImpl( + private val detailsService: DetailsService, + private val detailsScheduler: DetailsScheduler +) : DetailsRepository { + + override fun getDetail(name: String): Observable> { + return createResult(detailsService.getDetail(name)) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/MainActivity.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt similarity index 94% rename from app/src/main/java/com/example/ribs_demo_android/ribs/MainActivity.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt index b2d5350..d3be070 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/MainActivity.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt @@ -1,8 +1,8 @@ -package com.example.ribs_demo_android.ribs +package com.solacestudios.ribs_demo_android.ribs import android.util.Log import android.view.ViewGroup -import com.example.ribs_demo_android.ribs.root.RootBuilder +import com.solacestudios.ribs_demo_android.ribs.root.RootBuilder import com.uber.rib.core.RibActivity import com.uber.rib.core.ViewRouter import io.reactivex.exceptions.UndeliverableException diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt similarity index 87% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt index d8189d1..e9ac840 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt @@ -1,18 +1,18 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import android.view.LayoutInflater import android.view.ViewGroup -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.DetailsService -import com.example.ribs_demo_android.network.repository.DetailsRepositoryImpl -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsBuilder -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsInteractor -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsScheduler -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsSchedulerImpl -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository -import com.example.ribs_demo_android.util.Constants +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.details.DetailsBuilder +import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor +import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler +import com.solacestudios.ribs_demo_android.ribs.details.DetailsSchedulerImpl +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.util.Constants import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds @@ -83,6 +83,22 @@ class CatalogueBuilder(dependency: ParentComponent) : HttpLoggingInterceptor.Level.BODY) var clientCatalogue : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() + @CatalogueScope + @Provides + @JvmStatic + internal fun router( + component: Component, + view: CatalogueView, + interactor: CatalogueInteractor + ): CatalogueRouter { + return CatalogueRouter( + view, + interactor, + component, + DetailsBuilder(component) + ) + } + @CatalogueScope @Provides @JvmStatic @@ -105,21 +121,7 @@ class CatalogueBuilder(dependency: ParentComponent) : return mutableDataStream } - @CatalogueScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: CatalogueView, - interactor: CatalogueInteractor - ): CatalogueRouter { - return CatalogueRouter( - view, - interactor, - component, - DetailsBuilder(component) - ) - } + @Provides @Named("gson") @@ -177,7 +179,8 @@ class CatalogueBuilder(dependency: ParentComponent) : modules = arrayOf(Module::class), dependencies = arrayOf(ParentComponent::class) ) - interface Component : InteractorBaseComponent, DetailsBuilder.ParentComponent, BuilderComponent { + interface Component : InteractorBaseComponent, DetailsBuilder.ParentComponent, + BuilderComponent { @dagger.Component.Builder interface Builder { diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt similarity index 88% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt index f4916d8..6bfaac2 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt @@ -1,18 +1,17 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import android.util.Log -import com.example.ribs_demo_android.models.Catalogue -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsInteractor -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.disposables.CompositeDisposable -import io.reactivex.rxjava3.functions.Consumer import javax.inject.Inject /** diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt similarity index 78% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueRouter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt index fa69c8c..7296550 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt @@ -1,7 +1,7 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsBuilder -import com.example.ribs_demo_android.ribs.root.home.catalogue.details.DetailsRouter +import com.solacestudios.ribs_demo_android.ribs.details.DetailsBuilder +import com.solacestudios.ribs_demo_android.ribs.details.DetailsRouter import com.uber.rib.core.ViewRouter diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueScheduler.kt similarity index 89% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueScheduler.kt index fa8fee9..0996886 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueScheduler.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueScheduler.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt similarity index 84% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt index 8a55355..146c167 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt @@ -1,18 +1,16 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import android.content.Context import android.util.AttributeSet import android.util.Log -import android.widget.LinearLayout import android.widget.ProgressBar import android.widget.TextView import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.ribs.root.home.catalogue.adapter.CatalogueAdapter.CatalogueAdapter -import com.example.ribs_demo_android.models.Catalogue -import com.jakewharton.rxbinding4.view.clicks +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.ribs.catalogue.adapter.CatalogueAdapter.CatalogueAdapter +import com.solacestudios.ribs_demo_android.models.Catalogue import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.subjects.PublishSubject diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt similarity index 70% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt index baa5804..d2987f3 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/DataStream.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import io.reactivex.rxjava3.core.Observable diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt similarity index 88% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt index d419c43..8c47f8a 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/MutableDataStream.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.catalogue import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.subjects.PublishSubject diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt similarity index 85% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt index 7203ebf..53e478f 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/adapter/CatalogueAdapter/CatalogueAdapter.kt @@ -1,14 +1,13 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.adapter.CatalogueAdapter +package com.solacestudios.ribs_demo_android.ribs.catalogue.adapter.CatalogueAdapter -import android.util.Log import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.databinding.ItemCatalogueBinding -import com.example.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.databinding.ItemCatalogueBinding +import com.solacestudios.ribs_demo_android.models.Catalogue class CatalogueAdapter( private val onClick: (String) -> Unit diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt similarity index 95% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt index 656e928..64c11e1 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt @@ -1,10 +1,10 @@ -package com.example.ribs_demo_android.ribs.root.category +package com.solacestudios.ribs_demo_android.ribs.category import android.view.LayoutInflater import android.view.ViewGroup -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.network.CategoryService -import com.example.ribs_demo_android.util.Constants +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.util.Constants import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt similarity index 88% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt index ff6b4a2..83b3d98 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt @@ -1,12 +1,12 @@ -package com.example.ribs_demo_android.ribs.root.category +package com.solacestudios.ribs_demo_android.ribs.category import android.util.Log -import com.example.ribs_demo_android.models.Catalogue -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.network.CategoryService -import com.example.ribs_demo_android.network.repository.CategoryRepositoryImpl -import com.example.ribs_demo_android.ribs.root.repository.CategoryRepository -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.repository.CategoryRepositoryImpl +import com.solacestudios.ribs_demo_android.repository.CategoryRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt similarity index 57% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryRouter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt index f0aa6de..80fd3a9 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt @@ -1,6 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.category - -import android.view.View +package com.solacestudios.ribs_demo_android.ribs.category import com.uber.rib.core.ViewRouter @@ -12,4 +10,5 @@ import com.uber.rib.core.ViewRouter class CategoryRouter( view: CategoryView, interactor: CategoryInteractor, - component: CategoryBuilder.Component) : ViewRouter(view, interactor, component) + component: CategoryBuilder.Component +) : ViewRouter(view, interactor, component) diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryScheduler.kt similarity index 90% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryScheduler.kt index b70e60f..514bda9 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryScheduler.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryScheduler.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.category +package com.solacestudios.ribs_demo_android.ribs.category import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt similarity index 90% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt index 419028c..6f38e7c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/CategoryView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.category +package com.solacestudios.ribs_demo_android.ribs.category import android.content.Context import android.util.AttributeSet @@ -9,9 +9,9 @@ import androidx.core.view.forEachIndexed import androidx.core.view.get import androidx.core.view.isVisible import androidx.recyclerview.widget.RecyclerView -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.models.Catalogue -import com.example.ribs_demo_android.ribs.root.category.adapter.CategoryAdapter +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.ribs.category.adapter.CategoryAdapter import com.google.android.material.chip.Chip import com.google.android.material.chip.ChipGroup import com.jakewharton.rxbinding4.view.clicks diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/adapter/CategoryAdapter.kt similarity index 85% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/adapter/CategoryAdapter.kt index e3de82c..90208f3 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/category/adapter/CategoryAdapter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/adapter/CategoryAdapter.kt @@ -1,14 +1,13 @@ -package com.example.ribs_demo_android.ribs.root.category.adapter +package com.solacestudios.ribs_demo_android.ribs.category.adapter -import android.graphics.Color import android.view.LayoutInflater import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.databinding.ItemCategoryBinding -import com.example.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.databinding.ItemCategoryBinding +import com.solacestudios.ribs_demo_android.models.Catalogue class CategoryAdapter( private val onClick: (String) -> Unit diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt similarity index 89% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsBuilder.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt index 28cc2ea..ce0fd0e 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt @@ -1,12 +1,11 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.details import android.view.LayoutInflater import android.view.ViewGroup -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.DetailsService -import com.example.ribs_demo_android.ribs.root.home.catalogue.DataStream -import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream +import com.solacestudios.ribs_demo_android.repository.DetailsRepository import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds @@ -14,7 +13,6 @@ import dagger.BindsInstance import dagger.Provides import java.lang.annotation.Retention import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Named import javax.inject.Qualifier import javax.inject.Scope diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt similarity index 88% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt index 936636c..0f9206c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt @@ -1,12 +1,11 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.details import android.util.Log -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.network.DetailsService -import com.example.ribs_demo_android.ribs.root.home.catalogue.DataStream -import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository -import com.example.ribs_demo_android.util.Resource -import com.uber.autodispose.AutoDispose +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream +import com.solacestudios.ribs_demo_android.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt similarity index 84% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsRouter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt index 01d4ff6..245309c 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.details import com.uber.rib.core.ViewRouter diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt similarity index 88% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt index 8eab963..d81990a 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsScheduler.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.details import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Scheduler diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt similarity index 91% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt index ae48baa..4ed0135 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.details import android.content.Context import android.util.AttributeSet @@ -9,8 +9,8 @@ import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import com.bumptech.glide.Glide import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.models.CatalogueDetail import com.jakewharton.rxbinding4.view.clicks import io.reactivex.rxjava3.core.Observable diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt similarity index 87% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt index 4397378..400edf0 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt @@ -1,16 +1,16 @@ -package com.example.ribs_demo_android.ribs.root.home +package com.solacestudios.ribs_demo_android.ribs.home import android.view.LayoutInflater import android.view.ViewGroup -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.repository.CatalogueRepositoryImpl -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueBuilder -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueInteractor -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueScheduler -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueSchedulerImpl -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.util.Constants +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueBuilder +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueScheduler +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueSchedulerImpl +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.util.Constants import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds @@ -131,7 +131,6 @@ class HomeBuilder(dependency: ParentComponent) : component: Component, view: HomeView, interactor: HomeInteractor, - service: CatalogueService ): HomeRouter { return HomeRouter( view, @@ -182,5 +181,5 @@ class HomeBuilder(dependency: ParentComponent) : @Qualifier @Retention(CLASS) - internal annotation class LogoutInternal + internal annotation class HomeInternal } diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt similarity index 86% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeInteractor.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt index e1d3d03..8846009 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt @@ -1,7 +1,6 @@ -package com.example.ribs_demo_android.ribs.root.home +package com.solacestudios.ribs_demo_android.ribs.home -import android.util.Log -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueInteractor +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt similarity index 79% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeRouter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt index 03c9cd7..d3cd4a7 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt @@ -1,7 +1,7 @@ -package com.example.ribs_demo_android.ribs.root.home +package com.solacestudios.ribs_demo_android.ribs.home -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueBuilder -import com.example.ribs_demo_android.ribs.root.home.catalogue.CatalogueRouter +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueBuilder +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueRouter import com.uber.rib.core.ViewRouter /** diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt similarity index 86% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeView.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt index 1b67c32..07668c9 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/home/HomeView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.ribs.root.home +package com.solacestudios.ribs_demo_android.ribs.home import android.content.Context import android.util.AttributeSet diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt similarity index 91% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/RootBuilder.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt index c689d4f..a75f971 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt @@ -1,12 +1,12 @@ -package com.example.ribs_demo_android.ribs.root +package com.solacestudios.ribs_demo_android.ribs.root import android.view.LayoutInflater import android.view.ViewGroup -import com.example.ribs_demo_android.R -import com.example.ribs_demo_android.ribs.root.category.CategoryBuilder -import com.example.ribs_demo_android.ribs.root.category.CategoryInteractor -import com.example.ribs_demo_android.ribs.root.home.HomeBuilder -import com.example.ribs_demo_android.ribs.root.home.HomeInteractor +import com.solacestudios.ribs_demo_android.R +import com.solacestudios.ribs_demo_android.ribs.category.CategoryBuilder +import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor +import com.solacestudios.ribs_demo_android.ribs.home.HomeBuilder +import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder import dagger.Binds diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt similarity index 85% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/RootInteractor.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt index 06093ae..25706ad 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt @@ -1,8 +1,7 @@ -package com.example.ribs_demo_android.ribs.root +package com.solacestudios.ribs_demo_android.ribs.root -import android.util.Log -import com.example.ribs_demo_android.ribs.root.category.CategoryInteractor -import com.example.ribs_demo_android.ribs.root.home.HomeInteractor +import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor +import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt similarity index 78% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/RootRouter.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt index 2e70e1c..fcbeab6 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt @@ -1,9 +1,9 @@ -package com.example.ribs_demo_android.ribs.root +package com.solacestudios.ribs_demo_android.ribs.root -import com.example.ribs_demo_android.ribs.root.category.CategoryBuilder -import com.example.ribs_demo_android.ribs.root.category.CategoryRouter -import com.example.ribs_demo_android.ribs.root.home.HomeBuilder -import com.example.ribs_demo_android.ribs.root.home.HomeRouter +import com.solacestudios.ribs_demo_android.ribs.category.CategoryBuilder +import com.solacestudios.ribs_demo_android.ribs.category.CategoryRouter +import com.solacestudios.ribs_demo_android.ribs.home.HomeBuilder +import com.solacestudios.ribs_demo_android.ribs.home.HomeRouter import com.uber.rib.core.ViewRouter diff --git a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt similarity index 82% rename from app/src/main/java/com/example/ribs_demo_android/ribs/root/RootView.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt index fdf02e6..8fa1980 100644 --- a/app/src/main/java/com/example/ribs_demo_android/ribs/root/RootView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt @@ -1,8 +1,7 @@ -package com.example.ribs_demo_android.ribs.root +package com.solacestudios.ribs_demo_android.ribs.root import android.content.Context import android.util.AttributeSet -import android.view.View import android.widget.LinearLayout /** diff --git a/app/src/main/java/com/example/ribs_demo_android/util/Constants.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/util/Constants.kt similarity index 61% rename from app/src/main/java/com/example/ribs_demo_android/util/Constants.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/util/Constants.kt index c28ee87..4b39912 100644 --- a/app/src/main/java/com/example/ribs_demo_android/util/Constants.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/util/Constants.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.util +package com.solacestudios.ribs_demo_android.util object Constants { diff --git a/app/src/main/java/com/example/ribs_demo_android/util/Resource.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/util/Resource.kt similarity index 84% rename from app/src/main/java/com/example/ribs_demo_android/util/Resource.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/util/Resource.kt index e879753..c9cffed 100644 --- a/app/src/main/java/com/example/ribs_demo_android/util/Resource.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/util/Resource.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android.util +package com.solacestudios.ribs_demo_android.util sealed class Resource(val data: T? = null, val message: String? = null) { class Success(data: T) : Resource(data) diff --git a/app/src/main/res/layout/catalogue_rib.xml b/app/src/main/res/layout/catalogue_rib.xml index 1d64494..10709b8 100644 --- a/app/src/main/res/layout/catalogue_rib.xml +++ b/app/src/main/res/layout/catalogue_rib.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/category_rib.xml b/app/src/main/res/layout/category_rib.xml index d5ea3a5..c50fe52 100644 --- a/app/src/main/res/layout/category_rib.xml +++ b/app/src/main/res/layout/category_rib.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/details_rib.xml b/app/src/main/res/layout/details_rib.xml index a1cf63f..651a398 100644 --- a/app/src/main/res/layout/details_rib.xml +++ b/app/src/main/res/layout/details_rib.xml @@ -1,5 +1,5 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/home_rib.xml b/app/src/main/res/layout/home_rib.xml index 961d971..c64f24c 100644 --- a/app/src/main/res/layout/home_rib.xml +++ b/app/src/main/res/layout/home_rib.xml @@ -1,7 +1,7 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/root_rib.xml b/app/src/main/res/layout/root_rib.xml index 1d4d61b..66bb49e 100644 --- a/app/src/main/res/layout/root_rib.xml +++ b/app/src/main/res/layout/root_rib.xml @@ -1,6 +1,6 @@ - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/test/java/com/example/ribs_demo_android/ExampleUnitTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ExampleUnitTest.kt similarity index 87% rename from app/src/test/java/com/example/ribs_demo_android/ExampleUnitTest.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ExampleUnitTest.kt index 10c1c17..b6f2510 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ExampleUnitTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ExampleUnitTest.kt @@ -1,4 +1,4 @@ -package com.example.ribs_demo_android +package com.solacestudios.ribs_demo_android import org.junit.Test diff --git a/app/src/test/java/com/example/ribs_demo_android/network/FakeResponse.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/network/FakeResponse.kt similarity index 78% rename from app/src/test/java/com/example/ribs_demo_android/network/FakeResponse.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/network/FakeResponse.kt index 7d30616..a3e5fb4 100644 --- a/app/src/test/java/com/example/ribs_demo_android/network/FakeResponse.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/network/FakeResponse.kt @@ -1,9 +1,9 @@ -package com.example.ribs_demo_android.network +package com.solacestudios.ribs_demo_android.network -import com.example.ribs_demo_android.models.Catalogue -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.models.Catalogue +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.util.Resource object FakeResponse { diff --git a/app/src/test/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt similarity index 85% rename from app/src/test/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt index c9a2dee..1cbe9f8 100644 --- a/app/src/test/java/com/example/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/CatalogueRepositoryTest.kt @@ -1,9 +1,10 @@ -package com.example.ribs_demo_android.network.repository +package com.solacestudios.ribs_demo_android.network.repository -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.FakeResponse -import com.example.ribs_demo_android.ribs.root.home.catalogue.FakeCatalogueScheduler -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.FakeResponse +import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.FakeCatalogueScheduler +import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.Observable import org.junit.Before import org.junit.Test diff --git a/app/src/test/java/com/example/ribs_demo_android/network/repository/FakeCatalogueRepository.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/FakeCatalogueRepository.kt similarity index 60% rename from app/src/test/java/com/example/ribs_demo_android/network/repository/FakeCatalogueRepository.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/FakeCatalogueRepository.kt index 67e9f20..c503c17 100644 --- a/app/src/test/java/com/example/ribs_demo_android/network/repository/FakeCatalogueRepository.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/network/repository/FakeCatalogueRepository.kt @@ -1,11 +1,10 @@ -package com.example.ribs_demo_android.network.repository +package com.solacestudios.ribs_demo_android.network.repository -import com.example.ribs_demo_android.models.Catalogue -import com.example.ribs_demo_android.models.CatalogueDetail -import com.example.ribs_demo_android.models.CatalogueResponse -import com.example.ribs_demo_android.network.FakeResponse -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.FakeResponse +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.Observable class FakeCatalogueRepository: CatalogueRepository { diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt similarity index 86% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt index 5a24333..416e834 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/CategoryInteractorTest.kt @@ -1,10 +1,11 @@ -package com.example.ribs_demo_android.ribs.root.category - -import com.example.ribs_demo_android.network.CategoryService -import com.example.ribs_demo_android.network.FakeResponse -import com.example.ribs_demo_android.network.repository.CategoryRepositoryImpl -import com.example.ribs_demo_android.ribs.root.repository.CategoryRepository -import com.example.ribs_demo_android.util.Resource +package com.solacestudios.ribs_demo_android.ribs.root.category + +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.network.FakeResponse +import com.solacestudios.ribs_demo_android.repository.CategoryRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor +import com.solacestudios.ribs_demo_android.repository.CategoryRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.nhaarman.mockitokotlin2.verify import io.reactivex.Observable import org.junit.Before diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt similarity index 71% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt index ab320af..d3bdd38 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/category/FakeCategoryScheduler.kt @@ -1,5 +1,6 @@ -package com.example.ribs_demo_android.ribs.root.category +package com.solacestudios.ribs_demo_android.ribs.root.category +import com.solacestudios.ribs_demo_android.ribs.category.CategoryScheduler import io.reactivex.Scheduler import io.reactivex.schedulers.Schedulers diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt similarity index 84% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt index 53e5b4e..4b67749 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt @@ -1,20 +1,21 @@ -package com.example.ribs_demo_android - -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.FakeResponse -import com.example.ribs_demo_android.network.repository.CatalogueRepositoryImpl -import com.example.ribs_demo_android.ribs.root.home.catalogue.* -import com.example.ribs_demo_android.ribs.root.repository.CatalogueRepository -import com.example.ribs_demo_android.util.Resource +package com.solacestudios.ribs_demo_android + +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.FakeResponse +import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueRouter +import com.solacestudios.ribs_demo_android.ribs.catalogue.MutableDataStream +import com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.* +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.google.common.truth.Truth.assertThat -import com.uber.rib.core.RibTestBasePlaceholder import io.reactivex.Observable import org.junit.Before import org.junit.Test import org.mockito.Mock import org.mockito.Mockito.* import org.mockito.MockitoAnnotations -import retrofit2.HttpException import java.io.IOException class CatalogueInteractorTest { diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt similarity index 70% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt index 822ef1f..1e6da17 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/FakeCatalogueScheduler.kt @@ -1,5 +1,6 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue +package com.solacestudios.ribs_demo_android.ribs.root.home.catalogue +import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueScheduler import io.reactivex.Scheduler import io.reactivex.schedulers.Schedulers diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt similarity index 84% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt index a411399..de3dd7a 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt @@ -1,13 +1,12 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details - -import com.example.ribs_demo_android.network.CatalogueService -import com.example.ribs_demo_android.network.DetailsService -import com.example.ribs_demo_android.network.FakeResponse -import com.example.ribs_demo_android.network.repository.DetailsRepositoryImpl -import com.example.ribs_demo_android.ribs.root.home.catalogue.DataStream -import com.example.ribs_demo_android.ribs.root.repository.DetailsRepository -import com.example.ribs_demo_android.util.Resource -import com.google.common.truth.Truth.assertThat +package com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.details + +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.network.FakeResponse +import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream +import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor +import com.solacestudios.ribs_demo_android.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.util.Resource import com.nhaarman.mockitokotlin2.verify import io.reactivex.Observable import org.junit.Before diff --git a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt similarity index 69% rename from app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt rename to app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt index b2af2df..8f7d3c1 100644 --- a/app/src/test/java/com/example/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/FakeDetailsScheduler.kt @@ -1,5 +1,6 @@ -package com.example.ribs_demo_android.ribs.root.home.catalogue.details +package com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.details +import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler import io.reactivex.Scheduler import io.reactivex.schedulers.Schedulers From 4996daef83a6973407203a4e27451b59abfb9401 Mon Sep 17 00:00:00 2001 From: Michael Manahan Date: Fri, 16 Sep 2022 22:06:24 -0400 Subject: [PATCH 09/11] App Reorganization Refactor all code and packages and files to match our generator and desired layout --- app/build.gradle | 2 +- .../ExampleInstrumentedTest.kt | 2 +- .../ribs_demo_android/ribs/MainActivity.kt | 9 +- .../ribs/catalogue/CatalogueBuilder.kt | 177 +----------------- .../ribs/catalogue/CatalogueComponent.kt | 157 ++++++++++++++++ .../ribs/catalogue/CatalogueInteractor.kt | 27 +-- .../ribs/catalogue/CatalogueRouter.kt | 5 +- .../ribs/catalogue/CatalogueView.kt | 4 +- .../ribs/category/CategoryBuilder.kt | 145 +------------- .../ribs/category/CategoryComponent.kt | 108 +++++++++++ .../ribs/category/CategoryInteractor.kt | 24 +-- .../ribs/category/CategoryRouter.kt | 2 +- .../ribs/category/CategoryView.kt | 2 +- .../ribs/details/DetailsBuilder.kt | 83 +------- .../ribs/details/DetailsComponent.kt | 65 +++++++ .../ribs/details/DetailsInteractor.kt | 22 +-- .../ribs/details/DetailsRouter.kt | 2 +- .../ribs/details/DetailsView.kt | 2 +- .../ribs/home/HomeBuilder.kt | 155 +-------------- .../ribs/home/HomeComponent.kt | 124 ++++++++++++ .../ribs/home/HomeInteractor.kt | 11 +- .../ribs_demo_android/ribs/home/HomeRouter.kt | 4 +- .../ribs_demo_android/ribs/home/HomeView.kt | 2 +- .../ribs/root/RootBuilder.kt | 107 +---------- .../ribs/root/RootComponent.kt | 77 ++++++++ .../ribs/root/RootInteractor.kt | 13 +- .../ribs_demo_android/ribs/root/RootRouter.kt | 10 +- .../ribs_demo_android/ribs/root/RootView.kt | 2 +- .../{ribs/catalogue => util}/DataStream.kt | 2 +- .../catalogue => util}/MutableDataStream.kt | 2 +- .../home/catalogue/CatalogueInteractorTest.kt | 4 +- .../details/DetailsInteractorTest.kt | 4 +- 32 files changed, 634 insertions(+), 721 deletions(-) create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryComponent.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsComponent.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt create mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootComponent.kt rename app/src/main/java/com/solacestudios/ribs_demo_android/{ribs/catalogue => util}/DataStream.kt (72%) rename app/src/main/java/com/solacestudios/ribs_demo_android/{ribs/catalogue => util}/MutableDataStream.kt (88%) diff --git a/app/build.gradle b/app/build.gradle index 3d9fbcd..c149ca6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ android { compileSdk 32 defaultConfig { - applicationId "com.example.ribs_demo_android" + applicationId "com.solacestudios.ribs_demo_android" minSdk 23 targetSdk 32 versionCode 1 diff --git a/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt index 6b9ae8c..945ec7b 100644 --- a/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt +++ b/app/src/androidTest/java/com/solacestudios/ribs_demo_android/ExampleInstrumentedTest.kt @@ -19,6 +19,6 @@ class ExampleInstrumentedTest { fun useAppContext() { // Context of the app under test. val appContext = InstrumentationRegistry.getInstrumentation().targetContext - assertEquals("com.example.ribs_demo_android", appContext.packageName) + assertEquals("com.solacestudios.ribs_demo_android", appContext.packageName) } } \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt index d3be070..4a14f07 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/MainActivity.kt @@ -3,6 +3,9 @@ package com.solacestudios.ribs_demo_android.ribs import android.util.Log import android.view.ViewGroup import com.solacestudios.ribs_demo_android.ribs.root.RootBuilder +import com.solacestudios.ribs_demo_android.ribs.root.RootInteractor +import com.solacestudios.ribs_demo_android.ribs.root.RootView +import com.solacestudios.ribscodegen.root.RootComponent import com.uber.rib.core.RibActivity import com.uber.rib.core.ViewRouter import io.reactivex.exceptions.UndeliverableException @@ -12,9 +15,7 @@ import java.net.SocketException class MainActivity : RibActivity() { - override fun createRouter(parentViewGroup: ViewGroup): ViewRouter<*, *> { - val rootBuilder: RootBuilder = RootBuilder(object : RootBuilder.ParentComponent{}) - + override fun createRouter(parentViewGroup: ViewGroup): ViewRouter { RxJavaPlugins.setErrorHandler { e: Throwable -> var x = e if (x is UndeliverableException) { @@ -44,6 +45,6 @@ class MainActivity : RibActivity() { Log.println(Log.WARN,"Undeliverable exception received, not sure what to do", x.message!!) } - return rootBuilder.build(parentViewGroup) + return RootBuilder(object : RootComponent.ParentComponent {}).build(parentViewGroup) } } \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt index e9ac840..00342a9 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueBuilder.kt @@ -3,39 +3,15 @@ package com.solacestudios.ribs_demo_android.ribs.catalogue import android.view.LayoutInflater import android.view.ViewGroup import com.solacestudios.ribs_demo_android.R -import com.solacestudios.ribs_demo_android.network.CatalogueService -import com.solacestudios.ribs_demo_android.network.DetailsService -import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl -import com.solacestudios.ribs_demo_android.ribs.details.DetailsBuilder -import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor -import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler -import com.solacestudios.ribs_demo_android.ribs.details.DetailsSchedulerImpl -import com.solacestudios.ribs_demo_android.repository.CatalogueRepository -import com.solacestudios.ribs_demo_android.repository.DetailsRepository -import com.solacestudios.ribs_demo_android.util.Constants -import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder -import dagger.Binds -import dagger.BindsInstance -import dagger.Provides -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory -import retrofit2.converter.gson.GsonConverterFactory -import java.lang.annotation.Retention -import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Named -import javax.inject.Qualifier -import javax.inject.Scope /** * Builder for the {@link CatalogueScope}. * * TODO describe this scope's responsibility as a whole. */ -class CatalogueBuilder(dependency: ParentComponent) : - ViewBuilder(dependency) { +class CatalogueBuilder(dependency: CatalogueComponent.ParentComponent) : + ViewBuilder(dependency) { /** * Builds a new [CatalogueRouter]. @@ -47,12 +23,12 @@ class CatalogueBuilder(dependency: ParentComponent) : val view = createView(parentViewGroup) view.initViewIds() val interactor = CatalogueInteractor() - val component = DaggerCatalogueBuilder_Component.builder() + val component = DaggerCatalogueComponent.builder() .parentComponent(dependency) .view(view) .interactor(interactor) .build() - return component.catalogueRouter() + return component.getCatalogueRouter() } override fun inflateView(inflater: LayoutInflater, parentViewGroup: ViewGroup): CatalogueView { @@ -61,149 +37,4 @@ class CatalogueBuilder(dependency: ParentComponent) : return inflater.inflate(R.layout.catalogue_rib, parentViewGroup, false) as CatalogueView } - interface ParentComponent { - // TODO: Define dependencies required from your parent interactor here. - fun service(): CatalogueService - fun catalogueListener(): CatalogueInteractor.CatalogueListener - fun catalogueRepository(): CatalogueRepository - fun catalogueSchedulers(): CatalogueScheduler - } - - @dagger.Module - abstract class Module { - - @CatalogueScope - @Binds - internal abstract fun presenter(view: CatalogueView): CatalogueInteractor.CataloguePresenter - - @dagger.Module - companion object { - - var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( - HttpLoggingInterceptor.Level.BODY) - var clientCatalogue : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() - - @CatalogueScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: CatalogueView, - interactor: CatalogueInteractor - ): CatalogueRouter { - return CatalogueRouter( - view, - interactor, - component, - DetailsBuilder(component) - ) - } - - @CatalogueScope - @Provides - @JvmStatic - internal fun provideDetailsListener( - interactor: CatalogueInteractor - ): DetailsInteractor.DetailsListener { - return interactor.DetailsListener() - } - - @CatalogueScope - @CatalogueInternal - @Provides - internal fun provideMutableDataStream(): MutableDataStream { - return MutableDataStream("initial") - } - - @CatalogueScope - @Provides - fun provideDataStream(@CatalogueInternal mutableDataStream: MutableDataStream): DataStream { - return mutableDataStream - } - - - - @Provides - @Named("gson") - fun providesGsonConverterFactory(): GsonConverterFactory { - return GsonConverterFactory.create() - } - - @CatalogueScope - @Provides - @JvmStatic - @Named("catalogue_retrofit") - internal fun provideRetrofit( - @Named("gson") gsonConverterFactory: GsonConverterFactory - ): Retrofit { - return Retrofit.Builder() - .baseUrl(Constants.BASE_URL) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .addConverterFactory(gsonConverterFactory) - .client(clientCatalogue) - .build() - } - - @CatalogueScope - @Provides - @JvmStatic - internal fun provideService( - @Named("catalogue_retrofit") retrofit: Retrofit - ): DetailsService { - return retrofit.create(DetailsService::class.java) - } - - @CatalogueScope - @Provides - @JvmStatic - internal fun provideDetailsRepository( - service: DetailsService, - scheduler: DetailsScheduler - ): DetailsRepository { - return DetailsRepositoryImpl(service, scheduler) - } - - @CatalogueScope - @Provides - @JvmStatic - internal fun provideDetailsScheduler(): DetailsScheduler { - return DetailsSchedulerImpl() - } - } - - // TODO: Create provider methods for dependencies created by this Rib. These should be static. - } - - @CatalogueScope - @dagger.Component( - modules = arrayOf(Module::class), - dependencies = arrayOf(ParentComponent::class) - ) - interface Component : InteractorBaseComponent, DetailsBuilder.ParentComponent, - BuilderComponent { - - @dagger.Component.Builder - interface Builder { - @BindsInstance - fun interactor(interactor: CatalogueInteractor): Builder - - @BindsInstance - fun view(view: CatalogueView): Builder - - fun parentComponent(component: ParentComponent): Builder - fun build(): Component - } - } - - interface BuilderComponent { - fun catalogueRouter(): CatalogueRouter - } - - @Scope - @Retention(CLASS) - internal annotation class CatalogueScope - - @Qualifier - @Retention(CLASS) - internal annotation class CatalogueInternal } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt new file mode 100644 index 0000000..8219228 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt @@ -0,0 +1,157 @@ +package com.solacestudios.ribs_demo_android.ribs.catalogue + +import android.view.ViewGroup +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.details.DetailsBuilder +import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor +import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler +import com.solacestudios.ribs_demo_android.ribs.details.DetailsSchedulerImpl +import com.solacestudios.ribs_demo_android.util.Constants +import com.solacestudios.ribs_demo_android.ribs.details.DetailsComponent +import com.solacestudios.ribs_demo_android.util.DataStream +import com.solacestudios.ribs_demo_android.util.MutableDataStream +import com.uber.rib.core.InteractorBaseComponent +import dagger.* +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.lang.annotation.Retention +import java.lang.annotation.RetentionPolicy +import javax.inject.Named +import javax.inject.Qualifier +import javax.inject.Scope + +@CatalogueScope +@Component( + modules = [CatalogueModule::class], + dependencies = [CatalogueComponent.ParentComponent::class] +) +interface CatalogueComponent : InteractorBaseComponent, DetailsComponent.ParentComponent { + fun getCatalogueRouter(): CatalogueRouter + + interface ParentComponent { + fun service(): CatalogueService + fun catalogueListener(): CatalogueInteractor.Listener + fun catalogueRepository(): CatalogueRepository + fun catalogueSchedulers(): CatalogueScheduler + } + + @Component.Builder + interface Builder { + @BindsInstance + fun interactor(interactor: CatalogueInteractor): Builder + + @BindsInstance + fun view(view: CatalogueView): Builder + + fun parentComponent(component: ParentComponent): Builder + + fun build(): CatalogueComponent + } +} + +@Module +abstract class CatalogueModule { + @Binds + @CatalogueScope + internal abstract fun buildPresenter(view: CatalogueView): CatalogueInteractor.Presenter + + @Binds + @CatalogueScope + internal abstract fun buildContainerView(view: CatalogueView): ViewGroup + + @Module + companion object { + var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( + HttpLoggingInterceptor.Level.BODY) + var clientCatalogue : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() + + @CatalogueScope + @Provides + @JvmStatic + internal fun router(view: CatalogueView, component: CatalogueComponent, interactor: CatalogueInteractor): CatalogueRouter = + CatalogueRouter(view, interactor, component, DetailsBuilder(component)) + + @CatalogueScope + @Provides + @JvmStatic + internal fun provideDetailsParentListener(interactor: CatalogueInteractor): DetailsInteractor.Listener = + interactor.DetailsParentListener() + + @CatalogueScope + @CatalogueInternal + @Provides + internal fun provideMutableDataStream(): MutableDataStream { + return MutableDataStream("initial") + } + + @CatalogueScope + @Provides + fun provideDataStream(@CatalogueInternal mutableDataStream: MutableDataStream): DataStream { + return mutableDataStream + } + + + @Provides + @Named("gson") + fun providesGsonConverterFactory(): GsonConverterFactory { + return GsonConverterFactory.create() + } + + @CatalogueScope + @Provides + @JvmStatic + @Named("catalogue_retrofit") + internal fun provideRetrofit( + @Named("gson") gsonConverterFactory: GsonConverterFactory + ): Retrofit { + return Retrofit.Builder() + .baseUrl(Constants.BASE_URL) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .addConverterFactory(gsonConverterFactory) + .client(clientCatalogue) + .build() + } + + @CatalogueScope + @Provides + @JvmStatic + internal fun provideService( + @Named("catalogue_retrofit") retrofit: Retrofit + ): DetailsService { + return retrofit.create(DetailsService::class.java) + } + + @CatalogueScope + @Provides + @JvmStatic + internal fun provideDetailsRepository( + service: DetailsService, + scheduler: DetailsScheduler + ): DetailsRepository { + return DetailsRepositoryImpl(service, scheduler) + } + + @CatalogueScope + @Provides + @JvmStatic + internal fun provideDetailsScheduler(): DetailsScheduler { + return DetailsSchedulerImpl() + } + + } +} + +@Scope +@Retention(RetentionPolicy.CLASS) +internal annotation class CatalogueScope + +@Qualifier +@Retention(RetentionPolicy.CLASS) +internal annotation class CatalogueInternal \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt index 6bfaac2..8bf6460 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt @@ -6,6 +6,7 @@ import com.solacestudios.ribs_demo_android.models.CatalogueResponse import com.solacestudios.ribs_demo_android.network.CatalogueService import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.util.MutableDataStream import com.solacestudios.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor @@ -20,23 +21,23 @@ import javax.inject.Inject * TODO describe the logic of this scope. */ @RibInteractor -class CatalogueInteractor : Interactor() { +class CatalogueInteractor : Interactor() { companion object { const val TAG = "CatalogueInteractor" } @Inject - lateinit var presenter: CataloguePresenter + lateinit var buildPresenter: Presenter @Inject lateinit var catalogueService: CatalogueService @Inject - lateinit var catalogueListener: CatalogueListener + lateinit var catalogueListener: Listener @Inject lateinit var catalogueRepository: CatalogueRepository - @Inject @CatalogueBuilder.CatalogueInternal + @Inject @CatalogueInternal lateinit var dataStream: MutableDataStream @Inject @@ -61,7 +62,7 @@ class CatalogueInteractor : Interactor @@ -74,14 +75,14 @@ class CatalogueInteractor : Interactor) { when (state) { is Resource.Loading -> { - presenter.updateProgressbarState(true) + buildPresenter.updateProgressbarState(true) } is Resource.Success -> { - presenter.updateProgressbarState(false) - presenter.setupUI(state.data!!.brawlers) + buildPresenter.updateProgressbarState(false) + buildPresenter.setupUI(state.data!!.brawlers) } is Resource.Error -> { - presenter.updateProgressbarState(false) + buildPresenter.updateProgressbarState(false) } } } @@ -91,7 +92,7 @@ class CatalogueInteractor : Interactor) fun updateProgressbarState(isVisible: Boolean) fun onCategoryToggle(): Observable fun categoryTaps(): Observable } - interface CatalogueListener { + interface Listener { fun onClick() } - inner class DetailsListener: DetailsInteractor.DetailsListener { + inner class DetailsParentListener: DetailsInteractor.Listener { override fun onBackPress() { router.detachDetails() } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt index 7296550..2c0e773 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueRouter.kt @@ -6,17 +6,16 @@ import com.solacestudios.ribs_demo_android.ribs.details.DetailsRouter import com.uber.rib.core.ViewRouter /** - * Adds and removes children of {@link CatalogueBuilder.CatalogueScope}. + * Adds and removes children of {@link CatalogueScope}. * * TODO describe the possible child configurations of this scope. */ class CatalogueRouter( view: CatalogueView, interactor: CatalogueInteractor, - component: CatalogueBuilder.Component, + component: CatalogueComponent, private val detailsBuilder: DetailsBuilder ) : ViewRouter(view, interactor, component) { - private var detailsRouter: DetailsRouter? = null fun attachDetails() { diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt index 146c167..e344dfb 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueView.kt @@ -15,13 +15,13 @@ import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.subjects.PublishSubject /** - * Top level view for {@link CatalogueBuilder.CatalogueScope}. + * Top level view for {@link CatalogueScope}. */ class CatalogueView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 -) : ConstraintLayout(context, attrs, defStyle), CatalogueInteractor.CataloguePresenter { +) : ConstraintLayout(context, attrs, defStyle), CatalogueInteractor.Presenter { private lateinit var catalogueRecycler: RecyclerView private lateinit var progressBar: ProgressBar private lateinit var tvFilters: TextView diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt index 64c11e1..57869ec 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt @@ -3,167 +3,30 @@ package com.solacestudios.ribs_demo_android.ribs.category import android.view.LayoutInflater import android.view.ViewGroup import com.solacestudios.ribs_demo_android.R -import com.solacestudios.ribs_demo_android.network.CategoryService -import com.solacestudios.ribs_demo_android.util.Constants -import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder -import dagger.Binds -import dagger.BindsInstance -import dagger.Provides -import okhttp3.OkHttpClient -import retrofit2.Retrofit -import retrofit2.converter.gson.GsonConverterFactory -import java.lang.annotation.Retention -import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Named -import javax.inject.Qualifier -import javax.inject.Scope -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory /** * Builder for the {@link CategoryScope}. * * TODO describe this scope's responsibility as a whole. */ -class CategoryBuilder(dependency: ParentComponent) : - ViewBuilder(dependency) { +class CategoryBuilder(dependency: CategoryComponent.ParentComponent) : + ViewBuilder(dependency) { - /** - * Builds a new [CategoryRouter]. - * - * @param parentViewGroup parent view group that this router's view will be added to. - * @return a new [CategoryRouter]. - */ fun build(parentViewGroup: ViewGroup): CategoryRouter { - val view = createView(parentViewGroup) - view.initViewIds() val interactor = CategoryInteractor() - val component = DaggerCategoryBuilder_Component.builder() + val component = DaggerCategoryComponent.builder() .parentComponent(dependency) .view(view) .interactor(interactor) .build() - return component.categoryRouter() + return component.getCategoryRouter() } - override fun inflateView(inflater: LayoutInflater, parentViewGroup: ViewGroup): CategoryView { // TODO: Inflate a new view using the provided inflater, or create a new view programatically using the // provided context from the parentViewGroup. return inflater.inflate(R.layout.category_rib, parentViewGroup, false) as CategoryView } - interface ParentComponent { - // TODO: Define dependencies required from your parent interactor here. - fun categoryToggleListener(): CategoryInteractor.CategoryToggleListener - } - - @dagger.Module - abstract class Module { - - @CategoryScope - @Binds - internal abstract fun presenter(view: CategoryView): CategoryInteractor.CategoryPresenter - - @dagger.Module - companion object { - - var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel(HttpLoggingInterceptor.Level.BODY) - var client : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() - - - @Provides - fun providesGsonConverterFactory(): GsonConverterFactory { - return GsonConverterFactory.create() - } - - @CategoryScope - @Provides - @JvmStatic - internal fun provideRetrofit( - gsonConverterFactory: GsonConverterFactory - ): Retrofit { - return Retrofit.Builder() - .baseUrl(Constants.BASE_URL) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .addConverterFactory(gsonConverterFactory) - .client(client) - .build() - } - - @CategoryScope - @Provides - @JvmStatic - internal fun provideCategoryService( - retrofit: Retrofit - ): CategoryService { - return retrofit.create(CategoryService::class.java) - } - - @CategoryScope - @Provides - @JvmStatic - @Named("category") - internal fun provideCategorySchedulers(): CategoryScheduler { - return CategorySchedulerImpl() - } - -// @CategoryScope -// @Provides -// @JvmStatic -// @Named("categoryRepo") -// internal fun provideCategoryRepository( -// service: CategoryService, -// categoryScheduler: CategoryScheduler -// ): CategoryRepository { -// return CategoryRepositoryImpl(service, categoryScheduler) -// } - - @CategoryScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: CategoryView, - interactor: CategoryInteractor - ): CategoryRouter { - return CategoryRouter(view, interactor, component) - } - } - - // TODO: Create provider methods for dependencies created by this Rib. These should be static. - } - - @CategoryScope - @dagger.Component( - modules = arrayOf(Module::class), - dependencies = arrayOf(ParentComponent::class) - ) - interface Component : InteractorBaseComponent, BuilderComponent { - - @dagger.Component.Builder - interface Builder { - @BindsInstance - fun interactor(interactor: CategoryInteractor): Builder - - @BindsInstance - fun view(view: CategoryView): Builder - - fun parentComponent(component: ParentComponent): Builder - fun build(): Component - } - } - - interface BuilderComponent { - fun categoryRouter(): CategoryRouter - } - - @Scope - @Retention(CLASS) - internal annotation class CategoryScope - - @Qualifier - @Retention(CLASS) - internal annotation class CategoryInternal } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryComponent.kt new file mode 100644 index 0000000..c31b0ca --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryComponent.kt @@ -0,0 +1,108 @@ +package com.solacestudios.ribs_demo_android.ribs.category + +import android.view.ViewGroup +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.util.Constants +import com.uber.rib.core.InteractorBaseComponent +import dagger.* +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.lang.annotation.Retention +import java.lang.annotation.RetentionPolicy +import javax.inject.Named +import javax.inject.Scope + +@CategoryScope +@Component( + modules = [CategoryModule::class], + dependencies = [CategoryComponent.ParentComponent::class] +) +interface CategoryComponent : InteractorBaseComponent { + fun getCategoryRouter(): CategoryRouter + + interface ParentComponent { + fun categoryListener(): CategoryInteractor.Listener + } + + @Component.Builder + interface Builder { + @BindsInstance + fun interactor(interactor: CategoryInteractor): Builder + + @BindsInstance + fun view(view: CategoryView): Builder + + fun parentComponent(component: ParentComponent): Builder + + fun build(): CategoryComponent + } +} + +@Module +abstract class CategoryModule { + @Binds + @CategoryScope + internal abstract fun buildPresenter(view: CategoryView): CategoryInteractor.Presenter + + @Binds + @CategoryScope + internal abstract fun buildContainerView(view: CategoryView): ViewGroup + + @Module + companion object { + var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( + HttpLoggingInterceptor.Level.BODY) + var client : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() + + @CategoryScope + @Provides + @JvmStatic + internal fun router(view: CategoryView, component: CategoryComponent, interactor: CategoryInteractor): CategoryRouter = + CategoryRouter(view, interactor, component) + + @Provides + fun providesGsonConverterFactory(): GsonConverterFactory { + return GsonConverterFactory.create() + } + + @CategoryScope + @Provides + @JvmStatic + internal fun provideRetrofit( + gsonConverterFactory: GsonConverterFactory + ): Retrofit { + return Retrofit.Builder() + .baseUrl(Constants.BASE_URL) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .addConverterFactory(gsonConverterFactory) + .client(client) + .build() + } + + @CategoryScope + @Provides + @JvmStatic + internal fun provideCategoryService( + retrofit: Retrofit + ): CategoryService { + return retrofit.create(CategoryService::class.java) + } + + @CategoryScope + @Provides + @JvmStatic + @Named("category") + internal fun provideCategorySchedulers(): CategoryScheduler { + return CategorySchedulerImpl() + } + + + } +} + +@Scope +@Retention(RetentionPolicy.CLASS) +internal annotation class CategoryScope diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt index 83b3d98..41c5849 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryInteractor.kt @@ -21,18 +21,18 @@ import javax.inject.Named * TODO describe the logic of this scope. */ @RibInteractor -class CategoryInteractor : Interactor() { +class CategoryInteractor : Interactor() { companion object { const val TAG = "CategoryInteractor" } @Inject - lateinit var presenter: CategoryPresenter + lateinit var buildPresenter: Presenter @Inject lateinit var categoryService: CategoryService @Inject - lateinit var categoryToggleListener: CategoryToggleListener + lateinit var listener: Listener @Inject @Named("category") @@ -63,17 +63,17 @@ class CategoryInteractor : Interactor) { when (result) { is Resource.Loading -> { - presenter.updateProgressbarState(true) + buildPresenter.updateProgressbarState(true) } is Resource.Success -> { - presenter.setup(result.data?.brawlers!!) - presenter.updateProgressbarState(false) + buildPresenter.setup(result.data?.brawlers!!) + buildPresenter.updateProgressbarState(false) } is Resource.Error -> { - presenter.updateProgressbarState(false) + buildPresenter.updateProgressbarState(false) } } } @@ -119,14 +119,14 @@ class CategoryInteractor : Interactor) fun toggle(): Observable fun getChip(): Observable fun updateProgressbarState(isVisible: Boolean) } - interface CategoryToggleListener { + interface Listener { fun toggleCategory() } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt index 80fd3a9..41f63a9 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryRouter.kt @@ -10,5 +10,5 @@ import com.uber.rib.core.ViewRouter class CategoryRouter( view: CategoryView, interactor: CategoryInteractor, - component: CategoryBuilder.Component + component: CategoryComponent ) : ViewRouter(view, interactor, component) diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt index 6f38e7c..1c8fb71 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryView.kt @@ -25,7 +25,7 @@ class CategoryView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 -) : RelativeLayout(context, attrs, defStyle), CategoryInteractor.CategoryPresenter { +) : RelativeLayout(context, attrs, defStyle), CategoryInteractor.Presenter { private lateinit var categoryRecyclerView: RecyclerView private lateinit var tvHome: TextView private lateinit var chipGroup: ChipGroup diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt index ce0fd0e..c4d4720 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsBuilder.kt @@ -3,26 +3,15 @@ package com.solacestudios.ribs_demo_android.ribs.details import android.view.LayoutInflater import android.view.ViewGroup import com.solacestudios.ribs_demo_android.R -import com.solacestudios.ribs_demo_android.network.DetailsService -import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream -import com.solacestudios.ribs_demo_android.repository.DetailsRepository -import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder -import dagger.Binds -import dagger.BindsInstance -import dagger.Provides -import java.lang.annotation.Retention -import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Qualifier -import javax.inject.Scope /** * Builder for the {@link DetailsScope}. * * TODO describe this scope's responsibility as a whole. */ -class DetailsBuilder(dependency: ParentComponent) : - ViewBuilder(dependency) { +class DetailsBuilder(dependency: DetailsComponent.ParentComponent) : + ViewBuilder(dependency) { /** * Builds a new [DetailsRouter]. @@ -34,12 +23,12 @@ class DetailsBuilder(dependency: ParentComponent) : val view = createView(parentViewGroup) view.initViewIds() val interactor = DetailsInteractor() - val component = DaggerDetailsBuilder_Component.builder() + val component = DaggerDetailsComponent.builder() .parentComponent(dependency) .view(view) .interactor(interactor) .build() - return component.detailsRouter() + return component.getDetailsRouter() } override fun inflateView(inflater: LayoutInflater, parentViewGroup: ViewGroup): DetailsView { @@ -48,69 +37,7 @@ class DetailsBuilder(dependency: ParentComponent) : return inflater.inflate(R.layout.details_rib, parentViewGroup, false) as DetailsView } - interface ParentComponent { - // TODO: Define dependencies required from your parent interactor here. - fun detailsListener(): DetailsInteractor.DetailsListener - fun service(): DetailsService - fun dataSteam(): DataStream - fun detailsRepository(): DetailsRepository - fun detailsScheduler(): DetailsScheduler - } - - @dagger.Module - abstract class Module { - - @DetailsScope - @Binds - internal abstract fun presenter(view: DetailsView): DetailsInteractor.DetailsPresenter - - @dagger.Module - companion object { - - @DetailsScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: DetailsView, - interactor: DetailsInteractor - ): DetailsRouter { - return DetailsRouter(view, interactor, component) - } - } - // TODO: Create provider methods for dependencies created by this Rib. These should be static. - } - - @DetailsScope - @dagger.Component( - modules = arrayOf(Module::class), - dependencies = arrayOf(ParentComponent::class) - ) - interface Component : InteractorBaseComponent, BuilderComponent { - - @dagger.Component.Builder - interface Builder { - @BindsInstance - fun interactor(interactor: DetailsInteractor): Builder - - @BindsInstance - fun view(view: DetailsView): Builder - - fun parentComponent(component: ParentComponent): Builder - fun build(): Component - } - } - - interface BuilderComponent { - fun detailsRouter(): DetailsRouter - } +} - @Scope - @Retention(CLASS) - internal annotation class DetailsScope - @Qualifier - @Retention(CLASS) - internal annotation class DetailsInternal -} diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsComponent.kt new file mode 100644 index 0000000..784e821 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsComponent.kt @@ -0,0 +1,65 @@ +package com.solacestudios.ribs_demo_android.ribs.details + +import android.view.ViewGroup +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.repository.DetailsRepository +import com.solacestudios.ribs_demo_android.util.DataStream +import com.uber.rib.core.InteractorBaseComponent +import dagger.* +import java.lang.annotation.Retention +import java.lang.annotation.RetentionPolicy +import javax.inject.Scope + +@DetailsScope +@Component( + modules = [DetailsModule::class], + dependencies = [DetailsComponent.ParentComponent::class] +) +interface DetailsComponent : InteractorBaseComponent { + fun getDetailsRouter(): DetailsRouter + + interface ParentComponent { + fun detailsListener(): DetailsInteractor.Listener + fun service(): DetailsService + fun dataSteam(): DataStream + fun detailsRepository(): DetailsRepository + fun detailsScheduler(): DetailsScheduler + } + + @Component.Builder + interface Builder { + @BindsInstance + fun interactor(interactor: DetailsInteractor): Builder + + @BindsInstance + fun view(view: DetailsView): Builder + + fun parentComponent(component: ParentComponent): Builder + + fun build(): DetailsComponent + } +} + +@Module +abstract class DetailsModule { + @Binds + @DetailsScope + internal abstract fun buildPresenter(view: DetailsView): DetailsInteractor.Presenter + + @Binds + @DetailsScope + internal abstract fun buildContainerView(view: DetailsView): ViewGroup + + @Module + companion object { + @DetailsScope + @Provides + @JvmStatic + internal fun router(view: DetailsView, component: DetailsComponent, interactor: DetailsInteractor): DetailsRouter = + DetailsRouter(view, interactor, component) + } +} + +@Scope +@Retention(RetentionPolicy.CLASS) +internal annotation class DetailsScope diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt index 0f9206c..53bfba8 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt @@ -3,7 +3,7 @@ package com.solacestudios.ribs_demo_android.ribs.details import android.util.Log import com.solacestudios.ribs_demo_android.models.CatalogueDetail import com.solacestudios.ribs_demo_android.network.DetailsService -import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream +import com.solacestudios.ribs_demo_android.util.DataStream import com.solacestudios.ribs_demo_android.repository.DetailsRepository import com.solacestudios.ribs_demo_android.util.Resource import com.uber.rib.core.Bundle @@ -19,19 +19,19 @@ import javax.inject.Inject * TODO describe the logic of this scope. */ @RibInteractor -class DetailsInteractor : Interactor() { +class DetailsInteractor : Interactor() { companion object { const val TAG = "DetailsInteractor" } @Inject - lateinit var presenter: DetailsPresenter + lateinit var buildPresenter: Presenter @Inject lateinit var service: DetailsService @Inject - lateinit var detailsListener: DetailsListener + lateinit var detailsListener: Listener @Inject lateinit var dataStream: DataStream @@ -75,20 +75,20 @@ class DetailsInteractor : Interactor) { when (result) { is Resource.Loading -> { - presenter.updateProgressbarState(true) + buildPresenter.updateProgressbarState(true) } is Resource.Success -> { - presenter.setData(result.data!!) - presenter.updateProgressbarState(false) + buildPresenter.setData(result.data!!) + buildPresenter.updateProgressbarState(false) } is Resource.Error -> { - presenter.updateProgressbarState(false) + buildPresenter.updateProgressbarState(false) } } } fun onBack() { - presenter.onBack() + buildPresenter.onBack() .subscribeOn(detailsScheduler.main) .observeOn(detailsScheduler.main) .doOnSubscribe { disposables.add(it) } @@ -109,13 +109,13 @@ class DetailsInteractor : Interactor fun setData(data: CatalogueDetail) fun updateProgressbarState(isVisible: Boolean) } - interface DetailsListener { + interface Listener { fun onBackPress() } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt index 245309c..1a2d7f9 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsRouter.kt @@ -10,5 +10,5 @@ import com.uber.rib.core.ViewRouter class DetailsRouter( view: DetailsView, interactor: DetailsInteractor, - component: DetailsBuilder.Component + component: DetailsComponent ) : ViewRouter(view, interactor, component) diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt index 4ed0135..bfe6ba2 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt @@ -21,7 +21,7 @@ class DetailsView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 -) : ConstraintLayout(context, attrs, defStyle), DetailsInteractor.DetailsPresenter { +) : ConstraintLayout(context, attrs, defStyle), DetailsInteractor.Presenter { private lateinit var tvName: TextView private lateinit var tvRarity: TextView private lateinit var tvHp: TextView diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt index 400edf0..695cf44 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeBuilder.kt @@ -3,36 +3,15 @@ package com.solacestudios.ribs_demo_android.ribs.home import android.view.LayoutInflater import android.view.ViewGroup import com.solacestudios.ribs_demo_android.R -import com.solacestudios.ribs_demo_android.network.CatalogueService -import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl -import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueBuilder -import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor -import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueScheduler -import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueSchedulerImpl -import com.solacestudios.ribs_demo_android.repository.CatalogueRepository -import com.solacestudios.ribs_demo_android.util.Constants -import com.uber.rib.core.InteractorBaseComponent import com.uber.rib.core.ViewBuilder -import dagger.Binds -import dagger.BindsInstance -import dagger.Provides -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory -import retrofit2.converter.gson.GsonConverterFactory -import java.lang.annotation.Retention -import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Qualifier -import javax.inject.Scope /** * Builder for the {@link LogoutScope}. * * TODO describe this scope's responsibility as a whole. */ -class HomeBuilder(dependency: ParentComponent) : - ViewBuilder(dependency) { +class HomeBuilder(dependency: HomeComponent.ParentComponent) : + ViewBuilder(dependency) { /** * Builds a new [LogoutRouter]. @@ -43,12 +22,12 @@ class HomeBuilder(dependency: ParentComponent) : fun build(parentViewGroup: ViewGroup): HomeRouter { val view = createView(parentViewGroup) val interactor = HomeInteractor() - val component = DaggerHomeBuilder_Component.builder() + val component = DaggerHomeComponent.builder() .parentComponent(dependency) .view(view) .interactor(interactor) .build() - return component.logoutRouter() + return component.getHomeRouter() } override fun inflateView(inflater: LayoutInflater, parentViewGroup: ViewGroup): HomeView { @@ -56,130 +35,4 @@ class HomeBuilder(dependency: ParentComponent) : // provided context from the parentViewGroup. return inflater.inflate(R.layout.home_rib, parentViewGroup, false) as HomeView } - - interface ParentComponent { - // TODO: Define dependencies required from your parent interactor here. - //fun logoutListener(): LogoutInteractor.LogoutListener - fun homeToggleListener(): HomeInteractor.HomeToggleListener - } - - @dagger.Module - abstract class Module { - - @HomeScope - @Binds - internal abstract fun presenter(view: HomeView): HomeInteractor.HomePresenter - - @dagger.Module - companion object { - - var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( - HttpLoggingInterceptor.Level.BODY) - var clientHome : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() - - @HomeScope - @Provides - @JvmStatic - internal fun provideCatalogueListener( - interactor: HomeInteractor - ): CatalogueInteractor.CatalogueListener { - return interactor.HomeListener() - } - - @HomeScope - @Provides - @JvmStatic - internal fun provideRetrofit( - gsonConverterFactory: GsonConverterFactory - ): Retrofit { - return Retrofit.Builder() - .baseUrl(Constants.BASE_URL) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .addConverterFactory(gsonConverterFactory) - .client(clientHome) - .build() - } - - @HomeScope - @Provides - @JvmStatic - internal fun provideService( - retrofit: Retrofit, - ): CatalogueService { - return retrofit.create(CatalogueService::class.java) - } - - @HomeScope - @Provides - @JvmStatic - internal fun provideCatalogueRepository( - service: CatalogueService, - scheduler: CatalogueScheduler - ): CatalogueRepository { - return CatalogueRepositoryImpl(service, scheduler) - } - - @Provides - fun providesGsonConverterFactory(): GsonConverterFactory { - return GsonConverterFactory.create() - } - - @HomeScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: HomeView, - interactor: HomeInteractor, - ): HomeRouter { - return HomeRouter( - view, - interactor, - component, - CatalogueBuilder(component) - ) - } - - @HomeScope - @Provides - @JvmStatic - internal fun provideCatalogueSchedulers(): CatalogueScheduler { - return CatalogueSchedulerImpl() - } - // TODO: Create provider methods for dependencies created by this Rib. These should be static. - } - } - - @HomeScope - @dagger.Component( - modules = arrayOf(Module::class), - dependencies = arrayOf(ParentComponent::class) - ) - interface Component : InteractorBaseComponent, CatalogueBuilder.ParentComponent, - BuilderComponent { - - @dagger.Component.Builder - interface Builder { - @BindsInstance - fun interactor(interactor: HomeInteractor): Builder - - @BindsInstance - fun view(view: HomeView): Builder - - fun parentComponent(component: ParentComponent): Builder - fun build(): Component - } - } - - interface BuilderComponent { - fun logoutRouter(): HomeRouter - } - - @Scope - @Retention(CLASS) - internal annotation class HomeScope - - @Qualifier - @Retention(CLASS) - internal annotation class HomeInternal } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt new file mode 100644 index 0000000..115e556 --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt @@ -0,0 +1,124 @@ +package com.solacestudios.ribs_demo_android.ribs.home + +import android.view.ViewGroup +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.repository.CatalogueRepository +import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl +import com.solacestudios.ribs_demo_android.ribs.catalogue.* +import com.solacestudios.ribs_demo_android.util.Constants +import com.uber.rib.core.InteractorBaseComponent +import dagger.* +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.lang.annotation.Retention +import java.lang.annotation.RetentionPolicy +import javax.inject.Scope + +@HomeScope +@Component( + modules = [HomeModule::class], + dependencies = [HomeComponent.ParentComponent::class] +) +interface HomeComponent : InteractorBaseComponent, CatalogueComponent.ParentComponent { + fun getHomeRouter(): HomeRouter + + interface ParentComponent { + fun homeListener(): HomeInteractor.Listener + } + + @Component.Builder + interface Builder { + @BindsInstance + fun interactor(interactor: HomeInteractor): Builder + + @BindsInstance + fun view(view: HomeView): Builder + + fun parentComponent(component: ParentComponent): Builder + + fun build(): HomeComponent + } +} + +@Module +abstract class HomeModule { + @Binds + @HomeScope + internal abstract fun buildPresenter(view: HomeView): HomeInteractor.Presenter + + @Binds + @HomeScope + internal abstract fun buildContainerView(view: HomeView): ViewGroup + + @Module + companion object { + + var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( + HttpLoggingInterceptor.Level.BODY) + var clientHome : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() + + @HomeScope + @Provides + @JvmStatic + internal fun router(view: HomeView, component: HomeComponent, interactor: HomeInteractor): HomeRouter = + HomeRouter(view, interactor, component, CatalogueBuilder(component)) + + @HomeScope + @Provides + @JvmStatic + internal fun provideCatalogueParentListener(interactor: HomeInteractor): CatalogueInteractor.Listener = + interactor.CatalogueParentListener() + + @HomeScope + @Provides + @JvmStatic + internal fun provideRetrofit( + gsonConverterFactory: GsonConverterFactory + ): Retrofit { + return Retrofit.Builder() + .baseUrl(Constants.BASE_URL) + .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) + .addConverterFactory(gsonConverterFactory) + .client(clientHome) + .build() + } + + @HomeScope + @Provides + @JvmStatic + internal fun provideService( + retrofit: Retrofit, + ): CatalogueService { + return retrofit.create(CatalogueService::class.java) + } + + @HomeScope + @Provides + @JvmStatic + internal fun provideCatalogueRepository( + service: CatalogueService, + scheduler: CatalogueScheduler + ): CatalogueRepository { + return CatalogueRepositoryImpl(service, scheduler) + } + + @HomeScope + @Provides + @JvmStatic + internal fun provideCatalogueSchedulers(): CatalogueScheduler { + return CatalogueSchedulerImpl() + } + + @Provides + fun providesGsonConverterFactory(): GsonConverterFactory { + return GsonConverterFactory.create() + } + } +} + +@Scope +@Retention(RetentionPolicy.CLASS) +internal annotation class HomeScope diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt index 8846009..5306e5e 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt @@ -15,7 +15,7 @@ import javax.inject.Inject class HomeInteractor : Interactor() { @Inject - lateinit var homeToggleListener: HomeToggleListener + lateinit var listener: Listener override fun didBecomeActive(savedInstanceState: Bundle?) { super.didBecomeActive(savedInstanceState) @@ -30,15 +30,16 @@ class HomeInteractor : Interactor() { // TODO: Perform any required clean up here, or delete this method entirely if not needed. } - interface HomePresenter + interface Presenter - inner class HomeListener: CatalogueInteractor.CatalogueListener { + inner class CatalogueParentListener: CatalogueInteractor.Listener { override fun onClick() { - homeToggleListener.toggleHome() + listener.toggleHome() } } - interface HomeToggleListener { + + interface Listener { fun toggleHome() } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt index d3cd4a7..15b6c22 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeRouter.kt @@ -5,14 +5,14 @@ import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueRouter import com.uber.rib.core.ViewRouter /** - * Adds and removes children of {@link HomeBuilder.HomeScope}. + * Adds and removes children of {@link HomeScope}. * * TODO describe the possible child configurations of this scope. */ class HomeRouter( view: HomeView, interactor: HomeInteractor, - component: HomeBuilder.Component, + component: HomeComponent, private val catalogueBuilder: CatalogueBuilder ) : ViewRouter(view, interactor, component) { diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt index 07668c9..a6aee59 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeView.kt @@ -11,4 +11,4 @@ class HomeView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 -) : LinearLayout(context, attrs, defStyle), HomeInteractor.HomePresenter +) : LinearLayout(context, attrs, defStyle), HomeInteractor.Presenter diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt index a75f971..ae4fea7 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootBuilder.kt @@ -3,27 +3,17 @@ package com.solacestudios.ribs_demo_android.ribs.root import android.view.LayoutInflater import android.view.ViewGroup import com.solacestudios.ribs_demo_android.R -import com.solacestudios.ribs_demo_android.ribs.category.CategoryBuilder -import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor -import com.solacestudios.ribs_demo_android.ribs.home.HomeBuilder -import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor -import com.uber.rib.core.InteractorBaseComponent +import com.solacestudios.ribscodegen.root.DaggerRootComponent +import com.solacestudios.ribscodegen.root.RootComponent import com.uber.rib.core.ViewBuilder -import dagger.Binds -import dagger.BindsInstance -import dagger.Provides -import java.lang.annotation.Retention -import java.lang.annotation.RetentionPolicy.CLASS -import javax.inject.Qualifier -import javax.inject.Scope /** * Builder for the {@link RootScope}. * * TODO describe this scope's responsibility as a whole. */ -class RootBuilder(dependency: ParentComponent) : - ViewBuilder(dependency) { +class RootBuilder(dependency: RootComponent.ParentComponent) : + ViewBuilder(dependency) { /** * Builds a new [RootRouter]. @@ -34,12 +24,12 @@ class RootBuilder(dependency: ParentComponent) : fun build(parentViewGroup: ViewGroup): RootRouter { val view = createView(parentViewGroup) val interactor = RootInteractor() - val component = DaggerRootBuilder_Component.builder() + val component = DaggerRootComponent.builder() .parentComponent(dependency) .view(view) .interactor(interactor) .build() - return component.rootRouter() + return component.getRootRouter() } override fun inflateView(inflater: LayoutInflater, parentViewGroup: ViewGroup): RootView { @@ -48,89 +38,4 @@ class RootBuilder(dependency: ParentComponent) : return inflater.inflate(R.layout.root_rib, parentViewGroup, false) as RootView } - interface ParentComponent { - // TODO: Define dependencies required from your parent interactor here. - } - - @dagger.Module - abstract class Module { - - @RootScope - @Binds - internal abstract fun presenter(view: RootView): RootInteractor.RootPresenter - - @dagger.Module - companion object { - - @RootScope - @Provides - @JvmStatic - internal fun provideHomeListener( - interactor: RootInteractor - ): HomeInteractor.HomeToggleListener { - return interactor.RootListener() - } - - @RootScope - @Provides - @JvmStatic - internal fun provideCategoryListener( - interactor: RootInteractor - ): CategoryInteractor.CategoryToggleListener { - return interactor.RootCategoryListener() - } - - @RootScope - @Provides - @JvmStatic - internal fun router( - component: Component, - view: RootView, - interactor: RootInteractor - ): RootRouter { - return RootRouter( - view, - interactor, - component, - HomeBuilder(component), - CategoryBuilder(component) - ) - } - } - - // TODO: Create provider methods for dependencies created by this Rib. These should be static. - } - - @RootScope - @dagger.Component( - modules = arrayOf(Module::class), - dependencies = arrayOf(ParentComponent::class) - ) - interface Component : InteractorBaseComponent, HomeBuilder.ParentComponent, CategoryBuilder.ParentComponent, - BuilderComponent { - - @dagger.Component.Builder - interface Builder { - @BindsInstance - fun interactor(interactor: RootInteractor): Builder - - @BindsInstance - fun view(view: RootView): Builder - - fun parentComponent(component: ParentComponent): Builder - fun build(): Component - } - } - - interface BuilderComponent { - fun rootRouter(): RootRouter - } - - @Scope - @Retention(CLASS) - internal annotation class RootScope - - @Qualifier - @Retention(CLASS) - internal annotation class RootInternal } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootComponent.kt new file mode 100644 index 0000000..688f35a --- /dev/null +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootComponent.kt @@ -0,0 +1,77 @@ +package com.solacestudios.ribscodegen.root + +import android.view.ViewGroup +import com.solacestudios.ribs_demo_android.ribs.root.RootInteractor +import com.solacestudios.ribs_demo_android.ribs.root.RootRouter +import com.solacestudios.ribs_demo_android.ribs.root.RootView +import com.solacestudios.ribs_demo_android.ribs.category.CategoryBuilder +import com.solacestudios.ribs_demo_android.ribs.category.CategoryComponent +import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor +import com.solacestudios.ribs_demo_android.ribs.home.HomeBuilder +import com.solacestudios.ribs_demo_android.ribs.home.HomeComponent +import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor +import com.uber.rib.core.InteractorBaseComponent +import dagger.* +import java.lang.annotation.Retention +import java.lang.annotation.RetentionPolicy +import javax.inject.Scope + +@RootScope +@Component( + modules = [RootModule::class], + dependencies = [RootComponent.ParentComponent::class] +) +interface RootComponent : InteractorBaseComponent, CategoryComponent.ParentComponent, HomeComponent.ParentComponent { + fun getRootRouter(): RootRouter + + interface ParentComponent + + @Component.Builder + interface Builder { + @BindsInstance + fun interactor(interactor: RootInteractor): Builder + + @BindsInstance + fun view(view: RootView): Builder + + fun parentComponent(component: ParentComponent): Builder + + fun build(): RootComponent + } +} + +@Module +abstract class RootModule { + @Binds + @RootScope + internal abstract fun buildPresenter(view: RootView): RootInteractor.Presenter + + @Binds + @RootScope + internal abstract fun buildContainerView(view: RootView): ViewGroup + + @Module + companion object { + @RootScope + @Provides + @JvmStatic + internal fun router(view: RootView, component: RootComponent, interactor: RootInteractor): RootRouter = + RootRouter(view, interactor, component, CategoryBuilder(component), HomeBuilder(component)) + + @RootScope + @Provides + @JvmStatic + internal fun provideCategoryParentListener(interactor: RootInteractor): CategoryInteractor.Listener = + interactor.CategoryParentListener() + + @RootScope + @Provides + @JvmStatic + internal fun provideHomeParentListener(interactor: RootInteractor): HomeInteractor.Listener = + interactor.HomeParentListener() + } +} + +@Scope +@Retention(RetentionPolicy.CLASS) +internal annotation class RootScope diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt index 25706ad..916e737 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt @@ -4,6 +4,7 @@ import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor +import com.uber.rib.core.Presenter import com.uber.rib.core.RibInteractor import javax.inject.Inject @@ -13,10 +14,10 @@ import javax.inject.Inject * TODO describe the logic of this scope. */ @RibInteractor -class RootInteractor : Interactor() { +class RootInteractor : Interactor() { @Inject - lateinit var presenter: RootPresenter + lateinit var buildPresenter: Presenter override fun didBecomeActive(savedInstanceState: Bundle?) { super.didBecomeActive(savedInstanceState) @@ -34,19 +35,19 @@ class RootInteractor : Interactor() { /** * Presenter interface implemented by this RIB's view. */ - interface RootPresenter + interface Presenter - inner class RootListener: HomeInteractor.HomeToggleListener { + inner class HomeParentListener : HomeInteractor.Listener { override fun toggleHome() { router.detachHome() router.attachCategory() } } - - inner class RootCategoryListener: CategoryInteractor.CategoryToggleListener { + inner class CategoryParentListener : CategoryInteractor.Listener { override fun toggleCategory() { router.detachCategory() router.attachHome() } } + } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt index fcbeab6..a7b9221 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootRouter.kt @@ -4,6 +4,7 @@ import com.solacestudios.ribs_demo_android.ribs.category.CategoryBuilder import com.solacestudios.ribs_demo_android.ribs.category.CategoryRouter import com.solacestudios.ribs_demo_android.ribs.home.HomeBuilder import com.solacestudios.ribs_demo_android.ribs.home.HomeRouter +import com.solacestudios.ribscodegen.root.RootComponent import com.uber.rib.core.ViewRouter @@ -15,13 +16,12 @@ import com.uber.rib.core.ViewRouter class RootRouter( view: RootView, interactor: RootInteractor, - component: RootBuilder.Component, - private val homeBuilder: HomeBuilder, - private val categoryBuilder: CategoryBuilder + component: RootComponent, + private val categoryBuilder: CategoryBuilder, + private val homeBuilder: HomeBuilder ) : ViewRouter(view, interactor, component) { - - private var homeRouter: HomeRouter? = null private var categoryRouter: CategoryRouter? = null + private var homeRouter: HomeRouter? = null fun attachHome() { homeRouter = homeBuilder.build(view) diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt index 8fa1980..0b04e26 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootView.kt @@ -11,4 +11,4 @@ class RootView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyle: Int = 0 -) : LinearLayout(context, attrs, defStyle), RootInteractor.RootPresenter +) : LinearLayout(context, attrs, defStyle), RootInteractor.Presenter diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/util/DataStream.kt similarity index 72% rename from app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/util/DataStream.kt index d2987f3..54c7202 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/DataStream.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/util/DataStream.kt @@ -1,4 +1,4 @@ -package com.solacestudios.ribs_demo_android.ribs.catalogue +package com.solacestudios.ribs_demo_android.util import io.reactivex.rxjava3.core.Observable diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/util/MutableDataStream.kt similarity index 88% rename from app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/util/MutableDataStream.kt index 8c47f8a..fd8f17a 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/MutableDataStream.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/util/MutableDataStream.kt @@ -1,4 +1,4 @@ -package com.solacestudios.ribs_demo_android.ribs.catalogue +package com.solacestudios.ribs_demo_android.util import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.subjects.PublishSubject diff --git a/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt index 4b67749..9281bac 100644 --- a/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/CatalogueInteractorTest.kt @@ -5,7 +5,7 @@ import com.solacestudios.ribs_demo_android.network.FakeResponse import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueRouter -import com.solacestudios.ribs_demo_android.ribs.catalogue.MutableDataStream +import com.solacestudios.ribs_demo_android.util.MutableDataStream import com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.* import com.solacestudios.ribs_demo_android.repository.CatalogueRepository import com.solacestudios.ribs_demo_android.util.Resource @@ -44,7 +44,7 @@ class CatalogueInteractorTest { interactor = CatalogueInteractor() interactor.catalogueRepository = repository - interactor.presenter = presenter + interactor.buildPresenter = presenter interactor.catalogueScheduler = fakeScheduler interactor.catalogueListener = listener interactor.dataStream = dataStream diff --git a/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt index de3dd7a..e1ccfc6 100644 --- a/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt +++ b/app/src/test/java/com/solacestudios/ribs_demo_android/ribs/root/home/catalogue/details/DetailsInteractorTest.kt @@ -3,7 +3,7 @@ package com.solacestudios.ribs_demo_android.ribs.root.home.catalogue.details import com.solacestudios.ribs_demo_android.network.DetailsService import com.solacestudios.ribs_demo_android.network.FakeResponse import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl -import com.solacestudios.ribs_demo_android.ribs.catalogue.DataStream +import com.solacestudios.ribs_demo_android.util.DataStream import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor import com.solacestudios.ribs_demo_android.repository.DetailsRepository import com.solacestudios.ribs_demo_android.util.Resource @@ -39,7 +39,7 @@ class DetailsInteractorTest { interactor.detailsRepository = repository interactor.dataStream = datastream interactor.service = service - interactor.presenter = presenter + interactor.buildPresenter = presenter interactor.detailsListener = listener } From c49f9fdb09866c2614a76eb403d8a34ad289bba5 Mon Sep 17 00:00:00 2001 From: Michael Manahan Date: Fri, 16 Sep 2022 23:23:34 -0400 Subject: [PATCH 10/11] View init ids --- .../ribs_demo_android/ribs/category/CategoryBuilder.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt index 57869ec..6a36f08 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryBuilder.kt @@ -15,6 +15,7 @@ class CategoryBuilder(dependency: CategoryComponent.ParentComponent) : fun build(parentViewGroup: ViewGroup): CategoryRouter { val view = createView(parentViewGroup) + view.initViewIds() val interactor = CategoryInteractor() val component = DaggerCategoryComponent.builder() .parentComponent(dependency) From 818fccddc871d1586d2875112df868dd8cd4f3e2 Mon Sep 17 00:00:00 2001 From: Michael Manahan Date: Fri, 30 Sep 2022 11:45:07 -0400 Subject: [PATCH 11/11] Remove Individual Scheduler files with RIBs Scheduler --- .../repository/CatalogueRepository.kt | 17 ++++++++++- .../repository/CatalogueRepositoryImpl.kt | 24 --------------- .../repository/CategoryRepository.kt | 11 +++++++ .../repository/CategoryRepositoryImpl.kt | 18 ------------ .../repository/DetailsRepository.kt | 11 ++++++- .../repository/DetailsRepositoryImpl.kt | 18 ------------ .../ribs/catalogue/CatalogueComponent.kt | 29 +++++++++---------- .../ribs/catalogue/CatalogueInteractor.kt | 15 ++++++++-- .../ribs/catalogue/CatalogueScheduler.kt | 21 -------------- .../ribs/category/CategoryComponent.kt | 18 ++++-------- .../ribs/category/CategoryInteractor.kt | 12 ++++---- .../ribs/category/CategoryScheduler.kt | 20 ------------- .../ribs/details/DetailsComponent.kt | 3 +- .../ribs/details/DetailsInteractor.kt | 12 ++++++-- .../ribs/details/DetailsView.kt | 1 + .../ribs/home/HomeComponent.kt | 21 ++++++-------- .../ribs/home/HomeInteractor.kt | 3 ++ .../ribs/root/RootInteractor.kt | 5 ++++ .../RibsScheduler.kt} | 8 ++--- app/src/main/res/layout/home_rib.xml | 3 +- 20 files changed, 111 insertions(+), 159 deletions(-) delete mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt delete mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt delete mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt delete mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueScheduler.kt delete mode 100644 app/src/main/java/com/solacestudios/ribs_demo_android/ribs/category/CategoryScheduler.kt rename app/src/main/java/com/solacestudios/ribs_demo_android/{ribs/details/DetailsScheduler.kt => util/RibsScheduler.kt} (77%) diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt index 9ba6f47..32f3986 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepository.kt @@ -2,6 +2,8 @@ package com.solacestudios.ribs_demo_android.repository import com.solacestudios.ribs_demo_android.models.CatalogueDetail import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CatalogueService +import com.solacestudios.ribs_demo_android.network.createResult import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.rxjava3.core.Observable @@ -10,4 +12,17 @@ interface CatalogueRepository { fun getAll(page: Int): Observable> fun getDetail(name: String): Observable> -} \ No newline at end of file +} + +class CatalogueRepositoryImpl( + private val catalogueService: CatalogueService +) : CatalogueRepository { + + override fun getAll(page: Int): Observable> { + return createResult(catalogueService.getAll(page)) + } + + override fun getDetail(name: String): Observable> { + return createResult(catalogueService.getDetail(name)) + } +} diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt deleted file mode 100644 index 837e39b..0000000 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CatalogueRepositoryImpl.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.solacestudios.ribs_demo_android.repository - -import com.solacestudios.ribs_demo_android.models.CatalogueDetail -import com.solacestudios.ribs_demo_android.models.CatalogueResponse -import com.solacestudios.ribs_demo_android.network.CatalogueService -import com.solacestudios.ribs_demo_android.network.createResult -import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueScheduler -import com.solacestudios.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -class CatalogueRepositoryImpl( - private val catalogueService: CatalogueService, - private val scheduler: CatalogueScheduler -) : CatalogueRepository { - - override fun getAll(page: Int): Observable> { - return createResult(catalogueService.getAll(page)) - } - - override fun getDetail(name: String): Observable> { - return createResult(catalogueService.getDetail(name)) - } -} - diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt index c68616f..1bc52ac 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepository.kt @@ -1,6 +1,8 @@ package com.solacestudios.ribs_demo_android.repository import com.solacestudios.ribs_demo_android.models.CatalogueResponse +import com.solacestudios.ribs_demo_android.network.CategoryService +import com.solacestudios.ribs_demo_android.network.createResult import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.rxjava3.core.Observable @@ -8,4 +10,13 @@ import io.reactivex.rxjava3.core.Observable interface CategoryRepository { fun getByRarity(rarity: String): Observable> +} + +class CategoryRepositoryImpl( + private val categoryService: CategoryService, +) : CategoryRepository { + + override fun getByRarity(rarity: String): Observable> { + return createResult(categoryService.getByRarity(rarity)) + } } \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt deleted file mode 100644 index b5c154f..0000000 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/CategoryRepositoryImpl.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.solacestudios.ribs_demo_android.repository - -import com.solacestudios.ribs_demo_android.models.CatalogueResponse -import com.solacestudios.ribs_demo_android.network.CategoryService -import com.solacestudios.ribs_demo_android.network.createResult -import com.solacestudios.ribs_demo_android.ribs.category.CategoryScheduler -import com.solacestudios.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -class CategoryRepositoryImpl( - private val categoryService: CategoryService, - private val categoryScheduler: CategoryScheduler -) : CategoryRepository { - - override fun getByRarity(rarity: String): Observable> { - return createResult(categoryService.getByRarity(rarity)) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt index be310e6..fb435b5 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepository.kt @@ -1,10 +1,19 @@ package com.solacestudios.ribs_demo_android.repository import com.solacestudios.ribs_demo_android.models.CatalogueDetail +import com.solacestudios.ribs_demo_android.network.DetailsService +import com.solacestudios.ribs_demo_android.network.createResult import com.solacestudios.ribs_demo_android.util.Resource import io.reactivex.rxjava3.core.Observable interface DetailsRepository { - fun getDetail(name: String): Observable> +} + +class DetailsRepositoryImpl( + private val detailsService: DetailsService +) : DetailsRepository { + override fun getDetail(name: String): Observable> { + return createResult(detailsService.getDetail(name)) + } } \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt deleted file mode 100644 index d19d8f4..0000000 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/repository/DetailsRepositoryImpl.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.solacestudios.ribs_demo_android.repository - -import com.solacestudios.ribs_demo_android.models.CatalogueDetail -import com.solacestudios.ribs_demo_android.network.DetailsService -import com.solacestudios.ribs_demo_android.network.createResult -import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler -import com.solacestudios.ribs_demo_android.util.Resource -import io.reactivex.rxjava3.core.Observable - -class DetailsRepositoryImpl( - private val detailsService: DetailsService, - private val detailsScheduler: DetailsScheduler -) : DetailsRepository { - - override fun getDetail(name: String): Observable> { - return createResult(detailsService.getDetail(name)) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt index 8219228..87e82a1 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueComponent.kt @@ -8,8 +8,6 @@ import com.solacestudios.ribs_demo_android.repository.DetailsRepository import com.solacestudios.ribs_demo_android.repository.DetailsRepositoryImpl import com.solacestudios.ribs_demo_android.ribs.details.DetailsBuilder import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor -import com.solacestudios.ribs_demo_android.ribs.details.DetailsScheduler -import com.solacestudios.ribs_demo_android.ribs.details.DetailsSchedulerImpl import com.solacestudios.ribs_demo_android.util.Constants import com.solacestudios.ribs_demo_android.ribs.details.DetailsComponent import com.solacestudios.ribs_demo_android.util.DataStream @@ -39,7 +37,6 @@ interface CatalogueComponent : InteractorBaseComponent, Det fun service(): CatalogueService fun catalogueListener(): CatalogueInteractor.Listener fun catalogueRepository(): CatalogueRepository - fun catalogueSchedulers(): CatalogueScheduler } @Component.Builder @@ -68,22 +65,32 @@ abstract class CatalogueModule { @Module companion object { - var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( - HttpLoggingInterceptor.Level.BODY) + var logging : HttpLoggingInterceptor = run { + val httpLoggingInterceptor = HttpLoggingInterceptor() + httpLoggingInterceptor.apply { + httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY + } + } var clientCatalogue : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() @CatalogueScope @Provides @JvmStatic - internal fun router(view: CatalogueView, component: CatalogueComponent, interactor: CatalogueInteractor): CatalogueRouter = + internal fun router(view: CatalogueView, + component: CatalogueComponent, + interactor: CatalogueInteractor): CatalogueRouter = CatalogueRouter(view, interactor, component, DetailsBuilder(component)) + + //Provide Details Interactor's Listener to DetailsParent Catalogue @CatalogueScope @Provides @JvmStatic internal fun provideDetailsParentListener(interactor: CatalogueInteractor): DetailsInteractor.Listener = interactor.DetailsParentListener() + + //Provide Mutable Data Stream @CatalogueScope @CatalogueInternal @Provides @@ -133,16 +140,8 @@ abstract class CatalogueModule { @JvmStatic internal fun provideDetailsRepository( service: DetailsService, - scheduler: DetailsScheduler ): DetailsRepository { - return DetailsRepositoryImpl(service, scheduler) - } - - @CatalogueScope - @Provides - @JvmStatic - internal fun provideDetailsScheduler(): DetailsScheduler { - return DetailsSchedulerImpl() + return DetailsRepositoryImpl(service) } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt index 8bf6460..a812fed 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/catalogue/CatalogueInteractor.kt @@ -8,6 +8,8 @@ import com.solacestudios.ribs_demo_android.ribs.details.DetailsInteractor import com.solacestudios.ribs_demo_android.repository.CatalogueRepository import com.solacestudios.ribs_demo_android.util.MutableDataStream import com.solacestudios.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.util.RibsScheduler +import com.solacestudios.ribs_demo_android.util.RibsSchedulerImpl import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor @@ -24,6 +26,7 @@ import javax.inject.Inject class CatalogueInteractor : Interactor() { companion object { const val TAG = "CatalogueInteractor" + var catalogueScheduler: RibsScheduler = RibsSchedulerImpl() } @Inject lateinit var buildPresenter: Presenter @@ -40,8 +43,6 @@ class CatalogueInteractor : Interactor) { + when (state) { is Resource.Loading -> { + Log.e(this.javaClass.name, "Handle Result: " + "Loading") + buildPresenter.updateProgressbarState(true) } is Resource.Success -> { + Log.e(this.javaClass.name, "Handle Result: " + "Success") + buildPresenter.updateProgressbarState(false) buildPresenter.setupUI(state.data!!.brawlers) } is Resource.Error -> { + Log.e(this.javaClass.name, "Handle Result: " + "Error") + buildPresenter.updateProgressbarState(false) } } } fun getInitialData(page: Int): Observable> { + Log.e(this.javaClass.name, "getInitialData ") + return catalogueRepository.getAll(1) } @@ -125,6 +135,7 @@ class CatalogueInteractor : Interactor() { companion object { const val TAG = "CategoryInteractor" + var categoryScheduler: RibsScheduler = RibsSchedulerImpl() } @Inject lateinit var buildPresenter: Presenter @@ -34,10 +37,6 @@ class CategoryInteractor : Interactor { interface ParentComponent { fun detailsListener(): DetailsInteractor.Listener fun service(): DetailsService - fun dataSteam(): DataStream + fun dataStream(): DataStream fun detailsRepository(): DetailsRepository - fun detailsScheduler(): DetailsScheduler } @Component.Builder diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt index 53bfba8..c55e2f4 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsInteractor.kt @@ -6,6 +6,8 @@ import com.solacestudios.ribs_demo_android.network.DetailsService import com.solacestudios.ribs_demo_android.util.DataStream import com.solacestudios.ribs_demo_android.repository.DetailsRepository import com.solacestudios.ribs_demo_android.util.Resource +import com.solacestudios.ribs_demo_android.util.RibsScheduler +import com.solacestudios.ribs_demo_android.util.RibsSchedulerImpl import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor import com.uber.rib.core.RibInteractor @@ -22,6 +24,7 @@ import javax.inject.Inject class DetailsInteractor : Interactor() { companion object { const val TAG = "DetailsInteractor" + var detailsScheduler: RibsScheduler = RibsSchedulerImpl() } @Inject @@ -36,9 +39,6 @@ class DetailsInteractor : Interactor @Inject lateinit var dataStream: DataStream - @Inject - lateinit var detailsScheduler: DetailsScheduler - @Inject lateinit var detailsRepository: DetailsRepository @@ -87,6 +87,7 @@ class DetailsInteractor : Interactor } } + //subscribes to view click events fun onBack() { buildPresenter.onBack() .subscribeOn(detailsScheduler.main) @@ -108,6 +109,9 @@ class DetailsInteractor : Interactor /** * Presenter interface implemented by this RIB's view. + * Declares functions to be defined in DetailsView + * Gives ability for details listener onBackPress to subscribe to click events emitted from Presenters onBack function + * onBack will emit when back button is clicked, onBackPress will receive that emission and do something */ interface Presenter { fun onBack(): Observable @@ -115,6 +119,8 @@ class DetailsInteractor : Interactor fun updateProgressbarState(isVisible: Boolean) } + //Declares functions for details parent listener to define in catalogue interactor + // interface Listener { fun onBackPress() } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt index bfe6ba2..b9b6ab2 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsView.kt @@ -38,6 +38,7 @@ class DetailsView @JvmOverloads constructor( imgBack = findViewById(R.id.back) } + //Create an observable that emits on view click events override fun onBack(): Observable { return imgBack.clicks().map { true } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt index 115e556..b423207 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeComponent.kt @@ -6,6 +6,7 @@ import com.solacestudios.ribs_demo_android.repository.CatalogueRepository import com.solacestudios.ribs_demo_android.repository.CatalogueRepositoryImpl import com.solacestudios.ribs_demo_android.ribs.catalogue.* import com.solacestudios.ribs_demo_android.util.Constants +import com.solacestudios.ribs_demo_android.util.RibsScheduler import com.uber.rib.core.InteractorBaseComponent import dagger.* import okhttp3.OkHttpClient @@ -56,8 +57,12 @@ abstract class HomeModule { @Module companion object { - var logging : HttpLoggingInterceptor = HttpLoggingInterceptor().setLevel( - HttpLoggingInterceptor.Level.BODY) + var logging : HttpLoggingInterceptor = run { + val httpLoggingInterceptor = HttpLoggingInterceptor() + httpLoggingInterceptor.apply { + httpLoggingInterceptor.level = HttpLoggingInterceptor.Level.BODY + } + } var clientHome : OkHttpClient = OkHttpClient.Builder().addInterceptor(logging).build() @HomeScope @@ -99,17 +104,9 @@ abstract class HomeModule { @Provides @JvmStatic internal fun provideCatalogueRepository( - service: CatalogueService, - scheduler: CatalogueScheduler + service: CatalogueService ): CatalogueRepository { - return CatalogueRepositoryImpl(service, scheduler) - } - - @HomeScope - @Provides - @JvmStatic - internal fun provideCatalogueSchedulers(): CatalogueScheduler { - return CatalogueSchedulerImpl() + return CatalogueRepositoryImpl(service) } @Provides diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt index 5306e5e..7437b07 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/home/HomeInteractor.kt @@ -1,5 +1,6 @@ package com.solacestudios.ribs_demo_android.ribs.home +import android.util.Log import com.solacestudios.ribs_demo_android.ribs.catalogue.CatalogueInteractor import com.uber.rib.core.Bundle import com.uber.rib.core.Interactor @@ -34,6 +35,8 @@ class HomeInteractor : Interactor() { inner class CatalogueParentListener: CatalogueInteractor.Listener { override fun onClick() { + Log.e(this.javaClass.name, "onClick, catalogue parent listener, toggling home") + listener.toggleHome() } } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt index 916e737..a32308f 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/root/RootInteractor.kt @@ -1,5 +1,6 @@ package com.solacestudios.ribs_demo_android.ribs.root +import android.util.Log import com.solacestudios.ribs_demo_android.ribs.category.CategoryInteractor import com.solacestudios.ribs_demo_android.ribs.home.HomeInteractor import com.uber.rib.core.Bundle @@ -39,12 +40,16 @@ class RootInteractor : Interactor() { inner class HomeParentListener : HomeInteractor.Listener { override fun toggleHome() { + Log.e(this.javaClass.name, "toggleHome(), detaching home, attaching category") + router.detachHome() router.attachCategory() } } inner class CategoryParentListener : CategoryInteractor.Listener { override fun toggleCategory() { + Log.e(this.javaClass.name, "toggleCategory(), detaching category, attaching home") + router.detachCategory() router.attachHome() } diff --git a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt b/app/src/main/java/com/solacestudios/ribs_demo_android/util/RibsScheduler.kt similarity index 77% rename from app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt rename to app/src/main/java/com/solacestudios/ribs_demo_android/util/RibsScheduler.kt index d81990a..271e7ce 100644 --- a/app/src/main/java/com/solacestudios/ribs_demo_android/ribs/details/DetailsScheduler.kt +++ b/app/src/main/java/com/solacestudios/ribs_demo_android/util/RibsScheduler.kt @@ -1,20 +1,20 @@ -package com.solacestudios.ribs_demo_android.ribs.details +package com.solacestudios.ribs_demo_android.util import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers import io.reactivex.rxjava3.core.Scheduler import io.reactivex.rxjava3.schedulers.Schedulers -interface DetailsScheduler { +interface RibsScheduler { val io: Scheduler val main: Scheduler val compute: Scheduler } -class DetailsSchedulerImpl(): DetailsScheduler { +class RibsSchedulerImpl(): RibsScheduler { override val io: Scheduler get() = Schedulers.io() override val main: Scheduler get() = AndroidSchedulers.mainThread() override val compute: Scheduler get() = Schedulers.computation() -} \ No newline at end of file +} diff --git a/app/src/main/res/layout/home_rib.xml b/app/src/main/res/layout/home_rib.xml index c64f24c..7397240 100644 --- a/app/src/main/res/layout/home_rib.xml +++ b/app/src/main/res/layout/home_rib.xml @@ -1,5 +1,6 @@ -