diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 80b04c43c..bb2568fd9 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -128,7 +128,14 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver { this, SessionControlViewModel::class.java ) { - SessionControlViewModel(SessionControlState(listOf(), setOf(), listOf(), mode)) + SessionControlViewModel( + SessionControlState( + getListOfTabs(requireComponents.core.sessionManager), + setOf(), + requireComponents.core.tabCollectionStorage.cachedTabCollections, + mode + ) + ) } ) @@ -269,10 +276,14 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver { } } - val mode = currentMode() - getManagedEmitter().onNext(SessionControlChange.ModeChange(mode)) + getManagedEmitter().onNext( + SessionControlChange.Change( + tabs = getListOfTabs(sessionManager = requireComponents.core.sessionManager), + mode = currentMode(), + collections = requireComponents.core.tabCollectionStorage.cachedTabCollections + ) + ) - emitSessionChanges() sessionObserver.onStart() tabCollectionObserver = subscribeToTabCollections() } @@ -609,27 +620,30 @@ class HomeFragment : Fragment(), CoroutineScope, AccountObserver { } private fun emitSessionChanges() { - val sessionManager = requireComponents.core.sessionManager - + val sessionManager = context?.components?.core?.sessionManager ?: return getManagedEmitter().onNext( SessionControlChange.TabsChange( - sessionManager.sessions - .filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private } - .map { - val selected = it == sessionManager.selectedSession - Tab( - it.id, - it.url, - it.url.urlToTrimmedHost(), - it.title, - selected, - it.thumbnail - ) - } + getListOfTabs(sessionManager) ) ) } + private fun getListOfTabs(sessionManager: SessionManager): List { + return sessionManager.sessions + .filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private } + .map { + val selected = it == sessionManager.selectedSession + Tab( + it.id, + it.url, + it.url.urlToTrimmedHost(), + it.title, + selected, + it.thumbnail + ) + } + } + private fun emitAccountChanges() { val mode = currentMode() getManagedEmitter().onNext(SessionControlChange.ModeChange(mode)) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt index 76d555d7a..57c2ff628 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlComponent.kt @@ -139,6 +139,8 @@ fun Observer.onNext(onboardingAction: OnboardingAction) { } sealed class SessionControlChange : Change { + data class Change(val tabs: List, val mode: Mode, val collections: List) : + SessionControlChange() data class TabsChange(val tabs: List) : SessionControlChange() data class ModeChange(val mode: Mode) : SessionControlChange() data class CollectionsChange(val collections: List) : SessionControlChange() @@ -165,6 +167,11 @@ class SessionControlViewModel( state.copy(expandedCollections = newExpandedCollection) } + is SessionControlChange.Change -> state.copy( + tabs = change.tabs, + mode = change.mode, + collections = change.collections + ) } } } diff --git a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt index cd4a26e4f..a8b70ce89 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlUIView.kt @@ -139,7 +139,6 @@ class SessionControlUIView( view.apply { adapter = sessionControlAdapter layoutManager = LinearLayoutManager(container.context) - itemAnimator = null // TODO #2785: Remove this line val itemTouchHelper = ItemTouchHelper( SwipeToDeleteCallback(