From 27a56e2974bb42a575b7607259a5ecace4feeb5a Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Thu, 31 Jan 2019 21:52:26 -0800 Subject: [PATCH] For #336 - allow the browser to intercept the back button --- app/src/main/java/org/mozilla/fenix/BackHandler.kt | 11 +++++++++++ app/src/main/java/org/mozilla/fenix/HomeActivity.kt | 10 ++++++++++ .../java/org/mozilla/fenix/browser/BrowserFragment.kt | 11 ++++++++++- app/src/main/res/navigation/nav_graph.xml | 4 ++-- 4 files changed, 33 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/org/mozilla/fenix/BackHandler.kt diff --git a/app/src/main/java/org/mozilla/fenix/BackHandler.kt b/app/src/main/java/org/mozilla/fenix/BackHandler.kt new file mode 100644 index 000000000..2a8b4b3d6 --- /dev/null +++ b/app/src/main/java/org/mozilla/fenix/BackHandler.kt @@ -0,0 +1,11 @@ +package org.mozilla.fenix +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Interface for fragments that want to handle 'back' button presses. + */ +interface BackHandler { + fun onBackPressed(): Boolean +} diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 96627667d..80f4741f1 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -31,4 +31,14 @@ class HomeActivity : AppCompatActivity() { ).asView() else -> super.onCreateView(parent, name, context, attrs) } + + override fun onBackPressed() { + supportFragmentManager.primaryNavigationFragment?.childFragmentManager?.fragments?.forEach { + if (it is BackHandler && it.onBackPressed()) { + return + } + } + + super.onBackPressed() + } } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 7f0dfdab5..ed6258afa 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -27,8 +27,9 @@ import org.mozilla.fenix.R import org.mozilla.fenix.components.toolbar.ToolbarIntegration import org.mozilla.fenix.ext.requireComponents import mozilla.components.feature.prompts.PromptFeature +import org.mozilla.fenix.BackHandler -class BrowserFragment : Fragment() { +class BrowserFragment : Fragment(), BackHandler { private lateinit var contextMenuFeature: ContextMenuFeature private lateinit var downloadsFeature: DownloadsFeature @@ -111,6 +112,14 @@ class BrowserFragment : Fragment() { } } + override fun onBackPressed(): Boolean { + if (sessionFeature.handleBackPressed()) return true + + // We'll want to improve this when we add multitasking + requireComponents.core.sessionManager.remove() + return false + } + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { when (requestCode) { REQUEST_CODE_DOWNLOAD_PERMISSIONS -> downloadsFeature.onPermissionsResult(permissions, grantResults) diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 6281ccb78..e1aba2210 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -38,8 +38,8 @@ android:label="fragment_browser" tools:layout="@layout/fragment_browser"> + android:id="@+id/action_browserFragment_to_homeFragment" + app:destination="@id/homeFragment" app:popUpToInclusive="true" app:popUpTo="@+id/homeFragment"/>