1
+ package dev.aaa1115910.bv.mobile.screen
2
+
3
+ import android.app.Activity
4
+ import androidx.compose.foundation.layout.Arrangement
5
+ import androidx.compose.foundation.layout.PaddingValues
6
+ import androidx.compose.foundation.layout.padding
7
+ import androidx.compose.foundation.lazy.grid.GridCells
8
+ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
9
+ import androidx.compose.foundation.lazy.grid.items
10
+ import androidx.compose.foundation.lazy.grid.rememberLazyGridState
11
+ import androidx.compose.material.icons.Icons
12
+ import androidx.compose.material.icons.automirrored.filled.ArrowBack
13
+ import androidx.compose.material3.ExperimentalMaterial3Api
14
+ import androidx.compose.material3.Icon
15
+ import androidx.compose.material3.IconButton
16
+ import androidx.compose.material3.LargeTopAppBar
17
+ import androidx.compose.material3.Scaffold
18
+ import androidx.compose.material3.Text
19
+ import androidx.compose.material3.TopAppBarDefaults
20
+ import androidx.compose.material3.rememberTopAppBarState
21
+ import androidx.compose.material3.windowsizeclass.WindowSizeClass
22
+ import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
23
+ import androidx.compose.runtime.Composable
24
+ import androidx.compose.ui.Modifier
25
+ import androidx.compose.ui.input.nestedscroll.nestedScroll
26
+ import androidx.compose.ui.platform.LocalContext
27
+ import androidx.compose.ui.res.stringResource
28
+ import androidx.compose.ui.unit.dp
29
+ import dev.aaa1115910.bv.R
30
+ import dev.aaa1115910.bv.mobile.activities.VideoPlayerActivity
31
+ import dev.aaa1115910.bv.mobile.component.videocard.SmallVideoCard
32
+ import dev.aaa1115910.bv.util.OnBottomReached
33
+ import dev.aaa1115910.bv.util.fInfo
34
+ import dev.aaa1115910.bv.viewmodel.user.HistoryViewModel
35
+ import io.github.oshai.kotlinlogging.KotlinLogging
36
+ import org.koin.androidx.compose.koinViewModel
37
+
38
+ @OptIn(ExperimentalMaterial3Api ::class )
39
+ @Composable
40
+ fun HistoryScreen (
41
+ modifier : Modifier = Modifier ,
42
+ windowSize : WindowSizeClass ,
43
+ historyViewModel : HistoryViewModel = koinViewModel()
44
+ ) {
45
+ val context = LocalContext .current
46
+ val logger = KotlinLogging .logger(" HistoryScreen" )
47
+ val listState = rememberLazyGridState()
48
+ val scrollBehavior =
49
+ TopAppBarDefaults .exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
50
+
51
+ listState.OnBottomReached (
52
+ loading = historyViewModel.updating
53
+ ) {
54
+ logger.fInfo { " on reached rcmd page bottom" }
55
+ historyViewModel.update()
56
+ }
57
+
58
+ Scaffold (
59
+ modifier = modifier
60
+ .nestedScroll(scrollBehavior.nestedScrollConnection),
61
+ topBar = {
62
+ LargeTopAppBar (
63
+ title = { Text (text = stringResource(R .string.title_mobile_activity_history)) },
64
+ navigationIcon = {
65
+ IconButton (
66
+ onClick = { (context as Activity ).finish() }
67
+ ) {
68
+ Icon (
69
+ imageVector = Icons .AutoMirrored .Default .ArrowBack ,
70
+ contentDescription = null
71
+ )
72
+ }
73
+ },
74
+ scrollBehavior = scrollBehavior
75
+ )
76
+ }
77
+ ) { innerPadding ->
78
+ LazyVerticalGrid (
79
+ modifier = Modifier .padding(top = innerPadding.calculateTopPadding()),
80
+ columns = GridCells .Adaptive (if (windowSize.widthSizeClass == WindowWidthSizeClass .Compact ) 180 .dp else 220 .dp),
81
+ state = listState,
82
+ horizontalArrangement = Arrangement .spacedBy(8 .dp),
83
+ verticalArrangement = Arrangement .spacedBy(8 .dp),
84
+ contentPadding = PaddingValues (8 .dp)
85
+ ) {
86
+ items(historyViewModel.histories) { history ->
87
+ SmallVideoCard (
88
+ data = history,
89
+ onClick = {
90
+ VideoPlayerActivity .actionStart(
91
+ context = context,
92
+ aid = history.avid
93
+ )
94
+ }
95
+ )
96
+ }
97
+ }
98
+ }
99
+ }
0 commit comments