1
0
Fork 0

For #1694 - Show Snackbar with Undo When Tab is Closed (#2246)

master
Emily Kager 2019-05-03 07:41:44 -07:00 committed by Colin Lee
parent 0d82431195
commit e5e448ac8f
1 changed files with 35 additions and 4 deletions

View File

@ -40,6 +40,7 @@ import org.mozilla.fenix.collections.CreateCollectionViewModel
import org.mozilla.fenix.collections.SaveCollectionStep
import org.mozilla.fenix.collections.Tab
import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.allowUndo
import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.share
import org.mozilla.fenix.ext.urlToHost
@ -202,10 +203,7 @@ class HomeFragment : Fragment(), CoroutineScope {
(activity as HomeActivity).openToBrowser(BrowserDirection.FromHome)
}
is TabAction.Close -> {
requireComponents.core.sessionManager.findSessionById(action.sessionId)
?.let { session ->
requireComponents.core.sessionManager.remove(session)
}
removeTabWithUndo(action.sessionId)
}
is TabAction.Share -> {
requireComponents.core.sessionManager.findSessionById(action.sessionId)
@ -303,6 +301,39 @@ class HomeFragment : Fragment(), CoroutineScope {
return observer
}
private fun removeTabWithUndo(sessionId: String) {
val sessionManager = requireComponents.core.sessionManager
getManagedEmitter<SessionControlChange>().onNext(
SessionControlChange.TabsChange(
sessionManager.sessions
.filter { (activity as HomeActivity).browsingModeManager.isPrivate == it.private }
.filter { it.id != sessionId }
.map {
val selected =
it == sessionManager.selectedSession
org.mozilla.fenix.home.sessioncontrol.Tab(
it.id,
it.url,
it.url.urlToHost(),
it.title,
selected,
it.thumbnail
)
}
)
)
CoroutineScope(Dispatchers.Main).allowUndo(
view!!, getString(R.string.snackbar_tab_deleted),
getString(R.string.snackbar_deleted_undo), { emitSessionChanges() }
) {
sessionManager.findSessionById(sessionId)
?.let { session ->
sessionManager.remove(session)
}
}
}
private fun emitSessionChanges() {
val sessionManager = requireComponents.core.sessionManager
getManagedEmitter<SessionControlChange>().onNext(