Skip to content

Commit

Permalink
Issue mozilla-mobile#21140 - Updated recent tab logic to show media t…
Browse files Browse the repository at this point in the history
…ab and second-to-last tab, if the media tab was the last active tab. (mozilla-mobile#21141)

* Issue mozilla-mobile#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>
  • Loading branch information
2 people authored and pkirakosyan committed Sep 10, 2021
1 parent 3047667 commit 6d73666
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 8 deletions.
22 changes: 17 additions & 5 deletions app/src/main/java/org/mozilla/fenix/ext/BrowserState.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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) }
}
}
}

Expand All @@ -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.
*/
Expand Down
43 changes: 41 additions & 2 deletions app/src/test/java/org/mozilla/fenix/ext/BrowserStateTest.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand All @@ -128,7 +128,7 @@ class BrowserStateTest {

val result = browserState.asRecentTabs()

assertEquals(1, result.size)
assertEquals(2, result.size)
assertEquals(mediaTab, result[0])
}

Expand Down Expand Up @@ -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)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down

0 comments on commit 6d73666

Please sign in to comment.