Skip to content

Commit c8cd397

Browse files
committed
2.0.8
1 parent 3cde7c9 commit c8cd397

5 files changed

Lines changed: 55 additions & 44 deletions

File tree

app/build.gradle.kts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ android {
1717
applicationId = "com.donut.mixfile"
1818
minSdk = 26
1919
targetSdk = 36
20-
versionCode = 152
21-
versionName = "2.0.7"
20+
versionCode = 153
21+
versionName = "2.0.8"
2222

2323
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
2424
vectorDrawables {
@@ -70,7 +70,7 @@ android {
7070

7171
dependencies {
7272
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0")
73-
implementation("com.github.InvertGeek:mixfile-core:2.0.7")
73+
implementation("com.github.InvertGeek:mixfile-core:2.0.8")
7474
implementation("androidx.compose.material:material-icons-extended:1.7.8")
7575
implementation("com.tencent:mmkv:1.3.14")
7676
implementation("net.engawapg.lib:zoomable:1.6.1")

app/src/main/java/com/donut/mixfile/activity/video/player/BottomControl.kt

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,7 @@ import androidx.compose.material3.Slider
2525
import androidx.compose.material3.SliderDefaults
2626
import androidx.compose.material3.Text
2727
import androidx.compose.runtime.Composable
28-
import androidx.compose.runtime.LaunchedEffect
29-
import androidx.compose.runtime.getValue
30-
import androidx.compose.runtime.mutableFloatStateOf
3128
import androidx.compose.runtime.remember
32-
import androidx.compose.runtime.setValue
3329
import androidx.compose.ui.Alignment
3430
import androidx.compose.ui.Modifier
3531
import androidx.compose.ui.draw.scale
@@ -40,7 +36,6 @@ import androidx.compose.ui.unit.sp
4036
import androidx.media3.exoplayer.ExoPlayer
4137
import com.donut.mixfile.ui.component.common.MixDialogBuilder
4238
import com.donut.mixfile.ui.component.common.SingleSelectItemList
43-
import kotlinx.coroutines.delay
4439

4540

4641
@OptIn(ExperimentalMaterial3Api::class)
@@ -50,8 +45,8 @@ fun BottomControl(
5045
modifier: Modifier,
5146
player: ExoPlayer,
5247
videos: List<Uri>,
53-
onPlayTimeChange: () -> Unit,
54-
onTrackTimeChange: () -> Unit,
48+
progress: Float,
49+
onTrackTimeChange: (Float) -> Unit,
5550
) {
5651
AnimatedVisibility(
5752
visible = visible,
@@ -70,24 +65,13 @@ fun BottomControl(
7065
.padding(5.dp),
7166
) {
7267

73-
var progress by remember { mutableFloatStateOf(0f) }
74-
LaunchedEffect(player) {
75-
while (true) {
76-
progress = if (player.duration > 0) {
77-
player.currentPosition.toFloat() / player.duration
78-
} else 0f
79-
onPlayTimeChange()
80-
delay(1000)
81-
}
8268

83-
}
8469
Slider(
8570
value = progress,
8671
onValueChange = { newValue ->
87-
progress = newValue
8872
player.pause()
8973
player.seekTo((player.duration * newValue).toLong())
90-
onTrackTimeChange()
74+
onTrackTimeChange(newValue)
9175
},
9276
onValueChangeFinished = {
9377
player.play()

app/src/main/java/com/donut/mixfile/activity/video/player/PlayerView.kt

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import androidx.compose.runtime.Composable
1111
import androidx.compose.runtime.DisposableEffect
1212
import androidx.compose.runtime.LaunchedEffect
1313
import androidx.compose.runtime.getValue
14+
import androidx.compose.runtime.mutableFloatStateOf
1415
import androidx.compose.runtime.mutableIntStateOf
1516
import androidx.compose.runtime.mutableLongStateOf
1617
import androidx.compose.runtime.remember
@@ -177,13 +178,13 @@ fun VideoPlayerScreen(
177178
controlsVisible.set(true)
178179
}
179180

181+
var progress by remember { mutableFloatStateOf(0f) }
180182

181-
BottomControl(
182-
visible = controlsVisible.get,
183-
modifier = Modifier.align(Alignment.BottomCenter),
184-
player = player,
185-
videos = videoUris,
186-
onPlayTimeChange = {
183+
LaunchedEffect(player) {
184+
while (true) {
185+
progress = if (player.duration > 0) {
186+
player.currentPosition.toFloat() / player.duration
187+
} else 0f
187188
playHistory =
188189
playHistory.filter { !it.hash.contentEquals(hash) }.toMutableList().apply {
189190
val history =
@@ -193,8 +194,20 @@ fun VideoPlayerScreen(
193194
removeAt(lastIndex)
194195
}
195196
}
196-
},
197+
delay(1000)
198+
}
199+
200+
}
201+
202+
203+
BottomControl(
204+
visible = controlsVisible.get,
205+
modifier = Modifier.align(Alignment.BottomCenter),
206+
player = player,
207+
videos = videoUris,
208+
progress = progress,
197209
onTrackTimeChange = {
210+
progress = it
198211
controlsVisible.set(true)
199212
}
200213
)

app/src/main/java/com/donut/mixfile/util/file/FileDataLog.kt

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,15 @@ package com.donut.mixfile.util.file
33
import androidx.compose.foundation.layout.fillMaxWidth
44
import androidx.compose.material3.OutlinedTextField
55
import androidx.compose.material3.Text
6+
import androidx.compose.runtime.LaunchedEffect
67
import androidx.compose.runtime.getValue
78
import androidx.compose.runtime.mutableStateOf
89
import androidx.compose.runtime.setValue
910
import androidx.compose.ui.Modifier
11+
import androidx.compose.ui.focus.FocusRequester
12+
import androidx.compose.ui.focus.focusRequester
13+
import androidx.compose.ui.text.TextRange
14+
import androidx.compose.ui.text.input.TextFieldValue
1015
import com.donut.mixfile.server.core.objects.FileDataLog
1116
import com.donut.mixfile.server.core.objects.MixShareInfo
1217
import com.donut.mixfile.server.core.utils.resolveMixShareInfo
@@ -42,26 +47,43 @@ fun FileDataLog.updateDataList(
4247
fun FileDataLog.rename(callback: (FileDataLog) -> Unit = {}) {
4348
var shareInfo = resolveMixShareInfo(shareInfoData) ?: return
4449
MixDialogBuilder("重命名文件").apply {
45-
var name by mutableStateOf(shareInfo.fileName)
50+
var value by mutableStateOf(TextFieldValue(shareInfo.fileName))
51+
val focusRequester = FocusRequester()
4652
setContent {
53+
54+
LaunchedEffect(Unit) {
55+
focusRequester.requestFocus()
56+
val text = value.text
57+
val dotIndex = text.lastIndexOf('.')
58+
val end = if (dotIndex == -1) text.length else dotIndex
59+
60+
value = value.copy(
61+
selection = TextRange(0, end)
62+
)
63+
}
64+
4765
OutlinedTextField(
48-
value = name,
66+
value = value,
4967
onValueChange = {
50-
name = it
68+
value = it
5169
},
52-
modifier = Modifier.fillMaxWidth(), label = {
70+
modifier = Modifier
71+
.focusRequester(focusRequester)
72+
.fillMaxWidth(),
73+
label = {
5374
Text(text = "输入文件名")
5475
},
5576
maxLines = 1
5677
)
78+
5779
}
5880
setDefaultNegative()
5981
setPositiveButton("确定") {
60-
if (name.isEmpty()) {
82+
if (value.text.isEmpty()) {
6183
showToast("文件名不能为空!")
6284
return@setPositiveButton
6385
}
64-
val sanitizedName = name.sanitizeFileName()
86+
val sanitizedName = value.text.sanitizeFileName()
6587
shareInfo = shareInfo.copy(fileName = sanitizedName)
6688
val renamedLog = copy(
6789
name = sanitizedName,

app/src/test/java/com/donut/mixfile/ExampleUnitTest.kt

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.donut.mixfile
22

33
import org.junit.Test
4-
import org.mozilla.javascript.Context
54

65

76
/**
@@ -15,14 +14,7 @@ class ExampleUnitTest {
1514

1615
@Test
1716
fun main() {
18-
val context = Context.enter()
19-
try {
20-
val scope = context.initStandardObjects()
21-
val result = context.evaluateString(scope, "1 + 2", "script", 1, null)
22-
println("结果: $result") // 输出 3
23-
} finally {
24-
Context.exit()
25-
}
17+
2618
}
2719

2820

0 commit comments

Comments
 (0)