diff --git a/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/MviFragment.kt b/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/MviFragment.kt index 2cf6857..80e7758 100644 --- a/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/MviFragment.kt +++ b/mvi-arch/src/main/java/ru/touchin/roboswag/mvi_arch/core/MviFragment.kt @@ -3,6 +3,7 @@ package ru.touchin.roboswag.mvi_arch.core import android.os.Bundle import android.os.Parcelable import android.view.View +import androidx.activity.OnBackPressedCallback import androidx.annotation.CallSuper import androidx.annotation.LayoutRes import androidx.annotation.MainThread @@ -103,6 +104,18 @@ abstract class MviFragment( viewModel.dispatchAction(action) } + protected fun addOnBackPressedCallback(actionProvider: () -> Action) { + addOnBackPressedCallback(actionProvider.invoke()) + } + + protected fun addOnBackPressedCallback(action: Action) { + requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + dispatchAction(action) + } + }) + } + /** * Lazily provides view model of this screen with transmitted arguments if exist. *