#2238 back press works from any fragment

This commit is contained in:
HissPirat 2020-07-29 16:39:12 +02:00
parent 4519e903db
commit 3fd41facc4

View File

@ -23,6 +23,7 @@ import android.view.ActionMode
import android.view.MenuItem import android.view.MenuItem
import androidx.appcompat.app.ActionBarDrawerToggle import androidx.appcompat.app.ActionBarDrawerToggle
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import org.kiwix.kiwixmobile.core.R import org.kiwix.kiwixmobile.core.R
import org.kiwix.kiwixmobile.core.base.BaseActivity import org.kiwix.kiwixmobile.core.base.BaseActivity
@ -43,7 +44,7 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider,
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data) super.onActivityResult(requestCode, resultCode, data)
supportFragmentManager.fragments.forEach { it.onActivityResult(requestCode, resultCode, data) } activeFragments().forEach { it.onActivityResult(requestCode, resultCode, data) }
} }
override fun onRequestPermissionsResult( override fun onRequestPermissionsResult(
@ -52,34 +53,34 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider,
grantResults: IntArray grantResults: IntArray
) { ) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults) super.onRequestPermissionsResult(requestCode, permissions, grantResults)
supportFragmentManager.fragments.forEach { activeFragments().forEach {
it.onRequestPermissionsResult(requestCode, permissions, grantResults) it.onRequestPermissionsResult(requestCode, permissions, grantResults)
} }
} }
override fun onActionModeStarted(mode: ActionMode) { override fun onActionModeStarted(mode: ActionMode) {
super.onActionModeStarted(mode) super.onActionModeStarted(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach { activeFragments().filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeStarted(mode, this) it.onActionModeStarted(mode, this)
} }
} }
override fun onActionModeFinished(mode: ActionMode) { override fun onActionModeFinished(mode: ActionMode) {
super.onActionModeFinished(mode) super.onActionModeFinished(mode)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach { activeFragments().filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onActionModeFinished(mode, this) it.onActionModeFinished(mode, this)
} }
} }
override fun onNewIntent(intent: Intent) { override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent) super.onNewIntent(intent)
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach { activeFragments().filterIsInstance<BaseFragmentActivityExtensions>().forEach {
it.onNewIntent(intent, this) it.onNewIntent(intent, this)
} }
} }
override fun getCurrentWebView(): KiwixWebView? { override fun getCurrentWebView(): KiwixWebView? {
return supportFragmentManager.fragments.filterIsInstance<WebViewProvider>().firstOrNull() return activeFragments().filterIsInstance<WebViewProvider>().firstOrNull()
?.getCurrentWebView() ?.getCurrentWebView()
} }
@ -102,13 +103,19 @@ abstract class CoreMainActivity : BaseActivity(), WebViewProvider,
closeNavigationDrawer() closeNavigationDrawer()
return return
} }
supportFragmentManager.fragments.filterIsInstance<BaseFragmentActivityExtensions>().forEach { if (activeFragments().filterIsInstance<BaseFragmentActivityExtensions>().isEmpty()) {
return super.onBackPressed()
}
activeFragments().filterIsInstance<BaseFragmentActivityExtensions>().forEach {
if (it.onBackPressed(this) == BaseFragmentActivityExtensions.Super.ShouldCall) { if (it.onBackPressed(this) == BaseFragmentActivityExtensions.Super.ShouldCall) {
super.onBackPressed() super.onBackPressed()
} }
} }
} }
private fun activeFragments(): MutableList<Fragment> =
supportFragmentManager.fragments
abstract fun navigationDrawerIsOpen(): Boolean abstract fun navigationDrawerIsOpen(): Boolean
abstract fun closeNavigationDrawer() abstract fun closeNavigationDrawer()