feat: close last active tab when home button is pressed
This commit is contained in:
parent
4f5c2f1d42
commit
c8dde9b239
|
@ -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)
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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())
|
||||
|
|
|
@ -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) }
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue