Skip to content

Commit 06ad28d

Browse files
committed
[feat] #62 video thumbnail
1 parent 0a5c73b commit 06ad28d

File tree

2 files changed

+60
-1
lines changed

2 files changed

+60
-1
lines changed

feature/upload/src/main/java/com/record/upload/SelectedVideoScreen.kt

+50
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,31 @@ import android.database.Cursor
66
import android.net.Uri
77
import android.provider.MediaStore
88
import android.util.Log
9+
import androidx.compose.foundation.Image
910
import androidx.compose.foundation.background
1011
import androidx.compose.foundation.layout.Box
1112
import androidx.compose.foundation.layout.Column
1213
import androidx.compose.foundation.layout.PaddingValues
14+
import androidx.compose.foundation.layout.aspectRatio
1315
import androidx.compose.foundation.layout.fillMaxSize
1416
import androidx.compose.foundation.layout.fillMaxWidth
17+
import androidx.compose.foundation.layout.padding
1518
import androidx.compose.material3.Text
1619
import androidx.compose.runtime.Composable
20+
import androidx.compose.runtime.remember
1721
import androidx.compose.ui.Alignment
1822
import androidx.compose.ui.Modifier
1923
import androidx.compose.ui.platform.LocalContext
24+
import androidx.compose.ui.semantics.Role.Companion.Image
2025
import androidx.compose.ui.text.intl.Locale
2126
import androidx.compose.ui.text.style.TextAlign
2227
import androidx.compose.ui.tooling.preview.Preview
28+
import androidx.compose.ui.unit.dp
29+
import coil.ImageLoader
30+
import coil.compose.rememberAsyncImagePainter
31+
import coil.compose.rememberImagePainter
32+
import coil.decode.VideoFrameDecoder
33+
import coil.size.Scale
2334
import com.record.designsystem.component.button.RecordyButton
2435
import com.record.designsystem.component.navbar.TopNavigationBar
2536
import com.record.designsystem.theme.Background
@@ -38,6 +49,7 @@ fun SelectedVideoRoute(
3849
fun SelectedVideoScreen(
3950
navigateDefinedContent: () -> Unit,
4051
) { Log.d("images","${getAllVideos(10, null, LocalContext.current)}")
52+
val a =getAllVideos(10, null, LocalContext.current)
4153
Box(
4254
modifier = Modifier
4355
.fillMaxSize()
@@ -56,6 +68,7 @@ fun SelectedVideoScreen(
5668
modifier = Modifier.fillMaxWidth(),
5769
textAlign = TextAlign.Center,
5870
)
71+
VideoThumbnail(video = a[0])
5972
}
6073
RecordyButton(
6174
modifier = Modifier.align(Alignment.BottomCenter),
@@ -66,6 +79,43 @@ fun SelectedVideoScreen(
6679
}
6780

6881
}
82+
83+
84+
@Composable
85+
fun VideoThumbnail(video: GalleryVideo) {
86+
val context = LocalContext.current
87+
val imageLoader = ImageLoader.Builder(context)
88+
.components {
89+
add(VideoFrameDecoder.Factory())
90+
}.crossfade(true)
91+
.build()
92+
93+
val painter = rememberAsyncImagePainter(
94+
model = video.filepath,
95+
imageLoader = imageLoader,)
96+
97+
Box(modifier = Modifier
98+
.padding(8.dp)
99+
.fillMaxWidth()) {
100+
// val painter = rememberImagePainter(
101+
// data = video.uri,
102+
// imageLoader = imageLoader,
103+
// builder = {
104+
// crossfade(true)
105+
// scale(Scale.FILL)
106+
// }
107+
// )
108+
109+
Image(
110+
painter = painter,
111+
contentDescription = "Video Thumbnail",
112+
modifier = Modifier
113+
.fillMaxWidth()
114+
.aspectRatio(16 / 9f)
115+
)
116+
117+
}
118+
}
69119
@Preview
70120
@Composable
71121
fun SelectedVideoScreenPreview() {

feature/upload/src/main/java/com/record/upload/VideoPickerScreen.kt

+10-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,16 @@ fun VideoPickerScreen(
9595
if (hasPermission) {
9696
Log.d("galley","hasPermission")
9797
} else {
98-
Log.d("galley not permission","hasPermission")
98+
scope.launch {
99+
permissionLauncher.launch(
100+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
101+
arrayOf(Manifest.permission.READ_MEDIA_VIDEO)
102+
} else {
103+
arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
104+
}
105+
)
106+
}
107+
Log.d("galleynotPermissio ","hasPermission")
99108
}
100109
Box(
101110
modifier = Modifier

0 commit comments

Comments
 (0)