From 3b2fe955b7169589c22dc96e0a77d0382bc74e00 Mon Sep 17 00:00:00 2001 From: Emily Kager Date: Mon, 8 Apr 2019 14:35:47 -0700 Subject: [PATCH] [fenix] For https://github.com/mozilla-mobile/fenix/issues/1406, https://github.com/mozilla-mobile/fenix/issues/1465 - Only pop browser when all sessions have been removed --- .../java/org/mozilla/fenix/HomeActivity.kt | 27 +++++++++++++++++-- 1 file changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index c5b402e5d..f8a5d9670 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -16,6 +16,7 @@ import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI import mozilla.components.browser.search.SearchEngine import mozilla.components.browser.session.Session +import mozilla.components.browser.session.SessionManager import mozilla.components.concept.engine.EngineView import mozilla.components.feature.intent.IntentProcessor import mozilla.components.lib.crash.Crash @@ -35,6 +36,8 @@ import org.mozilla.fenix.settings.SettingsFragmentDirections @SuppressWarnings("TooManyFunctions") open class HomeActivity : AppCompatActivity() { open val isCustomTab = false + private var sessionObserver: SessionManager.Observer? = null + var allSessionsRemoved = false val themeManager = DefaultThemeManager().also { it.onThemeChange = { theme -> @@ -51,6 +54,7 @@ open class HomeActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + sessionObserver = subscribeToSessions() setTheme(themeManager.currentTheme) DefaultThemeManager.applyStatusBarTheme(window, themeManager, this) @@ -82,9 +86,17 @@ open class HomeActivity : AppCompatActivity() { override fun onResume() { super.onResume() - // No session or timed out; we should try to pop inclusive to browser if not in private mode - if (components.core.sessionStorage.current() == null && !browsingModeManager.isPrivate) { + // All sessions have been removed; we should try to pop inclusive to browser if not in private mode + if (allSessionsRemoved && !browsingModeManager.isPrivate) { navHost.navController.popBackStack(R.id.browserFragment, true) + allSessionsRemoved = false + } + } + + override fun onDestroy() { + super.onDestroy() + sessionObserver?.let { + components.core.sessionManager.unregister(it) } } @@ -190,6 +202,17 @@ open class HomeActivity : AppCompatActivity() { } } + private fun subscribeToSessions(): SessionManager.Observer { + val observer = object : SessionManager.Observer { + override fun onAllSessionsRemoved() { + super.onAllSessionsRemoved() + allSessionsRemoved = true + } + } + components.core.sessionManager.register(observer) + return observer + } + companion object { const val OPEN_TO_BROWSER = "open_to_browser" }