pull/600/head
Colin Lee 5 years ago committed by GitHub
parent 65ca28a7b2
commit 809cf9bb6c

@ -39,9 +39,11 @@ import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.BrowsingModeManager import org.mozilla.fenix.BrowsingModeManager
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
import org.mozilla.fenix.components.Components
import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.FenixSnackbar
import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.components.metrics.Event
import org.mozilla.fenix.ext.allowUndo import org.mozilla.fenix.ext.allowUndo
import org.mozilla.fenix.ext.components
import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.ext.requireComponents
import org.mozilla.fenix.ext.share import org.mozilla.fenix.ext.share
import org.mozilla.fenix.ext.urlToHost import org.mozilla.fenix.ext.urlToHost
@ -148,7 +150,8 @@ class BookmarkFragment : Fragment(), CoroutineScope, BackHandler, AccountObserve
.openToBrowserAndLoad( .openToBrowserAndLoad(
searchTermOrURL = url, searchTermOrURL = url,
newTab = false, newTab = false,
from = BrowserDirection.FromBookmarks) from = BrowserDirection.FromBookmarks
)
} }
} }
requireComponents.analytics.metrics.track(Event.OpenedBookmark) requireComponents.analytics.metrics.track(Event.OpenedBookmark)
@ -210,13 +213,17 @@ class BookmarkFragment : Fragment(), CoroutineScope, BackHandler, AccountObserve
} }
} }
is BookmarkAction.Delete -> { is BookmarkAction.Delete -> {
allowUndo( val components = context?.applicationContext?.components!!
getManagedEmitter<BookmarkChange>().onNext(BookmarkChange.Change(currentRoot - it.item.guid))
CoroutineScope(Main).allowUndo(
view!!, getString(R.string.bookmark_deletion_snackbar_message, it.item.url.urlToHost()), view!!, getString(R.string.bookmark_deletion_snackbar_message, it.item.url.urlToHost()),
getString(R.string.bookmark_undo_deletion) getString(R.string.bookmark_undo_deletion)
) { ) {
requireComponents.core.bookmarksStorage.deleteNode(it.item.guid) components.core.bookmarksStorage.deleteNode(it.item.guid)
requireComponents.analytics.metrics.track(Event.RemoveBookmark) components.analytics.metrics.track(Event.RemoveBookmark)
refreshBookmarks() refreshBookmarks(components)
} }
} }
is BookmarkAction.ModeChanged -> activity?.invalidateOptionsMenu() is BookmarkAction.ModeChanged -> activity?.invalidateOptionsMenu()
@ -278,13 +285,18 @@ class BookmarkFragment : Fragment(), CoroutineScope, BackHandler, AccountObserve
true true
} }
R.id.delete_bookmarks_multi_select -> { R.id.delete_bookmarks_multi_select -> {
allowUndo( val components = context?.applicationContext?.components!!
val selectedBookmarks = getSelectedBookmarks()
getManagedEmitter<BookmarkChange>().onNext(BookmarkChange.Change(currentRoot - selectedBookmarks))
CoroutineScope(Main).allowUndo(
view!!, getString(R.string.bookmark_deletion_multiple_snackbar_message), view!!, getString(R.string.bookmark_deletion_multiple_snackbar_message),
getString(R.string.bookmark_undo_deletion) getString(R.string.bookmark_undo_deletion)
) { ) {
deleteSelectedBookmarks() deleteSelectedBookmarks(selectedBookmarks, components)
requireComponents.analytics.metrics.track(Event.RemoveBookmarks) components.analytics.metrics.track(Event.RemoveBookmarks)
refreshBookmarks() refreshBookmarks(components)
} }
true true
} }
@ -310,14 +322,17 @@ class BookmarkFragment : Fragment(), CoroutineScope, BackHandler, AccountObserve
private fun getSelectedBookmarks() = (bookmarkComponent.uiView as BookmarkUIView).getSelected() private fun getSelectedBookmarks() = (bookmarkComponent.uiView as BookmarkUIView).getSelected()
private suspend fun deleteSelectedBookmarks() { private suspend fun deleteSelectedBookmarks(
getSelectedBookmarks().forEach { selected: Set<BookmarkNode> = getSelectedBookmarks(),
requireComponents.core.bookmarksStorage.deleteNode(it.guid) components: Components = requireComponents
) {
selected.forEach {
components.core.bookmarksStorage.deleteNode(it.guid)
} }
} }
private suspend fun refreshBookmarks() { private suspend fun refreshBookmarks(components: Components = requireComponents) {
requireComponents.core.bookmarksStorage.getTree(currentRoot!!.guid, false) components.core.bookmarksStorage.getTree(currentRoot!!.guid, false)
?.let { node -> ?.let { node ->
getManagedEmitter<BookmarkChange>().onNext(BookmarkChange.Change(node)) getManagedEmitter<BookmarkChange>().onNext(BookmarkChange.Change(node))
} }
@ -328,3 +343,11 @@ class BookmarkFragment : Fragment(), CoroutineScope, BackHandler, AccountObserve
clipBoard.primaryClip = ClipData.newPlainText(url, url) clipBoard.primaryClip = ClipData.newPlainText(url, url)
} }
} }
operator fun BookmarkNode?.minus(child: String): BookmarkNode {
return this!!.copy(children = this.children?.filter { it.guid != child })
}
operator fun BookmarkNode?.minus(children: Set<BookmarkNode>): BookmarkNode {
return this!!.copy(children = this.children?.filter { it !in children })
}

Loading…
Cancel
Save