diff --git a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt index 1214bfa045..fad2c0ed87 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseActivity.kt @@ -265,18 +265,21 @@ abstract class VectorBaseActivity : BaseMvRxActivity(), HasScreenInjector { return super.onOptionsItemSelected(item) } - protected fun recursivelyDispatchOnBackPressed(fm: FragmentManager): Boolean { - // if (fm.backStackEntryCount == 0) - // return false + override fun onBackPressed() { + val handled = recursivelyDispatchOnBackPressed(supportFragmentManager) + if (!handled) { + super.onBackPressed() + } + } - val reverseOrder = fm.fragments.filter { it is OnBackPressed }.reversed() + private fun recursivelyDispatchOnBackPressed(fm: FragmentManager): Boolean { + val reverseOrder = fm.fragments.filter { it is VectorBaseFragment }.reversed() for (f in reverseOrder) { val handledByChildFragments = recursivelyDispatchOnBackPressed(f.childFragmentManager) if (handledByChildFragments) { return true } - val backPressable = f as OnBackPressed - if (backPressable.onBackPressed()) { + if (f is OnBackPressed && f.onBackPressed()) { return true } } diff --git a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt index aac19d8097..52cd85f249 100644 --- a/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt +++ b/vector/src/main/java/im/vector/riotx/core/platform/VectorBaseFragment.kt @@ -19,11 +19,7 @@ package im.vector.riotx.core.platform import android.content.Context import android.os.Bundle import android.os.Parcelable -import android.view.LayoutInflater -import android.view.Menu -import android.view.MenuInflater -import android.view.View -import android.view.ViewGroup +import android.view.* import androidx.annotation.CallSuper import androidx.annotation.LayoutRes import androidx.annotation.MainThread @@ -42,7 +38,7 @@ import io.reactivex.disposables.CompositeDisposable import io.reactivex.disposables.Disposable import timber.log.Timber -abstract class VectorBaseFragment : BaseMvRxFragment(), OnBackPressed, HasScreenInjector { +abstract class VectorBaseFragment : BaseMvRxFragment(), HasScreenInjector { // Butterknife unbinder private var mUnBinder: Unbinder? = null @@ -132,10 +128,6 @@ abstract class VectorBaseFragment : BaseMvRxFragment(), OnBackPressed, HasScreen super.onViewStateRestored(savedInstanceState) } - override fun onBackPressed(): Boolean { - return false - } - override fun invalidate() { //no-ops by default Timber.w("invalidate() method has not been implemented") diff --git a/vector/src/main/java/im/vector/riotx/features/home/HomeActivity.kt b/vector/src/main/java/im/vector/riotx/features/home/HomeActivity.kt index 247c0c1981..7ef015a9b9 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/HomeActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/HomeActivity.kt @@ -202,10 +202,7 @@ class HomeActivity : VectorBaseActivity(), ToolbarConfigurable { if (drawerLayout.isDrawerOpen(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START) } else { - val handled = recursivelyDispatchOnBackPressed(supportFragmentManager) - if (!handled) { - super.onBackPressed() - } + super.onBackPressed() } } diff --git a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt index c0df7a8f43..afe3579d76 100644 --- a/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/home/room/list/RoomListFragment.kt @@ -250,7 +250,7 @@ class RoomListFragment : VectorBaseFragment(), RoomSummaryController.Listener, O return true } - return super.onBackPressed() + return false } // RoomSummaryController.Callback ************************************************************** diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt index 591e4ed474..543131f593 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt @@ -79,7 +79,6 @@ class LoginActivity : VectorBaseActivity() { showDisclaimerDialog(this) } - companion object { fun newIntent(context: Context): Intent { return Intent(context, LoginActivity::class.java) diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginSsoFallbackFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginSsoFallbackFragment.kt index 945bb86f4c..1ce282ad77 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginSsoFallbackFragment.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginSsoFallbackFragment.kt @@ -33,6 +33,7 @@ import im.vector.matrix.android.api.auth.data.Credentials import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.riotx.R import im.vector.riotx.core.di.ScreenComponent +import im.vector.riotx.core.platform.OnBackPressed import im.vector.riotx.core.platform.VectorBaseFragment import kotlinx.android.synthetic.main.fragment_login_sso_fallback.* import timber.log.Timber @@ -42,7 +43,7 @@ import java.net.URLDecoder /** * Only login is supported for the moment */ -class LoginSsoFallbackFragment : VectorBaseFragment() { +class LoginSsoFallbackFragment : VectorBaseFragment(), OnBackPressed { private val viewModel: LoginViewModel by activityViewModel()