Skip to content

Commit b03927c

Browse files
fix: changes according PR review
1 parent cc4f47f commit b03927c

File tree

13 files changed

+605
-575
lines changed

13 files changed

+605
-575
lines changed

app/src/main/java/org/openedx/app/MainFragment.kt

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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>>) {

app/src/main/res/values/main_manu_tab_ids.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
<item type="id" name="fragmentDiscover" />
55
<item type="id" name="fragmentDownloads" />
66
<item type="id" name="fragmentProfile" />
7-
</resources>
7+
</resources>

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ ext {
4444

4545
zip_version = '2.6.3'
4646
//testing
47+
compose_ui_tooling = '1.7.8'
4748
mockk_version = '1.13.12'
4849
android_arch_version = '2.2.0'
4950
junit_version = '4.13.2'

core/build.gradle

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ dependencies {
119119
// OpenEdx libs
120120
api("com.github.openedx:openedx-app-foundation-android:1.0.0")
121121

122-
debugApi "androidx.compose.ui:ui-tooling:1.7.8"
122+
// Preview
123+
debugApi "androidx.compose.ui:ui-tooling:$compose_ui_tooling"
123124

124125
testImplementation 'junit:junit:4.13.2'
125126
androidTestImplementation 'androidx.test.ext:junit:1.2.1'

core/src/main/java/org/openedx/core/ui/ComposeCommon.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,40 @@ fun Toolbar(
222222
}
223223
}
224224

225+
@Composable
226+
fun MainToolbar(
227+
modifier: Modifier = Modifier,
228+
label: String,
229+
onSettingsClick: () -> Unit,
230+
) {
231+
Box(
232+
modifier = modifier.fillMaxWidth()
233+
) {
234+
Text(
235+
modifier = Modifier
236+
.align(Alignment.CenterStart)
237+
.padding(start = 16.dp),
238+
text = label,
239+
color = MaterialTheme.appColors.textDark,
240+
style = MaterialTheme.appTypography.headlineBold
241+
)
242+
IconButton(
243+
modifier = Modifier
244+
.align(Alignment.CenterEnd)
245+
.padding(end = 12.dp),
246+
onClick = {
247+
onSettingsClick()
248+
}
249+
) {
250+
Icon(
251+
imageVector = Icons.Default.ManageAccounts,
252+
tint = MaterialTheme.appColors.textAccent,
253+
contentDescription = stringResource(id = R.string.core_accessibility_settings)
254+
)
255+
}
256+
}
257+
}
258+
225259
@Composable
226260
fun SearchBar(
227261
modifier: Modifier,

dashboard/src/main/java/org/openedx/learn/presentation/LearnFragment.kt

Lines changed: 3 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import android.view.View
55
import androidx.compose.animation.core.animateFloatAsState
66
import androidx.compose.foundation.background
77
import androidx.compose.foundation.clickable
8-
import androidx.compose.foundation.layout.Box
98
import androidx.compose.foundation.layout.Column
109
import androidx.compose.foundation.layout.Row
1110
import androidx.compose.foundation.layout.fillMaxWidth
@@ -15,12 +14,10 @@ import androidx.compose.foundation.shape.RoundedCornerShape
1514
import androidx.compose.material.DropdownMenu
1615
import androidx.compose.material.DropdownMenuItem
1716
import androidx.compose.material.Icon
18-
import androidx.compose.material.IconButton
1917
import androidx.compose.material.MaterialTheme
2018
import androidx.compose.material.Text
2119
import androidx.compose.material.icons.Icons
2220
import androidx.compose.material.icons.filled.ExpandMore
23-
import androidx.compose.material.icons.filled.ManageAccounts
2421
import androidx.compose.runtime.Composable
2522
import androidx.compose.runtime.collectAsState
2623
import androidx.compose.runtime.getValue
@@ -44,6 +41,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
4441
import org.koin.core.parameter.parametersOf
4542
import org.openedx.core.adapter.NavigationFragmentAdapter
4643
import org.openedx.core.presentation.global.viewBinding
44+
import org.openedx.core.ui.MainToolbar
4745
import org.openedx.core.ui.crop
4846
import org.openedx.core.ui.displayCutoutForLandscape
4947
import org.openedx.core.ui.statusBarsInset
@@ -55,7 +53,6 @@ import org.openedx.dashboard.databinding.FragmentLearnBinding
5553
import org.openedx.foundation.presentation.rememberWindowSize
5654
import org.openedx.foundation.presentation.windowSizeValue
5755
import org.openedx.learn.LearnType
58-
import org.openedx.core.R as CoreR
5956

6057
class LearnFragment : Fragment(R.layout.fragment_learn) {
6158

@@ -140,7 +137,7 @@ private fun Header(
140137
.then(contentWidth),
141138
horizontalAlignment = Alignment.CenterHorizontally
142139
) {
143-
Title(
140+
MainToolbar(
144141
label = stringResource(id = R.string.dashboard_learn),
145142
onSettingsClick = {
146143
viewModel.onSettingsClick(fragmentManager)
@@ -158,40 +155,6 @@ private fun Header(
158155
}
159156
}
160157

161-
@Composable
162-
private fun Title(
163-
modifier: Modifier = Modifier,
164-
label: String,
165-
onSettingsClick: () -> Unit,
166-
) {
167-
Box(
168-
modifier = modifier.fillMaxWidth()
169-
) {
170-
Text(
171-
modifier = Modifier
172-
.align(Alignment.CenterStart)
173-
.padding(start = 16.dp),
174-
text = label,
175-
color = MaterialTheme.appColors.textDark,
176-
style = MaterialTheme.appTypography.headlineBold
177-
)
178-
IconButton(
179-
modifier = Modifier
180-
.align(Alignment.CenterEnd)
181-
.padding(end = 12.dp),
182-
onClick = {
183-
onSettingsClick()
184-
}
185-
) {
186-
Icon(
187-
imageVector = Icons.Default.ManageAccounts,
188-
tint = MaterialTheme.appColors.textAccent,
189-
contentDescription = stringResource(id = CoreR.string.core_accessibility_settings)
190-
)
191-
}
192-
}
193-
}
194-
195158
@Composable
196159
private fun LearnDropdownMenu(
197160
modifier: Modifier = Modifier,
@@ -277,7 +240,7 @@ private fun LearnDropdownMenu(
277240
@Composable
278241
private fun HeaderPreview() {
279242
OpenEdXTheme {
280-
Title(
243+
MainToolbar(
281244
label = stringResource(id = R.string.dashboard_learn),
282245
onSettingsClick = {}
283246
)

downloads/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,4 +62,4 @@ dependencies {
6262
testImplementation "io.mockk:mockk:$mockk_version"
6363
testImplementation "io.mockk:mockk-android:$mockk_version"
6464
testImplementation "androidx.arch.core:core-testing:$android_arch_version"
65-
}
65+
}

downloads/proguard-rules.pro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@
44
# shrinking, optimization, and obfuscation for the entire application, including this library.
55
-dontshrink
66
-dontoptimize
7-
-dontobfuscate
7+
-dontobfuscate
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest>
33

4-
</manifest>
4+
</manifest>

downloads/src/main/java/org/openedx/downloads/data/repository/DownloadRepository.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ class DownloadRepository(
2323
val username = corePreferences.user?.username ?: ""
2424
val response = api.getDownloadCoursesPreview(username)
2525
val downloadCoursesPreview = response.map { it.mapToDomain() }
26+
emit(downloadCoursesPreview)
2627
val downloadCoursesPreviewEntity = response.map { it.mapToRoomEntity() }
2728
dao.insertDownloadCoursePreview(downloadCoursesPreviewEntity)
28-
emit(downloadCoursesPreview)
2929
}
3030

3131
fun getDownloadModels() = dao.getAllDataFlow().map { list ->

0 commit comments

Comments
 (0)