Android Kotlin. Мне пришли правки от тимлида, внеси изменения. Сообщение тимлида: Вообще, верно ли была реализована логика с isFirstOpen в ChipsContainerFragment и BonusPointsContainerFragment?
isFirstOpen вроде нужен для определения значения smoothScroll в tabsContainer.setCurrentItem
Дак это можно делать в onViewStateChange, а не в pageChangeListener, не?
А определение стартового таба просто на ViewModel можно делать/**
 * [ViewModel] для контейнера баллов
 */
@HiltViewModel
class BonusPointsContainerViewModel @Inject constructor() : ViewModel() {

    private val _viewState = MutableStateFlow(BonusPointsViewState(tabButtonId = R.id.balance_tab, currentPosition = 0))

    /** Состояние экрана */
    val viewState: Flow<BonusPointsViewState> = _viewState.asStateFlow()
        .stateIn(viewModelScope, SharingStarted.Lazily, _viewState.value)

    /**
     * Обновить текущий таб
     *
     * @param tabButtonId идентификатор кнопки таба
     * @param currentPosition позиция таба
     */
    fun updateCurrentTab(tabButtonId: Int, currentPosition: Int) {
        val state = BonusPointsViewState(tabButtonId, currentPosition)
        _viewState.update { state }
    }
}
/**
 * [Fragment] контейнера для баллов
 */
@AndroidEntryPoint
class BonusPointsContainerFragment : MvvmBaseFragment(R.layout.fragment_bonus_points_container) {

    private val viewBinding by viewBinding(FragmentBonusPointsContainerBinding::bind)

    private val screenArgs by screenArgs(BonusPointsContainerArgs)

    private val viewModel by viewModels<BonusPointsContainerViewModel>()

    private val pageAdapter by lifecycleAwareLazy {
        BonusPointsTabAdapter(this)
    }

    override val analyticsName: String? = null

    private var isFirstOpen = true

    private val pageChangeListener = object : ViewPager2.OnPageChangeCallback() {
        override fun onPageSelected(position: Int) {
            if (isFirstOpen) {
                val tabPosition = when (screenArgs.tabId) {
                    BALANCE_TAB -> 0
                    INFO_TAB -> 1
                    else -> throw IllegalArgumentException("invalid tabId ${screenArgs.tabId}")
                }
                viewBinding.tabsButtonContainer.check(screenArgs.tabId)
                viewBinding.tabsContainer.setCurrentItem(tabPosition, false)
                isFirstOpen = false
            } else {
                val tab = when (position) {
                    0 -> BALANCE_TAB
                    1 -> INFO_TAB
                    else -> throw IllegalArgumentException("invalid tabId ${screenArgs.tabId}")
                }
                viewModel.updateCurrentTab(tab, position)
            }
        }
    }

    private val pageList: MutableList<BonusPointsTabPage> = mutableListOf(
        BonusPointsTabPage(BonusPointsScreens.BonusPointsHistoryScreen()),
        BonusPointsTabPage(BonusPointsScreens.InfoScreen()),
    )

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        actionBarManager.setTitle(R.string.bonus_points_screen_title)
        actionBarManager.showBackButton()

        with(viewBinding) {
            tabsContainer.registerOnPageChangeCallback(pageChangeListener)
            tabsContainer.adapter = pageAdapter
            pageAdapter.pages = pageList

            tabsButtonContainer.setOnButtonCheckedListener { buttonId ->
                when (buttonId) {
                    BALANCE_TAB -> {
                        viewModel.updateCurrentTab(BALANCE_TAB, 0)
                    }

                    INFO_TAB -> {
                        viewModel.updateCurrentTab(INFO_TAB, 1)
                    }
                }
            }
        }
        with(viewLifecycleOwner) {
            lifecycleScope.launch {
                repeatOnLifecycle(Lifecycle.State.STARTED) {
                    launch { viewModel.viewState.collect(::onViewStateChange) }
                }
            }
        }
    }

    override fun onDestroyView() {
        super.onDestroyView()
        viewBinding.tabsContainer.unregisterOnPageChangeCallback(pageChangeListener)
    }

    private fun onViewStateChange(state: BonusPointsViewState) {
        with(viewBinding) {
            tabsButtonContainer.check(state.tabButtonId)
            tabsContainer.setCurrentItem(state.currentPosition, true)
        }
    }

    companion object {
        val BALANCE_TAB = R.id.balance_tab
        val INFO_TAB = R.id.info_tab
    }
}