For #10864 - Display snack bar to undo closing tabs
parent
a59917cdc0
commit
f653964ee1
|
@ -36,6 +36,7 @@ import mozilla.components.browser.state.action.ContentAction
|
||||||
import mozilla.components.browser.state.state.content.DownloadState
|
import mozilla.components.browser.state.state.content.DownloadState
|
||||||
import mozilla.components.browser.state.store.BrowserStore
|
import mozilla.components.browser.state.store.BrowserStore
|
||||||
import mozilla.components.concept.engine.prompt.ShareData
|
import mozilla.components.concept.engine.prompt.ShareData
|
||||||
|
import mozilla.components.concept.tabstray.Tab
|
||||||
import mozilla.components.feature.accounts.FxaCapability
|
import mozilla.components.feature.accounts.FxaCapability
|
||||||
import mozilla.components.feature.accounts.FxaWebChannelFeature
|
import mozilla.components.feature.accounts.FxaWebChannelFeature
|
||||||
import mozilla.components.feature.app.links.AppLinksFeature
|
import mozilla.components.feature.app.links.AppLinksFeature
|
||||||
|
@ -96,6 +97,7 @@ import org.mozilla.fenix.ext.settings
|
||||||
import org.mozilla.fenix.home.SharedViewModel
|
import org.mozilla.fenix.home.SharedViewModel
|
||||||
import org.mozilla.fenix.tabtray.TabTrayDialogFragment
|
import org.mozilla.fenix.tabtray.TabTrayDialogFragment
|
||||||
import org.mozilla.fenix.theme.ThemeManager
|
import org.mozilla.fenix.theme.ThemeManager
|
||||||
|
import org.mozilla.fenix.utils.allowUndo
|
||||||
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
|
import org.mozilla.fenix.wifi.SitePermissionsWifiIntegration
|
||||||
import java.lang.ref.WeakReference
|
import java.lang.ref.WeakReference
|
||||||
|
|
||||||
|
@ -225,6 +227,33 @@ abstract class BaseBrowserFragment : Fragment(), UserInteractionHandler, Session
|
||||||
tabTrayDialog.dismiss()
|
tabTrayDialog.dismiss()
|
||||||
findNavController().navigate(BrowserFragmentDirections.actionGlobalHome())
|
findNavController().navigate(BrowserFragmentDirections.actionGlobalHome())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTabClosed(tab: Tab) {
|
||||||
|
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
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
|
@ -371,6 +371,33 @@ class HomeFragment : Fragment() {
|
||||||
(activity as HomeActivity).browsingModeManager.mode = BrowsingMode.fromBoolean(private)
|
(activity as HomeActivity).browsingModeManager.mode = BrowsingMode.fromBoolean(private)
|
||||||
tabTrayDialog.dismiss()
|
tabTrayDialog.dismiss()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTabClosed(tab: mozilla.components.concept.tabstray.Tab) {
|
||||||
|
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
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,7 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
|
||||||
interface Interactor {
|
interface Interactor {
|
||||||
fun onTabSelected(tab: Tab)
|
fun onTabSelected(tab: Tab)
|
||||||
fun onNewTabTapped(private: Boolean)
|
fun onNewTabTapped(private: Boolean)
|
||||||
|
fun onTabClosed(tab: Tab)
|
||||||
}
|
}
|
||||||
|
|
||||||
private lateinit var tabTrayView: TabTrayView
|
private lateinit var tabTrayView: TabTrayView
|
||||||
|
@ -62,6 +63,10 @@ class TabTrayDialogFragment : AppCompatDialogFragment(), TabTrayInteractor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onTabClosed(tab: Tab) {
|
||||||
|
interactor?.onTabClosed(tab)
|
||||||
|
}
|
||||||
|
|
||||||
override fun onTabSelected(tab: Tab) {
|
override fun onTabSelected(tab: Tab) {
|
||||||
interactor?.onTabSelected(tab)
|
interactor?.onTabSelected(tab)
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
|
||||||
interface TabTrayInteractor {
|
interface TabTrayInteractor {
|
||||||
|
fun onTabClosed(tab: Tab)
|
||||||
fun onTabSelected(tab: Tab)
|
fun onTabSelected(tab: Tab)
|
||||||
fun onNewTabTapped(private: Boolean)
|
fun onNewTabTapped(private: Boolean)
|
||||||
fun onTabTrayDismissed()
|
fun onTabTrayDismissed()
|
||||||
|
@ -110,7 +111,9 @@ class TabTrayView(
|
||||||
tabsFeature.filterTabs(filter)
|
tabsFeature.filterTabs(filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTabClosed(tab: Tab) { /*noop*/ }
|
override fun onTabClosed(tab: Tab) {
|
||||||
|
interactor.onTabClosed(tab)
|
||||||
|
}
|
||||||
override fun onTabReselected(tab: TabLayout.Tab?) { /*noop*/ }
|
override fun onTabReselected(tab: TabLayout.Tab?) { /*noop*/ }
|
||||||
override fun onTabUnselected(tab: TabLayout.Tab?) { /*noop*/ }
|
override fun onTabUnselected(tab: TabLayout.Tab?) { /*noop*/ }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue