pull/600/head
Jeff Boek 4 years ago committed by GitHub
parent 21ae2b8350
commit 6c5f7d29b6

@ -12,6 +12,7 @@ import android.view.View
import androidx.core.view.isVisible import androidx.core.view.isVisible
import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.concept.engine.prompt.ShareData
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import mozilla.components.feature.tabs.tabstray.TabsFeature import mozilla.components.feature.tabs.tabstray.TabsFeature
import kotlinx.android.synthetic.main.fragment_tab_tray.tabsTray import kotlinx.android.synthetic.main.fragment_tab_tray.tabsTray
import kotlinx.android.synthetic.main.fragment_tab_tray.view.* import kotlinx.android.synthetic.main.fragment_tab_tray.view.*
@ -32,6 +33,7 @@ import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.nav
import org.mozilla.fenix.ext.sessionsOfType import org.mozilla.fenix.ext.sessionsOfType
import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.ext.showToolbar
import org.mozilla.fenix.utils.allowUndo
@SuppressWarnings("TooManyFunctions", "LargeClass") @SuppressWarnings("TooManyFunctions", "LargeClass")
class TabTrayFragment : Fragment(R.layout.fragment_tab_tray), TabsTray.Observer, UserInteractionHandler { class TabTrayFragment : Fragment(R.layout.fragment_tab_tray), TabsTray.Observer, UserInteractionHandler {
@ -130,16 +132,47 @@ class TabTrayFragment : Fragment(R.layout.fragment_tab_tray), TabsTray.Observer,
true true
} }
R.id.tab_tray_close_menu_item -> { R.id.tab_tray_close_menu_item -> {
val tabs = getListOfSessions() closeAllTabs()
tabs.forEach {
sessionManager.remove(it)
}
true true
} }
else -> super.onOptionsItemSelected(item) else -> super.onOptionsItemSelected(item)
} }
} }
private fun closeAllTabs() {
val tabs = getListOfSessions()
val selectedIndex = sessionManager
.selectedSession?.let { sessionManager.sessions.indexOf(it) } ?: 0
val snapshot = tabs
.map(sessionManager::createSessionSnapshot)
.map { it.copy(engineSession = null, engineSessionState = it.engineSession?.saveState()) }
.let { SessionManager.Snapshot(it, selectedIndex) }
tabs.forEach {
sessionManager.remove(it)
}
val isPrivate = (activity as HomeActivity).browsingModeManager.mode.isPrivate
val snackbarMessage = if (isPrivate) {
getString(R.string.snackbar_private_tabs_closed)
} else {
getString(R.string.snackbar_tabs_closed)
}
viewLifecycleOwner.lifecycleScope.allowUndo(
requireView(),
snackbarMessage,
getString(R.string.snackbar_deleted_undo),
{
sessionManager.restore(snapshot)
},
operation = { },
anchorView = view?.tab_tray_controls
)
}
private fun saveToCollection() { private fun saveToCollection() {
val tabs = getListOfSessions() val tabs = getListOfSessions()
val tabIds = tabs.map { it.id }.toList().toTypedArray() val tabIds = tabs.map { it.id }.toList().toTypedArray()
@ -169,15 +202,15 @@ class TabTrayFragment : Fragment(R.layout.fragment_tab_tray), TabsTray.Observer,
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
tabsFeature?.start()
tabsTray.register(this) tabsTray.register(this)
tabsFeature?.start()
} }
override fun onStop() { override fun onStop() {
super.onStop() super.onStop()
tabsFeature?.stop()
tabsTray.unregister(this) tabsTray.unregister(this)
tabsFeature?.stop()
} }
override fun onBackPressed(): Boolean { override fun onBackPressed(): Boolean {
@ -196,7 +229,30 @@ class TabTrayFragment : Fragment(R.layout.fragment_tab_tray), TabsTray.Observer,
} }
override fun onTabClosed(tab: Tab) { override fun onTabClosed(tab: Tab) {
// noop val snapshot = sessionManager
.findSessionById(tab.id)?.let {
sessionManager.createSessionSnapshot(it)
} ?: return
val state = snapshot.engineSession?.saveState()
val isSelected = tab.id == requireComponents.core.store.state.selectedTabId ?: false
val snackbarMessage = if (snapshot.session.private) {
getString(R.string.snackbar_private_tab_closed)
} else {
getString(R.string.snackbar_tab_closed)
}
viewLifecycleOwner.lifecycleScope.allowUndo(
requireView(),
snackbarMessage,
getString(R.string.snackbar_deleted_undo),
{
sessionManager.add(snapshot.session, isSelected, engineSessionState = state)
},
operation = { },
anchorView = view?.tab_tray_controls
)
} }
override fun onTabSelected(tab: Tab) { override fun onTabSelected(tab: Tab) {

@ -2,9 +2,13 @@
<!-- This Source Code Form is subject to the terms of the Mozilla Public <!-- This Source Code Form is subject to the terms of the Mozilla Public
- License, v. 2.0. If a copy of the MPL was not distributed with this - License, v. 2.0. If a copy of the MPL was not distributed with this
- file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:mozac="http://schemas.android.com/apk/res-auto" xmlns:mozac="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="?tabTrayItemBackground"> android:background="?tabTrayItemBackground">
@ -108,3 +112,4 @@
app:layout_constraintEnd_toEndOf="@+id/tab_tray_controls" app:layout_constraintEnd_toEndOf="@+id/tab_tray_controls"
app:layout_constraintStart_toEndOf="@+id/tab_tray_go_home" /> app:layout_constraintStart_toEndOf="@+id/tab_tray_go_home" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Loading…
Cancel
Save