|
1 | 1 | package ru.nobird.android.presentation.base |
2 | 2 |
|
3 | | -import android.os.Bundle |
4 | 3 | import androidx.annotation.CallSuper |
5 | | -import androidx.lifecycle.ViewModel |
6 | | -import io.reactivex.disposables.CompositeDisposable |
| 4 | +import ru.nobird.android.presentation.base.delegate.PresenterDelegate |
7 | 5 |
|
8 | | -abstract class PresenterBase<V> : ViewModel() { |
9 | | - protected val compositeDisposable = CompositeDisposable() |
| 6 | +abstract class PresenterBase<V>( |
| 7 | + private val presenterViewContainer: PresenterViewContainer<V> = DefaultPresenterViewContainer() |
| 8 | +) : DisposableViewModel(), PresenterViewContainer<V> by presenterViewContainer { |
| 9 | + protected open val delegates: List<PresenterDelegate<in V>> = emptyList() |
10 | 10 |
|
11 | | - @Volatile |
12 | | - var view: V? = null |
13 | | - private set |
| 11 | + override val nestedDisposables: List<DisposableViewModel> |
| 12 | + get() = delegates |
14 | 13 |
|
15 | 14 | @CallSuper |
16 | | - open fun attachView(view: V) { |
17 | | - val previousView = this.view |
18 | | - |
19 | | - check(previousView == null) { "Previous view is not detached! previousView = $previousView" } |
20 | | - |
21 | | - this.view = view |
| 15 | + override fun attachView(view: V) { |
| 16 | + presenterViewContainer.attachView(view) |
| 17 | + delegates.forEach { it.attachView(view) } |
22 | 18 | } |
23 | 19 |
|
24 | 20 | @CallSuper |
25 | | - open fun detachView(view: V) { |
26 | | - val previousView = this.view |
27 | | - |
28 | | - if (previousView === view) { |
29 | | - this.view = null |
30 | | - } else { |
31 | | - throw IllegalStateException("Unexpected view! previousView = $previousView, getView to unbind = $view") |
32 | | - } |
| 21 | + override fun detachView(view: V) { |
| 22 | + delegates.forEach { it.detachView(view) } |
| 23 | + presenterViewContainer.detachView(view) |
33 | 24 | } |
34 | | - |
35 | | - @CallSuper |
36 | | - override fun onCleared() { |
37 | | - compositeDisposable.dispose() |
38 | | - } |
39 | | - |
40 | | - open fun onSaveInstanceState(outState: Bundle) {} |
41 | | - open fun onRestoreInstanceState(savedInstanceState: Bundle) {} |
42 | 25 | } |
0 commit comments