@@ -2,7 +2,6 @@ package com.record.upload
2
2
3
3
import android.content.ContentUris
4
4
import android.content.Context
5
- import android.database.Cursor
6
5
import android.net.Uri
7
6
import android.provider.MediaStore
8
7
import android.util.Log
@@ -11,26 +10,27 @@ import androidx.compose.foundation.background
11
10
import androidx.compose.foundation.layout.Box
12
11
import androidx.compose.foundation.layout.Column
13
12
import androidx.compose.foundation.layout.PaddingValues
14
- import androidx.compose.foundation.layout.aspectRatio
15
13
import androidx.compose.foundation.layout.fillMaxSize
16
14
import androidx.compose.foundation.layout.fillMaxWidth
17
15
import androidx.compose.foundation.layout.padding
16
+ import androidx.compose.foundation.layout.size
17
+ import androidx.compose.foundation.lazy.grid.GridCells
18
+ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
19
+ import androidx.compose.foundation.lazy.grid.items
18
20
import androidx.compose.material3.Text
19
21
import androidx.compose.runtime.Composable
20
- import androidx.compose.runtime.remember
21
22
import androidx.compose.ui.Alignment
22
23
import androidx.compose.ui.Modifier
24
+ import androidx.compose.ui.draw.clip
25
+ import androidx.compose.ui.graphics.RectangleShape
26
+ import androidx.compose.ui.layout.ContentScale
23
27
import androidx.compose.ui.platform.LocalContext
24
- import androidx.compose.ui.semantics.Role.Companion.Image
25
- import androidx.compose.ui.text.intl.Locale
26
28
import androidx.compose.ui.text.style.TextAlign
27
29
import androidx.compose.ui.tooling.preview.Preview
28
30
import androidx.compose.ui.unit.dp
29
31
import coil.ImageLoader
30
32
import coil.compose.rememberAsyncImagePainter
31
- import coil.compose.rememberImagePainter
32
33
import coil.decode.VideoFrameDecoder
33
- import coil.size.Scale
34
34
import com.record.designsystem.component.button.RecordyButton
35
35
import com.record.designsystem.component.navbar.TopNavigationBar
36
36
import com.record.designsystem.theme.Background
@@ -48,8 +48,9 @@ fun SelectedVideoRoute(
48
48
@Composable
49
49
fun SelectedVideoScreen (
50
50
navigateDefinedContent : () -> Unit ,
51
- ) { Log .d(" images" ," ${getAllVideos(10 , null , LocalContext .current)} " )
52
- val a = getAllVideos(10 , null , LocalContext .current)
51
+ ) {
52
+ Log .d(" images" , " ${getAllVideos(10 , null , LocalContext .current)} " )
53
+ val a = getAllVideos(10 , null , LocalContext .current)
53
54
Box (
54
55
modifier = Modifier
55
56
.fillMaxSize()
@@ -68,7 +69,14 @@ fun SelectedVideoScreen(
68
69
modifier = Modifier .fillMaxWidth(),
69
70
textAlign = TextAlign .Center ,
70
71
)
71
- VideoThumbnail (video = a[0 ])
72
+ LazyVerticalGrid (
73
+ columns = GridCells .Fixed (4 ),
74
+ modifier = Modifier .padding(8 .dp),
75
+ ) {
76
+ items(a) { video ->
77
+ VideoThumbnail (video = video)
78
+ }
79
+ }
72
80
}
73
81
RecordyButton (
74
82
modifier = Modifier .align(Alignment .BottomCenter ),
@@ -77,45 +85,39 @@ fun SelectedVideoScreen(
77
85
onClick = {},
78
86
)
79
87
}
80
-
81
88
}
82
89
83
-
84
90
@Composable
85
91
fun VideoThumbnail (video : GalleryVideo ) {
86
92
val context = LocalContext .current
87
93
val imageLoader = ImageLoader .Builder (context)
88
94
.components {
89
95
add(VideoFrameDecoder .Factory ())
90
- }.crossfade(true )
96
+ }
97
+ .crossfade(true )
91
98
.build()
92
99
93
100
val painter = rememberAsyncImagePainter(
94
101
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
- // )
102
+ imageLoader = imageLoader,
103
+ )
108
104
105
+ Box (
106
+ modifier = Modifier
107
+ .padding(8 .dp)
108
+ .size(85 .dp),
109
+ ) {
109
110
Image (
110
111
painter = painter,
111
112
contentDescription = " Video Thumbnail" ,
113
+ contentScale = ContentScale .Crop ,
112
114
modifier = Modifier
113
- .fillMaxWidth ()
114
- .aspectRatio( 16 / 9f )
115
+ .fillMaxSize ()
116
+ .clip( RectangleShape ),
115
117
)
116
-
117
118
}
118
119
}
120
+
119
121
@Preview
120
122
@Composable
121
123
fun SelectedVideoScreenPreview () {
@@ -127,19 +129,17 @@ fun SelectedVideoScreenPreview() {
127
129
fun getAllVideos (
128
130
loadSize : Int ,
129
131
currentLocation : String? ,
130
- context : Context
132
+ context : Context ,
131
133
): MutableList <GalleryVideo > {
132
134
val galleryVideoList = mutableListOf<GalleryVideo >()
133
- // 외장 메모리에 있는 비디오 파일의 URI를 받도록 함
134
135
val uriExternal: Uri = MediaStore .Video .Media .EXTERNAL_CONTENT_URI
135
- // 커서에 가져올 정보에 대해서 지정한다.
136
136
val projection = arrayOf(
137
137
MediaStore .Video .VideoColumns .DATA ,
138
138
MediaStore .Video .VideoColumns .DISPLAY_NAME , // 이름
139
139
MediaStore .Video .VideoColumns .SIZE , // 크기
140
140
MediaStore .Video .VideoColumns .DATE_TAKEN ,
141
141
MediaStore .Video .VideoColumns .DATE_ADDED , // 추가된 날짜
142
- MediaStore .Video .VideoColumns ._ID
142
+ MediaStore .Video .VideoColumns ._ID ,
143
143
)
144
144
val resolver = context.contentResolver
145
145
@@ -151,15 +151,14 @@ fun getAllVideos(
151
151
projection,
152
152
selection,
153
153
selectionArgs,
154
- " ${MediaStore .Video .VideoColumns .DATE_ADDED } DESC"
154
+ " ${MediaStore .Video .VideoColumns .DATE_ADDED } DESC" ,
155
155
)
156
156
157
157
query?.use { cursor ->
158
- Log .d(" gallery cursor" , " Cursor count: ${cursor.count} ." )
159
-
160
158
if (cursor.moveToFirst()) {
161
159
val idColumn = cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns ._ID )
162
- val nameColumn = cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns .DISPLAY_NAME )
160
+ val nameColumn =
161
+ cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns .DISPLAY_NAME )
163
162
val filePathColumn = cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns .DATA )
164
163
val sizeColumn = cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns .SIZE )
165
164
val dateColumn = cursor.getColumnIndexOrThrow(MediaStore .Video .VideoColumns .DATE_TAKEN )
@@ -180,8 +179,8 @@ fun getAllVideos(
180
179
uri = contentUri,
181
180
name = name,
182
181
date = date ? : " " ,
183
- size = size
184
- )
182
+ size = size,
183
+ ),
185
184
)
186
185
} while (cursor.moveToNext())
187
186
}
@@ -196,5 +195,5 @@ data class GalleryVideo(
196
195
val uri : Uri ,
197
196
val name : String ,
198
197
val date : String ,
199
- val size : Int
200
- )
198
+ val size : Int ,
199
+ )
0 commit comments