For #6323 Creating 1st collection from tab shows Name collection screen
Added a check for existence of at least a collection to select from.master
parent
d6aeeb2dec
commit
11ad1010a9
|
@ -194,7 +194,8 @@ abstract class BaseBrowserFragment : Fragment(), BackHandler, SessionManager.Obs
|
||||||
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
flags = Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
},
|
},
|
||||||
bottomSheetBehavior = QuickActionSheetBehavior.from(nestedScrollQuickAction),
|
bottomSheetBehavior = QuickActionSheetBehavior.from(nestedScrollQuickAction),
|
||||||
scope = lifecycleScope
|
scope = lifecycleScope,
|
||||||
|
tabCollectionStorage = requireComponents.core.tabCollectionStorage
|
||||||
)
|
)
|
||||||
|
|
||||||
browserInteractor =
|
browserInteractor =
|
||||||
|
|
|
@ -33,6 +33,7 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
|
import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
import org.mozilla.fenix.components.FenixSnackbar
|
||||||
import org.mozilla.fenix.collections.SaveCollectionStep
|
import org.mozilla.fenix.collections.SaveCollectionStep
|
||||||
|
import org.mozilla.fenix.components.TabCollectionStorage
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
import org.mozilla.fenix.ext.nav
|
import org.mozilla.fenix.ext.nav
|
||||||
|
@ -66,7 +67,8 @@ class DefaultBrowserToolbarController(
|
||||||
private val getSupportUrl: () -> String,
|
private val getSupportUrl: () -> String,
|
||||||
private val openInFenixIntent: Intent,
|
private val openInFenixIntent: Intent,
|
||||||
private val bottomSheetBehavior: QuickActionSheetBehavior<NestedScrollView>,
|
private val bottomSheetBehavior: QuickActionSheetBehavior<NestedScrollView>,
|
||||||
private val scope: LifecycleCoroutineScope
|
private val scope: LifecycleCoroutineScope,
|
||||||
|
private val tabCollectionStorage: TabCollectionStorage
|
||||||
) : BrowserToolbarController {
|
) : BrowserToolbarController {
|
||||||
|
|
||||||
private val currentSession
|
private val currentSession
|
||||||
|
@ -184,7 +186,11 @@ class DefaultBrowserToolbarController(
|
||||||
previousFragmentId = R.id.browserFragment,
|
previousFragmentId = R.id.browserFragment,
|
||||||
tabIds = arrayOf(currentSession.id),
|
tabIds = arrayOf(currentSession.id),
|
||||||
selectedTabIds = arrayOf(currentSession.id),
|
selectedTabIds = arrayOf(currentSession.id),
|
||||||
saveCollectionStep = SaveCollectionStep.SelectCollection
|
saveCollectionStep = if (tabCollectionStorage.cachedTabCollections.isEmpty()) {
|
||||||
|
SaveCollectionStep.NameCollection
|
||||||
|
} else {
|
||||||
|
SaveCollectionStep.SelectCollection
|
||||||
|
}
|
||||||
)
|
)
|
||||||
navController.nav(R.id.browserFragment, directions)
|
navController.nav(R.id.browserFragment, directions)
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,6 +44,7 @@ import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager
|
||||||
import org.mozilla.fenix.collections.SaveCollectionStep
|
import org.mozilla.fenix.collections.SaveCollectionStep
|
||||||
import org.mozilla.fenix.components.Analytics
|
import org.mozilla.fenix.components.Analytics
|
||||||
import org.mozilla.fenix.components.FenixSnackbar
|
import org.mozilla.fenix.components.FenixSnackbar
|
||||||
|
import org.mozilla.fenix.components.TabCollectionStorage
|
||||||
import org.mozilla.fenix.components.metrics.Event
|
import org.mozilla.fenix.components.metrics.Event
|
||||||
import org.mozilla.fenix.components.metrics.MetricController
|
import org.mozilla.fenix.components.metrics.MetricController
|
||||||
import org.mozilla.fenix.ext.components
|
import org.mozilla.fenix.ext.components
|
||||||
|
@ -79,6 +80,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
private val scope: LifecycleCoroutineScope = mockk(relaxed = true)
|
private val scope: LifecycleCoroutineScope = mockk(relaxed = true)
|
||||||
private val adjustBackgroundAndNavigate: (NavDirections) -> Unit = mockk(relaxed = true)
|
private val adjustBackgroundAndNavigate: (NavDirections) -> Unit = mockk(relaxed = true)
|
||||||
private val snackbar = mockk<FenixSnackbar>(relaxed = true)
|
private val snackbar = mockk<FenixSnackbar>(relaxed = true)
|
||||||
|
private val tabCollectionStorage = mockk<TabCollectionStorage>(relaxed = true)
|
||||||
|
|
||||||
private lateinit var controller: DefaultBrowserToolbarController
|
private lateinit var controller: DefaultBrowserToolbarController
|
||||||
|
|
||||||
|
@ -100,7 +102,8 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
bottomSheetBehavior = bottomSheetBehavior,
|
bottomSheetBehavior = bottomSheetBehavior,
|
||||||
scope = scope,
|
scope = scope,
|
||||||
browserLayout = browserLayout,
|
browserLayout = browserLayout,
|
||||||
swipeRefresh = swipeRefreshLayout
|
swipeRefresh = swipeRefreshLayout,
|
||||||
|
tabCollectionStorage = tabCollectionStorage
|
||||||
)
|
)
|
||||||
|
|
||||||
mockkStatic(
|
mockkStatic(
|
||||||
|
@ -402,7 +405,7 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarSaveToCollectionPress() {
|
fun handleToolbarSaveToCollectionPressWhenAtLeastOneCollectionExists() {
|
||||||
val item = ToolbarMenu.Item.SaveToCollection
|
val item = ToolbarMenu.Item.SaveToCollection
|
||||||
val cachedTabCollections: List<TabCollection> = mockk(relaxed = true)
|
val cachedTabCollections: List<TabCollection> = mockk(relaxed = true)
|
||||||
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
|
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
|
||||||
|
@ -410,8 +413,10 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
|
|
||||||
controller.handleToolbarItemInteraction(item)
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
|
||||||
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SAVE_TO_COLLECTION)) }
|
verify { metrics.track(
|
||||||
verify { metrics.track(Event.CollectionSaveButtonPressed(DefaultBrowserToolbarController.TELEMETRY_BROWSER_IDENTIFIER)) }
|
Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SAVE_TO_COLLECTION)) }
|
||||||
|
verify { metrics.track(
|
||||||
|
Event.CollectionSaveButtonPressed(DefaultBrowserToolbarController.TELEMETRY_BROWSER_IDENTIFIER)) }
|
||||||
verify {
|
verify {
|
||||||
val directions =
|
val directions =
|
||||||
BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment(
|
BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment(
|
||||||
|
@ -424,6 +429,30 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun handleToolbarSaveToCollectionPressWhenNoCollectionsExists() {
|
||||||
|
val item = ToolbarMenu.Item.SaveToCollection
|
||||||
|
val cachedTabCollectionsEmpty: List<TabCollection> = emptyList()
|
||||||
|
every { activity.components.useCases.sessionUseCases } returns sessionUseCases
|
||||||
|
every { activity.components.core.tabCollectionStorage.cachedTabCollections } returns cachedTabCollectionsEmpty
|
||||||
|
|
||||||
|
controller.handleToolbarItemInteraction(item)
|
||||||
|
|
||||||
|
verify { metrics.track(Event.BrowserMenuItemTapped(Event.BrowserMenuItemTapped.Item.SAVE_TO_COLLECTION)) }
|
||||||
|
verify { metrics.track(Event.CollectionSaveButtonPressed(
|
||||||
|
DefaultBrowserToolbarController.TELEMETRY_BROWSER_IDENTIFIER)) }
|
||||||
|
verify {
|
||||||
|
val directions =
|
||||||
|
BrowserFragmentDirections.actionBrowserFragmentToCreateCollectionFragment(
|
||||||
|
previousFragmentId = R.id.browserFragment,
|
||||||
|
saveCollectionStep = SaveCollectionStep.NameCollection,
|
||||||
|
tabIds = arrayOf(currentSession.id),
|
||||||
|
selectedTabIds = arrayOf(currentSession.id)
|
||||||
|
)
|
||||||
|
navController.nav(R.id.browserFragment, directions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun handleToolbarOpenInFenixPress() {
|
fun handleToolbarOpenInFenixPress() {
|
||||||
controller = DefaultBrowserToolbarController(
|
controller = DefaultBrowserToolbarController(
|
||||||
|
@ -440,7 +469,8 @@ class DefaultBrowserToolbarControllerTest {
|
||||||
bottomSheetBehavior = bottomSheetBehavior,
|
bottomSheetBehavior = bottomSheetBehavior,
|
||||||
scope = scope,
|
scope = scope,
|
||||||
browserLayout = browserLayout,
|
browserLayout = browserLayout,
|
||||||
swipeRefresh = swipeRefreshLayout
|
swipeRefresh = swipeRefreshLayout,
|
||||||
|
tabCollectionStorage = tabCollectionStorage
|
||||||
)
|
)
|
||||||
|
|
||||||
val sessionManager: SessionManager = mockk(relaxed = true)
|
val sessionManager: SessionManager = mockk(relaxed = true)
|
||||||
|
|
Loading…
Reference in New Issue