@@ -63,6 +63,7 @@ import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command
6363import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.BookmarkTabsRequest
6464import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.Close
6565import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.CloseAllTabsRequest
66+ import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.CloseAndShowUndoMessage
6667import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.CloseTabsRequest
6768import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.DismissAnimatedTileDismissalDialog
6869import com.duckduckgo.app.tabs.ui.TabSwitcherViewModel.Command.ShareLink
@@ -89,6 +90,7 @@ import com.duckduckgo.common.utils.DispatcherProvider
8990import com.duckduckgo.di.scopes.ActivityScope
9091import com.duckduckgo.duckchat.api.DuckChat
9192import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
93+ import java.util.ArrayList
9294import javax.inject.Inject
9395import kotlin.coroutines.CoroutineContext
9496import kotlin.math.max
@@ -334,15 +336,15 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
334336 )
335337 }
336338
337- private fun updateToolbarTitle (mode : Mode , tabCount : Int ) {
339+ private fun updateToolbarTitle (mode : Mode ) {
338340 toolbar.title = if (mode is Selection ) {
339341 if (mode.selectedTabs.isEmpty()) {
340342 getString(R .string.selectTabsMenuItem)
341343 } else {
342344 getString(R .string.tabSelectionTitle, mode.selectedTabs.size)
343345 }
344346 } else {
345- resources.getQuantityString (R .plurals.tabSwitcherTitle, tabCount, tabCount )
347+ getString (R .string.tabActivityTitle )
346348 }
347349 }
348350
@@ -382,16 +384,16 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
382384 lifecycleScope.launch {
383385 viewModel.selectionViewState.flowWithLifecycle(lifecycle).collectLatest {
384386 tabsRecycler.invalidateItemDecorations()
385- tabsAdapter.updateData(it.tabItems )
387+ tabsAdapter.updateData(it.tabSwitcherItems )
386388
387- updateToolbarTitle(it.mode, it.tabItems.size )
389+ updateToolbarTitle(it.mode)
388390 updateTabGridItemDecorator()
389391
390392 tabTouchHelper.mode = it.mode
391393
392394 invalidateOptionsMenu()
393395
394- if (firstTimeLoadingTabsList && it.tabItems .isNotEmpty()) {
396+ if (firstTimeLoadingTabsList && it.tabs .isNotEmpty()) {
395397 firstTimeLoadingTabsList = false
396398 scrollToActiveTab()
397399 }
@@ -404,7 +406,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
404406 }
405407 }
406408
407- viewModel.tabItemsLiveData .observe(this ) { tabSwitcherItems ->
409+ viewModel.tabSwitcherItemsLiveData .observe(this ) { tabSwitcherItems ->
408410 tabsAdapter.updateData(tabSwitcherItems)
409411
410412 val noTabSelected = tabSwitcherItems.none { (it as ? NormalTab )?.isActive == true }
@@ -548,8 +550,17 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
548550
549551 private fun processCommand (command : Command ) {
550552 when (command) {
551- is Close -> {
552- skipTabPurge = command.skipTabPurge
553+ Close -> {
554+ finishAfterTransition()
555+ }
556+ is CloseAndShowUndoMessage -> {
557+ skipTabPurge = true
558+ setResult(
559+ RESULT_OK ,
560+ Intent ().apply {
561+ putStringArrayListExtra(EXTRA_KEY_DELETED_TAB_IDS , ArrayList (command.deletedTabIds))
562+ },
563+ )
553564 finishAfterTransition()
554565 }
555566 is CloseAllTabsRequest -> {
@@ -711,9 +722,9 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
711722
712723 override fun onTabMoved (from : Int , to : Int ) {
713724 if (tabSwitcherAnimationFeature.self().isEnabled()) {
714- val isTrackerAnimationInfoPanelVisible = viewModel.tabItems .firstOrNull() is TrackerAnimationInfoPanel
725+ val isTrackerAnimationInfoPanelVisible = viewModel.tabSwitcherItems .firstOrNull() is TrackerAnimationInfoPanel
715726 val canSwapFromIndex = if (isTrackerAnimationInfoPanelVisible) 1 else 0
716- val tabSwitcherItemCount = viewModel.tabItems .size
727+ val tabSwitcherItemCount = viewModel.tabSwitcherItems .size
717728
718729 val canSwap = from in canSwapFromIndex.. < tabSwitcherItemCount && to in canSwapFromIndex.. < tabSwitcherItemCount
719730 if (canSwap) {
@@ -722,7 +733,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
722733 viewModel.onTabMoved(from - canSwapFromIndex, to - canSwapFromIndex)
723734 }
724735 } else {
725- val tabCount = viewModel.tabItems .size
736+ val tabCount = viewModel.tabSwitcherItems .size
726737 val canSwap = from in 0 .. < tabCount && to in 0 .. < tabCount
727738 if (canSwap) {
728739 tabsAdapter.onTabMoved(from, to)
@@ -837,7 +848,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
837848 }
838849
839850 private fun removeObservers () {
840- viewModel.tabItemsLiveData .removeObservers(this )
851+ viewModel.tabSwitcherItemsLiveData .removeObservers(this )
841852 viewModel.deletableTabs.removeObservers(this )
842853 }
843854
@@ -964,6 +975,7 @@ class TabSwitcherActivity : DuckDuckGoActivity(), TabSwitcherListener, Coroutine
964975 }
965976
966977 const val EXTRA_KEY_SELECTED_TAB = " selected"
978+ const val EXTRA_KEY_DELETED_TAB_IDS = " deletedTabIds"
967979
968980 private const val TAB_GRID_COLUMN_WIDTH_DP = 180
969981 private const val TAB_GRID_MAX_COLUMN_COUNT = 4
0 commit comments