Skip to content

Commit

Permalink
Closes mozilla-mobile#472: Integrate feature-session-bundling component.
Browse files Browse the repository at this point in the history
This will take care of saving and restoring the (`SessionManager`) state.
  • Loading branch information
pocmo committed Feb 13, 2019
1 parent ffd3049 commit bca721c
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 3 deletions.
5 changes: 4 additions & 1 deletion app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -127,9 +127,12 @@ dependencies {
implementation Deps.mozilla_feature_session
implementation Deps.mozilla_feature_toolbar
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_glean
implementation Deps.mozilla_feature_findinpage

implementation Deps.mozilla_support_ktx

implementation Deps.mozilla_ui_colors
Expand Down
30 changes: 28 additions & 2 deletions app/src/main/java/org/mozilla/fenix/components/Core.kt
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ package org.mozilla.fenix.components
import android.content.Context
import android.content.SharedPreferences
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.session.SessionManager
import mozilla.components.browser.session.storage.SessionStorage
Expand All @@ -15,16 +19,17 @@ import mozilla.components.concept.engine.DefaultSettings
import mozilla.components.concept.engine.Engine
import mozilla.components.concept.engine.EngineSession.TrackingProtectionPolicy
import mozilla.components.feature.session.HistoryDelegate
import mozilla.components.feature.session.bundling.SessionBundleStorage
import mozilla.components.lib.crash.handler.CrashHandlerService
import org.mozilla.fenix.AppRequestInterceptor
import org.mozilla.geckoview.GeckoRuntime
import org.mozilla.geckoview.GeckoRuntimeSettings
import java.util.concurrent.TimeUnit

/**
* Component group for all core browser functionality.
*/
class Core(private val context: Context) {

/**
* The browser engine component initialized based on the build
* configuration (see build variants).
Expand All @@ -49,14 +54,35 @@ class Core(private val context: Context) {
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
* all browser sessions (i.e. tabs). It is initialized here to persist and restore
* sessions from the [SessionStorage], and with a default session (about:blank) in
* case all sessions/tabs are closed.
*/
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()
}
}
}

/**
Expand Down
1 change: 1 addition & 0 deletions buildSrc/src/main/java/Dependencies.kt
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ object Deps {
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_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_glean = "org.mozilla.components:service-glean:${Versions.mozilla_android_components}"
Expand Down

0 comments on commit bca721c

Please sign in to comment.