Skip to content
This repository has been archived by the owner on Apr 19, 2022. It is now read-only.

Clearing the disposables in onStop #55

Open
wants to merge 1 commit into
base: todo-mvi-rxjava-kotlin
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -54,10 +54,10 @@ class AddEditTaskFragment : Fragment(), MviView<AddEditTaskIntent, AddEditTaskVi

private val argumentTaskId: String?
get() = arguments?.getString(ARGUMENT_EDIT_TASK_ID)

override fun onDestroy() {
super.onDestroy()
disposables.dispose()
override fun onStop() {
super.onStop()
disposables.clear()
}

override fun onCreateView(
Expand All @@ -77,7 +77,10 @@ class AddEditTaskFragment : Fragment(), MviView<AddEditTaskIntent, AddEditTaskVi
super.onViewCreated(view, savedInstanceState)
fab = activity!!.findViewById(R.id.fab_edit_task_done)
fab.setImageResource(R.drawable.ic_done)

}

override fun onStart() {
super.onStart()
bind()
}

Expand All @@ -88,10 +91,12 @@ class AddEditTaskFragment : Fragment(), MviView<AddEditTaskIntent, AddEditTaskVi
* emitted [MviViewState]s could be lost
*/
private fun bind() {
// Subscribe to the ViewModel and call render for every emitted state
disposables.add(viewModel.states().subscribe(this::render))
// Pass the UI's intents to the ViewModel
viewModel.processIntents(intents())
disposables.addAll(
// Subscribe to the ViewModel and call render for every emitted state
viewModel.states().subscribe(this::render),
// Pass the UI's intents to the ViewModel
intents().subscribe(viewModel.intentsObserver::onNext)
)
}

override fun intents(): Observable<AddEditTaskIntent> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import com.example.android.architecture.blueprints.todoapp.mvibase.MviViewState
import com.example.android.architecture.blueprints.todoapp.util.notOfType
import io.reactivex.Observable
import io.reactivex.ObservableTransformer
import io.reactivex.Observer
import io.reactivex.functions.BiFunction
import io.reactivex.subjects.PublishSubject

Expand Down Expand Up @@ -68,9 +69,7 @@ class AddEditTaskViewModel(
}
}

override fun processIntents(intents: Observable<AddEditTaskIntent>) {
intents.subscribe(intentsSubject)
}
override val intentsObserver: Observer<AddEditTaskIntent> get() = intentsSubject

override fun states(): Observable<AddEditTaskViewState> = statesObservable

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.example.android.architecture.blueprints.todoapp.mvibase

import io.reactivex.Observable
import io.reactivex.Observer

/**
* Object that will subscribes to a [MviView]'s [MviIntent]s,
Expand All @@ -11,7 +12,7 @@ import io.reactivex.Observable
* @param S Top class of the [MviViewState] the [MviViewModel] will be emitting.
*/
interface MviViewModel<I : MviIntent, S : MviViewState> {
fun processIntents(intents: Observable<I>)
val intentsObserver: Observer<I>

fun states(): Observable<S>
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,9 @@ class StatisticsFragment : Fragment(), MviView<StatisticsIntent, StatisticsViewS
return inflater.inflate(R.layout.statistics_frag, container, false)
.also { statisticsTV = it.findViewById(R.id.statistics) }
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
override fun onStart() {
super.onStart()
bind()
}

Expand All @@ -67,17 +67,17 @@ class StatisticsFragment : Fragment(), MviView<StatisticsIntent, StatisticsViewS
* emitted [MviViewState]s could be lost.
*/
private fun bind() {
// Subscribe to the ViewModel and call render for every emitted state
disposables.add(
viewModel.states().subscribe { this.render(it) }
disposables.addAll(
// Subscribe to the ViewModel and call render for every emitted state
viewModel.states().subscribe { this.render(it) },
// Pass the UI's intents to the ViewModel
intents().subscribe(viewModel.intentsObserver::onNext)
)
// Pass the UI's intents to the ViewModel
viewModel.processIntents(intents())
}

override fun onDestroy() {
super.onDestroy()
disposables.dispose()
override fun onStop() {
super.onStop()
disposables.clear()
}

override fun intents(): Observable<StatisticsIntent> = initialIntent()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.example.android.architecture.blueprints.todoapp.statistics.Statistics
import com.example.android.architecture.blueprints.todoapp.util.notOfType
import io.reactivex.Observable
import io.reactivex.ObservableTransformer
import io.reactivex.Observer
import io.reactivex.functions.BiFunction
import io.reactivex.subjects.PublishSubject

Expand Down Expand Up @@ -66,9 +67,7 @@ class StatisticsViewModel(
}
}

override fun processIntents(intents: Observable<StatisticsIntent>) {
intents.subscribe(intentsSubject)
}
override val intentsObserver: Observer<StatisticsIntent> get() = intentsSubject

override fun states(): Observable<StatisticsViewState> = statesObservable

Expand Down
Loading