diff --git a/app/build.gradle b/app/build.gradle index 419a67f..a69bbc2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,6 +39,7 @@ dependencies { implementation "androidx.appcompat:appcompat:1.0.2" implementation "androidx.constraintlayout:constraintlayout:2.0.0-alpha3" implementation "androidx.recyclerview:recyclerview:1.0.0" + implementation "androidx.lifecycle:lifecycle-runtime:2.0.0" /* DI */ implementation "org.kodein.di:kodein-di-erased-jvm:6.0.1" diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/EditSuperHeroPresenter.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/EditSuperHeroPresenter.kt index 5625dc7..e1856d7 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/EditSuperHeroPresenter.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/EditSuperHeroPresenter.kt @@ -1,5 +1,9 @@ package com.karumi.jetpack.superheroes.ui.presenter +import androidx.lifecycle.Lifecycle.Event.ON_DESTROY +import androidx.lifecycle.Lifecycle.Event.ON_RESUME +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent import com.karumi.jetpack.superheroes.common.weak import com.karumi.jetpack.superheroes.domain.model.SuperHero import com.karumi.jetpack.superheroes.domain.usecase.GetSuperHeroById @@ -11,7 +15,7 @@ class EditSuperHeroPresenter( private val getSuperHeroById: GetSuperHeroById, private val saveSuperHero: SaveSuperHero, private val executor: ExecutorService -) { +) : LifecycleObserver { private val view: View? by weak(view) private lateinit var id: String @@ -25,11 +29,13 @@ class EditSuperHeroPresenter( } } + @OnLifecycleEvent(ON_RESUME) fun onResume() { view?.showLoading() refreshSuperHero() } + @OnLifecycleEvent(ON_DESTROY) fun onDestroy() { executor.shutdownNow() } diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroDetailPresenter.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroDetailPresenter.kt index 051b0db..df5aa3d 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroDetailPresenter.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroDetailPresenter.kt @@ -1,5 +1,9 @@ package com.karumi.jetpack.superheroes.ui.presenter +import androidx.lifecycle.Lifecycle.Event.ON_DESTROY +import androidx.lifecycle.Lifecycle.Event.ON_RESUME +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent import com.karumi.jetpack.superheroes.common.weak import com.karumi.jetpack.superheroes.domain.model.SuperHero import com.karumi.jetpack.superheroes.domain.usecase.GetSuperHeroById @@ -9,7 +13,7 @@ class SuperHeroDetailPresenter( view: View, private val getSuperHeroById: GetSuperHeroById, private val executor: ExecutorService -) { +) : LifecycleObserver { private val view: View? by weak(view) @@ -23,11 +27,13 @@ class SuperHeroDetailPresenter( } } + @OnLifecycleEvent(ON_RESUME) fun onResume() { view?.showLoading() refreshSuperHero() } + @OnLifecycleEvent(ON_DESTROY) fun onDestroy() { executor.shutdownNow() } diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroesPresenter.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroesPresenter.kt index f71fb40..0c0e180 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroesPresenter.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/presenter/SuperHeroesPresenter.kt @@ -1,5 +1,9 @@ package com.karumi.jetpack.superheroes.ui.presenter +import androidx.lifecycle.Lifecycle.Event.ON_DESTROY +import androidx.lifecycle.Lifecycle.Event.ON_RESUME +import androidx.lifecycle.LifecycleObserver +import androidx.lifecycle.OnLifecycleEvent import com.karumi.jetpack.superheroes.common.weak import com.karumi.jetpack.superheroes.domain.model.SuperHero import com.karumi.jetpack.superheroes.domain.usecase.GetSuperHeroes @@ -9,15 +13,17 @@ class SuperHeroesPresenter( view: View, private val getSuperHeroes: GetSuperHeroes, private val executor: ExecutorService -) { +) : LifecycleObserver { private val view: View? by weak(view) + @OnLifecycleEvent(ON_RESUME) fun onResume() { view?.showLoading() refreshSuperHeroes() } + @OnLifecycleEvent(ON_DESTROY) fun onDestroy() { executor.shutdownNow() } diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/BaseActivity.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/BaseActivity.kt index ef0fc78..261b95a 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/BaseActivity.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/BaseActivity.kt @@ -4,6 +4,7 @@ import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.Toolbar +import androidx.lifecycle.LifecycleObserver import org.kodein.di.Kodein import org.kodein.di.KodeinAware import org.kodein.di.android.closestKodein @@ -15,16 +16,23 @@ abstract class BaseActivity : AppCompatActivity(), KodeinAware { extend(appKodein) import(activityModules) } + abstract val presenter: LifecycleObserver abstract val layoutId: Int abstract val toolbarView: Toolbar abstract val activityModules: Kodein.Module override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + lifecycle.addObserver(presenter) setContentView(layoutId) setSupportActionBar(toolbarView) prepare(intent) } + override fun onDestroy() { + super.onDestroy() + lifecycle.removeObserver(presenter) + } + open fun prepare(intent: Intent?) {} } \ No newline at end of file diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/EditSuperHeroActivity.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/EditSuperHeroActivity.kt index 53e7cbe..9b6fd70 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/EditSuperHeroActivity.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/EditSuperHeroActivity.kt @@ -28,7 +28,7 @@ class EditSuperHeroActivity : BaseActivity(), EditSuperHeroPresenter.View { } } - private val presenter: EditSuperHeroPresenter by instance() + override val presenter: EditSuperHeroPresenter by instance() override val layoutId = R.layout.edit_super_hero_activity override val toolbarView: Toolbar get() = toolbar @@ -45,16 +45,6 @@ class EditSuperHeroActivity : BaseActivity(), EditSuperHeroPresenter.View { } } - override fun onResume() { - super.onResume() - presenter.onResume() - } - - override fun onDestroy() { - super.onDestroy() - presenter.onDestroy() - } - override fun prepare(intent: Intent?) { title = superHeroId presenter.preparePresenter(superHeroId) diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/MainActivity.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/MainActivity.kt index c0ba2fa..219c538 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/MainActivity.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/MainActivity.kt @@ -17,7 +17,7 @@ import org.kodein.di.erased.provider class MainActivity : BaseActivity(), SuperHeroesPresenter.View { - private val presenter: SuperHeroesPresenter by instance() + override val presenter: SuperHeroesPresenter by instance() private lateinit var adapter: SuperHeroesAdapter override val layoutId: Int = R.layout.main_activity override val toolbarView: Toolbar @@ -29,16 +29,6 @@ class MainActivity : BaseActivity(), SuperHeroesPresenter.View { initializeRecyclerView() } - override fun onResume() { - super.onResume() - presenter.onResume() - } - - override fun onDestroy() { - super.onDestroy() - presenter.onDestroy() - } - private fun initializeAdapter() { adapter = SuperHeroesAdapter(presenter) } diff --git a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/SuperHeroDetailActivity.kt b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/SuperHeroDetailActivity.kt index be9ab23..ee62e3d 100644 --- a/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/SuperHeroDetailActivity.kt +++ b/app/src/main/java/com/karumi/jetpack/superheroes/ui/view/SuperHeroDetailActivity.kt @@ -28,7 +28,7 @@ class SuperHeroDetailActivity : BaseActivity(), SuperHeroDetailPresenter.View { } } - private val presenter: SuperHeroDetailPresenter by instance() + override val presenter: SuperHeroDetailPresenter by instance() override val layoutId: Int = R.layout.super_hero_detail_activity override val toolbarView: Toolbar get() = toolbar @@ -39,16 +39,6 @@ class SuperHeroDetailActivity : BaseActivity(), SuperHeroDetailPresenter.View { edit_super_hero.setOnClickListener { presenter.onEditSelected() } } - override fun onResume() { - super.onResume() - presenter.onResume() - } - - override fun onDestroy() { - super.onDestroy() - presenter.onDestroy() - } - override fun prepare(intent: Intent?) { title = superHeroId presenter.preparePresenter(superHeroId)