Skip to content

Commit 794efab

Browse files
feat: landscape and tablet ui
1 parent 5587659 commit 794efab

File tree

1 file changed

+82
-30
lines changed

1 file changed

+82
-30
lines changed

downloads/src/main/java/org/openedx/downloads/presentation/download/DownloadsScreen.kt

Lines changed: 82 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.openedx.downloads.presentation.download
22

3+
import android.content.res.Configuration.ORIENTATION_LANDSCAPE
34
import androidx.compose.animation.animateContentSize
45
import androidx.compose.foundation.background
56
import androidx.compose.foundation.layout.Arrangement
@@ -9,6 +10,7 @@ import androidx.compose.foundation.layout.PaddingValues
910
import androidx.compose.foundation.layout.Row
1011
import androidx.compose.foundation.layout.Spacer
1112
import androidx.compose.foundation.layout.defaultMinSize
13+
import androidx.compose.foundation.layout.fillMaxHeight
1214
import androidx.compose.foundation.layout.fillMaxSize
1315
import androidx.compose.foundation.layout.fillMaxWidth
1416
import androidx.compose.foundation.layout.height
@@ -17,6 +19,10 @@ import androidx.compose.foundation.layout.size
1719
import androidx.compose.foundation.layout.width
1820
import androidx.compose.foundation.layout.widthIn
1921
import androidx.compose.foundation.lazy.LazyColumn
22+
import androidx.compose.foundation.lazy.grid.GridCells
23+
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
24+
import androidx.compose.foundation.lazy.grid.items
25+
import androidx.compose.foundation.lazy.grid.rememberLazyGridState
2026
import androidx.compose.foundation.lazy.items
2127
import androidx.compose.foundation.rememberScrollState
2228
import androidx.compose.foundation.shape.CircleShape
@@ -52,6 +58,7 @@ import androidx.compose.ui.Modifier
5258
import androidx.compose.ui.draw.clip
5359
import androidx.compose.ui.graphics.Color
5460
import androidx.compose.ui.layout.ContentScale
61+
import androidx.compose.ui.platform.LocalConfiguration
5562
import androidx.compose.ui.platform.LocalContext
5663
import androidx.compose.ui.platform.testTag
5764
import androidx.compose.ui.res.painterResource
@@ -98,6 +105,7 @@ fun DownloadsScreen(
98105
) {
99106
val scaffoldState = rememberScaffoldState()
100107
val windowSize = rememberWindowSize()
108+
val configuration = LocalConfiguration.current
101109
val contentWidth by remember(key1 = windowSize) {
102110
mutableStateOf(
103111
windowSize.windowSizeValue(
@@ -158,34 +166,72 @@ fun DownloadsScreen(
158166
.padding(horizontal = 16.dp),
159167
contentAlignment = Alignment.TopCenter
160168
) {
161-
LazyColumn(
162-
modifier = contentWidth,
163-
contentPadding = PaddingValues(bottom = 20.dp, top = 12.dp),
164-
verticalArrangement = Arrangement.spacedBy(20.dp)
165-
) {
166-
items(uiState.downloadCoursePreviews) { item ->
167-
val downloadModels =
168-
uiState.downloadModels.filter { it.courseId == item.id }
169-
val downloadState = uiState.courseDownloadState[item.id]
170-
?: DownloadedState.NOT_DOWNLOADED
171-
CourseItem(
172-
downloadCoursePreview = item,
173-
downloadModels = downloadModels,
174-
downloadedState = downloadState,
175-
apiHostUrl = apiHostUrl,
176-
onCourseClick = {
177-
onAction(DownloadsViewActions.OpenCourse(item.id))
178-
},
179-
onDownloadClick = {
180-
onAction(DownloadsViewActions.DownloadCourse(item.id))
181-
},
182-
onCancelClick = {
183-
onAction(DownloadsViewActions.CancelDownloading(item.id))
184-
},
185-
onRemoveClick = {
186-
onAction(DownloadsViewActions.RemoveDownloads(item.id))
169+
if (configuration.orientation == ORIENTATION_LANDSCAPE || windowSize.isTablet) {
170+
LazyVerticalGrid(
171+
modifier = contentWidth.fillMaxHeight(),
172+
state = rememberLazyGridState(),
173+
columns = GridCells.Fixed(2),
174+
verticalArrangement = Arrangement.spacedBy(20.dp),
175+
horizontalArrangement = Arrangement.spacedBy(20.dp),
176+
contentPadding = PaddingValues(bottom = 20.dp, top = 12.dp),
177+
content = {
178+
items(uiState.downloadCoursePreviews) { item ->
179+
val downloadModels =
180+
uiState.downloadModels.filter { it.courseId == item.id }
181+
val downloadState = uiState.courseDownloadState[item.id]
182+
?: DownloadedState.NOT_DOWNLOADED
183+
CourseItem(
184+
modifier = Modifier.height(314.dp),
185+
downloadCoursePreview = item,
186+
downloadModels = downloadModels,
187+
downloadedState = downloadState,
188+
apiHostUrl = apiHostUrl,
189+
onCourseClick = {
190+
onAction(DownloadsViewActions.OpenCourse(item.id))
191+
},
192+
onDownloadClick = {
193+
onAction(DownloadsViewActions.DownloadCourse(item.id))
194+
},
195+
onCancelClick = {
196+
onAction(DownloadsViewActions.CancelDownloading(item.id))
197+
},
198+
onRemoveClick = {
199+
onAction(DownloadsViewActions.RemoveDownloads(item.id))
200+
}
201+
)
187202
}
188-
)
203+
}
204+
)
205+
} else {
206+
LazyColumn(
207+
modifier = contentWidth,
208+
contentPadding = PaddingValues(bottom = 20.dp, top = 12.dp),
209+
verticalArrangement = Arrangement.spacedBy(20.dp)
210+
) {
211+
items(uiState.downloadCoursePreviews) { item ->
212+
val downloadModels =
213+
uiState.downloadModels.filter { it.courseId == item.id }
214+
val downloadState = uiState.courseDownloadState[item.id]
215+
?: DownloadedState.NOT_DOWNLOADED
216+
CourseItem(
217+
downloadCoursePreview = item,
218+
downloadModels = downloadModels,
219+
downloadedState = downloadState,
220+
apiHostUrl = apiHostUrl,
221+
onCourseClick = {
222+
onAction(DownloadsViewActions.OpenCourse(item.id))
223+
},
224+
onDownloadClick = {
225+
onAction(DownloadsViewActions.DownloadCourse(item.id))
226+
},
227+
onCancelClick = {
228+
onAction(DownloadsViewActions.CancelDownloading(item.id))
229+
},
230+
onRemoveClick = {
231+
onAction(DownloadsViewActions.RemoveDownloads(item.id))
232+
}
233+
)
234+
}
189235
}
190236
}
191237
}
@@ -231,6 +277,8 @@ private fun CourseItem(
231277
onRemoveClick: () -> Unit,
232278
onCancelClick: () -> Unit
233279
) {
280+
val windowSize = rememberWindowSize()
281+
val configuration = LocalConfiguration.current
234282
var isDropdownExpanded by remember { mutableStateOf(false) }
235283
val downloadedSize = downloadModels
236284
.filter { it.downloadedState == DownloadedState.DOWNLOADED }
@@ -254,17 +302,21 @@ private fun CourseItem(
254302
Column(
255303
modifier = Modifier.animateContentSize()
256304
) {
305+
val imageModifier =
306+
if (configuration.orientation == ORIENTATION_LANDSCAPE || windowSize.isTablet) {
307+
Modifier.weight(1f)
308+
} else {
309+
Modifier.height(120.dp)
310+
}
257311
AsyncImage(
312+
modifier = imageModifier.fillMaxWidth(),
258313
model = ImageRequest.Builder(LocalContext.current)
259314
.data(downloadCoursePreview.image.toImageLink(apiHostUrl))
260315
.error(org.openedx.core.R.drawable.core_no_image_course)
261316
.placeholder(org.openedx.core.R.drawable.core_no_image_course)
262317
.build(),
263318
contentDescription = null,
264319
contentScale = ContentScale.Crop,
265-
modifier = Modifier
266-
.fillMaxWidth()
267-
.height(120.dp)
268320
)
269321
Column(
270322
modifier = Modifier

0 commit comments

Comments
 (0)