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

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

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

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

Loading…
Cancel
Save