Skip to content

Commit 004f593

Browse files
committed
新增历史记录
1 parent df636b8 commit 004f593

File tree

6 files changed

+136
-2
lines changed

6 files changed

+136
-2
lines changed

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,11 @@
232232
android:exported="false"
233233
android:label="@string/title_mobile_activity_following_user"
234234
android:theme="@style/Theme.BVMobile" />
235+
<activity
236+
android:name=".mobile.activities.HistoryActivity"
237+
android:exported="false"
238+
android:label="@string/title_mobile_activity_history"
239+
android:theme="@style/Theme.BVMobile" />
235240
</application>
236241

237242
</manifest>
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.aaa1115910.bv.mobile.activities
2+
3+
import android.os.Bundle
4+
import androidx.activity.ComponentActivity
5+
import androidx.activity.compose.setContent
6+
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
7+
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
8+
import dev.aaa1115910.bv.mobile.screen.HistoryScreen
9+
import dev.aaa1115910.bv.mobile.theme.BVMobileTheme
10+
11+
class HistoryActivity : ComponentActivity() {
12+
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
13+
override fun onCreate(savedInstanceState: Bundle?) {
14+
super.onCreate(savedInstanceState)
15+
setContent {
16+
val windowSize = calculateWindowSizeClass(this)
17+
BVMobileTheme {
18+
HistoryScreen(
19+
windowSize = windowSize
20+
)
21+
}
22+
}
23+
}
24+
}
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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+
}

app/src/main/kotlin/dev/aaa1115910/bv/mobile/screen/MobileMainScreen.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ import com.origeek.imageViewer.previewer.rememberPreviewerState
8585
import dev.aaa1115910.biliapi.entity.Picture
8686
import dev.aaa1115910.bv.component.DevelopingTipContent
8787
import dev.aaa1115910.bv.mobile.activities.FollowingUserActivity
88+
import dev.aaa1115910.bv.mobile.activities.HistoryActivity
8889
import dev.aaa1115910.bv.mobile.activities.LoginActivity
8990
import dev.aaa1115910.bv.mobile.activities.SettingsActivity
9091
import dev.aaa1115910.bv.mobile.component.home.UserDialog
@@ -304,7 +305,11 @@ fun MobileMainScreen(
304305
Intent(context, FollowingUserActivity::class.java)
305306
)
306307
},
307-
onOpenHistory = {},
308+
onOpenHistory = {
309+
context.startActivity(
310+
Intent(context, HistoryActivity::class.java)
311+
)
312+
},
308313
onOpenFavorite = {},
309314
onOpenFollowingPgc = {},
310315
onOpenToView = {},

app/src/main/kotlin/dev/aaa1115910/bv/viewmodel/user/HistoryViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class HistoryViewModel(
3737
var noMore by mutableStateOf(false)
3838

3939
private var cursor = 0L
40-
private var updating = false
40+
var updating by mutableStateOf(false)
4141

4242
fun update() {
4343
viewModelScope.launch(Dispatchers.IO) {

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,7 @@
256256
<string name="title_activity_video_player_v3">视频播放</string>
257257
<string name="title_mobile_activity_dynamic_detail">动态详情</string>
258258
<string name="title_mobile_activity_following_user">我的关注</string>
259+
<string name="title_mobile_activity_history">历史记录</string>
259260
<string name="title_mobile_activity_login">用户登录</string>
260261
<string name="title_mobile_activity_settings">设置</string>
261262
<string name="title_mobile_activity_user_space">用户空间</string>

0 commit comments

Comments
 (0)