Skip to content

Commit

Permalink
Allow opening pocket stories when search dialog is active
Browse files Browse the repository at this point in the history
  • Loading branch information
csadilek authored and mergify[bot] committed Oct 1, 2021
1 parent a4a0417 commit fafa72c
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 9 deletions.
3 changes: 2 additions & 1 deletion app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,8 @@ class HomeFragment : Fragment() {
),
pocketStoriesController = DefaultPocketStoriesController(
homeActivity = activity,
homeStore = homeFragmentStore
homeStore = homeFragmentStore,
navController = findNavController()
)
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@

package org.mozilla.fenix.home.sessioncontrol.viewholders.pocket

import androidx.annotation.VisibleForTesting
import androidx.navigation.NavController
import org.mozilla.fenix.home.HomeFragmentAction
import org.mozilla.fenix.home.HomeFragmentStore
import mozilla.components.lib.state.Store
import mozilla.components.service.pocket.PocketRecommendedStory
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R

/**
* Contract for how all user interactions with the Pocket recommended stories feature are to be handled.
Expand Down Expand Up @@ -42,10 +45,12 @@ interface PocketStoriesController {
*
* @param homeActivity [HomeActivity] used to open URLs in a new tab.
* @param homeStore [Store] from which to read the current Pocket recommendations and dispatch new actions on.
* @param navController [NavController] used for navigation.
*/
internal class DefaultPocketStoriesController(
val homeActivity: HomeActivity,
val homeStore: HomeFragmentStore
private val homeActivity: HomeActivity,
private val homeStore: HomeFragmentStore,
private val navController: NavController
) : PocketStoriesController {
override fun handleCategoryClick(categoryClicked: PocketRecommendedStoryCategory) {
val allCategories = homeStore.state.pocketStoriesCategories
Expand Down Expand Up @@ -87,6 +92,14 @@ internal class DefaultPocketStoriesController(
}

override fun handleExternalLinkClick(link: String) {
dismissSearchDialogIfDisplayed()
homeActivity.openToBrowserAndLoad(link, true, BrowserDirection.FromHome)
}

@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
fun dismissSearchDialogIfDisplayed() {
if (navController.currentDestination?.id == R.id.searchDialogFragment) {
navController.navigateUp()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,16 @@

package org.mozilla.fenix.home.sessioncontrol.viewholders.pocket

import androidx.navigation.NavController
import io.mockk.every
import io.mockk.mockk
import io.mockk.spyk
import io.mockk.verify
import mozilla.components.service.pocket.PocketRecommendedStory
import org.junit.Test
import org.mozilla.fenix.BrowserDirection
import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R
import org.mozilla.fenix.home.HomeFragmentAction
import org.mozilla.fenix.home.HomeFragmentState
import org.mozilla.fenix.home.HomeFragmentStore
Expand All @@ -25,7 +28,7 @@ class DefaultPocketStoriesControllerTest {
HomeFragmentState(pocketStoriesCategories = listOf(category1, category2))
)
)
val controller = DefaultPocketStoriesController(mockk(), store)
val controller = DefaultPocketStoriesController(mockk(), store, mockk())

controller.handleCategoryClick(category1)
verify(exactly = 0) { store.dispatch(HomeFragmentAction.DeselectPocketStoriesCategory(category1.name)) }
Expand Down Expand Up @@ -58,7 +61,7 @@ class DefaultPocketStoriesControllerTest {
)
)
)
val controller = DefaultPocketStoriesController(mockk(), store)
val controller = DefaultPocketStoriesController(mockk(), store, mockk())

controller.handleCategoryClick(newSelectedCategory)

Expand Down Expand Up @@ -89,7 +92,7 @@ class DefaultPocketStoriesControllerTest {
)
)
)
val controller = DefaultPocketStoriesController(mockk(), store)
val controller = DefaultPocketStoriesController(mockk(), store, mockk())

controller.handleCategoryClick(newSelectedCategory)

Expand All @@ -100,7 +103,7 @@ class DefaultPocketStoriesControllerTest {
@Test
fun `WHEN new stories are shown THEN update the State`() {
val store = spyk(HomeFragmentStore())
val controller = DefaultPocketStoriesController(mockk(), store)
val controller = DefaultPocketStoriesController(mockk(), store, mockk())
val storiesShown: List<PocketRecommendedStory> = mockk()

controller.handleStoriesShown(storiesShown)
Expand All @@ -109,13 +112,30 @@ class DefaultPocketStoriesControllerTest {
}

@Test
fun `WHEN an external link is clicked then open that using HomeActivity`() {
fun `WHEN an external link is clicked THEN link is opened`() {
val link = "https://www.mozilla.org/en-US/firefox/pocket/"
val homeActivity: HomeActivity = mockk(relaxed = true)
val controller = DefaultPocketStoriesController(homeActivity, mockk())
val controller = DefaultPocketStoriesController(homeActivity, mockk(), mockk(relaxed = true))

controller.handleExternalLinkClick(link)

verify { homeActivity.openToBrowserAndLoad(link, true, BrowserDirection.FromHome) }
}

@Test
fun `WHEN an external link is clicked THEN link is opened and search dismissed`() {
val link = "https://www.mozilla.org/en-US/firefox/pocket/"
val homeActivity: HomeActivity = mockk(relaxed = true)
val navController: NavController = mockk(relaxed = true)

every { navController.currentDestination } returns mockk {
every { id } returns R.id.searchDialogFragment
}

val controller = DefaultPocketStoriesController(homeActivity, mockk(), navController)
controller.handleExternalLinkClick(link)

verify { homeActivity.openToBrowserAndLoad(link, true, BrowserDirection.FromHome) }
verify { navController.navigateUp() }
}
}

0 comments on commit fafa72c

Please sign in to comment.