Skip to content

Commit 12d89cc

Browse files
authored
๐Ÿ”€ #80 from boostcampwm-2022/fix/composeDialog
์ปดํฌ์ฆˆ๋กœ ๋งŒ๋“  RulePicker ๋ ˆ์ด์•„์›ƒ ๋ณ€๊ฒฝ
2 parents 71768c2 + 7290e23 commit 12d89cc

File tree

4 files changed

+193
-43
lines changed

4 files changed

+193
-43
lines changed

โ€Ždomain/src/main/java/com/whyranoid/domain/model/Rule.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ data class Rule(
66
val minute: Int
77
) {
88
override fun toString(): String {
9-
return "${dayOfWeek.dayResId}-$hour-$minute"
9+
return "${dayOfWeek.dayResId}์š”์ผ${hour}์‹œ${minute}๋ถ„"
1010
}
1111
}
1212

โ€Žpresentation/src/main/java/com/whyranoid/presentation/compose/DropDownMenu.kt

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
package com.whyranoid.presentation.compose
22

3-
import androidx.compose.foundation.layout.wrapContentSize
3+
import androidx.compose.foundation.layout.height
4+
import androidx.compose.foundation.layout.wrapContentHeight
5+
import androidx.compose.foundation.layout.wrapContentWidth
6+
import androidx.compose.foundation.shape.RoundedCornerShape
47
import androidx.compose.material.Button
8+
import androidx.compose.material.ButtonDefaults
59
import androidx.compose.material.DropdownMenu
610
import androidx.compose.material.DropdownMenuItem
711
import androidx.compose.material.Text
@@ -11,23 +15,40 @@ import androidx.compose.runtime.mutableStateOf
1115
import androidx.compose.runtime.remember
1216
import androidx.compose.runtime.setValue
1317
import androidx.compose.ui.Modifier
18+
import androidx.compose.ui.res.colorResource
19+
import androidx.compose.ui.res.stringArrayResource
20+
import androidx.compose.ui.res.stringResource
21+
import androidx.compose.ui.unit.dp
22+
import com.whyranoid.presentation.R
1423

1524
@Composable
1625
fun DateDropDownMenu(
1726
selectedDate: String,
1827
onDateSelected: (String) -> Unit
1928
) {
20-
val dateList = "์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ†  ์ผ".split(" ").toList()
29+
val dateText = stringResource(id = R.string.text_date)
30+
val dateList = stringArrayResource(id = R.array.rule_date_array)
2131
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
2232
Button(
23-
onClick = { isDropDownMenuExpanded = true }
33+
onClick = { isDropDownMenuExpanded = true },
34+
colors = ButtonDefaults
35+
.outlinedButtonColors(
36+
contentColor = colorResource(id = R.color.mogakrun_on_primary)
37+
),
38+
shape = RoundedCornerShape(30),
39+
elevation = ButtonDefaults.elevation(
40+
defaultElevation = 2.dp,
41+
pressedElevation = 4.dp,
42+
disabledElevation = 0.dp
43+
)
2444
) {
25-
Text(text = selectedDate)
45+
Text(text = selectedDate + dateText)
2646
}
2747

2848
DropdownMenu(
2949
modifier = Modifier
30-
.wrapContentSize(),
50+
.wrapContentWidth()
51+
.wrapContentHeight(),
3152
expanded = isDropDownMenuExpanded,
3253
onDismissRequest = { isDropDownMenuExpanded = false }
3354
) {
@@ -36,7 +57,7 @@ fun DateDropDownMenu(
3657
onDateSelected(date)
3758
isDropDownMenuExpanded = false
3859
}) {
39-
Text(text = date)
60+
Text(text = date + dateText)
4061
}
4162
}
4263
}
@@ -47,18 +68,29 @@ fun HourDropDownMenu(
4768
selectedHour: String,
4869
onHourSelected: (String) -> Unit
4970
) {
50-
val hourList =
51-
"0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23".split(" ").toList()
71+
val hourText = stringResource(id = R.string.text_hour)
72+
val hourList = stringArrayResource(id = R.array.rule_hour_array)
5273
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
5374
Button(
54-
onClick = { isDropDownMenuExpanded = true }
75+
onClick = { isDropDownMenuExpanded = true },
76+
colors = ButtonDefaults
77+
.outlinedButtonColors(
78+
contentColor = colorResource(id = R.color.mogakrun_on_primary)
79+
),
80+
shape = RoundedCornerShape(30),
81+
elevation = ButtonDefaults.elevation(
82+
defaultElevation = 2.dp,
83+
pressedElevation = 4.dp,
84+
disabledElevation = 0.dp
85+
)
5586
) {
56-
Text(text = selectedHour)
87+
Text(text = selectedHour + hourText)
5788
}
5889

5990
DropdownMenu(
6091
modifier = Modifier
61-
.wrapContentSize(),
92+
.wrapContentWidth()
93+
.height(500.dp),
6294
expanded = isDropDownMenuExpanded,
6395
onDismissRequest = { isDropDownMenuExpanded = false }
6496
) {
@@ -67,7 +99,7 @@ fun HourDropDownMenu(
6799
onHourSelected(hour)
68100
isDropDownMenuExpanded = false
69101
}) {
70-
Text(text = hour)
102+
Text(text = hour + hourText)
71103
}
72104
}
73105
}
@@ -78,19 +110,30 @@ fun MinuteDropDownMenu(
78110
selectedMinute: String,
79111
onMinuteSelected: (String) -> Unit
80112
) {
81-
val minuteList =
82-
"0 5 10 15 20 25 30 35 40 45 50 55 60".split(" ").toList()
113+
val minuteText = stringResource(id = R.string.text_minute)
114+
val minuteList = stringArrayResource(id = R.array.rule_minute_array)
83115
var isDropDownMenuExpanded by remember { mutableStateOf(false) }
84116

85117
Button(
86-
onClick = { isDropDownMenuExpanded = true }
118+
onClick = { isDropDownMenuExpanded = true },
119+
colors = ButtonDefaults
120+
.outlinedButtonColors(
121+
contentColor = colorResource(id = R.color.mogakrun_on_primary)
122+
),
123+
shape = RoundedCornerShape(30),
124+
elevation = ButtonDefaults.elevation(
125+
defaultElevation = 2.dp,
126+
pressedElevation = 4.dp,
127+
disabledElevation = 0.dp
128+
)
87129
) {
88-
Text(text = selectedMinute)
130+
Text(text = selectedMinute + minuteText)
89131
}
90132

91133
DropdownMenu(
92134
modifier = Modifier
93-
.wrapContentSize(),
135+
.wrapContentWidth()
136+
.height(500.dp),
94137
expanded = isDropDownMenuExpanded,
95138
onDismissRequest = { isDropDownMenuExpanded = false }
96139
) {
@@ -99,7 +142,7 @@ fun MinuteDropDownMenu(
99142
onMinuteSelected(minute)
100143
isDropDownMenuExpanded = false
101144
}) {
102-
Text(text = minute)
145+
Text(text = minute + minuteText)
103146
}
104147
}
105148
}
Lines changed: 66 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package com.whyranoid.presentation.compose
22

3+
import androidx.compose.foundation.layout.Arrangement
34
import androidx.compose.foundation.layout.Column
5+
import androidx.compose.foundation.layout.Row
46
import androidx.compose.foundation.layout.Spacer
7+
import androidx.compose.foundation.layout.fillMaxWidth
58
import androidx.compose.foundation.layout.padding
9+
import androidx.compose.foundation.shape.RoundedCornerShape
610
import androidx.compose.material.AlertDialog
711
import androidx.compose.material.Text
812
import androidx.compose.material.TextButton
@@ -11,65 +15,104 @@ import androidx.compose.runtime.getValue
1115
import androidx.compose.runtime.mutableStateOf
1216
import androidx.compose.runtime.remember
1317
import androidx.compose.runtime.setValue
18+
import androidx.compose.ui.Alignment
1419
import androidx.compose.ui.Modifier
20+
import androidx.compose.ui.res.colorResource
21+
import androidx.compose.ui.res.stringResource
22+
import androidx.compose.ui.text.font.FontWeight.Companion.Bold
1523
import androidx.compose.ui.unit.dp
24+
import androidx.compose.ui.unit.sp
25+
import com.whyranoid.presentation.R
1626
import com.whyranoid.presentation.community.group.create.CreateGroupViewModel
1727

1828
@Composable
1929
fun RulePicker(
2030
declarationDialogState: Boolean,
2131
viewModel: CreateGroupViewModel
2232
) {
23-
var selectedDate by remember { mutableStateOf("์š”์ผ") }
24-
var selectedHour by remember { mutableStateOf("์‹œ๊ฐ„") }
25-
var selectedMinute by remember { mutableStateOf("๋ถ„") }
33+
val emptyText = stringResource(id = R.string.text_empty)
34+
val confirmText = stringResource(id = R.string.text_confirm)
35+
val cancelText = stringResource(id = R.string.text_cancel)
36+
val dialogTitleText = stringResource(id = R.string.text_rule_picker_title)
37+
38+
var selectedDate by remember { mutableStateOf(emptyText) }
39+
var selectedHour by remember { mutableStateOf(emptyText) }
40+
var selectedMinute by remember { mutableStateOf(emptyText) }
41+
2642
if (declarationDialogState) {
2743
AlertDialog(
2844
onDismissRequest = {
2945
viewModel.onDialogDismiss()
3046
},
3147
title = {
32-
Text(text = "์š”์ผ ๋ฐ ์‹œ๊ฐ„์„ ๊ณจ๋ผ์ฃผ์„ธ์š”!!")
3348
},
3449
text = {
35-
Column {
36-
DateDropDownMenu(selectedDate) { date ->
37-
selectedDate = date
38-
}
39-
Spacer(modifier = Modifier.padding(bottom = 10.dp))
40-
HourDropDownMenu(selectedHour) { hour ->
41-
selectedHour = hour
42-
}
50+
Column(
51+
modifier = Modifier
52+
.fillMaxWidth()
53+
.padding(8.dp),
54+
horizontalAlignment = Alignment.CenterHorizontally
55+
) {
56+
Text(
57+
text = dialogTitleText,
58+
color = colorResource(id = R.color.mogakrun_onBackground),
59+
fontWeight = Bold,
60+
fontSize = 20.sp
61+
)
4362
Spacer(modifier = Modifier.padding(bottom = 10.dp))
44-
MinuteDropDownMenu(selectedMinute) { minute ->
45-
selectedMinute = minute
63+
Row(
64+
modifier = Modifier
65+
.fillMaxWidth(),
66+
horizontalArrangement = Arrangement.SpaceBetween,
67+
verticalAlignment = Alignment.CenterVertically
68+
69+
) {
70+
DateDropDownMenu(selectedDate) { date ->
71+
selectedDate = date
72+
}
73+
HourDropDownMenu(selectedHour) { hour ->
74+
selectedHour = hour
75+
}
76+
MinuteDropDownMenu(selectedMinute) { minute ->
77+
selectedMinute = minute
78+
}
4679
}
4780
}
4881
},
4982
confirmButton = {
5083
TextButton(
5184
onClick = {
5285
viewModel.onDialogConfirm(selectedDate, selectedHour, selectedMinute)
53-
selectedDate = "์š”์ผ"
54-
selectedHour = "์‹œ๊ฐ„"
55-
selectedMinute = "๋ถ„"
86+
selectedDate = emptyText
87+
selectedHour = emptyText
88+
selectedMinute = emptyText
5689
}
5790
) {
58-
Text("ํ™•์ธ")
91+
Text(
92+
text = confirmText,
93+
color = colorResource(id = R.color.mogakrun_on_primary)
94+
)
5995
}
6096
},
6197
dismissButton = {
6298
TextButton(
6399
onClick = {
64100
viewModel.onDialogDismiss()
65-
selectedDate = "์š”์ผ"
66-
selectedHour = "์‹œ๊ฐ„"
67-
selectedMinute = "๋ถ„"
101+
selectedDate = emptyText
102+
selectedHour = emptyText
103+
selectedMinute = emptyText
68104
}
105+
69106
) {
70-
Text("์ทจ์†Œ")
107+
Text(
108+
text = cancelText,
109+
color = colorResource(id = R.color.mogakrun_on_primary)
110+
)
71111
}
72-
}
112+
},
113+
backgroundColor = colorResource(id = R.color.mogakrun_background),
114+
contentColor = colorResource(id = R.color.mogakrun_on_primary),
115+
shape = RoundedCornerShape(10)
73116
)
74117
}
75118
}

โ€Žpresentation/src/main/res/values/strings.xml

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
<string name="app_name">MoGakRun</string>
44

5+
<string name="text_empty" />
6+
57
<!-- ๋ฐ”ํ…€๋„ค๋น„๊ฒŒ์ด์…˜ -->
68
<string name="bottom_navigation_menu_community">์ปค๋ฎค๋‹ˆํ‹ฐ</string>
79
<string name="bottom_navigation_menu_running">๋Ÿฌ๋‹</string>
@@ -115,7 +117,7 @@
115117
<string name="running_map_location_button">๐ŸŽฏ</string>
116118
<string name="running_start_progress_description">๋Ÿฌ๋‹ ์‹œ์ž‘์„ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ์–ด์š”</string>
117119

118-
<!--๋ผ๋‹ ์ข…๋ฃŒ ํ™”๋ฉด-->
120+
<!-- ๋Ÿฌ๋‹ ์ข…๋ฃŒ ํ™”๋ฉด -->
119121
<string name="running_finish_tool_bar">๋Ÿฌ๋‹ ์ข…๋ฃŒ</string>
120122
<string name="running_finish_positive_btn">์ž๋ž‘ํ• ๋ž˜์š”</string>
121123
<string name="running_finish_negative_btn">๊ดœ์ฐฎ์•„์š”</string>
@@ -124,4 +126,66 @@
124126
<string name="running_finish_snackbar_action">์ข…๋ฃŒํ•˜๊ธฐ</string>
125127
<string name="running_start_error_message">๋Ÿฌ๋‹ ๋„์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ์–ด์š”! ์ฃ„์†กํ•ด์š”..</string>
126128

129+
<!-- ๊ทœ์น™ ์ƒ์„ฑ ์‹œ ์š”์ผ -->
130+
<string-array name="rule_date_array">
131+
<item>์›”</item>
132+
<item>ํ™”</item>
133+
<item>์ˆ˜</item>
134+
<item>๋ชฉ</item>
135+
<item>๊ธˆ</item>
136+
<item>ํ† </item>
137+
<item>์ผ</item>
138+
</string-array>
139+
140+
<!-- ๊ทœ์น™ ์ƒ์„ฑ ์‹œ ์‹œ๊ฐ„ -->
141+
<string-array name="rule_hour_array">
142+
<item>0</item>
143+
<item>1</item>
144+
<item>2</item>
145+
<item>3</item>
146+
<item>4</item>
147+
<item>5</item>
148+
<item>6</item>
149+
<item>7</item>
150+
<item>8</item>
151+
<item>9</item>
152+
<item>10</item>
153+
<item>11</item>
154+
<item>12</item>
155+
<item>13</item>
156+
<item>14</item>
157+
<item>15</item>
158+
<item>16</item>
159+
<item>17</item>
160+
<item>18</item>
161+
<item>19</item>
162+
<item>20</item>
163+
<item>21</item>
164+
<item>22</item>
165+
<item>23</item>
166+
</string-array>
167+
168+
<!-- ๊ทœ์น™ ์ƒ์„ฑ ์‹œ ๋ถ„ -->
169+
<string-array name="rule_minute_array">
170+
<item>0</item>
171+
<item>5</item>
172+
<item>10</item>
173+
<item>15</item>
174+
<item>20</item>
175+
<item>25</item>
176+
<item>30</item>
177+
<item>35</item>
178+
<item>40</item>
179+
<item>45</item>
180+
<item>50</item>
181+
<item>55</item>
182+
</string-array>
183+
184+
<!-- ๊ทœ์น™ ์ƒ์„ฑ ๋‹ค์ด์–ด๋กœ๊ทธ-->
185+
<string name="text_date">์š”์ผ</string>
186+
<string name="text_hour">์‹œ</string>
187+
<string name="text_minute">๋ถ„</string>
188+
<string name="text_confirm">ํ™•์ธ</string>
189+
<string name="text_rule_picker_title">์š”์ผ ๋ฐ ์‹œ๊ฐ„์„ ๊ณจ๋ผ์ฃผ์„ธ์š”!!</string>
190+
127191
</resources>

0 commit comments

Comments
ย (0)