Skip to content

Commit a73e936

Browse files
authored
Merge pull request #161 from boostcampwm-2024/feature/#54-edit-pick-list
[feature] 픽 목록 편집 모드
2 parents e39b789 + 73ad108 commit a73e936

12 files changed

+537
-120
lines changed

app/src/main/java/com/squirtles/musicroad/common/DefaultTopAppBar.kt

+6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.squirtles.musicroad.common
22

3+
import androidx.compose.foundation.layout.RowScope
4+
import androidx.compose.foundation.layout.displayCutoutPadding
35
import androidx.compose.material.icons.Icons
46
import androidx.compose.material.icons.automirrored.filled.ArrowBack
57
import androidx.compose.material3.CenterAlignedTopAppBar
@@ -10,6 +12,7 @@ import androidx.compose.material3.MaterialTheme
1012
import androidx.compose.material3.Text
1113
import androidx.compose.material3.TopAppBarDefaults
1214
import androidx.compose.runtime.Composable
15+
import androidx.compose.ui.Modifier
1316
import androidx.compose.ui.graphics.Color
1417
import androidx.compose.ui.res.stringResource
1518
import androidx.compose.ui.text.TextStyle
@@ -23,6 +26,7 @@ fun DefaultTopAppBar(
2326
title: String,
2427
titleStyle: TextStyle = MaterialTheme.typography.titleLarge.copy(fontWeight = FontWeight.Bold),
2528
onBackClick: () -> Unit,
29+
actions: @Composable RowScope.() -> Unit = {},
2630
) {
2731
CenterAlignedTopAppBar(
2832
title = {
@@ -31,6 +35,7 @@ fun DefaultTopAppBar(
3135
style = titleStyle
3236
)
3337
},
38+
modifier = Modifier.displayCutoutPadding(),
3439
navigationIcon = {
3540
IconButton(
3641
onClick = onBackClick
@@ -42,6 +47,7 @@ fun DefaultTopAppBar(
4247
)
4348
}
4449
},
50+
actions = actions,
4551
colors = TopAppBarDefaults.centerAlignedTopAppBarColors().copy(
4652
containerColor = Color.Transparent,
4753
titleContentColor = White
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
package com.squirtles.musicroad.pick.components
1+
package com.squirtles.musicroad.common
22

33
import androidx.compose.foundation.layout.Arrangement
44
import androidx.compose.foundation.layout.Column
55
import androidx.compose.foundation.layout.Row
6+
import androidx.compose.foundation.layout.RowScope
67
import androidx.compose.foundation.layout.fillMaxWidth
78
import androidx.compose.foundation.layout.padding
89
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -22,18 +23,18 @@ import androidx.compose.ui.text.font.FontWeight
2223
import androidx.compose.ui.tooling.preview.Preview
2324
import androidx.compose.ui.unit.dp
2425
import com.squirtles.musicroad.R
25-
import com.squirtles.musicroad.common.VerticalSpacer
26-
import com.squirtles.musicroad.common.HorizontalSpacer
2726
import com.squirtles.musicroad.ui.theme.Black
2827
import com.squirtles.musicroad.ui.theme.MusicRoadTheme
2928
import com.squirtles.musicroad.ui.theme.Primary
3029
import com.squirtles.musicroad.ui.theme.White
3130

3231
@OptIn(ExperimentalMaterial3Api::class)
3332
@Composable
34-
fun DeletePickDialog(
33+
internal fun MessageAlertDialog(
3534
onDismissRequest: () -> Unit,
36-
onDeletion: () -> Unit
35+
title: String,
36+
body: String,
37+
buttons: @Composable RowScope.() -> Unit,
3738
) {
3839
BasicAlertDialog(
3940
onDismissRequest = { onDismissRequest() },
@@ -48,7 +49,7 @@ fun DeletePickDialog(
4849
verticalArrangement = Arrangement.Center
4950
) {
5051
Text(
51-
text = stringResource(R.string.delete_pick_dialog_title),
52+
text = title,
5253
color = Black,
5354
fontWeight = FontWeight.Bold,
5455
style = MaterialTheme.typography.bodyLarge
@@ -57,7 +58,7 @@ fun DeletePickDialog(
5758
VerticalSpacer(8)
5859

5960
Text(
60-
text = stringResource(R.string.delete_pick_dialog_body),
61+
text = body,
6162
color = Black,
6263
style = MaterialTheme.typography.bodyLarge
6364
)
@@ -67,45 +68,59 @@ fun DeletePickDialog(
6768
Row(
6869
modifier = Modifier.fillMaxWidth(),
6970
horizontalArrangement = Arrangement.End,
70-
verticalAlignment = Alignment.CenterVertically
71-
) {
72-
TextButton(
73-
onClick = { onDismissRequest() },
74-
colors = ButtonDefaults.buttonColors().copy(
75-
containerColor = Color.Transparent,
76-
contentColor = Black
77-
)
78-
) {
79-
Text(stringResource(R.string.delete_pick_dialog_cancel))
80-
}
81-
82-
HorizontalSpacer(8)
83-
84-
TextButton(
85-
onClick = { onDeletion() },
86-
colors = ButtonDefaults.buttonColors().copy(
87-
containerColor = Color.Transparent,
88-
contentColor = Primary
89-
)
90-
) {
91-
Text(
92-
text = stringResource(R.string.delete_pick_dialog_delete),
93-
fontWeight = FontWeight.Bold
94-
)
95-
}
96-
}
71+
verticalAlignment = Alignment.CenterVertically,
72+
content = buttons
73+
)
9774
}
9875
}
9976
}
10077
}
10178

79+
@Composable
80+
internal fun DialogTextButton(
81+
onClick: () -> Unit,
82+
text: String,
83+
textColor: Color = Black,
84+
buttonColor: Color = Color.Transparent,
85+
fontWeight: FontWeight? = null,
86+
) {
87+
TextButton(
88+
onClick = onClick,
89+
colors = ButtonDefaults.buttonColors().copy(
90+
containerColor = buttonColor,
91+
contentColor = textColor
92+
)
93+
) {
94+
Text(
95+
text = text,
96+
fontWeight = fontWeight,
97+
)
98+
}
99+
}
100+
102101
@Preview(showBackground = true)
103102
@Composable
104-
fun DeletePickDialogPreview() {
103+
private fun DeletePickDialogPreview() {
105104
MusicRoadTheme {
106-
DeletePickDialog(
105+
MessageAlertDialog(
107106
onDismissRequest = {},
108-
onDeletion = {}
107+
title = stringResource(R.string.delete_pick_dialog_title),
108+
body = stringResource(R.string.delete_pick_dialog_body),
109+
buttons = {
110+
DialogTextButton(
111+
onClick = {},
112+
text = "취소"
113+
)
114+
115+
HorizontalSpacer(8)
116+
117+
DialogTextButton(
118+
onClick = {},
119+
text = "삭제하기",
120+
textColor = Primary,
121+
fontWeight = FontWeight.Bold
122+
)
123+
}
109124
)
110125
}
111126
}

app/src/main/java/com/squirtles/musicroad/common/PickInfoText.kt

+4-3
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,10 @@ fun CommentText(
6969
}
7070

7171
@Composable
72-
fun TotalCountText(
73-
modifier: Modifier = Modifier,
72+
fun CountText(
7473
totalCount: Int,
74+
modifier: Modifier = Modifier,
75+
countLabel: String = stringResource(R.string.total_count_text),
7576
defaultColor: Color = MaterialTheme.colorScheme.onSurface,
7677
pointColor: Color = MaterialTheme.colorScheme.primary,
7778
style: TextStyle = MaterialTheme.typography.titleMedium
@@ -84,7 +85,7 @@ fun TotalCountText(
8485
fontWeight = FontWeight.Bold
8586
)
8687
) {
87-
append("전체 ")
88+
append("$countLabel ")
8889
}
8990
withStyle(
9091
SpanStyle(

app/src/main/java/com/squirtles/musicroad/map/components/ClusterBottomSheet.kt

+5-5
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,12 @@ import com.squirtles.musicroad.common.AlbumImage
2828
import com.squirtles.musicroad.common.CommentText
2929
import com.squirtles.musicroad.common.Constants.DEFAULT_PADDING
3030
import com.squirtles.musicroad.common.Constants.REQUEST_IMAGE_SIZE_DEFAULT
31+
import com.squirtles.musicroad.common.CountText
3132
import com.squirtles.musicroad.common.CreatedByOtherUserText
3233
import com.squirtles.musicroad.common.CreatedBySelfText
3334
import com.squirtles.musicroad.common.FavoriteCountText
34-
import com.squirtles.musicroad.common.SongInfoText
35-
import com.squirtles.musicroad.common.TotalCountText
3635
import com.squirtles.musicroad.common.HorizontalSpacer
36+
import com.squirtles.musicroad.common.SongInfoText
3737
import com.squirtles.musicroad.common.VerticalSpacer
3838
import kotlinx.coroutines.launch
3939

@@ -57,11 +57,11 @@ fun ClusterBottomSheet(
5757
containerColor = MaterialTheme.colorScheme.surface
5858
) {
5959
clusterPickList?.let { pickList ->
60-
TotalCountText(
60+
CountText(
61+
totalCount = pickList.size,
6162
modifier = Modifier
6263
.fillMaxWidth()
63-
.padding(start = DEFAULT_PADDING),
64-
totalCount = pickList.size
64+
.padding(start = DEFAULT_PADDING)
6565
)
6666

6767
VerticalSpacer(height = 8)

app/src/main/java/com/squirtles/musicroad/pick/DetailPickScreen.kt

+29-6
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ import androidx.compose.ui.graphics.graphicsLayer
4141
import androidx.compose.ui.graphics.luminance
4242
import androidx.compose.ui.platform.LocalContext
4343
import androidx.compose.ui.platform.LocalView
44+
import androidx.compose.ui.res.stringResource
45+
import androidx.compose.ui.text.font.FontWeight
4446
import androidx.compose.ui.tooling.preview.Preview
4547
import androidx.compose.ui.unit.dp
4648
import androidx.compose.ui.util.lerp
@@ -53,19 +55,22 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
5355
import androidx.lifecycle.flowWithLifecycle
5456
import com.squirtles.domain.model.Pick
5557
import com.squirtles.musicroad.R
58+
import com.squirtles.musicroad.common.DialogTextButton
59+
import com.squirtles.musicroad.common.HorizontalSpacer
60+
import com.squirtles.musicroad.common.MessageAlertDialog
5661
import com.squirtles.musicroad.common.VerticalSpacer
5762
import com.squirtles.musicroad.media.PlayerServiceViewModel
5863
import com.squirtles.musicroad.pick.PickViewModel.Companion.DEFAULT_PICK
5964
import com.squirtles.musicroad.pick.components.CircleAlbumCover
6065
import com.squirtles.musicroad.pick.components.CommentText
61-
import com.squirtles.musicroad.pick.components.DeletePickDialog
6266
import com.squirtles.musicroad.pick.components.DetailPickTopAppBar
6367
import com.squirtles.musicroad.pick.components.MusicVideoKnob
6468
import com.squirtles.musicroad.pick.components.PickInformation
6569
import com.squirtles.musicroad.pick.components.SongInfo
6670
import com.squirtles.musicroad.pick.components.music.MusicPlayer
6771
import com.squirtles.musicroad.pick.components.music.visualizer.BaseVisualizer
6872
import com.squirtles.musicroad.ui.theme.Black
73+
import com.squirtles.musicroad.ui.theme.Primary
6974
import com.squirtles.musicroad.ui.theme.White
7075
import com.squirtles.musicroad.videoplayer.MusicVideoScreen
7176
import kotlinx.coroutines.launch
@@ -272,14 +277,32 @@ fun DetailPickScreen(
272277
}
273278

274279
if (showDeletePickDialog) {
275-
DeletePickDialog(
280+
MessageAlertDialog(
276281
onDismissRequest = {
277282
showDeletePickDialog = false
278283
},
279-
onDeletion = {
280-
showDeletePickDialog = false
281-
pickViewModel.deletePick(pickId)
282-
}
284+
title = stringResource(R.string.delete_pick_dialog_title),
285+
body = stringResource(R.string.delete_pick_dialog_body),
286+
buttons = {
287+
DialogTextButton(
288+
onClick = {
289+
showDeletePickDialog = false
290+
},
291+
text = stringResource(R.string.delete_pick_dialog_cancel)
292+
)
293+
294+
HorizontalSpacer(8)
295+
296+
DialogTextButton(
297+
onClick = {
298+
showDeletePickDialog = false
299+
pickViewModel.deletePick(pickId)
300+
},
301+
text = stringResource(R.string.delete_pick_dialog_delete),
302+
textColor = Primary,
303+
fontWeight = FontWeight.Bold
304+
)
305+
},
283306
)
284307
}
285308

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.squirtles.musicroad.picklist
2+
3+
import androidx.compose.runtime.Composable
4+
import androidx.compose.ui.res.stringResource
5+
import androidx.compose.ui.text.font.FontWeight
6+
import com.squirtles.musicroad.R
7+
import com.squirtles.musicroad.common.DialogTextButton
8+
import com.squirtles.musicroad.common.HorizontalSpacer
9+
import com.squirtles.musicroad.common.MessageAlertDialog
10+
import com.squirtles.musicroad.ui.theme.Primary
11+
12+
@Composable
13+
internal fun DeleteSelectedPickDialog(
14+
selectedPickCount: Int,
15+
pickListType: PickListType,
16+
onDismissRequest: () -> Unit,
17+
onDeletePickClick: () -> Unit,
18+
) {
19+
MessageAlertDialog(
20+
onDismissRequest = onDismissRequest,
21+
title = stringResource(R.string.delete_pick_dialog_title),
22+
body = stringResource(
23+
when (pickListType) {
24+
PickListType.FAVORITE -> R.string.delete_selected_favorite_pick_dialog_body
25+
PickListType.CREATED -> R.string.delete_selected_pick_dialog_body
26+
},
27+
selectedPickCount
28+
),
29+
buttons = {
30+
DialogTextButton(
31+
onClick = onDismissRequest,
32+
text = stringResource(R.string.delete_pick_dialog_cancel)
33+
)
34+
35+
HorizontalSpacer(8)
36+
37+
DialogTextButton(
38+
onClick = onDeletePickClick,
39+
text = stringResource(R.string.delete_pick_dialog_delete),
40+
textColor = Primary,
41+
fontWeight = FontWeight.Bold
42+
)
43+
},
44+
)
45+
}

0 commit comments

Comments
 (0)