feat: close last active tab when home button is pressed

This commit is contained in:
Ishan Jain 2022-07-17 16:18:10 +05:30
parent 4f5c2f1d42
commit c8dde9b239
Signed by: ishan
GPG Key ID: 0506DB2A1CC75C27
5 changed files with 22 additions and 9 deletions

View File

@ -96,7 +96,10 @@ class BrowserFragment : BaseBrowserFragment(), UserInteractionHandler {
)!!,
contentDescription = context.getString(R.string.browser_toolbar_home),
iconTintColorResource = ThemeManager.resolveAttribute(R.attr.textPrimary, context),
listener = browserToolbarInteractor::onHomeButtonClicked,
listener = {
getCurrentTab()?.let { tab -> tab as? TabSessionState }
?.let { browserToolbarInteractor.onHomeButtonClicked(it) }
}
)
browserToolbarView.view.addNavigationAction(homeAction)

View File

@ -10,6 +10,7 @@ import mozilla.components.browser.state.selector.findCustomTabOrSelectedTab
import mozilla.components.browser.state.selector.getNormalOrPrivateTabs
import mozilla.components.browser.state.selector.selectedTab
import mozilla.components.browser.state.state.SessionState
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.EngineView
import mozilla.components.feature.tabs.TabsUseCases
@ -46,7 +47,7 @@ interface BrowserToolbarController {
/**
* @see [BrowserToolbarInteractor.onHomeButtonClicked]
*/
fun handleHomeButtonClick()
fun handleHomeButtonClick(tab: TabSessionState)
}
@Suppress("LongParameterList")
@ -171,13 +172,16 @@ class DefaultBrowserToolbarController(
}
}
override fun handleHomeButtonClick() {
override fun handleHomeButtonClick(tab: TabSessionState) {
Events.browserToolbarHomeTapped.record(NoExtras())
browserAnimator.captureEngineViewAndDrawStatically {
navController.navigate(
BrowserFragmentDirections.actionGlobalHome(),
)
}
onCloseTab.invoke(tab)
tabsUseCases.removeTab(tab.id)
}
companion object {

View File

@ -4,6 +4,7 @@
package org.mozilla.fenix.components.toolbar.interactor
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.ui.tabcounter.TabCounterMenu
import org.mozilla.fenix.components.toolbar.BrowserToolbarController
import org.mozilla.fenix.components.toolbar.BrowserToolbarMenuController
@ -26,7 +27,7 @@ interface BrowserToolbarInteractor {
/**
* Navigates to the Home screen. Called when a user taps on the Home button.
*/
fun onHomeButtonClicked()
fun onHomeButtonClicked(tab: TabSessionState)
}
/**
@ -74,7 +75,7 @@ class DefaultBrowserToolbarInteractor(
browserToolbarController.handleReaderModePressed(enabled)
}
override fun onHomeButtonClicked() {
browserToolbarController.handleHomeButtonClick()
override fun onHomeButtonClicked(tab: TabSessionState) {
browserToolbarController.handleHomeButtonClick(tab)
}
}

View File

@ -18,6 +18,7 @@ import mozilla.components.browser.state.action.BrowserAction
import mozilla.components.browser.state.action.ContentAction
import mozilla.components.browser.state.action.TabListAction
import mozilla.components.browser.state.state.BrowserState
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.browser.state.state.createTab
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.concept.engine.EngineView
@ -360,7 +361,8 @@ class DefaultBrowserToolbarControllerTest {
assertNull(Events.browserToolbarHomeTapped.testGetValue())
val controller = createController()
controller.handleHomeButtonClick()
val tab: TabSessionState = mockk { every { content.private } returns true }
controller.handleHomeButtonClick(tab)
verify { navController.navigate(BrowserFragmentDirections.actionGlobalHome()) }
assertNotNull(Events.browserToolbarHomeTapped.testGetValue())

View File

@ -5,9 +5,11 @@
package org.mozilla.fenix.components.toolbar
import io.mockk.MockKAnnotations
import io.mockk.every
import io.mockk.impl.annotations.RelaxedMockK
import io.mockk.mockk
import io.mockk.verify
import mozilla.components.browser.state.state.TabSessionState
import mozilla.components.ui.tabcounter.TabCounterMenu
import org.junit.Before
import org.junit.Test
@ -76,8 +78,9 @@ class DefaultBrowserToolbarInteractorTest {
@Test
fun onHomeButtonClicked() {
interactor.onHomeButtonClicked()
val tab: TabSessionState = mockk { every { content.private } returns true }
interactor.onHomeButtonClicked(tab)
verify { browserToolbarController.handleHomeButtonClick() }
verify { browserToolbarController.handleHomeButtonClick(tab) }
}
}