Closes #472: Integrate feature-session-bundling component.
This will take care of saving and restoring the (`SessionManager`) state.master
parent
5f8a15e9ae
commit
b4d1ac0d63
|
@ -133,9 +133,12 @@ dependencies {
|
||||||
implementation Deps.mozilla_feature_session
|
implementation Deps.mozilla_feature_session
|
||||||
implementation Deps.mozilla_feature_toolbar
|
implementation Deps.mozilla_feature_toolbar
|
||||||
implementation Deps.mozilla_feature_tabs
|
implementation Deps.mozilla_feature_tabs
|
||||||
|
implementation Deps.mozilla_feature_findinpage
|
||||||
|
implementation Deps.mozilla_feature_session_bundling
|
||||||
|
|
||||||
implementation Deps.mozilla_service_fretboard
|
implementation Deps.mozilla_service_fretboard
|
||||||
implementation Deps.mozilla_service_glean
|
implementation Deps.mozilla_service_glean
|
||||||
implementation Deps.mozilla_feature_findinpage
|
|
||||||
implementation Deps.mozilla_support_ktx
|
implementation Deps.mozilla_support_ktx
|
||||||
|
|
||||||
implementation Deps.mozilla_ui_colors
|
implementation Deps.mozilla_ui_colors
|
||||||
|
|
|
@ -7,6 +7,10 @@ package org.mozilla.fenix.components
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.preference.PreferenceManager
|
import android.preference.PreferenceManager
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.GlobalScope
|
||||||
|
import kotlinx.coroutines.async
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import mozilla.components.browser.engine.gecko.GeckoEngine
|
import mozilla.components.browser.engine.gecko.GeckoEngine
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
import mozilla.components.browser.session.storage.SessionStorage
|
import mozilla.components.browser.session.storage.SessionStorage
|
||||||
|
@ -15,10 +19,12 @@ import mozilla.components.concept.engine.DefaultSettings
|
||||||
import mozilla.components.concept.engine.Engine
|
import mozilla.components.concept.engine.Engine
|
||||||
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
|
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
|
||||||
import mozilla.components.feature.session.HistoryDelegate
|
import mozilla.components.feature.session.HistoryDelegate
|
||||||
|
import mozilla.components.feature.session.bundling.SessionBundleStorage
|
||||||
import mozilla.components.lib.crash.handler.CrashHandlerService
|
import mozilla.components.lib.crash.handler.CrashHandlerService
|
||||||
import org.mozilla.fenix.AppRequestInterceptor
|
import org.mozilla.fenix.AppRequestInterceptor
|
||||||
import org.mozilla.geckoview.GeckoRuntime
|
import org.mozilla.geckoview.GeckoRuntime
|
||||||
import org.mozilla.geckoview.GeckoRuntimeSettings
|
import org.mozilla.geckoview.GeckoRuntimeSettings
|
||||||
|
import java.util.concurrent.TimeUnit
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Component group for all core browser functionality.
|
* Component group for all core browser functionality.
|
||||||
|
@ -49,6 +55,10 @@ class Core(private val context: Context) {
|
||||||
GeckoEngine(context, defaultSettings, runtime)
|
GeckoEngine(context, defaultSettings, runtime)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val sessionStorage by lazy {
|
||||||
|
SessionBundleStorage(context, bundleLifetime = Pair(1, TimeUnit.HOURS))
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The session manager component provides access to a centralized registry of
|
* The session manager component provides access to a centralized registry of
|
||||||
* all browser sessions (i.e. tabs). It is initialized here to persist and restore
|
* all browser sessions (i.e. tabs). It is initialized here to persist and restore
|
||||||
|
@ -56,7 +66,24 @@ class Core(private val context: Context) {
|
||||||
* case all sessions/tabs are closed.
|
* case all sessions/tabs are closed.
|
||||||
*/
|
*/
|
||||||
val sessionManager by lazy {
|
val sessionManager by lazy {
|
||||||
SessionManager(engine)
|
SessionManager(engine).also { sessionManager ->
|
||||||
|
// Restore a previous, still active bundle.
|
||||||
|
GlobalScope.launch(Dispatchers.Main) {
|
||||||
|
val snapshot = async(Dispatchers.IO) {
|
||||||
|
sessionStorage.restore()?.restoreSnapshot(engine)
|
||||||
|
}
|
||||||
|
|
||||||
|
// There's an active bundle with a snapshot: Feed it into the SessionManager.
|
||||||
|
snapshot.await()?.let { sessionManager.restore(it) }
|
||||||
|
|
||||||
|
// Now that we have restored our previous state (if there's one) let's setup auto saving the state while
|
||||||
|
// the app is used.
|
||||||
|
sessionStorage.autoSave(sessionManager)
|
||||||
|
.periodicallyInForeground(interval = 30, unit = TimeUnit.SECONDS)
|
||||||
|
.whenGoingToBackground()
|
||||||
|
.whenSessionsChange()
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -76,6 +76,7 @@ object Deps {
|
||||||
const val mozilla_feature_prompts = "org.mozilla.components:feature-prompts:${Versions.mozilla_android_components}"
|
const val mozilla_feature_prompts = "org.mozilla.components:feature-prompts:${Versions.mozilla_android_components}"
|
||||||
const val mozilla_feature_toolbar = "org.mozilla.components:feature-toolbar:${Versions.mozilla_android_components}"
|
const val mozilla_feature_toolbar = "org.mozilla.components:feature-toolbar:${Versions.mozilla_android_components}"
|
||||||
const val mozilla_feature_findinpage = "org.mozilla.components:feature-findinpage:${Versions.mozilla_android_components}"
|
const val mozilla_feature_findinpage = "org.mozilla.components:feature-findinpage:${Versions.mozilla_android_components}"
|
||||||
|
const val mozilla_feature_session_bundling = "org.mozilla.components:feature-session-bundling:${Versions.mozilla_android_components}"
|
||||||
|
|
||||||
const val mozilla_service_fretboard = "org.mozilla.components:service-fretboard:${Versions.mozilla_android_components}"
|
const val mozilla_service_fretboard = "org.mozilla.components:service-fretboard:${Versions.mozilla_android_components}"
|
||||||
const val mozilla_service_glean = "org.mozilla.components:service-glean:${Versions.mozilla_android_components}"
|
const val mozilla_service_glean = "org.mozilla.components:service-glean:${Versions.mozilla_android_components}"
|
||||||
|
|
Loading…
Reference in New Issue