diff --git a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt index 52c54c53182b..b5ac2af64167 100644 --- a/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt +++ b/app/src/androidTest/java/com/duckduckgo/app/browser/BrowserTabViewModelTest.kt @@ -2924,11 +2924,27 @@ class BrowserTabViewModelTest { } @Test - fun whenCloseCurrentTabSelectedThenTabDeletedFromRepository() = + fun whenCloseCurrentTabSelectedAndNotInCustomTabThenTabDeletedFromRepository() = runTest { + testee.setIsCustomTab(false) givenOneActiveTabSelected() testee.closeCurrentTab() + verify(mockCommandObserver, atLeastOnce()).onChanged(commandCaptor.capture()) verify(mockTabRepository).deleteTabAndSelectSource(selectedTabLiveData.value!!.tabId) + val command = commandCaptor.allValues.find { it is Command.NavigateBackInCustomTab } + assertNull(command) + } + + @Test + fun whenCloseCurrentTabAndCustomTabAndCustomTabScreenEmitNavigateBackInCustomTabCommand() = + runTest { + testee.setIsCustomTab(true) + testee.closeCurrentTab() + verify(mockTabRepository, never()).deleteTabAndSelectSource(any()) + verify(mockCommandObserver, atLeastOnce()).onChanged(commandCaptor.capture()) + val command = commandCaptor.allValues.find { it is Command.NavigateBackInCustomTab } + assertNotNull(command) + assertTrue(command is Command.NavigateBackInCustomTab) } @Test diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt index 7832aa2c72b1..4b4f1301239e 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabFragment.kt @@ -2080,6 +2080,12 @@ class BrowserTabFragment : browserActivity?.launchNewTab() } + is Command.NavigateBackInCustomTab -> { + if (isActiveCustomTab() && parentFragmentManager.backStackEntryCount > 0) { + parentFragmentManager.popBackStack() + } + } + is Command.ShowSavedSiteAddedConfirmation -> savedSiteAdded(it.savedSiteChangedViewState) is Command.ShowEditSavedSiteDialog -> editSavedSite(it.savedSiteChangedViewState) is Command.DeleteFavoriteConfirmation -> diff --git a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt index 52e09fee3377..078c17e5d5b5 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/BrowserTabViewModel.kt @@ -1317,8 +1317,12 @@ class BrowserTabViewModel @Inject constructor( } override fun closeCurrentTab() { - viewModelScope.launch { - removeCurrentTabFromRepository() + if (isCustomTabScreen) { + command.value = Command.NavigateBackInCustomTab + } else { + viewModelScope.launch { + removeCurrentTabFromRepository() + } } } diff --git a/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt b/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt index ce0b7f6e4593..261e0fed5936 100644 --- a/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt +++ b/app/src/main/java/com/duckduckgo/app/browser/commands/Command.kt @@ -67,6 +67,8 @@ sealed class Command { val query: String, ) : Command() + object NavigateBackInCustomTab : Command() + data object LaunchNewTab : Command() data object ResetHistory : Command()