Skip to content

Commit a7c1e12

Browse files
committed
Bug 1973366 - Part 4: Refactoring opening collections on the homepage to use FenixBrowserUseCases.loadUrlOrSearch r=android-reviewers,pollymce
- Refactors the existing usage of `HomeActivity.openToBrowserAndLoad` in `handleCollectionOpenTabClicked` to use `FenixBrowserUseCases.loadUrlOrSearch`. - Open collection tab in existing tab when Homepage as a New Tab is enabled. Differential Revision: https://phabricator.services.mozilla.com/D257961
1 parent 9eaa3cb commit a7c1e12

File tree

3 files changed

+44
-9
lines changed

3 files changed

+44
-9
lines changed

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ class HomeFragment : Fragment() {
464464
reloadUrlUseCase = components.useCases.sessionUseCases.reload,
465465
topSitesUseCases = components.useCases.topSitesUseCase,
466466
marsUseCases = components.useCases.marsUseCases,
467+
fenixBrowserUseCases = components.useCases.fenixBrowserUseCases,
467468
appStore = components.appStore,
468469
navControllerRef = WeakReference(findNavController()),
469470
viewLifecycleScope = viewLifecycleOwner.lifecycleScope,

mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/sessioncontrol/SessionControlController.kt

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ import org.mozilla.fenix.components.appstate.AppAction
5656
import org.mozilla.fenix.components.appstate.AppState
5757
import org.mozilla.fenix.components.appstate.setup.checklist.ChecklistItem
5858
import org.mozilla.fenix.components.metrics.MetricsUtils
59+
import org.mozilla.fenix.components.usecases.FenixBrowserUseCases
5960
import org.mozilla.fenix.ext.components
6061
import org.mozilla.fenix.ext.nav
6162
import org.mozilla.fenix.home.HomeFragment
@@ -249,6 +250,7 @@ class DefaultSessionControlController(
249250
private val reloadUrlUseCase: SessionUseCases.ReloadUrlUseCase,
250251
private val topSitesUseCases: TopSitesUseCases,
251252
private val marsUseCases: MARSUseCases,
253+
private val fenixBrowserUseCases: FenixBrowserUseCases,
252254
private val appStore: AppStore,
253255
private val navControllerRef: WeakReference<NavController>,
254256
private val viewLifecycleScope: CoroutineScope,
@@ -285,15 +287,16 @@ class DefaultSessionControlController(
285287
engine,
286288
tab,
287289
onTabRestored = {
288-
activity.openToBrowser(BrowserDirection.FromHome)
290+
navController.navigate(R.id.browserFragment)
289291
selectTabUseCase.invoke(it)
290292
reloadUrlUseCase.invoke(it)
291293
},
292294
onFailure = {
293-
activity.openToBrowserAndLoad(
295+
navController.navigate(R.id.browserFragment)
296+
fenixBrowserUseCases.loadUrlOrSearch(
294297
searchTermOrURL = tab.url,
295-
newTab = true,
296-
from = BrowserDirection.FromHome,
298+
newTab = !settings.enableHomepageAsNewTab,
299+
private = appStore.state.mode.isPrivate,
297300
)
298301
},
299302
)

mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/DefaultSessionControlControllerTest.kt

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import org.mozilla.fenix.components.accounts.FenixFxAEntryPoint
5959
import org.mozilla.fenix.components.appstate.AppAction
6060
import org.mozilla.fenix.components.appstate.AppState
6161
import org.mozilla.fenix.components.appstate.setup.checklist.ChecklistItem
62+
import org.mozilla.fenix.components.usecases.FenixBrowserUseCases
6263
import org.mozilla.fenix.ext.components
6364
import org.mozilla.fenix.ext.settings
6465
import org.mozilla.fenix.helpers.FenixGleanTestRule
@@ -100,6 +101,7 @@ class DefaultSessionControlControllerTest {
100101
private val selectTabUseCase: TabsUseCases = mockk(relaxed = true)
101102
private val topSitesUseCases: TopSitesUseCases = mockk(relaxed = true)
102103
private val marsUseCases: MARSUseCases = mockk(relaxed = true)
104+
private val fenixBrowserUseCases: FenixBrowserUseCases = mockk(relaxed = true)
103105
private val settings: Settings = mockk(relaxed = true)
104106
private val analytics: Analytics = mockk(relaxed = true)
105107
private val scope = coroutinesTestRule.scope
@@ -186,7 +188,9 @@ class DefaultSessionControlControllerTest {
186188
}
187189

188190
@Test
189-
fun `handleCollectionOpenTabClicked onFailure`() {
191+
fun `GIVEN browsing mode is private and collection tab cannot be restored WHEN a collection tab is opened THEN open collection in a new private tab`() {
192+
every { appStore.state.mode } returns BrowsingMode.Private
193+
190194
val tab = mockk<ComponentTab> {
191195
every { url } returns "https://mozilla.org"
192196
every { restore(filesDir, engine, restoreSessionId = false) } returns null
@@ -199,10 +203,36 @@ class DefaultSessionControlControllerTest {
199203
assertEquals(null, recordedEvents.single().extra)
200204

201205
verify {
202-
activity.openToBrowserAndLoad(
206+
navController.navigate(R.id.browserFragment)
207+
fenixBrowserUseCases.loadUrlOrSearch(
203208
searchTermOrURL = "https://mozilla.org",
204209
newTab = true,
205-
from = BrowserDirection.FromHome,
210+
private = true,
211+
)
212+
}
213+
}
214+
215+
@Test
216+
fun `GIVEN homepage as a new tab is enabled and collection tab cannot be restored WHEN a collection tab is opened THEN open collection tab in existing tab`() {
217+
every { settings.enableHomepageAsNewTab } returns true
218+
219+
val tab = mockk<ComponentTab> {
220+
every { url } returns "https://mozilla.org"
221+
every { restore(filesDir, engine, restoreSessionId = false) } returns null
222+
}
223+
createController().handleCollectionOpenTabClicked(tab)
224+
225+
assertNotNull(Collections.tabRestored.testGetValue())
226+
val recordedEvents = Collections.tabRestored.testGetValue()!!
227+
assertEquals(1, recordedEvents.size)
228+
assertEquals(null, recordedEvents.single().extra)
229+
230+
verify {
231+
navController.navigate(R.id.browserFragment)
232+
fenixBrowserUseCases.loadUrlOrSearch(
233+
searchTermOrURL = "https://mozilla.org",
234+
newTab = false,
235+
private = false,
206236
)
207237
}
208238
}
@@ -240,7 +270,7 @@ class DefaultSessionControlControllerTest {
240270
assertEquals(1, recordedEvents.size)
241271
assertEquals(null, recordedEvents.single().extra)
242272

243-
verify { activity.openToBrowser(BrowserDirection.FromHome) }
273+
verify { navController.navigate(R.id.browserFragment) }
244274
verify { selectTabUseCase.selectTab.invoke(restoredTab.id) }
245275
verify { reloadUrlUseCase.reload.invoke(restoredTab.id) }
246276
}
@@ -275,7 +305,7 @@ class DefaultSessionControlControllerTest {
275305
assertEquals(1, recordedEvents.size)
276306
assertEquals(null, recordedEvents.single().extra)
277307

278-
verify { activity.openToBrowser(BrowserDirection.FromHome) }
308+
verify { navController.navigate(R.id.browserFragment) }
279309
verify { selectTabUseCase.selectTab.invoke(restoredTab.id) }
280310
verify { reloadUrlUseCase.reload.invoke(restoredTab.id) }
281311
}
@@ -1554,6 +1584,7 @@ class DefaultSessionControlControllerTest {
15541584
reloadUrlUseCase = reloadUrlUseCase.reload,
15551585
topSitesUseCases = topSitesUseCases,
15561586
marsUseCases = marsUseCases,
1587+
fenixBrowserUseCases = fenixBrowserUseCases,
15571588
appStore = appStore,
15581589
navControllerRef = WeakReference(navController),
15591590
viewLifecycleScope = scope,

0 commit comments

Comments
 (0)