Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
1bf3bcd
[feat]: 알람 페이지 네비게이션, 루트 추가 (#58)
rbqks529 Jul 27, 2025
7f111d2
[ui]: 검색 필드 터치만 되게 수정 (#58)
rbqks529 Jul 27, 2025
ae33e8c
[feat]: 네비게이션 루트, 함수 추가 및 그룹 스크린과 연결 (#58)
rbqks529 Jul 27, 2025
0c901f7
[feat]: 네비게이션 루트, 함수 추가 및 그룹 스크린과 연결 (#58)
rbqks529 Jul 27, 2025
df1f63a
[feat]: 알람 화면, 완료 화면, 내 모임방 화면, 모임방 검색 화면 연결 및 뒤로 가기 연결 (#58)
rbqks529 Jul 27, 2025
37ae32e
[feat]: SharedPreferences를 사용하도록 검색 화면을 수정 (#58)
rbqks529 Jul 27, 2025
0347327
[feat]: 그룹과 알람화면에서 뷰모델에서 임시 데이터를 가져오도록 수정 (#58)
rbqks529 Jul 27, 2025
068127b
[feat]: 모임방 데이터에 id(Int) 추가 및 id로 방 조회 (#58)
rbqks529 Jul 27, 2025
c942996
[feat]: 네비게이션 루트 추가 및 연결 (#58)
rbqks529 Jul 27, 2025
b4b892e
[feat]: 모임방 이동 네비게이션 연결 완료 (#58)
rbqks529 Jul 27, 2025
a762ba0
[feat]: 완료된 모임방은 이동 안하게 수정 (#58)
rbqks529 Jul 27, 2025
c1637c0
[feat]: 내 모임방 Pager 카드를 터치했을 때 모임방으로 이동하게 수정 완료 (#58)
rbqks529 Jul 27, 2025
e0055e9
[feat]: 검색 화면에서 최근 검색어를 JSON으로 저장하게 수정 완료 (#58)
rbqks529 Jul 27, 2025
27a0700
[feat]: 기타 주석 및 경고 수정 (#58)
rbqks529 Jul 28, 2025
8e0c89c
[feat]: 공통 viewModel을 사용하도록 수정 (#58)
rbqks529 Jul 28, 2025
c34460d
[feat]: 안쓰는 함수 삭제 (#58)
rbqks529 Jul 28, 2025
7e40247
[chore]: 주석 추가 (#58)
rbqks529 Jul 28, 2025
4dfc776
[feat]: viewModel + 레포지토리 패턴으로 수정 (#58)
rbqks529 Jul 28, 2025
200855f
[refactor]: copilot pr 반영 (#58)
rbqks529 Jul 28, 2025
b9ce376
[refactor]: 메인 루트 확인 다시 추가 (#58)
rbqks529 Jul 28, 2025
4bc716e
[refactor]: 오류 수정 및 모임 방 추천 더미데이터 추가 (#58)
rbqks529 Jul 28, 2025
bba7b90
[feat]: 추천 모임방 이동 로직 구현 (#58)
rbqks529 Jul 28, 2025
c5ef4c5
[refactor]: toml 버전 수정 (#58)
rbqks529 Jul 29, 2025
4e6c78a
[feat]: 함수 이름 수정 및 그룹 방으로 이동하는 함수를 viewModel에서 제거 (#58)
rbqks529 Jul 31, 2025
05f807f
[feat]: 함수 반영 (#58)
rbqks529 Jul 31, 2025
9df2d00
[feat]: 함수 반영 및 navigateBack함수 삭제 (#58)
rbqks529 Jul 31, 2025
7de4677
[feat]: 공통 로직은 주입하는 방법으로 구현 (#58)
rbqks529 Jul 31, 2025
74e36da
[feat]: 파일 구조 변경 (#58)
rbqks529 Aug 1, 2025
1f0aa1f
[feat]: GroupRepository 인터페이스 삭제 (#58)
rbqks529 Aug 1, 2025
5f0d688
[feat]: GroupRepository 인터페이스 삭제 (#58)
rbqks529 Aug 1, 2025
56d99d2
[feat]: Hilt 의존성 추가 (#58)
rbqks529 Aug 1, 2025
7dc33b1
[feat]: Hilt 의존성 삭제 (#58)
rbqks529 Aug 3, 2025
102fb9d
Merge branch 'develop' into feat/#58_group_navigation
Nico1eKim Aug 4, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.texthip.thip.ui.common.alarmpage.screen

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
Expand All @@ -10,7 +9,6 @@ import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
Expand All @@ -19,7 +17,6 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
Expand All @@ -34,7 +31,9 @@ import com.texthip.thip.ui.theme.ThipTheme.typography

@Composable
fun AlarmScreen(
alarmItems: List<AlarmItem>, onCardClick: (AlarmItem) -> Unit = {}
alarmItems: List<AlarmItem>,
onCardClick: (AlarmItem) -> Unit = {}, // 나중에 서버랑 연동할 때 사용
onNavigateBack: () -> Unit = {}
) {
var selectedStates by remember { mutableStateOf(booleanArrayOf(false, false)) }
var alarms by remember { mutableStateOf(alarmItems) }
Expand All @@ -51,7 +50,7 @@ fun AlarmScreen(
) {
DefaultTopAppBar(
title = stringResource(R.string.alarm_string),
onLeftClick = {},
onLeftClick = onNavigateBack,
)
Column(
Modifier
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.texthip.thip.ui.common.alarmpage.viewmodel

import androidx.lifecycle.ViewModel
import com.texthip.thip.ui.common.alarmpage.mock.AlarmItem
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow

class AlarmViewModel : ViewModel() {
private val _alarmItems = MutableStateFlow<List<AlarmItem>>(emptyList())
val alarmItems: StateFlow<List<AlarmItem>> = _alarmItems.asStateFlow()

// 알림 더미 데이터
init {
_alarmItems.value = listOf(
AlarmItem(1, "피드", "내 글을 좋아합니다.", "user123님이 내 글에 좋아요를 눌렀어요.", "2시간 전", false),
AlarmItem(2, "모임", "같이 읽기를 시작했어요!", "모임방에서 20분 동안 같이 읽기가 시작되었어요!", "7시간 전", false),
AlarmItem(3, "피드", "내 글에 댓글이 달렸어요.", "user1: 진짜 공감합니다!", "2025.01.12", true),
AlarmItem(4, "모임", "투표가 시작되었어요!", "투표지를 먼저 열람합니다.", "17시간 전", false),
AlarmItem(5, "피드", "팔로워가 새 글을 올렸어요.", "user456님이 새 리뷰를 작성했습니다.", "1일 전", true),
AlarmItem(6, "모임", "새로운 모임방 초대", "호르몬 체인지 완독하는 방에 초대되었습니다.", "2일 전", false)
)
}

fun onCardClick(item: AlarmItem) {
// TODO: 알림 카드 클릭 처리
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ fun SearchBookTextField(
.fillMaxWidth()
.height(40.dp)
.clip(shape)
.background(colors.DarkGrey02),
.background(colors.DarkGrey),
contentAlignment = Alignment.CenterStart
) {
Row(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@ fun PreviewGroupRoomPagerSection() {
// 마감 임박한 독서 모임방
val deadlineRooms = listOf(
GroupCardItemRoomData(
id = 1,
title = "시집만 읽는 사람들 3월",
participants = 22,
maxParticipants = 30,
Expand All @@ -197,6 +198,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 2,
title = "일본 소설 좋아하는 사람들",
participants = 15,
maxParticipants = 20,
Expand All @@ -205,6 +207,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 3,
title = "명작 같이 읽기방",
participants = 22,
maxParticipants = 30,
Expand All @@ -213,6 +216,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 4,
title = "명작 같이 읽기방",
participants = 22,
maxParticipants = 30,
Expand All @@ -221,6 +225,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 5,
title = "물리책 읽는 방",
participants = 13,
maxParticipants = 20,
Expand All @@ -233,6 +238,7 @@ fun PreviewGroupRoomPagerSection() {
// 인기 있는 독서 모임방
val popularRooms = listOf(
GroupCardItemRoomData(
id = 6,
title = "베스트셀러 토론방",
participants = 28,
maxParticipants = 30,
Expand All @@ -241,6 +247,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 7,
title = "인기 소설 완독방",
participants = 25,
maxParticipants = 25,
Expand All @@ -249,6 +256,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 8,
title = "트렌드 과학서 읽기",
participants = 20,
maxParticipants = 25,
Expand All @@ -261,6 +269,7 @@ fun PreviewGroupRoomPagerSection() {
// 인플루언서, 작가 독서 모임방
val influencerRooms = listOf(
GroupCardItemRoomData(
id = 9,
title = "작가와 함께하는 독서방",
participants = 30,
maxParticipants = 30,
Expand All @@ -269,6 +278,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 0
),
GroupCardItemRoomData(
id = 10,
title = "유명 북튜버와 읽기",
participants = 18,
maxParticipants = 20,
Expand All @@ -277,6 +287,7 @@ fun PreviewGroupRoomPagerSection() {
genreIndex = 2
),
GroupCardItemRoomData(
id = 11,
title = "작가 초청 인문학방",
participants = 15,
maxParticipants = 20,
Expand Down Expand Up @@ -320,6 +331,7 @@ fun PreviewGroupRoomPagerSectionEmptyGenre() {
// 특정 장르에만 데이터가 있는 경우 (문학 장르만 데이터 존재)
val deadlineRooms = listOf(
GroupCardItemRoomData(
id = 12,
title = "시집만 읽는 사람들 3월",
participants = 22,
maxParticipants = 30,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,20 @@
package com.texthip.thip.ui.group.myroom.component

import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.BasicTextField
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
Expand All @@ -32,63 +27,41 @@ import com.texthip.thip.ui.theme.ThipTheme.typography
@Composable
fun GroupSearchTextField(
modifier: Modifier = Modifier,
value: String,
placeholder: String = stringResource(R.string.group_search_placeholder),
onValueChange: (String) -> Unit,
onClick: (() -> Unit)? = null
onClick: () -> Unit
) {
val textStyle = typography.menu_r400_s14_h24.copy(
lineHeight = 16.sp,
color = colors.White
)
val shape = RoundedCornerShape(12.dp)
val backgroundColor = colors.DarkGrey
val cursorColor = colors.NeonGreen

Box(
modifier
.padding(horizontal = 20.dp)
.fillMaxWidth()
.height(40.dp)
.clip(shape)
.background(backgroundColor),
.background(backgroundColor)
.clickable { onClick() },
contentAlignment = Alignment.CenterStart
) {
Row(
verticalAlignment = Alignment.CenterVertically,
modifier = Modifier.fillMaxSize()
modifier = Modifier
.fillMaxSize()
.padding(horizontal = 12.dp)
) {
BasicTextField(
value = value,
onValueChange = onValueChange,
singleLine = true,
textStyle = textStyle,
cursorBrush = SolidColor(cursorColor),
modifier = Modifier
.weight(1f)
.padding(start = 12.dp, end = 8.dp),
decorationBox = { innerTextField ->
Box(contentAlignment = Alignment.CenterStart) {
if (value.isEmpty()) {
Text(
text = placeholder,
color = colors.Grey02,
style = typography.menu_r400_s14_h24.copy(
fontSize = 14.sp,
lineHeight = 16.sp
)
)
}
innerTextField()
}
}
Text(
text = placeholder,
color = colors.Grey02,
style = typography.menu_r400_s14_h24.copy(
fontSize = 14.sp,
lineHeight = 16.sp
),
modifier = Modifier.weight(1f)
)
Icon(
painter = painterResource(id = R.drawable.ic_search),
contentDescription = "검색",
tint = colors.White,
modifier = Modifier
.padding(end = 12.dp)
tint = colors.White
)
}
}
Expand All @@ -97,9 +70,7 @@ fun GroupSearchTextField(
@Preview(showBackground = true, backgroundColor = 0xFF000000, widthDp = 360)
@Composable
fun PreviewGroupSearchTextField() {
var value by remember { mutableStateOf("") }
GroupSearchTextField(
value = value,
onValueChange = { value = it }
onClick = { }
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.texthip.thip.ui.group.myroom.mock
import com.texthip.thip.R

data class GroupCardData(
val id: Int = 0, // 모임방 ID 추가
val title: String,
val members: Int,
val imageRes: Int = R.drawable.bookcover_sample,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.texthip.thip.ui.group.myroom.mock
import com.texthip.thip.R

data class GroupCardItemRoomData(
val id: Int,
val title: String,
val participants: Int,
val maxParticipants: Int,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.texthip.thip.ui.group.myroom.mock

data class GroupRoomData(
val id: Int,
val title: String,
val isSecret: Boolean,
val description: String,
Expand Down
Loading