Skip to content

Commit 06a3cde

Browse files
authored
Merge branch 'develop' into api/#62-api_setting
2 parents 870b7cc + 8e94fca commit 06a3cde

29 files changed

Lines changed: 1009 additions & 207 deletions

app/src/main/java/com/texthip/thip/data/group/repository/GroupRepository.kt

Lines changed: 324 additions & 0 deletions
Large diffs are not rendered by default.

app/src/main/java/com/texthip/thip/ui/common/alarmpage/screen/AlarmScreen.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.texthip.thip.ui.common.alarmpage.screen
22

3-
import androidx.compose.foundation.background
43
import androidx.compose.foundation.layout.Arrangement
54
import androidx.compose.foundation.layout.Column
65
import androidx.compose.foundation.layout.PaddingValues
@@ -10,7 +9,6 @@ import androidx.compose.foundation.layout.height
109
import androidx.compose.foundation.layout.padding
1110
import androidx.compose.foundation.lazy.LazyColumn
1211
import androidx.compose.foundation.lazy.items
13-
import androidx.compose.material3.Icon
1412
import androidx.compose.material3.Text
1513
import androidx.compose.runtime.Composable
1614
import androidx.compose.runtime.getValue
@@ -19,7 +17,6 @@ import androidx.compose.runtime.remember
1917
import androidx.compose.runtime.setValue
2018
import androidx.compose.ui.Alignment
2119
import androidx.compose.ui.Modifier
22-
import androidx.compose.ui.res.painterResource
2320
import androidx.compose.ui.res.stringResource
2421
import androidx.compose.ui.tooling.preview.Preview
2522
import androidx.compose.ui.unit.dp
@@ -34,7 +31,9 @@ import com.texthip.thip.ui.theme.ThipTheme.typography
3431

3532
@Composable
3633
fun AlarmScreen(
37-
alarmItems: List<AlarmItem>, onCardClick: (AlarmItem) -> Unit = {}
34+
alarmItems: List<AlarmItem>,
35+
onCardClick: (AlarmItem) -> Unit = {}, // 나중에 서버랑 연동할 때 사용
36+
onNavigateBack: () -> Unit = {}
3837
) {
3938
var selectedStates by remember { mutableStateOf(booleanArrayOf(false, false)) }
4039
var alarms by remember { mutableStateOf(alarmItems) }
@@ -51,7 +50,7 @@ fun AlarmScreen(
5150
) {
5251
DefaultTopAppBar(
5352
title = stringResource(R.string.alarm_string),
54-
onLeftClick = {},
53+
onLeftClick = onNavigateBack,
5554
)
5655
Column(
5756
Modifier
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package com.texthip.thip.ui.common.alarmpage.viewmodel
2+
3+
import androidx.lifecycle.ViewModel
4+
import com.texthip.thip.ui.common.alarmpage.mock.AlarmItem
5+
import kotlinx.coroutines.flow.MutableStateFlow
6+
import kotlinx.coroutines.flow.StateFlow
7+
import kotlinx.coroutines.flow.asStateFlow
8+
9+
class AlarmViewModel : ViewModel() {
10+
private val _alarmItems = MutableStateFlow<List<AlarmItem>>(emptyList())
11+
val alarmItems: StateFlow<List<AlarmItem>> = _alarmItems.asStateFlow()
12+
13+
// 알림 더미 데이터
14+
init {
15+
_alarmItems.value = listOf(
16+
AlarmItem(1, "피드", "내 글을 좋아합니다.", "user123님이 내 글에 좋아요를 눌렀어요.", "2시간 전", false),
17+
AlarmItem(2, "모임", "같이 읽기를 시작했어요!", "모임방에서 20분 동안 같이 읽기가 시작되었어요!", "7시간 전", false),
18+
AlarmItem(3, "피드", "내 글에 댓글이 달렸어요.", "user1: 진짜 공감합니다!", "2025.01.12", true),
19+
AlarmItem(4, "모임", "투표가 시작되었어요!", "투표지를 먼저 열람합니다.", "17시간 전", false),
20+
AlarmItem(5, "피드", "팔로워가 새 글을 올렸어요.", "user456님이 새 리뷰를 작성했습니다.", "1일 전", true),
21+
AlarmItem(6, "모임", "새로운 모임방 초대", "호르몬 체인지 완독하는 방에 초대되었습니다.", "2일 전", false)
22+
)
23+
}
24+
25+
fun onCardClick(item: AlarmItem) {
26+
// TODO: 알림 카드 클릭 처리
27+
}
28+
}

app/src/main/java/com/texthip/thip/ui/common/forms/SearchBookTextField.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ fun SearchBookTextField(
5353
.fillMaxWidth()
5454
.height(40.dp)
5555
.clip(shape)
56-
.background(colors.DarkGrey02),
56+
.background(colors.DarkGrey),
5757
contentAlignment = Alignment.CenterStart
5858
) {
5959
Row(

app/src/main/java/com/texthip/thip/ui/group/myroom/component/GroupDeadlineRoomSection.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,7 @@ fun PreviewGroupRoomPagerSection() {
189189
// 마감 임박한 독서 모임방
190190
val deadlineRooms = listOf(
191191
GroupCardItemRoomData(
192+
id = 1,
192193
title = "시집만 읽는 사람들 3월",
193194
participants = 22,
194195
maxParticipants = 30,
@@ -197,6 +198,7 @@ fun PreviewGroupRoomPagerSection() {
197198
genreIndex = 0
198199
),
199200
GroupCardItemRoomData(
201+
id = 2,
200202
title = "일본 소설 좋아하는 사람들",
201203
participants = 15,
202204
maxParticipants = 20,
@@ -205,6 +207,7 @@ fun PreviewGroupRoomPagerSection() {
205207
genreIndex = 0
206208
),
207209
GroupCardItemRoomData(
210+
id = 3,
208211
title = "명작 같이 읽기방",
209212
participants = 22,
210213
maxParticipants = 30,
@@ -213,6 +216,7 @@ fun PreviewGroupRoomPagerSection() {
213216
genreIndex = 0
214217
),
215218
GroupCardItemRoomData(
219+
id = 4,
216220
title = "명작 같이 읽기방",
217221
participants = 22,
218222
maxParticipants = 30,
@@ -221,6 +225,7 @@ fun PreviewGroupRoomPagerSection() {
221225
genreIndex = 0
222226
),
223227
GroupCardItemRoomData(
228+
id = 5,
224229
title = "물리책 읽는 방",
225230
participants = 13,
226231
maxParticipants = 20,
@@ -233,6 +238,7 @@ fun PreviewGroupRoomPagerSection() {
233238
// 인기 있는 독서 모임방
234239
val popularRooms = listOf(
235240
GroupCardItemRoomData(
241+
id = 6,
236242
title = "베스트셀러 토론방",
237243
participants = 28,
238244
maxParticipants = 30,
@@ -241,6 +247,7 @@ fun PreviewGroupRoomPagerSection() {
241247
genreIndex = 0
242248
),
243249
GroupCardItemRoomData(
250+
id = 7,
244251
title = "인기 소설 완독방",
245252
participants = 25,
246253
maxParticipants = 25,
@@ -249,6 +256,7 @@ fun PreviewGroupRoomPagerSection() {
249256
genreIndex = 0
250257
),
251258
GroupCardItemRoomData(
259+
id = 8,
252260
title = "트렌드 과학서 읽기",
253261
participants = 20,
254262
maxParticipants = 25,
@@ -261,6 +269,7 @@ fun PreviewGroupRoomPagerSection() {
261269
// 인플루언서, 작가 독서 모임방
262270
val influencerRooms = listOf(
263271
GroupCardItemRoomData(
272+
id = 9,
264273
title = "작가와 함께하는 독서방",
265274
participants = 30,
266275
maxParticipants = 30,
@@ -269,6 +278,7 @@ fun PreviewGroupRoomPagerSection() {
269278
genreIndex = 0
270279
),
271280
GroupCardItemRoomData(
281+
id = 10,
272282
title = "유명 북튜버와 읽기",
273283
participants = 18,
274284
maxParticipants = 20,
@@ -277,6 +287,7 @@ fun PreviewGroupRoomPagerSection() {
277287
genreIndex = 2
278288
),
279289
GroupCardItemRoomData(
290+
id = 11,
280291
title = "작가 초청 인문학방",
281292
participants = 15,
282293
maxParticipants = 20,
@@ -320,6 +331,7 @@ fun PreviewGroupRoomPagerSectionEmptyGenre() {
320331
// 특정 장르에만 데이터가 있는 경우 (문학 장르만 데이터 존재)
321332
val deadlineRooms = listOf(
322333
GroupCardItemRoomData(
334+
id = 12,
323335
title = "시집만 읽는 사람들 3월",
324336
participants = 22,
325337
maxParticipants = 30,
Lines changed: 17 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,20 @@
11
package com.texthip.thip.ui.group.myroom.component
22

33
import androidx.compose.foundation.background
4+
import androidx.compose.foundation.clickable
45
import androidx.compose.foundation.layout.Box
56
import androidx.compose.foundation.layout.Row
67
import androidx.compose.foundation.layout.fillMaxSize
78
import androidx.compose.foundation.layout.fillMaxWidth
89
import androidx.compose.foundation.layout.height
910
import androidx.compose.foundation.layout.padding
1011
import androidx.compose.foundation.shape.RoundedCornerShape
11-
import androidx.compose.foundation.text.BasicTextField
1212
import androidx.compose.material3.Icon
1313
import androidx.compose.material3.Text
1414
import androidx.compose.runtime.Composable
15-
import androidx.compose.runtime.getValue
16-
import androidx.compose.runtime.mutableStateOf
17-
import androidx.compose.runtime.remember
18-
import androidx.compose.runtime.setValue
1915
import androidx.compose.ui.Alignment
2016
import androidx.compose.ui.Modifier
2117
import androidx.compose.ui.draw.clip
22-
import androidx.compose.ui.graphics.SolidColor
2318
import androidx.compose.ui.res.painterResource
2419
import androidx.compose.ui.res.stringResource
2520
import androidx.compose.ui.tooling.preview.Preview
@@ -32,63 +27,41 @@ import com.texthip.thip.ui.theme.ThipTheme.typography
3227
@Composable
3328
fun GroupSearchTextField(
3429
modifier: Modifier = Modifier,
35-
value: String,
3630
placeholder: String = stringResource(R.string.group_search_placeholder),
37-
onValueChange: (String) -> Unit,
38-
onClick: (() -> Unit)? = null
31+
onClick: () -> Unit
3932
) {
40-
val textStyle = typography.menu_r400_s14_h24.copy(
41-
lineHeight = 16.sp,
42-
color = colors.White
43-
)
4433
val shape = RoundedCornerShape(12.dp)
4534
val backgroundColor = colors.DarkGrey
46-
val cursorColor = colors.NeonGreen
4735

4836
Box(
4937
modifier
5038
.padding(horizontal = 20.dp)
5139
.fillMaxWidth()
5240
.height(40.dp)
5341
.clip(shape)
54-
.background(backgroundColor),
42+
.background(backgroundColor)
43+
.clickable { onClick() },
5544
contentAlignment = Alignment.CenterStart
5645
) {
5746
Row(
5847
verticalAlignment = Alignment.CenterVertically,
59-
modifier = Modifier.fillMaxSize()
48+
modifier = Modifier
49+
.fillMaxSize()
50+
.padding(horizontal = 12.dp)
6051
) {
61-
BasicTextField(
62-
value = value,
63-
onValueChange = onValueChange,
64-
singleLine = true,
65-
textStyle = textStyle,
66-
cursorBrush = SolidColor(cursorColor),
67-
modifier = Modifier
68-
.weight(1f)
69-
.padding(start = 12.dp, end = 8.dp),
70-
decorationBox = { innerTextField ->
71-
Box(contentAlignment = Alignment.CenterStart) {
72-
if (value.isEmpty()) {
73-
Text(
74-
text = placeholder,
75-
color = colors.Grey02,
76-
style = typography.menu_r400_s14_h24.copy(
77-
fontSize = 14.sp,
78-
lineHeight = 16.sp
79-
)
80-
)
81-
}
82-
innerTextField()
83-
}
84-
}
52+
Text(
53+
text = placeholder,
54+
color = colors.Grey02,
55+
style = typography.menu_r400_s14_h24.copy(
56+
fontSize = 14.sp,
57+
lineHeight = 16.sp
58+
),
59+
modifier = Modifier.weight(1f)
8560
)
8661
Icon(
8762
painter = painterResource(id = R.drawable.ic_search),
8863
contentDescription = "검색",
89-
tint = colors.White,
90-
modifier = Modifier
91-
.padding(end = 12.dp)
64+
tint = colors.White
9265
)
9366
}
9467
}
@@ -97,9 +70,7 @@ fun GroupSearchTextField(
9770
@Preview(showBackground = true, backgroundColor = 0xFF000000, widthDp = 360)
9871
@Composable
9972
fun PreviewGroupSearchTextField() {
100-
var value by remember { mutableStateOf("") }
10173
GroupSearchTextField(
102-
value = value,
103-
onValueChange = { value = it }
74+
onClick = { }
10475
)
10576
}

app/src/main/java/com/texthip/thip/ui/group/myroom/mock/GroupCardData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.texthip.thip.ui.group.myroom.mock
33
import com.texthip.thip.R
44

55
data class GroupCardData(
6+
val id: Int = 0, // 모임방 ID 추가
67
val title: String,
78
val members: Int,
89
val imageRes: Int = R.drawable.bookcover_sample,

app/src/main/java/com/texthip/thip/ui/group/myroom/mock/GroupCardItemRoomData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.texthip.thip.ui.group.myroom.mock
33
import com.texthip.thip.R
44

55
data class GroupCardItemRoomData(
6+
val id: Int,
67
val title: String,
78
val participants: Int,
89
val maxParticipants: Int,

app/src/main/java/com/texthip/thip/ui/group/myroom/mock/GroupRoomData.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.texthip.thip.ui.group.myroom.mock
22

33
data class GroupRoomData(
4+
val id: Int,
45
val title: String,
56
val isSecret: Boolean,
67
val description: String,

0 commit comments

Comments
 (0)