|
|
@ -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 })
|
|
|
|
|
|
|
|
}
|
|
|
|