Revert "For #11404 - Create alert message when a lot of tabs are to be opened."
This reverts commit c75e331a30
.
This commit is contained in:
parent
7fc213ce0c
commit
cfa376e5d2
|
@ -7,7 +7,6 @@ package org.mozilla.fenix.library.bookmarks
|
|||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.content.res.Resources
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDirections
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
@ -76,9 +75,9 @@ class DefaultBookmarkController(
|
|||
private val store: BookmarkFragmentStore,
|
||||
private val sharedViewModel: BookmarksSharedViewModel,
|
||||
private val tabsUseCases: TabsUseCases?,
|
||||
private val loadBookmarkNode: suspend (String, Boolean) -> BookmarkNode?,
|
||||
private val loadBookmarkNode: suspend (String) -> BookmarkNode?,
|
||||
private val showSnackbar: (String) -> Unit,
|
||||
private val alertHeavyOpen: (Int, () -> Unit) -> Unit,
|
||||
private val onOpenAllInTabsEmpty: () -> Unit,
|
||||
private val deleteBookmarkNodes: (Set<BookmarkNode>, BookmarkRemoveType) -> Unit,
|
||||
private val deleteBookmarkFolder: (Set<BookmarkNode>) -> Unit,
|
||||
private val showTabTray: () -> Unit,
|
||||
|
@ -87,10 +86,6 @@ class DefaultBookmarkController(
|
|||
|
||||
private val resources: Resources = activity.resources
|
||||
|
||||
@Suppress("MagicNumber")
|
||||
@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
|
||||
internal val maxOpenBeforeWarn = 15
|
||||
|
||||
override fun handleBookmarkChanged(item: BookmarkNode) {
|
||||
sharedViewModel.selectedFolder = item
|
||||
store.dispatch(BookmarkFragmentAction.Change(item))
|
||||
|
@ -113,7 +108,7 @@ class DefaultBookmarkController(
|
|||
override fun handleBookmarkExpand(folder: BookmarkNode) {
|
||||
handleAllBookmarksDeselected()
|
||||
scope.launch {
|
||||
val node = loadBookmarkNode.invoke(folder.guid, false) ?: return@launch
|
||||
val node = loadBookmarkNode.invoke(folder.guid) ?: return@launch
|
||||
sharedViewModel.selectedFolder = node
|
||||
store.dispatch(BookmarkFragmentAction.Change(node))
|
||||
}
|
||||
|
@ -166,56 +161,32 @@ class DefaultBookmarkController(
|
|||
showTabTray()
|
||||
}
|
||||
|
||||
private fun extractURLsFromTree(node: BookmarkNode): MutableList<String> {
|
||||
val urls = mutableListOf<String>()
|
||||
private suspend fun recursiveBookmarkFolderOpening(folder: BookmarkNode, firstLaunch: Boolean = false) {
|
||||
val node = loadBookmarkNode.invoke(folder.guid) ?: return
|
||||
if (!node.children.isNullOrEmpty()) {
|
||||
if (firstLaunch) invokePendingDeletion.invoke()
|
||||
|
||||
when (node.type) {
|
||||
BookmarkNodeType.FOLDER -> {
|
||||
// if not leaf (empty) folder
|
||||
if (!node.children.isNullOrEmpty()) {
|
||||
node.children!!.iterator().forEach {
|
||||
urls.addAll(extractURLsFromTree(it))
|
||||
node.children!!.iterator().forEach {
|
||||
when (it.type) {
|
||||
BookmarkNodeType.FOLDER -> recursiveBookmarkFolderOpening(it, mode = mode)
|
||||
BookmarkNodeType.ITEM -> {
|
||||
it.url?.let { url -> tabsUseCases?.addTab?.invoke(url, private = (mode == BrowsingMode.Private)) }
|
||||
}
|
||||
BookmarkNodeType.SEPARATOR -> {}
|
||||
}
|
||||
}.also {
|
||||
if (firstLaunch) {
|
||||
activity.browsingModeManager.mode = BrowsingMode.fromBoolean(mode == BrowsingMode.Private)
|
||||
showTabTray()
|
||||
}
|
||||
}
|
||||
BookmarkNodeType.ITEM -> {
|
||||
node.url?.let { urls.add(it) }
|
||||
}
|
||||
BookmarkNodeType.SEPARATOR -> {}
|
||||
}
|
||||
|
||||
return urls
|
||||
} else if (firstLaunch) onOpenAllInTabsEmpty.invoke()
|
||||
}
|
||||
|
||||
override fun handleBookmarkFolderOpening(folder: BookmarkNode, mode: BrowsingMode) {
|
||||
// potentially heavy function with a lot of bookmarks to open => use a coroutine
|
||||
scope.launch {
|
||||
// if more than maxOpenBeforeWarn (15) elements
|
||||
val tree = loadBookmarkNode.invoke(folder.guid, true) ?: return@launch
|
||||
val urls = extractURLsFromTree(tree)
|
||||
|
||||
val openAll = { load: Boolean ->
|
||||
for (url in urls) {
|
||||
tabsUseCases?.addTab?.invoke(
|
||||
url,
|
||||
private = (mode == BrowsingMode.Private),
|
||||
startLoading = load,
|
||||
)
|
||||
}
|
||||
activity.browsingModeManager.mode =
|
||||
BrowsingMode.fromBoolean(mode == BrowsingMode.Private)
|
||||
showTabTray()
|
||||
}
|
||||
|
||||
// warn user if more than maxOpenBeforeWarn (15)
|
||||
if (urls.size >= maxOpenBeforeWarn) {
|
||||
alertHeavyOpen(urls.size) {
|
||||
// do not load bookmarks when more than maxOpenBeforeWarn (15)
|
||||
openAll(false)
|
||||
}
|
||||
} else {
|
||||
openAll(true)
|
||||
}
|
||||
recursiveBookmarkFolderOpening(folder, true, mode)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -101,7 +101,7 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
tabsUseCases = activity?.components?.useCases?.tabsUseCases,
|
||||
loadBookmarkNode = ::loadBookmarkNode,
|
||||
showSnackbar = ::showSnackBarWithText,
|
||||
alertHeavyOpen = ::alertHeavyOpen,
|
||||
onOpenAllInTabsEmpty = ::onOpenAllInTabsEmpty,
|
||||
deleteBookmarkNodes = ::deleteMulti,
|
||||
deleteBookmarkFolder = ::showRemoveFolderDialog,
|
||||
showTabTray = ::showTabTray,
|
||||
|
@ -272,11 +272,11 @@ class BookmarkFragment : LibraryPageFragment<BookmarkNode>(), UserInteractionHan
|
|||
return bookmarkView.onBackPressed()
|
||||
}
|
||||
|
||||
private suspend fun loadBookmarkNode(guid: String, recursive: Boolean = false): BookmarkNode? = withContext(IO) {
|
||||
private suspend fun loadBookmarkNode(guid: String): BookmarkNode? = withContext(IO) {
|
||||
// Only runs if the fragment is attached same as [runIfFragmentIsAttached]
|
||||
context?.let {
|
||||
requireContext().bookmarkStorage
|
||||
.getTree(guid, recursive)
|
||||
.getTree(guid, false)
|
||||
?.let { desktopFolders.withOptionalDesktopFolders(it) }
|
||||
}
|
||||
}
|
||||
|
|
|
@ -620,15 +620,6 @@
|
|||
<!-- Content description (not visible, for screen readers etc.): "Close button for library settings" -->
|
||||
<string name="content_description_close_button">Close</string>
|
||||
|
||||
<!-- Title to show in alert when a lot of tabs are to be opened -->
|
||||
<string name="open_all_warning_title">Confirm open</string>
|
||||
<!-- Message to show in alert when a lot of tabs are to be opened -->
|
||||
<string name="open_all_warning_message">You are about to open %d tabs. This might slow down Firefox. Are you sure you want to continue ?</string>
|
||||
<!-- Dialog button text for confirming open all tabs -->
|
||||
<string name="open_all_warning_confirm">Open tabs</string>
|
||||
<!-- Dialog button text for canceling open all tabs -->
|
||||
<string name="open_all_warning_cancel">Cancel</string>
|
||||
|
||||
<!-- Text to show users they have one site in the history group section of the History fragment.
|
||||
%d is a placeholder for the number of sites in the group. -->
|
||||
<string name="history_search_group_site">%d site</string>
|
||||
|
|
|
@ -17,11 +17,9 @@ import io.mockk.coVerify
|
|||
import io.mockk.every
|
||||
import io.mockk.just
|
||||
import io.mockk.mockk
|
||||
import io.mockk.mockkConstructor
|
||||
import io.mockk.runs
|
||||
import io.mockk.slot
|
||||
import io.mockk.spyk
|
||||
import io.mockk.unmockkConstructor
|
||||
import io.mockk.verify
|
||||
import io.mockk.verifyOrder
|
||||
import mozilla.appservices.places.BookmarkRoot
|
||||
|
@ -195,7 +193,7 @@ class BookmarkControllerTest {
|
|||
fun `handleBookmarkExpand should refresh and change the active bookmark node`() = runTestOnMain {
|
||||
var loadBookmarkNodeInvoked = false
|
||||
createController(
|
||||
loadBookmarkNode = { _: String, _: Boolean ->
|
||||
loadBookmarkNode = {
|
||||
loadBookmarkNodeInvoked = true
|
||||
tree
|
||||
},
|
||||
|
@ -367,7 +365,7 @@ class BookmarkControllerTest {
|
|||
showTabTray = {
|
||||
showTabTrayInvoked = true
|
||||
},
|
||||
loadBookmarkNode = { guid: String, _: Boolean ->
|
||||
loadBookmarkNode = {
|
||||
fun recurseFind(item: BookmarkNode, guid: String): BookmarkNode? {
|
||||
if (item.guid == guid) {
|
||||
return item
|
||||
|
@ -381,7 +379,7 @@ class BookmarkControllerTest {
|
|||
return null
|
||||
}
|
||||
}
|
||||
recurseFind(tree, guid)
|
||||
recurseFind(tree, it)
|
||||
},
|
||||
).handleBookmarkFolderOpening(tree, BrowsingMode.Normal)
|
||||
|
||||
|
@ -401,7 +399,7 @@ class BookmarkControllerTest {
|
|||
showTabTray = {
|
||||
showTabTrayInvoked = true
|
||||
},
|
||||
loadBookmarkNode = { guid: String, _: Boolean ->
|
||||
loadBookmarkNode = {
|
||||
fun recurseFind(item: BookmarkNode, guid: String): BookmarkNode? {
|
||||
if (item.guid == guid) {
|
||||
return item
|
||||
|
@ -415,7 +413,7 @@ class BookmarkControllerTest {
|
|||
return null
|
||||
}
|
||||
}
|
||||
recurseFind(tree, guid)
|
||||
recurseFind(tree, it)
|
||||
},
|
||||
).handleBookmarkFolderOpening(tree, BrowsingMode.Private)
|
||||
|
||||
|
@ -429,24 +427,18 @@ class BookmarkControllerTest {
|
|||
}
|
||||
|
||||
@Test
|
||||
fun `handleBookmarkFolderOpening for more than maxOpenBeforeWarn items should show alert`() {
|
||||
var alertHeavyOpenInvoked = false
|
||||
|
||||
mockkConstructor(DefaultBookmarkController::class)
|
||||
every {
|
||||
anyConstructed<DefaultBookmarkController>() getProperty "maxOpenBeforeWarn"
|
||||
} propertyType Int::class returns 1
|
||||
|
||||
fun `handleBookmarkFolderOpening for an empty folder should show toast`() {
|
||||
var onOpenAllInTabsEmptyInvoked = false
|
||||
createController(
|
||||
alertHeavyOpen = { _: Int, _: () -> Unit -> alertHeavyOpenInvoked = true },
|
||||
loadBookmarkNode = { _: String, _: Boolean ->
|
||||
tree
|
||||
onOpenAllInTabsEmpty = {
|
||||
onOpenAllInTabsEmptyInvoked = true
|
||||
},
|
||||
).handleBookmarkFolderOpening(tree, BrowsingMode.Normal)
|
||||
loadBookmarkNode = {
|
||||
subfolder
|
||||
},
|
||||
).handleBookmarkFolderOpening(subfolder, BrowsingMode.Normal)
|
||||
|
||||
unmockkConstructor(DefaultBookmarkController::class)
|
||||
|
||||
assertTrue(alertHeavyOpenInvoked)
|
||||
assertTrue(onOpenAllInTabsEmptyInvoked)
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -517,9 +509,9 @@ class BookmarkControllerTest {
|
|||
|
||||
@Suppress("LongParameterList")
|
||||
private fun createController(
|
||||
loadBookmarkNode: suspend (String, Boolean) -> BookmarkNode? = { _, _ -> null },
|
||||
loadBookmarkNode: suspend (String) -> BookmarkNode? = { _ -> null },
|
||||
showSnackbar: (String) -> Unit = { _ -> },
|
||||
alertHeavyOpen: (Int, () -> Unit) -> Unit = { _: Int, _: () -> Unit -> },
|
||||
onOpenAllInTabsEmpty: () -> Unit = { },
|
||||
deleteBookmarkNodes: (Set<BookmarkNode>, BookmarkRemoveType) -> Unit = { _, _ -> },
|
||||
deleteBookmarkFolder: (Set<BookmarkNode>) -> Unit = { _ -> },
|
||||
showTabTray: () -> Unit = { },
|
||||
|
@ -534,7 +526,7 @@ class BookmarkControllerTest {
|
|||
tabsUseCases = tabsUseCases,
|
||||
loadBookmarkNode = loadBookmarkNode,
|
||||
showSnackbar = showSnackbar,
|
||||
alertHeavyOpen = alertHeavyOpen,
|
||||
onOpenAllInTabsEmpty = onOpenAllInTabsEmpty,
|
||||
deleteBookmarkNodes = deleteBookmarkNodes,
|
||||
deleteBookmarkFolder = deleteBookmarkFolder,
|
||||
showTabTray = showTabTray,
|
||||
|
|
|
@ -547,12 +547,11 @@
|
|||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleBookmarkTapped(item: BookmarkNode)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleCopyUrl(item: BookmarkNode)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleOpeningBookmark(item: BookmarkNode, mode: BrowsingMode)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleBookmarkFolderOpening(folder: BookmarkNode, mode: BrowsingMode)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleRequestSync()</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleSearch()</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkController.kt$BookmarkController$fun handleSelectionModeSwitch()</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkFragmentStore.kt$operator fun BookmarkNode.contains(item: BookmarkNode): Boolean</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkItemMenu.kt$BookmarkItemMenu$suspend fun updateMenu(itemType: BookmarkNodeType, itemId: String)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkItemMenu.kt$BookmarkItemMenu$fun updateMenu(itemType: BookmarkNodeType)</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkNodeViewHolder.kt$BookmarkNodeViewHolder$fun bind( item: BookmarkNode, mode: BookmarkFragmentState.Mode, payload: BookmarkPayload, )</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkSearchController.kt$BookmarkSearchController$fun handleEditingCancelled()</ID>
|
||||
<ID>UndocumentedPublicFunction:BookmarkSearchController.kt$BookmarkSearchController$fun handleTextChanged(text: String)</ID>
|
||||
|
|
Loading…
Reference in New Issue