@@ -3,22 +3,49 @@ package com.enginebai.base.view
33import android.os.Bundle
44import androidx.annotation.LayoutRes
55import androidx.appcompat.app.AppCompatActivity
6+ import com.enginebai.base.utils.RxErrorHandler
7+ import io.reactivex.android.schedulers.AndroidSchedulers
68import io.reactivex.disposables.CompositeDisposable
79import io.reactivex.disposables.Disposable
10+ import org.koin.android.ext.android.inject
11+ import java.util.concurrent.TimeUnit
812
913abstract class BaseActivity : AppCompatActivity () {
1014
1115 private val disposables = CompositeDisposable ()
16+ private val rxErrorHandler: RxErrorHandler by inject()
17+ private var rxErrorDisposable: Disposable ? = null
1218
1319 @LayoutRes
1420 abstract fun getLayoutId (): Int
1521
22+ abstract fun handleErrorMessage (message : String )
23+
1624 override fun onCreate (savedInstanceState : Bundle ? ) {
1725 super .onCreate(savedInstanceState)
1826 setContentView(getLayoutId())
1927 }
2028
21- override fun onDestroy () {
29+ override fun onStart () {
30+ super .onStart()
31+ if (null == rxErrorDisposable || false == rxErrorDisposable?.isDisposed) {
32+ rxErrorDisposable = rxErrorHandler.errorMessageToDisplay
33+ .filter { it.isNotBlank() }
34+ .throttleFirst(2 , TimeUnit .SECONDS )
35+ .observeOn(AndroidSchedulers .mainThread())
36+ .doOnNext { handleErrorMessage(it) }
37+ .subscribe()
38+ .disposeOnDestroy()
39+ }
40+ }
41+
42+ override fun onStop () {
43+ super .onStop()
44+ rxErrorDisposable?.dispose()
45+ }
46+
47+
48+ override fun onDestroy () {
2249 disposables.clear()
2350 super .onDestroy()
2451 }
0 commit comments