[fenix] Issue mozilla-mobilehttps://github.com/mozilla-mobile/fenix/issues/21140 - Updated recent tab logic to show media tab and second-to-last tab, if the media tab was the last active tab. (https://github.com/mozilla-mobile/fenix/pull/21141)

* Issue mozilla-mobilehttps://github.com/mozilla-mobile/fenix/issues/21140 - Updated recent tab logic to show media tab and second-to-last tab, if the media tab was the last active tab.

* Fixed RecentTabsListFeatureTest unit test

Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
pull/600/head
Noah Bond 3 years ago committed by GitHub
parent 18bc15f057
commit 691fe57943

@ -19,12 +19,15 @@ import mozilla.components.feature.tabs.ext.hasMediaPlayed
fun BrowserState.asRecentTabs(): List<TabSessionState> {
return mutableListOf<TabSessionState>().apply {
val lastOpenedNormalTab = lastOpenedNormalTab
val inProgressMediaTab = inProgressMediaTab
lastOpenedNormalTab?.let { add(it) }
inProgressMediaTab
?.takeUnless { it == lastOpenedNormalTab }
?.let {
add(it)
}
if (inProgressMediaTab == lastOpenedNormalTab) {
secondToLastOpenedNormalTab?.let { add(it) }
} else {
inProgressMediaTab?.let { add(it) }
}
}
}
@ -35,6 +38,15 @@ fun BrowserState.asRecentTabs(): List<TabSessionState> {
val BrowserState.lastOpenedNormalTab: TabSessionState?
get() = selectedNormalTab ?: normalTabs.maxByOrNull { it.lastAccess }
/**
* Get the second-to-last accessed normal tab.
*/
val BrowserState.secondToLastOpenedNormalTab: TabSessionState?
get() = when {
normalTabs.size <= 1 -> null
else -> normalTabs.sortedByDescending { it.lastAccess }[1]
}
/**
* Get the last tab with in progress media.
*/

@ -114,7 +114,7 @@ class BrowserStateTest {
}
@Test
fun `GIVEN the selected tab is a private tab and the media tab is the last accessed normal tab WHEN asRecentTabs is called THEN a list of the media tab`() {
fun `GIVEN the selected tab is a private tab and the media tab is the last accessed normal tab WHEN asRecentTabs is called THEN return a list of the media tab and the second-to-last normal tab`() {
val selectedPrivateTab = createTab(url = "url", id = "1", lastAccess = 1, private = true)
val normalTab = createTab(url = "url2", id = "2", lastAccess = 2)
val mediaTab = createTab(
@ -128,7 +128,7 @@ class BrowserStateTest {
val result = browserState.asRecentTabs()
assertEquals(1, result.size)
assertEquals(2, result.size)
assertEquals(mediaTab, result[0])
}
@ -168,4 +168,43 @@ class BrowserStateTest {
assertEquals(normalTab1, browserState.lastOpenedNormalTab)
}
@Test
fun `GIVEN no normal tabs are open WHEN secondToLastOpenedNormalTab is called THEN return null`() {
val browserState = BrowserState(
tabs = listOf(mockk(relaxed = true)),
)
assertNull(browserState.secondToLastOpenedNormalTab)
}
@Test
fun `GIVEN one normal tab is open WHEN secondToLastOpenedNormalTab is called THEN return the one tab`() {
val lastAccessedNormalTab = createTab(url = "url2", id = "2", lastAccess = 1)
val browserState = BrowserState(
tabs = listOf(lastAccessedNormalTab),
)
assertNull(browserState.secondToLastOpenedNormalTab)
}
@Test
fun `GIVEN two normal tabs are open WHEN secondToLastOpenedNormalTab is called THEN return the second-to-last opened tab`() {
val normalTab1 = createTab(url = "url1", id = "1", lastAccess = 1)
val normalTab2 = createTab(url = "url2", id = "2", lastAccess = 2)
val browserState = BrowserState(
tabs = listOf(normalTab1, normalTab2),
)
assertEquals(normalTab1.id, browserState.secondToLastOpenedNormalTab!!.id)
}
@Test
fun `GIVEN four normal tabs are open WHEN secondToLastOpenedNormalTab is called THEN return the second-to-last opened tab`() {
val normalTab1 = createTab(url = "url1", id = "1", lastAccess = 1)
val normalTab2 = createTab(url = "url2", id = "2", lastAccess = 4)
val normalTab3 = createTab(url = "url3", id = "3", lastAccess = 3)
val normalTab4 = createTab(url = "url4", id = "4", lastAccess = 2)
val browserState = BrowserState(
tabs = listOf(normalTab1, normalTab2, normalTab3, normalTab4),
)
assertEquals(normalTab3.id, browserState.secondToLastOpenedNormalTab!!.id)
}
}

@ -226,7 +226,7 @@ class RecentTabsListFeatureTest {
feature.start()
homeStore.waitUntilIdle()
assertEquals(1, homeStore.state.recentTabs.size)
assertEquals(2, homeStore.state.recentTabs.size)
assertEquals(initialMediaTab, homeStore.state.recentTabs[0])
browserStore.dispatch(

Loading…
Cancel
Save