Updated on 2026-08-14
This commit is contained in:
parent
26993f16bb
commit
adb12edd24
17 changed files with 485 additions and 34 deletions
|
|
@ -51,4 +51,8 @@ dependencies {
|
|||
|
||||
implementation 'com.google.code.gson:gson:2.8.6'
|
||||
implementation 'com.github.gbIxaHue:eu4d:0.2.3'
|
||||
|
||||
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
|
||||
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
|
||||
implementation 'io.reactivex.rxjava2:rxkotlin:2.3.0'
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
package com.tangem.tangemtest._arch.mvp.dialog
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.View
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||
import com.tangem.tangemtest.commons.OnBackPressHandler
|
||||
import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
abstract class BaseMvpBottomSheetDialog(
|
||||
context: Context
|
||||
) : BottomSheetDialog(context), MvpDlgView, LayoutHolder {
|
||||
|
||||
protected val presenter: MvpDlgPresenter<MvpDlgView>
|
||||
protected val mainView: View
|
||||
|
||||
init {
|
||||
initComponent()
|
||||
presenter = getMvpPresenter()
|
||||
presenter.attached(this)
|
||||
mainView = layoutInflater.inflate(getLayoutId(), null, false)
|
||||
setContentView(mainView)
|
||||
presenter.contentViewSet()
|
||||
}
|
||||
|
||||
abstract fun initComponent()
|
||||
abstract fun getMvpPresenter(): MvpDlgPresenter<MvpDlgView>
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
presenter.created()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
presenter.started()
|
||||
}
|
||||
|
||||
override fun show() {
|
||||
super.show()
|
||||
presenter.showed()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
presenter.stopped()
|
||||
}
|
||||
|
||||
override fun dismiss() {
|
||||
super.dismiss()
|
||||
presenter.dismissed()
|
||||
}
|
||||
|
||||
override fun cancel() {
|
||||
super.cancel()
|
||||
presenter.cancelled()
|
||||
presenter.detached()
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
super.onBackPressed()
|
||||
(presenter as? OnBackPressHandler)?.onBackPressed()
|
||||
}
|
||||
|
||||
protected fun <T : View> bindView(id: Int): T {
|
||||
return mainView.findViewById(id) as T
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package com.tangem.tangemtest._arch.mvp.dialog
|
||||
|
||||
import com.tangem.tangemtest.commons.OnBackPressHandler
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
|
||||
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
open class BaseMvpBottomSheetPresenter<View : MvpDlgView> : MvpDlgPresenter<View>, OnBackPressHandler {
|
||||
|
||||
protected var view: View? = null
|
||||
|
||||
protected val stopDisposable = CompositeDisposable()
|
||||
protected val dismissDisposable = CompositeDisposable()
|
||||
protected val cancelDisposable = CompositeDisposable()
|
||||
|
||||
override fun attached(view: View) {
|
||||
Log.d(this, "mvpView attached")
|
||||
this.view = view
|
||||
}
|
||||
|
||||
override fun contentViewSet() {
|
||||
Log.d(this, "contentViewSet")
|
||||
}
|
||||
|
||||
override fun created() {
|
||||
Log.d(this, "created")
|
||||
}
|
||||
|
||||
override fun started() {
|
||||
Log.d(this, "started")
|
||||
}
|
||||
|
||||
override fun showed() {
|
||||
Log.d(this, "showed")
|
||||
}
|
||||
|
||||
override fun stopped() {
|
||||
Log.d(this, "stoped")
|
||||
stopDisposable.clear()
|
||||
}
|
||||
|
||||
override fun dismissed() {
|
||||
Log.d(this, "dismissed")
|
||||
dismissDisposable.clear()
|
||||
}
|
||||
|
||||
override fun cancelled() {
|
||||
Log.d(this, "cancelled")
|
||||
cancelDisposable.clear()
|
||||
}
|
||||
|
||||
override fun detached() {
|
||||
Log.d(this, "detached")
|
||||
view = null
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean {
|
||||
Log.d(this, "onBackPressed")
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.tangem.tangemtest._arch.mvp.dialog
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface MvpDlgPresenter<T : MvpDlgView> {
|
||||
|
||||
fun attached(view: T)
|
||||
fun contentViewSet()
|
||||
|
||||
fun created()
|
||||
fun started()
|
||||
fun showed()
|
||||
fun stopped()
|
||||
fun dismissed()
|
||||
fun cancelled()
|
||||
fun detached()
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package com.tangem.tangemtest._arch.mvp.dialog
|
||||
|
||||
import com.tangem.tangemtest._arch.mvp.view.MvpView
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface MvpDlgView : MvpView
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.tangem.tangemtest._arch.mvp.presenter
|
||||
|
||||
import com.tangem.tangemtest._arch.mvp.view.MvpView
|
||||
import com.tangem.tangemtest.commons.OnBackPressHandler
|
||||
import io.reactivex.disposables.CompositeDisposable
|
||||
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
|
||||
abstract class BaseMvpPresenter<View : MvpView> : MvpPresenter<View>, OnBackPressHandler, DisposableHolder {
|
||||
|
||||
protected var view: View? = null
|
||||
|
||||
protected val pauseDisposable = CompositeDisposable()
|
||||
protected val stopDisposable = CompositeDisposable()
|
||||
protected val destroyDisposable = CompositeDisposable()
|
||||
|
||||
override fun attached(view: View) {
|
||||
Log.d(this, "attached")
|
||||
this.view = view
|
||||
}
|
||||
|
||||
override fun created() {
|
||||
Log.d(this, "created")
|
||||
}
|
||||
|
||||
override fun createView() {
|
||||
Log.d(this, "createView")
|
||||
}
|
||||
|
||||
override fun viewCreated() {
|
||||
Log.d(this, "viewCreated")
|
||||
}
|
||||
|
||||
override fun started() {
|
||||
Log.d(this, "started")
|
||||
}
|
||||
|
||||
override fun resumed() {
|
||||
Log.d(this, "resumed")
|
||||
}
|
||||
|
||||
override fun paused() {
|
||||
Log.d(this, "paused")
|
||||
pauseDisposable.clear()
|
||||
}
|
||||
|
||||
override fun stopped() {
|
||||
Log.d(this, "stopped")
|
||||
stopDisposable.clear()
|
||||
}
|
||||
|
||||
override fun destroyView() {
|
||||
Log.d(this, "destroyView")
|
||||
destroyDisposable.clear()
|
||||
}
|
||||
|
||||
override fun viewDestroyed() {
|
||||
Log.d(this, "viewDestroyed")
|
||||
}
|
||||
|
||||
override fun detached() {
|
||||
Log.d(this, "detached")
|
||||
this.view = null
|
||||
}
|
||||
|
||||
override fun disposeAll() {
|
||||
pauseDisposable.clear()
|
||||
stopDisposable.clear()
|
||||
destroyDisposable.clear()
|
||||
}
|
||||
|
||||
override fun onBackPressed(): Boolean = true
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
package com.tangem.tangemtest._arch.mvp.presenter
|
||||
|
||||
interface DisposableHolder {
|
||||
fun disposeAll()
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.tangemtest._arch.mvp.presenter
|
||||
|
||||
import com.tangem.tangemtest._arch.mvp.view.MvpView
|
||||
|
||||
|
||||
interface MvpPresenter<T : MvpView> {
|
||||
|
||||
fun attached(view: T)
|
||||
fun created()
|
||||
fun createView()
|
||||
fun viewCreated()
|
||||
fun started()
|
||||
fun resumed()
|
||||
fun paused()
|
||||
fun stopped()
|
||||
fun destroyView()
|
||||
fun viewDestroyed()
|
||||
fun detached()
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
package com.tangem.tangemtest._arch.mvp.view
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.tangem.tangemtest._arch.mvp.presenter.MvpPresenter
|
||||
import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
abstract class BaseMvpActivity : AppCompatActivity(), MvpView, LayoutHolder {
|
||||
|
||||
protected var presenter: MvpPresenter<in MvpView>? = null
|
||||
|
||||
protected abstract fun initComponent()
|
||||
protected abstract fun getMvpPresenter(): MvpPresenter<in MvpView>?
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
initComponent()
|
||||
presenter = getMvpPresenter()
|
||||
presenter?.attached(this)
|
||||
super.onCreate(savedInstanceState)
|
||||
presenter?.created()
|
||||
setContentView(getLayoutId())
|
||||
presenter?.createView()
|
||||
presenter?.viewCreated()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
presenter?.started()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
presenter?.resumed()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
presenter?.paused()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
presenter?.stopped()
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
presenter?.destroyView()
|
||||
super.onDestroy()
|
||||
presenter?.viewDestroyed()
|
||||
presenter?.detached()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,85 @@
|
|||
package com.tangem.tangemtest._arch.mvp.view
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.MenuItem
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.fragment.app.Fragment
|
||||
import com.tangem.tangemtest._arch.mvp.presenter.MvpPresenter
|
||||
import com.tangem.tangemtest.commons.OnBackPressHandler
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
abstract class BaseMvpFragment : Fragment(), MvpView, OnBackPressHandler {
|
||||
|
||||
protected lateinit var mainView: View
|
||||
protected var presenter: MvpPresenter<in MvpView>? = null
|
||||
|
||||
protected abstract fun getMvpPresenter(): MvpPresenter<in MvpView>?
|
||||
|
||||
override fun onAttach(context: Context) {
|
||||
super.onAttach(context)
|
||||
presenter = getMvpPresenter()
|
||||
presenter?.attached(this)
|
||||
}
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
presenter?.created()
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
|
||||
mainView = super.onCreateView(inflater, container, savedInstanceState)!!
|
||||
presenter?.createView()
|
||||
return mainView
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
presenter?.viewCreated()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
presenter?.started()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
presenter?.resumed()
|
||||
}
|
||||
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
android.R.id.home -> onBackPressed()
|
||||
}
|
||||
return super.onOptionsItemSelected(item)
|
||||
}
|
||||
|
||||
override fun onBackPressed()
|
||||
: Boolean = (presenter as? OnBackPressHandler)?.onBackPressed() ?: false
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
presenter?.paused()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
presenter?.stopped()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
presenter?.destroyView()
|
||||
super.onDestroyView()
|
||||
presenter?.viewDestroyed()
|
||||
}
|
||||
|
||||
override fun onDetach() {
|
||||
super.onDetach()
|
||||
presenter?.detached()
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
package com.tangem.tangemtest._arch.mvp.view
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
|
||||
interface MvpView
|
||||
|
|
@ -0,0 +1,51 @@
|
|||
package com.tangem.tangemtest._arch.mvp.view.custom
|
||||
|
||||
import android.view.View
|
||||
import com.tangem.tangemtest._arch.mvp.presenter.MvpPresenter
|
||||
import com.tangem.tangemtest._arch.mvp.view.MvpView
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
open class BaseMvpCustomView<in V : MvpView>(
|
||||
protected val mainView: View,
|
||||
protected val presenter: MvpPresenter<in V>
|
||||
) : MvpCustomView {
|
||||
|
||||
override fun onViewCreated() {
|
||||
presenter.created()
|
||||
presenter.viewCreated()
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
presenter.started()
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
presenter.resumed()
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
presenter.paused()
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
presenter.stopped()
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
presenter.destroyView()
|
||||
}
|
||||
|
||||
override fun onViewDestroyed() {
|
||||
presenter.viewDestroyed()
|
||||
}
|
||||
|
||||
override fun onDetach() {
|
||||
presenter.detached()
|
||||
}
|
||||
|
||||
protected fun <T> bindView(id: Int): T {
|
||||
return mainView.findViewById<View>(id) as T
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
package com.tangem.tangemtest._arch.mvp.view.custom
|
||||
|
||||
import com.tangem.tangemtest._arch.mvp.view.MvpView
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface MvpCustomView : MvpView {
|
||||
|
||||
fun onViewCreated()
|
||||
fun onStart()
|
||||
fun onResume()
|
||||
fun onPause()
|
||||
fun onStop()
|
||||
fun onDestroyView()
|
||||
fun onViewDestroyed()
|
||||
fun onDetach()
|
||||
}
|
||||
|
|
@ -16,8 +16,8 @@ import com.tangem.tangemtest.R
|
|||
import com.tangem.tangemtest.card_use_cases.ui.widgets.ParameterWidget
|
||||
import com.tangem.tangemtest.card_use_cases.view_models.ParamsViewModel
|
||||
import com.tangem.tangemtest.commons.Action
|
||||
import com.tangem.tangemtest.commons.LayoutHolder
|
||||
import ru.dev.gbixahue.eu4d.lib.android.global.log.Log
|
||||
import ru.dev.gbixahue.eu4d.lib.kotlin.common.LayoutHolder
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
|
|
|
|||
|
|
@ -13,10 +13,10 @@ import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManager
|
|||
import com.tangem.tangemtest.card_use_cases.models.params.manager.ParamsManagerFactory
|
||||
import com.tangem.tangemtest.commons.Action
|
||||
import com.tangem.tangemtest.commons.performAction
|
||||
import com.tangem.tangemtest.commons.postUI
|
||||
import com.tangem.tasks.ScanEvent
|
||||
import com.tangem.tasks.TaskError
|
||||
import com.tangem.tasks.TaskEvent
|
||||
import ru.dev.gbixahue.eu4d.lib.android.global.threading.postUI
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
|
|
|
|||
|
|
@ -3,6 +3,6 @@ package com.tangem.tangemtest.commons
|
|||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
interface LayoutHolder {
|
||||
fun getLayoutId(): Int
|
||||
interface OnBackPressHandler {
|
||||
fun onBackPressed(): Boolean
|
||||
}
|
||||
|
|
@ -1,30 +0,0 @@
|
|||
package com.tangem.tangemtest.commons
|
||||
|
||||
import android.os.Handler
|
||||
import android.os.HandlerThread
|
||||
import android.os.Looper
|
||||
|
||||
/**
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
object Threading {
|
||||
val uiHandler: Handler = Handler(Looper.getMainLooper())
|
||||
val workHandler: Handler = Handler(HandlerThread("Application worker thread").apply { start() }.looper)
|
||||
|
||||
fun postInCurrentThread(msTime: Long, func: () -> Unit) {
|
||||
Handler().postDelayed({ func() }, msTime)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fun post(msTime: Long, func: () -> Unit) {
|
||||
Threading.postInCurrentThread(msTime, func)
|
||||
}
|
||||
|
||||
fun postUI(msTime: Long = 0, func: () -> Unit) {
|
||||
if (msTime > 0) Threading.uiHandler.postDelayed({ func() }, msTime) else Threading.uiHandler.post(func)
|
||||
}
|
||||
|
||||
fun postWork(msTime: Long = 0, func: () -> Unit) {
|
||||
if (msTime > 0) Threading.workHandler.postDelayed({ func() }, msTime) else Threading.workHandler.post(func)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue