Update to new state API and update Mozilla Android Components version.

The EngineSessionState of a tab is now always accessible through tab.engineState.engineSessionState. It will
never get cleared.
pull/90/head
Sebastian Kaspari 4 years ago
parent 100cc7c088
commit e0071341c7

@ -38,6 +38,7 @@ import mozilla.appservices.places.BookmarkRoot
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab
import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.state.content.DownloadState
@ -252,13 +253,11 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
BrowserFragmentDirections.actionGlobalTabTrayDialogFragment()
)
},
onCloseTab = {
val snapshot = sessionManager.createSessionSnapshot(it)
val state = snapshot.engineSession?.saveState()
val isSelected =
it.id == context.components.core.store.state.selectedTabId ?: false
onCloseTab = { closedSession ->
val tab = store.state.findTab(closedSession.id) ?: return@DefaultBrowserToolbarController
val isSelected = tab.id == context.components.core.store.state.selectedTabId
val snackbarMessage = if (snapshot.session.private) {
val snackbarMessage = if (tab.content.private) {
requireContext().getString(R.string.snackbar_private_tab_closed)
} else {
requireContext().getString(R.string.snackbar_tab_closed)
@ -270,9 +269,9 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
requireContext().getString(R.string.snackbar_deleted_undo),
{
sessionManager.add(
snapshot.session,
closedSession,
isSelected,
engineSessionState = state
engineSessionState = tab.engineState.engineSessionState
)
},
operation = { }

@ -55,6 +55,7 @@ import mozilla.appservices.places.BookmarkRoot
import mozilla.components.browser.menu.view.MenuButton
import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.selector.getNormalOrPrivateTabs
import mozilla.components.browser.state.selector.normalTabs
import mozilla.components.browser.state.selector.privateTabs
@ -471,16 +472,10 @@ class HomeFragment : Fragment() {
private fun removeAllTabsAndShowSnackbar(sessionCode: String) {
val tabs = sessionManager.sessionsOfType(private = sessionCode == ALL_PRIVATE_TABS).toList()
val selectedIndex = sessionManager
.selectedSession?.let { sessionManager.sessions.indexOf(it) } ?: 0
.selectedSession?.let { sessionManager.sessions.indexOf(it) } ?: SessionManager.NO_SELECTION
val snapshot = tabs
.map(sessionManager::createSessionSnapshot)
.map {
it.copy(
engineSession = null,
engineSessionState = it.engineSession?.saveState()
)
}
.let { SessionManager.Snapshot(it, selectedIndex) }
tabs.forEach {
@ -508,7 +503,7 @@ class HomeFragment : Fragment() {
private fun removeTabAndShowSnackbar(sessionId: String) {
sessionManager.findSessionById(sessionId)?.let { session ->
val snapshot = sessionManager.createSessionSnapshot(session)
val state = snapshot.engineSession?.saveState()
val state = store.state.findTab(sessionId)?.engineState?.engineSessionState
val isSelected =
session.id == requireComponents.core.store.state.selectedTabId ?: false

@ -30,6 +30,7 @@ import kotlinx.coroutines.Dispatchers.Main
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.launch
import mozilla.components.browser.session.Session
import mozilla.components.browser.state.selector.findTab
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.thumbnails.loader.ThumbnailLoader
import mozilla.components.feature.tab.collections.TabCollection
@ -255,26 +256,22 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler
}
private fun showUndoSnackbarForTab(sessionId: String) {
val sessionManager = view?.context?.components?.core?.sessionManager
val store = requireComponents.core.store
val sessionManager = requireComponents.core.sessionManager
val snapshot = sessionManager
?.findSessionById(sessionId)?.let {
sessionManager.createSessionSnapshot(it)
} ?: return
val tab = requireComponents.core.store.state.findTab(sessionId) ?: return
val session = sessionManager.findSessionById(sessionId) ?: return
// Check if this is the last tab of this session type
val isLastOpenTab =
sessionManager.sessions.filter { snapshot.session.private == it.private }.size == 1
val isLastOpenTab = store.state.tabs.filter { it.content.private == tab.content.private }.size == 1
if (isLastOpenTab) {
dismissTabTrayAndNavigateHome(sessionId)
return
}
val state = snapshot.engineSession?.saveState()
val isSelected = sessionId == requireComponents.core.store.state.selectedTabId ?: false
val snackbarMessage = if (snapshot.session.private) {
val snackbarMessage = if (tab.content.private) {
getString(R.string.snackbar_private_tab_closed)
} else {
getString(R.string.snackbar_tab_closed)
@ -285,8 +282,8 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), UserInteractionHandler
snackbarMessage,
getString(R.string.snackbar_deleted_undo),
{
sessionManager.add(snapshot.session, isSelected, engineSessionState = state)
_tabTrayView?.scrollToTab(snapshot.session.id)
sessionManager.add(session, isSelected, engineSessionState = tab.engineState.engineSessionState)
_tabTrayView?.scrollToTab(session.id)
},
operation = { },
elevation = ELEVATION,

@ -3,5 +3,5 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
object AndroidComponents {
const val VERSION = "58.0.20200906130403"
const val VERSION = "58.0.20200907130126"
}

Loading…
Cancel
Save