@@ -40,10 +40,15 @@ class MainFragment : Fragment(R.layout.fragment_main) {
4040 }
4141 }
4242
43- @Suppress(" LongMethod" , " CyclomaticComplexMethod" )
4443 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
4544 super .onViewCreated(view, savedInstanceState)
45+ handleArguments()
46+ setupBottomNavigation()
47+ setupViewPager()
48+ observeViewModel()
49+ }
4650
51+ private fun handleArguments () {
4752 requireArguments().apply {
4853 getString(ARG_COURSE_ID ).takeIf { it.isNullOrBlank().not () }?.let { courseId ->
4954 val infoType = getString(ARG_INFO_TYPE )
@@ -56,26 +61,43 @@ class MainFragment : Fragment(R.layout.fragment_main) {
5661 putString(ARG_INFO_TYPE , " " )
5762 }
5863 }
64+ }
5965
66+ private fun setupBottomNavigation () {
6067 val openTabArg = requireArguments().getString(ARG_OPEN_TAB , HomeTab .LEARN .name)
68+ val initialMenuId = getInitialMenuId(openTabArg)
69+ binding.bottomNavView.selectedItemId = initialMenuId
70+
71+ val menu = binding.bottomNavView.menu
72+ menu.clear()
73+
74+ val tabList = createTabList(openTabArg)
75+ addMenuItems(menu, tabList)
76+ setupBottomNavListener(tabList)
77+
78+ requireArguments().remove(ARG_OPEN_TAB )
79+ }
80+
81+ private fun createTabList (openTabArg : String ): List <Pair <Int , Fragment >> {
6182 val learnFragment = LearnFragment .newInstance(
6283 openTab = if (openTabArg == HomeTab .PROGRAMS .name) {
6384 LearnTab .PROGRAMS .name
6485 } else {
6586 LearnTab .COURSES .name
6687 }
6788 )
68- val tabList = mutableListOf<Pair <Int , Fragment >>().apply {
89+
90+ return mutableListOf<Pair <Int , Fragment >>().apply {
6991 add(R .id.fragmentLearn to learnFragment)
7092 add(R .id.fragmentDiscover to viewModel.getDiscoveryFragment)
7193 if (viewModel.isDownloadsFragmentEnabled) {
7294 add(R .id.fragmentDownloads to DownloadsFragment ())
7395 }
7496 add(R .id.fragmentProfile to ProfileFragment ())
7597 }
98+ }
7699
77- val menu = binding.bottomNavView.menu
78- menu.clear()
100+ private fun addMenuItems (menu : Menu , tabList : List <Pair <Int , Fragment >>) {
79101 val tabTitles = mapOf (
80102 R .id.fragmentLearn to resources.getString(R .string.app_navigation_learn),
81103 R .id.fragmentDiscover to resources.getString(R .string.app_navigation_discovery),
@@ -88,13 +110,14 @@ class MainFragment : Fragment(R.layout.fragment_main) {
88110 R .id.fragmentDownloads to R .drawable.app_ic_download_cloud,
89111 R .id.fragmentProfile to R .drawable.app_ic_profile
90112 )
113+
91114 for ((id, _) in tabList) {
92115 val menuItem = menu.add(Menu .NONE , id, Menu .NONE , tabTitles[id] ? : " " )
93116 tabIcons[id]?.let { menuItem.setIcon(it) }
94117 }
118+ }
95119
96- initViewPager(tabList)
97-
120+ private fun setupBottomNavListener (tabList : List <Pair <Int , Fragment >>) {
98121 val menuIdToIndex = tabList.mapIndexed { index, pair -> pair.first to index }.toMap()
99122
100123 binding.bottomNavView.setOnItemSelectedListener { menuItem ->
@@ -109,7 +132,14 @@ class MainFragment : Fragment(R.layout.fragment_main) {
109132 }
110133 true
111134 }
135+ }
136+
137+ private fun setupViewPager () {
138+ val tabList = createTabList(requireArguments().getString(ARG_OPEN_TAB , HomeTab .LEARN .name))
139+ initViewPager(tabList)
140+ }
112141
142+ private fun observeViewModel () {
113143 viewModel.isBottomBarEnabled.observe(viewLifecycleOwner) { isBottomBarEnabled ->
114144 enableBottomBar(isBottomBarEnabled)
115145 }
@@ -121,22 +151,20 @@ class MainFragment : Fragment(R.layout.fragment_main) {
121151 }
122152 }
123153 }
154+ }
124155
125- val initialMenuId = when (openTabArg) {
156+ private fun getInitialMenuId (openTabArg : String ): Int {
157+ return when (openTabArg) {
126158 HomeTab .LEARN .name, HomeTab .PROGRAMS .name -> R .id.fragmentLearn
127159 HomeTab .DISCOVER .name -> R .id.fragmentDiscover
128160 HomeTab .DOWNLOADS .name -> if (viewModel.isDownloadsFragmentEnabled) {
129161 R .id.fragmentDownloads
130162 } else {
131163 R .id.fragmentLearn
132164 }
133-
134165 HomeTab .PROFILE .name -> R .id.fragmentProfile
135166 else -> R .id.fragmentLearn
136167 }
137- binding.bottomNavView.selectedItemId = initialMenuId
138-
139- requireArguments().remove(ARG_OPEN_TAB )
140168 }
141169
142170 private fun initViewPager (tabList : List <Pair <Int , Fragment >>) {
0 commit comments