diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/TabCounter.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/TabCounter.kt index ff03fe666..3677d6cde 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/TabCounter.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/TabCounter.kt @@ -43,20 +43,14 @@ class TabCounter @JvmOverloads constructor( } fun setCountWithAnimation(count: Int) { + setCount(count) + // No need to animate on these cases. when { - count == INTERNAL_COUNT -> return // There isn't any tab added or removed. - INTERNAL_COUNT == 0 -> { - setCount(count) - return - } // Initial state. - count > MAX_VISIBLE_TABS && INTERNAL_COUNT > MAX_VISIBLE_TABS -> { - INTERNAL_COUNT = count - updateContentDescription(count) - return - } // There are still over MAX_VISIBLE_TABS tabs open. + INTERNAL_COUNT == 0 -> return // Initial state. + INTERNAL_COUNT == count -> return // There isn't any tab added or removed. + INTERNAL_COUNT > MAX_VISIBLE_TABS -> return // There are still over MAX_VISIBLE_TABS tabs open. } - setCount(count) // Cancel previous animations if necessary. if (animationSet.isRunning) { diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index 9ac274560..1740152f1 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -113,6 +113,7 @@ import kotlin.math.min @Suppress("TooManyFunctions", "LargeClass") class HomeFragment : Fragment() { private val args by navArgs() + private lateinit var bundleArgs: Bundle private val homeViewModel: HomeScreenViewModel by viewModels { ViewModelProvider.AndroidViewModelFactory(requireActivity().application) @@ -160,6 +161,7 @@ class HomeFragment : Fragment() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) postponeEnterTransition() + bundleArgs = args.toBundle() lifecycleScope.launch(IO) { if (!onboarding.userHasBeenOnboarded()) { requireComponents.analytics.metrics.track(Event.OpenedAppFirstRun) @@ -377,7 +379,9 @@ class HomeFragment : Fragment() { } } - if (view.context.settings().accessibilityServicesEnabled && args.focusOnAddressBar) { + if (view.context.settings().accessibilityServicesEnabled && + bundleArgs.getBoolean(FOCUS_ON_ADDRESS_BAR) + ) { // We cannot put this in the fragment_home.xml file as it breaks tests view.toolbar_wrapper.isFocusableInTouchMode = true viewLifecycleOwner.lifecycleScope.launch { @@ -395,6 +399,39 @@ class HomeFragment : Fragment() { consumeFrom(requireComponents.core.store) { updateTabCounter(it) } + + bundleArgs.getString(SESSION_TO_DELETE)?.also { + sessionManager.findSessionById(it)?.let { session -> + val snapshot = sessionManager.createSessionSnapshot(session) + val state = snapshot.engineSession?.saveState() + val isSelected = + session.id == requireComponents.core.store.state.selectedTabId ?: false + + val snackbarMessage = if (snapshot.session.private) { + requireContext().getString(R.string.snackbar_private_tab_closed) + } else { + requireContext().getString(R.string.snackbar_tab_closed) + } + + viewLifecycleOwner.lifecycleScope.allowUndo( + requireView(), + snackbarMessage, + requireContext().getString(R.string.snackbar_deleted_undo), + { + sessionManager.add( + snapshot.session, + isSelected, + engineSessionState = state + ) + findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToBrowserFragment(null)) + }, + operation = { }, + anchorView = snackbarAnchorView + ) + requireComponents.useCases.tabsUseCases.removeTab.invoke(session) + } + } + updateTabCounter(requireComponents.core.store.state) } @@ -402,6 +439,7 @@ class HomeFragment : Fragment() { super.onDestroyView() _sessionControlInteractor = null sessionControlView = null + bundleArgs.clear() requireView().homeAppBar.removeOnOffsetChangedListener(homeAppBarOffSetListener) requireActivity().window.clearFlags(FLAG_SECURE) } @@ -503,38 +541,6 @@ class HomeFragment : Fragment() { } hideToolbar() - - args.sessionToDelete?.also { - sessionManager.findSessionById(it)?.let { session -> - val snapshot = sessionManager.createSessionSnapshot(session) - val state = snapshot.engineSession?.saveState() - val isSelected = - session.id == requireComponents.core.store.state.selectedTabId ?: false - - val snackbarMessage = if (snapshot.session.private) { - requireContext().getString(R.string.snackbar_private_tab_closed) - } else { - requireContext().getString(R.string.snackbar_tab_closed) - } - - viewLifecycleOwner.lifecycleScope.allowUndo( - requireView(), - snackbarMessage, - requireContext().getString(R.string.snackbar_deleted_undo), - { - sessionManager.add( - snapshot.session, - isSelected, - engineSessionState = state - ) - findNavController().navigate(HomeFragmentDirections.actionHomeFragmentToBrowserFragment(null)) - }, - operation = { }, - anchorView = snackbarAnchorView - ) - requireComponents.useCases.tabsUseCases.removeTab.invoke(session) - } - } } override fun onPause() { @@ -926,6 +932,8 @@ class HomeFragment : Fragment() { } companion object { + private const val FOCUS_ON_ADDRESS_BAR = "focusOnAddressBar" + private const val SESSION_TO_DELETE = "session_to_delete" private const val ANIMATION_DELAY = 100L private const val NON_TAB_ITEM_NUM = 3 diff --git a/buildSrc/src/main/java/org/mozilla/fenix/gradle/tasks/GithubDetailsTask.kt b/buildSrc/src/main/java/org/mozilla/fenix/gradle/tasks/GithubDetailsTask.kt index a7a748396..33ca353f6 100644 --- a/buildSrc/src/main/java/org/mozilla/fenix/gradle/tasks/GithubDetailsTask.kt +++ b/buildSrc/src/main/java/org/mozilla/fenix/gradle/tasks/GithubDetailsTask.kt @@ -44,5 +44,4 @@ open class GithubDetailsTask : DefaultTask() { project.mkdir("/builds/worker/github") detailsFile.writeText(replaced + suffix) } - }