From 6191a443dffd6c8818685b2ca41eaa532810221c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:35:13 +0900 Subject: [PATCH 01/19] =?UTF-8?q?[fix]=20#95=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EC=A0=95=EC=82=AC=EA=B0=81=ED=98=95=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../component/DPlayDayTopicItem.kt | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt index 758530d4..6e29b9e8 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt @@ -1,10 +1,15 @@ package com.example.designsystem.component +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -19,31 +24,38 @@ fun DPlayDayTopicItem( onClick: () -> Unit, modifier: Modifier = Modifier, ) { - Row(modifier = modifier.fillMaxWidth().noRippleClickable(onClick = onClick)) { - Text( - text = dayText, + Row(modifier = modifier + .fillMaxWidth() + .noRippleClickable(onClick = onClick)) { + Box( modifier = Modifier + .size(50.dp) .roundedBackgroundWithPadding( backgroundColor = DPlayTheme.colors.gray600, cornerRadius = 8.dp, - padding = PaddingValues(horizontal = 16.5.dp, vertical = 16.dp), - ), - color = DPlayTheme.colors.gray100, - style = DPlayTheme.typography.bodyBold14, - ) - Text( - text = topic, - modifier = - Modifier - .weight(1f) - .roundedBackgroundWithPadding( - backgroundColor = DPlayTheme.colors.gray100, - cornerRadius = 8.dp, - padding = PaddingValues(horizontal = 10.dp, vertical = 16.dp), - ), - style = DPlayTheme.typography.bodySemi14, - ) + ), contentAlignment = Alignment.Center + ) { + Text( + text = dayText, + color = DPlayTheme.colors.gray100, + style = DPlayTheme.typography.bodyBold14, + ) + } + Box( modifier = + Modifier + .height(50.dp) + .weight(1f) + .roundedBackgroundWithPadding( + backgroundColor = DPlayTheme.colors.gray100, + cornerRadius = 8.dp, + padding = PaddingValues(start = 10.dp) + ), contentAlignment = Alignment.CenterStart){ + Text( + text = topic, + style = DPlayTheme.typography.bodySemi14, + ) + } } } From 7cf748299275861daafe2f99f779338be219a610 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:35:20 +0900 Subject: [PATCH 02/19] =?UTF-8?q?[fix]=20#95=20=EC=9E=AC=EC=83=9D=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=ED=8C=A8=EB=94=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/designsystem/component/DPlayLargeCover.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt index b021ff60..4863b88d 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt @@ -206,7 +206,7 @@ fun DPlayLargeCover( .background( color = color.dplayWhite, shape = RoundedCornerShape(16.dp), - ).padding(10.dp), + ).padding(6.dp), onClick = onStreamClick, ) } From 2cc837ff8bbcd3f39019b49882fb8dc5f93e7438 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:35:35 +0900 Subject: [PATCH 03/19] =?UTF-8?q?[fix]=20#95=20=EB=85=B8=EB=9E=98=EC=A0=9C?= =?UTF-8?q?=EB=AA=A9,=20=EA=B0=80=EC=88=98=20=ED=8C=A8=EB=94=A9=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EB=B0=8F=20=EB=B0=B0=EA=B2=BD=20=EC=BB=A4=EB=B2=84?= =?UTF-8?q?=20gradient=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/detail/DetailScreen.kt | 27 ++++++++++++++----- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt index 96662d30..f4a6907a 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt @@ -25,8 +25,11 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -158,12 +161,8 @@ private fun DetailScreen( .padding(horizontal = 16.dp) Box { - Box(modifier = Modifier.fillMaxSize()) { + Box(modifier = Modifier.fillMaxSize().background(color = color.gray100)) { Box( - modifier = - Modifier.blur( - radius = 20.dp, - ), ) { AsyncImage( model = state.track.coverImg, @@ -175,6 +174,20 @@ private fun DetailScreen( .offset(y = (-80).dp), contentScale = ContentScale.Crop, ) + Box( + modifier = Modifier + .fillMaxWidth() + .aspectRatio(1f) + .offset(y = (-80).dp) + .background( + brush = Brush.verticalGradient( + colors = listOf( + DPlayTheme.colors.gray100.copy(alpha = 0f), + DPlayTheme.colors.gray100.copy(alpha = 1f) + ) + ) + ) + ) } Column { DplayDualIconTitleTopAppBar( @@ -214,14 +227,14 @@ private fun DetailScreen( Text( text = state.track.songTitle, - modifier = Modifier.align(Alignment.CenterHorizontally), + modifier = Modifier.padding(horizontal = 16.dp).align(Alignment.CenterHorizontally), style = typography.bodyBold20, color = color.dplayBlack, ) Spacer(modifier = Modifier.height(4.dp)) Text( text = state.track.artistName, - modifier = Modifier.align(Alignment.CenterHorizontally), + modifier = Modifier.padding(horizontal = 16.dp).align(Alignment.CenterHorizontally), style = typography.bodySemi14, color = color.gray400, ) From bdff0d3cf064c22a56e1a2004eb1913fd266d4b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:35:47 +0900 Subject: [PATCH 04/19] =?UTF-8?q?[fix]=20#95=20=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=EB=B0=B1=ED=95=B8=EB=93=A4=EB=9F=AC?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/example/record/RecordListScreen.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/feature/record/src/main/java/com/example/record/RecordListScreen.kt b/feature/record/src/main/java/com/example/record/RecordListScreen.kt index 3891a74e..20a94228 100644 --- a/feature/record/src/main/java/com/example/record/RecordListScreen.kt +++ b/feature/record/src/main/java/com/example/record/RecordListScreen.kt @@ -1,5 +1,6 @@ package com.example.record +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -33,6 +34,9 @@ fun RecordListScreen( uiState: RecordContract.RecordState = RecordContract.RecordState(), questionPosts: LazyPagingItems = emptyLazyPagingItems(), ) { + BackHandler { + onBackButtonClick() + } Column(modifier = modifier.fillMaxSize()) { DplayLeftIconTitleTopAppBar( modifier = Modifier.fillMaxWidth(), From f3bc09ee193eb41faf41b6936646ecaed2d9199a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:55:59 +0900 Subject: [PATCH 05/19] ktlint format --- .../component/DPlayDayTopicItem.kt | 33 +++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt index 6e29b9e8..4e69b3e2 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayDayTopicItem.kt @@ -24,9 +24,12 @@ fun DPlayDayTopicItem( onClick: () -> Unit, modifier: Modifier = Modifier, ) { - Row(modifier = modifier - .fillMaxWidth() - .noRippleClickable(onClick = onClick)) { + Row( + modifier = + modifier + .fillMaxWidth() + .noRippleClickable(onClick = onClick), + ) { Box( modifier = Modifier @@ -34,7 +37,8 @@ fun DPlayDayTopicItem( .roundedBackgroundWithPadding( backgroundColor = DPlayTheme.colors.gray600, cornerRadius = 8.dp, - ), contentAlignment = Alignment.Center + ), + contentAlignment = Alignment.Center, ) { Text( text = dayText, @@ -42,15 +46,18 @@ fun DPlayDayTopicItem( style = DPlayTheme.typography.bodyBold14, ) } - Box( modifier = - Modifier - .height(50.dp) - .weight(1f) - .roundedBackgroundWithPadding( - backgroundColor = DPlayTheme.colors.gray100, - cornerRadius = 8.dp, - padding = PaddingValues(start = 10.dp) - ), contentAlignment = Alignment.CenterStart){ + Box( + modifier = + Modifier + .height(50.dp) + .weight(1f) + .roundedBackgroundWithPadding( + backgroundColor = DPlayTheme.colors.gray100, + cornerRadius = 8.dp, + padding = PaddingValues(start = 10.dp), + ), + contentAlignment = Alignment.CenterStart, + ) { Text( text = topic, style = DPlayTheme.typography.bodySemi14, From eb0fcdc10bbb07db3465d698815df13ca82ef569 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:56:21 +0900 Subject: [PATCH 06/19] =?UTF-8?q?[fix]=20#95=20=EC=8A=A4=ED=81=AC=EB=9E=A9?= =?UTF-8?q?,=20=EC=A2=8B=EC=95=84=EC=9A=94=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20=EC=8B=9C=20=ED=99=88=20=EB=A6=AC=ED=94=84?= =?UTF-8?q?=EB=A0=88=EC=8B=9C=20=ED=98=B8=EC=B6=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/detail/DetailContract.kt | 7 +++- .../java/com/example/detail/DetailScreen.kt | 38 ++++++++++--------- .../com/example/detail/DetailViewModel.kt | 4 ++ 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/feature/detail/src/main/java/com/example/detail/DetailContract.kt b/feature/detail/src/main/java/com/example/detail/DetailContract.kt index 3c921321..a19105ba 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailContract.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailContract.kt @@ -11,6 +11,7 @@ class DetailContract { data class DetailState( val postId: Long = 0L, val isScrapped: Boolean = false, + val initialIsScrapped: Boolean = false, val content: String = "", val isHost: Boolean = false, val date: String = "", @@ -33,10 +34,14 @@ class DetailContract { isLiked = false, count = 0, ), + val initialIsLiked: Boolean = false, val badge: BADGE? = null, val bottomSheetVisible: Boolean = false, val streamingTrackId: String? = null, - ) : BaseContract.State + ) : BaseContract.State { + val homeRefreshRequired: Boolean + get() = isScrapped != initialIsScrapped || like.isLiked != initialIsLiked + } sealed interface DetailIntent : BaseContract.Intent { data class LoadData( diff --git a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt index f4a6907a..bd78b896 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt @@ -1,5 +1,6 @@ package com.example.detail +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.Box @@ -23,13 +24,10 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.blur import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Brush -import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle @@ -67,6 +65,10 @@ fun DetailRoute( val showSnackBar = LocalShowSnackBar.current val modalController = LocalModalController.current + BackHandler { + viewModel.handleIntent(DetailContract.DetailIntent.OnBackButtonClick) + } + LaunchedEffect(Unit) { viewModel.handleIntent(DetailContract.DetailIntent.LoadData(postId = postId, badge = badge)) } @@ -162,8 +164,7 @@ private fun DetailScreen( Box { Box(modifier = Modifier.fillMaxSize().background(color = color.gray100)) { - Box( - ) { + Box { AsyncImage( model = state.track.coverImg, contentDescription = null, @@ -175,18 +176,21 @@ private fun DetailScreen( contentScale = ContentScale.Crop, ) Box( - modifier = Modifier - .fillMaxWidth() - .aspectRatio(1f) - .offset(y = (-80).dp) - .background( - brush = Brush.verticalGradient( - colors = listOf( - DPlayTheme.colors.gray100.copy(alpha = 0f), - DPlayTheme.colors.gray100.copy(alpha = 1f) - ) - ) - ) + modifier = + Modifier + .fillMaxWidth() + .aspectRatio(1f) + .offset(y = (-80).dp) + .background( + brush = + Brush.verticalGradient( + colors = + listOf( + DPlayTheme.colors.gray100.copy(alpha = 0f), + DPlayTheme.colors.gray100.copy(alpha = 1f), + ), + ), + ), ) } Column { diff --git a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt index bc46f088..6d7b0e90 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt @@ -60,6 +60,8 @@ class DetailViewModel when (intent) { is DetailContract.DetailIntent.LoadData -> loadData(intent.postId, intent.badge) is DetailContract.DetailIntent.OnBackButtonClick -> { + if (currentState.homeRefreshRequired) + viewModelScope.launch {homeRefreshTrigger.refresh()} setSideEffect(DetailContract.DetailSideEffect.NavigateBackStack) } @@ -99,12 +101,14 @@ class DetailViewModel copy( postId = postDetail.postId, isScrapped = postDetail.isScrapped, + initialIsScrapped = postDetail.isScrapped, content = postDetail.content, isHost = postDetail.isHost, date = postDetail.displayDate, track = postDetail.track, writer = postDetail.writer, like = postDetail.like, + initialIsLiked = postDetail.like.isLiked, badge = badge, ) } From 65849c0221ff2cc3e0c56ec34bade8c26f6a5d33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 22:57:03 +0900 Subject: [PATCH 07/19] ktlint format --- .../src/main/java/com/example/detail/DetailViewModel.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt index 6d7b0e90..2308c604 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt @@ -60,8 +60,9 @@ class DetailViewModel when (intent) { is DetailContract.DetailIntent.LoadData -> loadData(intent.postId, intent.badge) is DetailContract.DetailIntent.OnBackButtonClick -> { - if (currentState.homeRefreshRequired) - viewModelScope.launch {homeRefreshTrigger.refresh()} + if (currentState.homeRefreshRequired) { + viewModelScope.launch { homeRefreshTrigger.refresh() } + } setSideEffect(DetailContract.DetailSideEffect.NavigateBackStack) } From 06cc07775063e447eea744e95522936556cfce7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 23:16:14 +0900 Subject: [PATCH 08/19] =?UTF-8?q?[fix]=20#95=20=EC=9E=91=EC=84=B1=EC=9E=90?= =?UTF-8?q?=20isAdmin=20=EA=B0=92=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../datasource/remote/AuthRemoteDataSource.kt | 2 +- .../mapper/todomain/UserResponseMapper.kt | 1 + .../model/response/QuestionPostsResponse.kt | 1 + .../data/model/response/UserResponse.kt | 2 + .../com/example/domain/model/UserRelation.kt | 1 - .../java/com/example/domain/model/Writer.kt | 1 + .../usecase/CheckUserRelationUseCase.kt | 5 - .../java/com/example/detail/DetailContract.kt | 1 + .../com/example/detail/DetailViewModel.kt | 2 +- .../main/java/com/example/home/HomeScreen.kt | 4 +- .../java/com/example/home/HomeViewModel.kt | 157 +----------------- 11 files changed, 12 insertions(+), 165 deletions(-) diff --git a/core/data/src/main/java/com/example/data/datasource/remote/AuthRemoteDataSource.kt b/core/data/src/main/java/com/example/data/datasource/remote/AuthRemoteDataSource.kt index dc18566a..c6f3c46c 100644 --- a/core/data/src/main/java/com/example/data/datasource/remote/AuthRemoteDataSource.kt +++ b/core/data/src/main/java/com/example/data/datasource/remote/AuthRemoteDataSource.kt @@ -126,7 +126,7 @@ class AuthRemoteDataSource suspend fun reissue(refreshToken: String): TokenResponse { try { - val response = authService.reissue(refreshToken = refreshToken) + val response = authService.reissue(refreshToken = "Bearer $refreshToken") return response.data ?: throw Exception("Data is null") } catch (e: Exception) { throw e diff --git a/core/data/src/main/java/com/example/data/mapper/todomain/UserResponseMapper.kt b/core/data/src/main/java/com/example/data/mapper/todomain/UserResponseMapper.kt index 85c7c5b5..00eba51a 100644 --- a/core/data/src/main/java/com/example/data/mapper/todomain/UserResponseMapper.kt +++ b/core/data/src/main/java/com/example/data/mapper/todomain/UserResponseMapper.kt @@ -8,4 +8,5 @@ fun UserResponse.toDomain(): Writer = userId = this.userId, nickname = this.nickname, profileImg = this.profileImg, + isAdmin = this.isAdmin, ) diff --git a/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt b/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt index 22cfbeaa..74a6fdb4 100644 --- a/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt +++ b/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt @@ -66,6 +66,7 @@ data class QuestionPostItemResponse( userId = user.userId, nickname = user.nickname, profileImg = user.profileImg.orEmpty(), + isAdmin = user.isAdmin, ), like = Like( diff --git a/core/data/src/main/java/com/example/data/model/response/UserResponse.kt b/core/data/src/main/java/com/example/data/model/response/UserResponse.kt index dc4725ec..9ba74fbf 100644 --- a/core/data/src/main/java/com/example/data/model/response/UserResponse.kt +++ b/core/data/src/main/java/com/example/data/model/response/UserResponse.kt @@ -23,4 +23,6 @@ data class UserResponse( val nickname: String, @SerialName("profileImg") val profileImg: String?, + @SerialName("isAdmin") + val isAdmin: Boolean, ) diff --git a/core/domain/src/main/java/com/example/domain/model/UserRelation.kt b/core/domain/src/main/java/com/example/domain/model/UserRelation.kt index 7564ad27..53e050ce 100644 --- a/core/domain/src/main/java/com/example/domain/model/UserRelation.kt +++ b/core/domain/src/main/java/com/example/domain/model/UserRelation.kt @@ -2,6 +2,5 @@ package com.example.domain.model enum class UserRelation { ME, - ADMIN, OTHER; } \ No newline at end of file diff --git a/core/domain/src/main/java/com/example/domain/model/Writer.kt b/core/domain/src/main/java/com/example/domain/model/Writer.kt index 1bb7dcb5..054ac0a7 100644 --- a/core/domain/src/main/java/com/example/domain/model/Writer.kt +++ b/core/domain/src/main/java/com/example/domain/model/Writer.kt @@ -4,4 +4,5 @@ data class Writer( val userId: Long, val nickname: String, val profileImg: String?, + val isAdmin: Boolean, ) diff --git a/core/domain/src/main/java/com/example/domain/usecase/CheckUserRelationUseCase.kt b/core/domain/src/main/java/com/example/domain/usecase/CheckUserRelationUseCase.kt index ceab1f44..e629bf89 100644 --- a/core/domain/src/main/java/com/example/domain/usecase/CheckUserRelationUseCase.kt +++ b/core/domain/src/main/java/com/example/domain/usecase/CheckUserRelationUseCase.kt @@ -11,13 +11,8 @@ class CheckUserRelationUseCase @Inject constructor( suspend operator fun invoke(userId: Long): UserRelation { val myId = userRepository.getUser().first()?.id return when { - userId == ADMIN_ID -> UserRelation.ADMIN myId == userId -> UserRelation.ME else -> UserRelation.OTHER } } - - companion object{ - const val ADMIN_ID = 1L - } } \ No newline at end of file diff --git a/feature/detail/src/main/java/com/example/detail/DetailContract.kt b/feature/detail/src/main/java/com/example/detail/DetailContract.kt index a19105ba..21b8e4a7 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailContract.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailContract.kt @@ -28,6 +28,7 @@ class DetailContract { userId = 0, nickname = "", profileImg = "", + isAdmin = false, ), val like: Like = Like( diff --git a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt index 2308c604..9eb9c28d 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt @@ -81,7 +81,7 @@ class DetailViewModel is DetailContract.DetailIntent.OnReportClick -> reportPost() is DetailContract.DetailIntent.OnStreamClick -> streamTrack() is DetailContract.DetailIntent.OnWriterProfileClick -> { - navigateToOthersProfile() + if (!currentState.writer.isAdmin) navigateToOthersProfile() } is DetailContract.DetailIntent.ChangeBottomSheetVisible -> { diff --git a/feature/home/src/main/java/com/example/home/HomeScreen.kt b/feature/home/src/main/java/com/example/home/HomeScreen.kt index edc66af3..ce294869 100644 --- a/feature/home/src/main/java/com/example/home/HomeScreen.kt +++ b/feature/home/src/main/java/com/example/home/HomeScreen.kt @@ -246,7 +246,9 @@ private fun HomePager( onPostClick(item.postId) } }, - onWriterProfileClick = { onWriterProfileClick(item.writer.userId) }, + onWriterProfileClick = { + if (!item.writer.isAdmin) onWriterProfileClick(item.writer.userId) + }, isStreaming = uiState.streamingTrackId == item.track.trackId, ) } diff --git a/feature/home/src/main/java/com/example/home/HomeViewModel.kt b/feature/home/src/main/java/com/example/home/HomeViewModel.kt index aabc347e..f04d2b59 100644 --- a/feature/home/src/main/java/com/example/home/HomeViewModel.kt +++ b/feature/home/src/main/java/com/example/home/HomeViewModel.kt @@ -4,7 +4,6 @@ import androidx.lifecycle.viewModelScope import com.example.common.audio.AudioPlayer import com.example.common.event.HomeRefreshTrigger import com.example.designsystem.component.snackbar.type.SnackBarType -import com.example.domain.model.BADGE import com.example.domain.model.FeedItem import com.example.domain.model.Like import com.example.domain.model.Track @@ -15,7 +14,6 @@ import com.example.domain.repository.TrackRepository import com.example.domain.usecase.CheckUserRelationUseCase import com.example.ui.base.BaseViewModel import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -135,6 +133,7 @@ class HomeViewModel userId = -1L, nickname = "", profileImg = "", + isAdmin = false, ), like = Like( @@ -268,157 +267,3 @@ class HomeViewModel } } } - -val dummyFeedItems = - persistentListOf( - FeedItem( - postId = 111, - isScrapped = true, - content = "그냥 좋아요 이 노래", - badge = BADGE.BEST, - track = - Track( - trackId = "apple:203948", - songTitle = "Song Title 1", - coverImg = "https://picsum.photos/300", - artistName = "Artist1, Artist2", - isrc = "USUC1234567890", - ), - writer = - Writer( - userId = 222, - nickname = "윤서암", - profileImg = "https://picsum.photos/200", - ), - like = - Like( - isLiked = false, - count = 24, - ), - ), - FeedItem( - postId = 112, - isScrapped = false, - content = "비 오는 날 꼭 듣는 노래에요", - badge = BADGE.EDITOR, - track = - Track( - trackId = "apple:204837", - songTitle = "Song Title 2", - coverImg = "https://picsum.photos/310", - artistName = "Artist3", - isrc = "USUC1234567891", - ), - writer = - Writer( - userId = 333, - nickname = "민석", - profileImg = "https://picsum.photos/201", - ), - like = - Like( - isLiked = true, - count = 57, - ), - ), - FeedItem( - postId = 113, - isScrapped = false, - content = "출근길에 항상 듣습니다!", - badge = BADGE.NEW, - track = - Track( - trackId = "apple:204111", - songTitle = "Song Title 3", - coverImg = "https://picsum.photos/320", - artistName = "Artist4", - isrc = "USUC1234567892", - ), - writer = - Writer( - userId = 444, - nickname = "서현", - profileImg = "https://picsum.photos/202", - ), - like = - Like( - isLiked = false, - count = 13, - ), - ), - FeedItem( - postId = 113, - isScrapped = false, - content = "출근길에 항상 듣습니다!", - badge = BADGE.NEW, - track = - Track( - trackId = "apple:204111", - songTitle = "Song Title 3", - coverImg = "https://picsum.photos/320", - artistName = "Artist4", - isrc = "USUC1234567893", - ), - writer = - Writer( - userId = 444, - nickname = "서현", - profileImg = "https://picsum.photos/202", - ), - like = - Like( - isLiked = false, - count = 13, - ), - ), - FeedItem( - postId = 113, - isScrapped = false, - content = "출근길에 항상 듣습니다!", - badge = BADGE.NEW, - track = - Track( - trackId = "apple:204111", - songTitle = "Song Title 3", - coverImg = "https://picsum.photos/320", - artistName = "Artist4", - isrc = "USUC1234567894", - ), - writer = - Writer( - userId = 444, - nickname = "서현", - profileImg = "https://picsum.photos/202", - ), - like = - Like( - isLiked = false, - count = 13, - ), - ), - FeedItem( - postId = 113, - isScrapped = false, - content = "출근길에 항상 듣습니다!", - badge = BADGE.NEW, - track = - Track( - trackId = "apple:204111", - songTitle = "Song Title 3", - coverImg = "https://picsum.photos/320", - artistName = "Artist4", - isrc = "USUC1234567895", - ), - writer = - Writer( - userId = 444, - nickname = "서현", - profileImg = "https://picsum.photos/202", - ), - like = - Like( - isLiked = false, - count = 13, - ), - ), - ) From eb93fabaad7c8ffcab24370be82569b4c220d79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 23:27:48 +0900 Subject: [PATCH 09/19] =?UTF-8?q?[fix]=20#95=20=ED=82=A4=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/res/drawable/img_key.png | Bin 32370 -> 7206 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/designsystem/src/main/res/drawable/img_key.png b/core/designsystem/src/main/res/drawable/img_key.png index b4e3409145506fc20f9afe18643d4a04c1db241b..91a9ca0b420a314b5fac06dd6e99ee99ef676983 100644 GIT binary patch literal 7206 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 literal 32370 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 From e66ebf6debd28080b99a79b3252c13f6c94d2b13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sat, 31 Jan 2026 23:33:19 +0900 Subject: [PATCH 10/19] =?UTF-8?q?[fix]=20#95=20enum=20=EB=B3=80=EC=88=98?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin-compiler-9280088279672338011.salive | 0 .../data/mapper/todomain/TodayPosteResponseMapper.kt | 4 ++-- .../data/model/response/QuestionPostsResponse.kt | 4 ++-- .../src/main/java/com/example/domain/model/FeedItem.kt | 4 ++-- .../src/main/java/com/example/navigation/Route.kt | 4 ++-- .../src/main/java/com/example/detail/DetailContract.kt | 6 +++--- .../src/main/java/com/example/detail/DetailScreen.kt | 10 +++++----- .../main/java/com/example/detail/DetailViewModel.kt | 4 ++-- .../src/main/java/com/example/home/HomeContract.kt | 4 ++-- .../home/src/main/java/com/example/home/HomeScreen.kt | 8 ++++---- .../main/java/com/example/record/RecordListScreen.kt | 4 ++-- 11 files changed, 26 insertions(+), 26 deletions(-) create mode 100644 .kotlin/sessions/kotlin-compiler-9280088279672338011.salive diff --git a/.kotlin/sessions/kotlin-compiler-9280088279672338011.salive b/.kotlin/sessions/kotlin-compiler-9280088279672338011.salive new file mode 100644 index 00000000..e69de29b diff --git a/core/data/src/main/java/com/example/data/mapper/todomain/TodayPosteResponseMapper.kt b/core/data/src/main/java/com/example/data/mapper/todomain/TodayPosteResponseMapper.kt index 19759aa9..2d196ffc 100644 --- a/core/data/src/main/java/com/example/data/mapper/todomain/TodayPosteResponseMapper.kt +++ b/core/data/src/main/java/com/example/data/mapper/todomain/TodayPosteResponseMapper.kt @@ -3,7 +3,7 @@ package com.example.data.mapper.todomain import com.example.data.model.response.TodayPostItemResponse import com.example.data.model.response.TodayPostTrackResponse import com.example.data.model.response.TodayPostsResponse -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.DailyQuestion import com.example.domain.model.FeedItem import com.example.domain.model.HomeScreenData @@ -28,7 +28,7 @@ fun TodayPostItemResponse.toDomain(): FeedItem = postId = postId, isScrapped = isScrapped, content = content, - badge = badge?.let { BADGE.valueOf(it) }, + badge = badge?.let { Badge.valueOf(it) }, track = track.toDomain(), writer = user.toDomain(), like = like.toDomain(), diff --git a/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt b/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt index 74a6fdb4..8049f968 100644 --- a/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt +++ b/core/data/src/main/java/com/example/data/model/response/QuestionPostsResponse.kt @@ -1,6 +1,6 @@ package com.example.data.model.response -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.FeedItem import com.example.domain.model.Like import com.example.domain.model.Track @@ -52,7 +52,7 @@ data class QuestionPostItemResponse( postId = postId, isScrapped = isScrapped, content = content, - badge = if (isEditorPick) BADGE.EDITOR else null, + badge = if (isEditorPick) Badge.EDITOR else null, track = Track( trackId = track.trackId, diff --git a/core/domain/src/main/java/com/example/domain/model/FeedItem.kt b/core/domain/src/main/java/com/example/domain/model/FeedItem.kt index b01a2d59..f702dfbf 100644 --- a/core/domain/src/main/java/com/example/domain/model/FeedItem.kt +++ b/core/domain/src/main/java/com/example/domain/model/FeedItem.kt @@ -5,13 +5,13 @@ data class FeedItem( val postId: Long, val isScrapped: Boolean, val content: String, - val badge: BADGE?, + val badge: Badge?, val track: Track, val writer: Writer, val like: Like, ) -enum class BADGE { +enum class Badge { EDITOR, BEST, NEW, diff --git a/core/navigation/src/main/java/com/example/navigation/Route.kt b/core/navigation/src/main/java/com/example/navigation/Route.kt index e90ea58a..61e2cad4 100644 --- a/core/navigation/src/main/java/com/example/navigation/Route.kt +++ b/core/navigation/src/main/java/com/example/navigation/Route.kt @@ -3,7 +3,7 @@ package com.example.navigation import androidx.annotation.DrawableRes import androidx.navigation3.runtime.NavKey import com.dplay.designsystem.R -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.ui.model.TrackState import kotlinx.serialization.Serializable @@ -71,7 +71,7 @@ data object Record : NavKey @Serializable data class Detail( val postId: Long, - val badge: BADGE? = null, + val badge: Badge? = null, ) : NavKey @Serializable diff --git a/feature/detail/src/main/java/com/example/detail/DetailContract.kt b/feature/detail/src/main/java/com/example/detail/DetailContract.kt index 21b8e4a7..7df40abf 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailContract.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailContract.kt @@ -1,7 +1,7 @@ package com.example.detail import com.example.designsystem.component.snackbar.type.SnackBarType -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.Like import com.example.domain.model.Track import com.example.domain.model.Writer @@ -36,7 +36,7 @@ class DetailContract { count = 0, ), val initialIsLiked: Boolean = false, - val badge: BADGE? = null, + val badge: Badge? = null, val bottomSheetVisible: Boolean = false, val streamingTrackId: String? = null, ) : BaseContract.State { @@ -47,7 +47,7 @@ class DetailContract { sealed interface DetailIntent : BaseContract.Intent { data class LoadData( val postId: Long, - val badge: BADGE? = null, + val badge: Badge? = null, ) : DetailIntent data object OnBookmarkClick : DetailIntent diff --git a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt index bd78b896..77f24f7c 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt @@ -46,7 +46,7 @@ import com.example.designsystem.component.snackbar.LocalShowSnackBar import com.example.designsystem.theme.DPlayTheme import com.example.designsystem.util.noRippleClickable import com.example.designsystem.util.roundedBackgroundWithPadding -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.navigation.MyPage import com.example.navigation.MyPageTab import com.example.navigation.Navigator @@ -59,7 +59,7 @@ fun DetailRoute( postId: Long, navigator: Navigator, viewModel: DetailViewModel = hiltViewModel(), - badge: BADGE? = null, + badge: Badge? = null, ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() val showSnackBar = LocalShowSnackBar.current @@ -217,9 +217,9 @@ private fun DetailScreen( state.badge?.let { badge -> val chipType = when (badge) { - BADGE.BEST -> DPlayChipType.BEST - BADGE.EDITOR -> DPlayChipType.EDITOR - BADGE.NEW -> DPlayChipType.NEW + Badge.BEST -> DPlayChipType.BEST + Badge.EDITOR -> DPlayChipType.EDITOR + Badge.NEW -> DPlayChipType.NEW } DPlayChip( type = chipType, diff --git a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt index 9eb9c28d..4632f435 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt @@ -8,7 +8,7 @@ import com.example.common.event.ScrappedTrackRefreshTrigger import com.example.designsystem.component.snackbar.type.SnackBarType import com.example.detail.DetailContract.DetailSideEffect.NavigateToMyPage import com.example.detail.DetailContract.DetailSideEffect.ShowSnackBar -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.Like import com.example.domain.model.UserRelation import com.example.domain.repository.PostRepository @@ -92,7 +92,7 @@ class DetailViewModel private fun loadData( postId: Long, - badge: BADGE?, + badge: Badge?, ) { viewModelScope.launch { postRepository diff --git a/feature/home/src/main/java/com/example/home/HomeContract.kt b/feature/home/src/main/java/com/example/home/HomeContract.kt index 32a52ebd..086a39a4 100644 --- a/feature/home/src/main/java/com/example/home/HomeContract.kt +++ b/feature/home/src/main/java/com/example/home/HomeContract.kt @@ -1,7 +1,7 @@ package com.example.home import com.example.designsystem.component.snackbar.type.SnackBarType -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.DailyQuestion import com.example.domain.model.FeedItem import com.example.ui.base.BaseContract @@ -61,7 +61,7 @@ class HomeContract { data class NavigateToPostDetail( val postId: Long, - val badge: BADGE?, + val badge: Badge?, ) : HomeSideEffect data object NavigateToRecord : HomeSideEffect diff --git a/feature/home/src/main/java/com/example/home/HomeScreen.kt b/feature/home/src/main/java/com/example/home/HomeScreen.kt index ce294869..94be14d0 100644 --- a/feature/home/src/main/java/com/example/home/HomeScreen.kt +++ b/feature/home/src/main/java/com/example/home/HomeScreen.kt @@ -33,7 +33,7 @@ import com.example.designsystem.component.chip.DPlayChip import com.example.designsystem.component.chip.type.DPlayChipType import com.example.designsystem.component.snackbar.LocalShowSnackBar import com.example.designsystem.theme.DPlayTheme -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.FeedItem import com.example.navigation.Detail import com.example.navigation.MyPage @@ -210,9 +210,9 @@ private fun HomePager( val currentChipType: DPlayChipType? = currentItem?.badge?.let { when (it) { - BADGE.BEST -> DPlayChipType.BEST - BADGE.EDITOR -> DPlayChipType.EDITOR - BADGE.NEW -> DPlayChipType.NEW + Badge.BEST -> DPlayChipType.BEST + Badge.EDITOR -> DPlayChipType.EDITOR + Badge.NEW -> DPlayChipType.NEW } } diff --git a/feature/record/src/main/java/com/example/record/RecordListScreen.kt b/feature/record/src/main/java/com/example/record/RecordListScreen.kt index 20a94228..8ba35408 100644 --- a/feature/record/src/main/java/com/example/record/RecordListScreen.kt +++ b/feature/record/src/main/java/com/example/record/RecordListScreen.kt @@ -22,7 +22,7 @@ import com.example.designsystem.component.DPlayMusicListItem import com.example.designsystem.component.DPlaySubjectItem import com.example.designsystem.component.DplayLeftIconTitleTopAppBar import com.example.designsystem.theme.DPlayTheme -import com.example.domain.model.BADGE +import com.example.domain.model.Badge import com.example.domain.model.FeedItem import com.example.ui.emptyLazyPagingItems @@ -75,7 +75,7 @@ fun RecordListScreen( musicName = item.track.songTitle, musicArtistName = item.track.artistName, musicContent = item.content, - isEditorPick = (item.badge == BADGE.EDITOR), + isEditorPick = (item.badge == Badge.EDITOR), onClick = { onMusicClick(item.postId) }, ) } From c6ff7df6caa673a0df969548256370debfa67f23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 00:51:12 +0900 Subject: [PATCH 11/19] resolve conflict --- .../detail/src/main/java/com/example/detail/DetailViewModel.kt | 1 - feature/home/src/main/java/com/example/home/HomeViewModel.kt | 1 - 2 files changed, 2 deletions(-) diff --git a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt index b55c7492..1c0cec66 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailViewModel.kt @@ -241,7 +241,6 @@ class DetailViewModel when (userRelation) { UserRelation.ME -> setSideEffect(NavigateToMyPage()) - UserRelation.ADMIN -> {} UserRelation.OTHER -> setSideEffect(DetailContract.DetailSideEffect.NavigateToWriterProfile(userId)) } } diff --git a/feature/home/src/main/java/com/example/home/HomeViewModel.kt b/feature/home/src/main/java/com/example/home/HomeViewModel.kt index d3061d63..ac73bca6 100644 --- a/feature/home/src/main/java/com/example/home/HomeViewModel.kt +++ b/feature/home/src/main/java/com/example/home/HomeViewModel.kt @@ -265,7 +265,6 @@ class HomeViewModel when (userRelation) { UserRelation.ME -> setSideEffect(HomeContract.HomeSideEffect.NavigateToMyPage()) - UserRelation.ADMIN -> {} UserRelation.OTHER -> setSideEffect(HomeContract.HomeSideEffect.NavigateToWriterProfile(userId)) } } From 37a54ab97403b0611d1fa0c567e6b49302d035c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 14:52:48 +0900 Subject: [PATCH 12/19] =?UTF-8?q?[fix]=20#95=20=EA=B3=BC=EA=B1=B0=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=20=ED=88=B4=ED=8C=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/QuestionPostsPagingSource.kt | 2 ++ .../data/repository/PostRepositoryImpl.kt | 2 ++ .../designsystem/component/DPlayTooltip.kt | 18 +++++++++------ .../component/button/DplayGuidelineButton.kt | 5 +++- .../domain/repository/PostRepository.kt | 1 + .../java/com/example/comment/CommentScreen.kt | 1 + .../java/com/example/record/RecordContract.kt | 6 +++++ .../com/example/record/RecordListScreen.kt | 23 +++++++++++++++++++ .../java/com/example/record/RecordRoute.kt | 6 +++++ .../com/example/record/RecordViewModel.kt | 7 ++++++ .../record/src/main/res/values/strings.xml | 2 ++ 11 files changed, 65 insertions(+), 8 deletions(-) diff --git a/core/data/src/main/java/com/example/data/datasource/remote/QuestionPostsPagingSource.kt b/core/data/src/main/java/com/example/data/datasource/remote/QuestionPostsPagingSource.kt index 428ef20a..69b95655 100644 --- a/core/data/src/main/java/com/example/data/datasource/remote/QuestionPostsPagingSource.kt +++ b/core/data/src/main/java/com/example/data/datasource/remote/QuestionPostsPagingSource.kt @@ -9,6 +9,7 @@ class QuestionPostsPagingSource( private val postService: PostService, private val questionId: Long, private val onTotalCountFetched: (Int) -> Unit, + private val onLockedFetched: (Boolean) -> Unit, ) : PagingSource() { override fun getRefreshKey(state: PagingState): String? = null @@ -26,6 +27,7 @@ class QuestionPostsPagingSource( val data = response.data ?: throw Exception("data is null") if (params.key == null) { onTotalCountFetched(data.totalCount) + onLockedFetched(data.locked) } val posts = data.items val nextCursor = data.nextCursor diff --git a/core/data/src/main/java/com/example/data/repository/PostRepositoryImpl.kt b/core/data/src/main/java/com/example/data/repository/PostRepositoryImpl.kt index 7049511e..ec56595c 100644 --- a/core/data/src/main/java/com/example/data/repository/PostRepositoryImpl.kt +++ b/core/data/src/main/java/com/example/data/repository/PostRepositoryImpl.kt @@ -88,6 +88,7 @@ class PostRepositoryImpl override fun getPostsByQuestionId( questionId: Long, onTotalCountFetched: (Int) -> Unit, + onLockedFetched: (Boolean) -> Unit, ): Flow> = Pager( config = @@ -101,6 +102,7 @@ class PostRepositoryImpl postService = postService, questionId = questionId, onTotalCountFetched = onTotalCountFetched, + onLockedFetched = onLockedFetched, ) }, ).flow.map { pagingData -> diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayTooltip.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayTooltip.kt index c17fce90..2f0a82bf 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayTooltip.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayTooltip.kt @@ -1,5 +1,6 @@ package com.example.designsystem.component +import androidx.annotation.StringRes import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -25,8 +26,9 @@ import com.example.designsystem.util.roundedBackgroundWithPadding @Composable fun DplayTooltip( onCloseButtonClicked: () -> Unit, - onTextButtonClicked: () -> Unit, + onTextButtonClicked: (() -> Unit)?, modifier: Modifier = Modifier, + @StringRes textStringRes: Int = R.string.tooltip_default_description, ) { Column(modifier = modifier) { Box( @@ -63,18 +65,20 @@ fun DplayTooltip( Text( style = DPlayTheme.typography.bodyMed14, color = DPlayTheme.colors.dplayWhite, - text = stringResource(R.string.tooltip_default_description), + text = stringResource(textStringRes), ) DplayClickableIcon( iconRes = R.drawable.ic_close_24, onClick = onCloseButtonClicked, ) } - Spacer(modifier = Modifier.height(16.dp)) - DPlayUnderlineTextButton( - onClick = onTextButtonClicked, - text = stringResource(R.string.tooltip_learn_more), - ) + if (onTextButtonClicked != null) { + Spacer(modifier = Modifier.height(16.dp)) + DPlayUnderlineTextButton( + onClick = onTextButtonClicked, + text = stringResource(R.string.tooltip_learn_more), + ) + } } } } diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/button/DplayGuidelineButton.kt b/core/designsystem/src/main/java/com/example/designsystem/component/button/DplayGuidelineButton.kt index b4feb985..f76b1360 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/button/DplayGuidelineButton.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/button/DplayGuidelineButton.kt @@ -1,5 +1,6 @@ package com.example.designsystem.component.button +import androidx.annotation.StringRes import androidx.compose.foundation.background import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column @@ -24,6 +25,7 @@ import com.example.designsystem.theme.DPlayTheme @Composable fun DPlayGuidelineButton( onClick: () -> Unit, + @StringRes textStringRes: Int, modifier: Modifier = Modifier, ) { DPlayButtonSlot( @@ -47,7 +49,7 @@ fun DPlayGuidelineButton( ) Text( - text = stringResource(R.string.guideline_button_label), + text = stringResource(textStringRes), style = DPlayTheme.typography.capMed12, color = DPlayTheme.colors.gray400, ) @@ -69,6 +71,7 @@ fun DPlayGuidelineButtonPreview() { ) { DPlayGuidelineButton( onClick = {}, + textStringRes = R.string.guideline_button_label, ) } } diff --git a/core/domain/src/main/java/com/example/domain/repository/PostRepository.kt b/core/domain/src/main/java/com/example/domain/repository/PostRepository.kt index cc37996f..e5d1d7d7 100644 --- a/core/domain/src/main/java/com/example/domain/repository/PostRepository.kt +++ b/core/domain/src/main/java/com/example/domain/repository/PostRepository.kt @@ -41,5 +41,6 @@ interface PostRepository { fun getPostsByQuestionId( questionId: Long, onTotalCountFetched: (Int) -> Unit, + onLockedFetched: (Boolean) -> Unit, ): Flow> } \ No newline at end of file diff --git a/feature/comment/src/main/java/com/example/comment/CommentScreen.kt b/feature/comment/src/main/java/com/example/comment/CommentScreen.kt index 1ebacc78..ab484697 100644 --- a/feature/comment/src/main/java/com/example/comment/CommentScreen.kt +++ b/feature/comment/src/main/java/com/example/comment/CommentScreen.kt @@ -157,6 +157,7 @@ fun CommentScreen( .onGloballyPositioned { coordinates -> guideButtonHeightPx = coordinates.size.height }, + textStringRes = R.string.guideline_button_label, ) if (state.isGuideVisible) { diff --git a/feature/record/src/main/java/com/example/record/RecordContract.kt b/feature/record/src/main/java/com/example/record/RecordContract.kt index 86d3145c..d0107007 100644 --- a/feature/record/src/main/java/com/example/record/RecordContract.kt +++ b/feature/record/src/main/java/com/example/record/RecordContract.kt @@ -14,6 +14,8 @@ class RecordContract { val selectedQuestion: DailyQuestion? = null, val datePickerBottomSheetVisible: Boolean = false, val recordListTotalCount: Int = 0, + val tooltipVisible: Boolean = false, + val locked: Boolean = true, ) : BaseContract.State sealed interface RecordIntent : BaseContract.Intent { @@ -37,6 +39,10 @@ class RecordContract { val year: Int, val month: Int, ) : RecordIntent + + data class ChangeTooltipVisible( + val isVisible: Boolean, + ) : RecordIntent } sealed interface RecordSideEffect : BaseContract.SideEffect { diff --git a/feature/record/src/main/java/com/example/record/RecordListScreen.kt b/feature/record/src/main/java/com/example/record/RecordListScreen.kt index 8ba35408..0bb60a87 100644 --- a/feature/record/src/main/java/com/example/record/RecordListScreen.kt +++ b/feature/record/src/main/java/com/example/record/RecordListScreen.kt @@ -21,6 +21,8 @@ import com.dplay.record.R import com.example.designsystem.component.DPlayMusicListItem import com.example.designsystem.component.DPlaySubjectItem import com.example.designsystem.component.DplayLeftIconTitleTopAppBar +import com.example.designsystem.component.DplayTooltip +import com.example.designsystem.component.button.DPlayGuidelineButton import com.example.designsystem.theme.DPlayTheme import com.example.domain.model.Badge import com.example.domain.model.FeedItem @@ -30,6 +32,8 @@ import com.example.ui.emptyLazyPagingItems fun RecordListScreen( onBackButtonClick: () -> Unit, onMusicClick: (postId: Long) -> Unit, + onGuideButtonClick: () -> Unit, + onTooltipCloseClick: () -> Unit, modifier: Modifier = Modifier, uiState: RecordContract.RecordState = RecordContract.RecordState(), questionPosts: LazyPagingItems = emptyLazyPagingItems(), @@ -79,6 +83,23 @@ fun RecordListScreen( onClick = { onMusicClick(item.postId) }, ) } + + if (uiState.locked) { + item { + DPlayGuidelineButton( + onClick = onGuideButtonClick, + textStringRes = R.string.record_locked_guide_button_text, + ) + if (uiState.tooltipVisible) { + Spacer(modifier = Modifier.height(8.dp)) + DplayTooltip( + onCloseButtonClicked = onTooltipCloseClick, + textStringRes = R.string.record_locked_tooltip_description, + onTextButtonClicked = null, + ) + } + } + } } } } @@ -90,6 +111,8 @@ private fun RecordListScreenPreview() { RecordListScreen( onBackButtonClick = {}, onMusicClick = {}, + onGuideButtonClick = {}, + onTooltipCloseClick = {}, ) } } diff --git a/feature/record/src/main/java/com/example/record/RecordRoute.kt b/feature/record/src/main/java/com/example/record/RecordRoute.kt index ab83cd12..3603f366 100644 --- a/feature/record/src/main/java/com/example/record/RecordRoute.kt +++ b/feature/record/src/main/java/com/example/record/RecordRoute.kt @@ -53,6 +53,12 @@ fun RecordRoute( onMusicClick = { postId -> viewModel.handleIntent(RecordContract.RecordIntent.OnMusicClick(postId = postId)) }, + onGuideButtonClick = { + viewModel.handleIntent(RecordContract.RecordIntent.ChangeTooltipVisible(isVisible = true)) + }, + onTooltipCloseClick = { + viewModel.handleIntent(RecordContract.RecordIntent.ChangeTooltipVisible(isVisible = false)) + }, ) } } diff --git a/feature/record/src/main/java/com/example/record/RecordViewModel.kt b/feature/record/src/main/java/com/example/record/RecordViewModel.kt index 83ac21f3..aec817fa 100644 --- a/feature/record/src/main/java/com/example/record/RecordViewModel.kt +++ b/feature/record/src/main/java/com/example/record/RecordViewModel.kt @@ -43,6 +43,9 @@ class RecordViewModel onTotalCountFetched = { totalCount -> updateState { copy(recordListTotalCount = totalCount) } }, + onLockedFetched = { locked -> + updateState { copy(locked = locked) } + }, ) } else { flowOf(PagingData.empty()) @@ -70,6 +73,10 @@ class RecordViewModel is RecordContract.RecordIntent.ChangeBottomSheetVisible -> { updateState { copy(datePickerBottomSheetVisible = intent.isVisible) } } + + is RecordContract.RecordIntent.ChangeTooltipVisible -> { + updateState { copy(tooltipVisible = intent.isVisible) } + } } } diff --git a/feature/record/src/main/res/values/strings.xml b/feature/record/src/main/res/values/strings.xml index 1b08b1e8..47d26ae9 100644 --- a/feature/record/src/main/res/values/strings.xml +++ b/feature/record/src/main/res/values/strings.xml @@ -1,4 +1,6 @@ 총 %1$d개의 곡 + 이 날의 추천은 여기까지에요.\n곡을 등록하지 않은 날에는 최대 3곡만 보여요. + 왜 일부 노래만 보이나요? \ No newline at end of file From 52bfdfd41002909418cc4158e1fc0f30811f9db3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 14:55:06 +0900 Subject: [PATCH 13/19] =?UTF-8?q?[fix]=20#95=20=EC=97=90=EB=94=94=ED=84=B0?= =?UTF-8?q?=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/DPlayLargeCover.kt | 17 +++++++++++++++-- .../java/com/example/detail/DetailScreen.kt | 7 ++++++- .../main/java/com/example/home/HomeScreen.kt | 1 + 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt index 4863b88d..dfd14ee9 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayLargeCover.kt @@ -39,6 +39,7 @@ import com.example.designsystem.util.noRippleClickable @Composable fun DPlayLargeCover( isLikeChecked: Boolean, + isAdmin: Boolean, likeCount: Int, writerProfileImageUrl: String?, writerNickname: String, @@ -70,7 +71,12 @@ fun DPlayLargeCover( } } - Box(modifier = modifier.fillMaxWidth().clip(textCoverShape)) { + Box( + modifier = + modifier + .fillMaxWidth() + .clip(textCoverShape), + ) { Box( modifier = Modifier @@ -141,7 +147,12 @@ fun DPlayLargeCover( modifier = Modifier.noRippleClickable(onClick = onWriterProfileClick), ) { AsyncImage( - model = writerProfileImageUrl ?: R.drawable.base_profile_image, + model = + if (isAdmin) { + R.drawable.img_profile + } else { + writerProfileImageUrl ?: R.drawable.base_profile_image + }, contentDescription = null, modifier = Modifier @@ -250,6 +261,7 @@ private fun DPlayLockedLargeCoverPreview() { onLikeClick = {}, onCoverClick = {}, onWriterProfileClick = {}, + isAdmin = false, ) } } @@ -270,6 +282,7 @@ private fun DPlayLargeCoverPreview() { onCoverClick = {}, onWriterProfileClick = {}, isLocked = false, + isAdmin = false, ) } } diff --git a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt index 558eca22..96f76e48 100644 --- a/feature/detail/src/main/java/com/example/detail/DetailScreen.kt +++ b/feature/detail/src/main/java/com/example/detail/DetailScreen.kt @@ -307,7 +307,12 @@ private fun DetailScreen( verticalAlignment = Alignment.CenterVertically, ) { AsyncImage( - model = state.writer.profileImg ?: R.drawable.base_profile_image, + model = + if (state.writer.isAdmin) { + R.drawable.img_profile + } else { + state.writer.profileImg ?: R.drawable.base_profile_image + }, contentDescription = null, modifier = Modifier diff --git a/feature/home/src/main/java/com/example/home/HomeScreen.kt b/feature/home/src/main/java/com/example/home/HomeScreen.kt index 4234bed4..0d87b316 100644 --- a/feature/home/src/main/java/com/example/home/HomeScreen.kt +++ b/feature/home/src/main/java/com/example/home/HomeScreen.kt @@ -230,6 +230,7 @@ private fun HomePager( DPlayLargeCover( modifier = Modifier.fillMaxWidth(), + isAdmin = item.writer.isAdmin, isLocked = isLockedPage, isLikeChecked = item.like.isLiked, likeCount = item.like.count, From 83fd479cabe16bbe0fa007d3eb269f4f237fa09f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 14:55:16 +0900 Subject: [PATCH 14/19] =?UTF-8?q?[fix]=20#95=20=EC=B2=B4=ED=81=AC=20?= =?UTF-8?q?=EC=95=84=EC=9D=B4=ED=85=9C=20=EC=98=81=EC=97=AD=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../designsystem/component/DPlayImageCheck.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt index de5342a2..1cad3a97 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt @@ -20,6 +20,7 @@ import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import coil3.compose.AsyncImage @@ -44,7 +45,8 @@ fun DPlayImageCheck( .background(color = backgroundColor) .noRippleClickable( onClick = onClick, - ).padding( + ) + .padding( horizontal = 16.dp, vertical = 12.dp, ), @@ -62,11 +64,15 @@ fun DPlayImageCheck( Spacer(modifier = Modifier.width(12.dp)) - Column { + Column( + modifier = Modifier.weight(1f) + ) { Text( text = musicName, style = DPlayTheme.typography.bodySemi16, color = DPlayTheme.colors.dplayBlack, + maxLines = 1, + overflow = TextOverflow.Ellipsis, ) Spacer(modifier = Modifier.height(4.dp)) @@ -75,6 +81,8 @@ fun DPlayImageCheck( text = artistName, style = DPlayTheme.typography.bodyMed14, color = DPlayTheme.colors.gray400, + maxLines = 1, + overflow = TextOverflow.Ellipsis, ) } From d235dbfc18fe1d5f0cde3f54347b2f5b1f2bdb65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:02:27 +0900 Subject: [PATCH 15/19] =?UTF-8?q?[fix]=20#95=20=EC=98=A8=EB=B3=B4=EB=94=A9?= =?UTF-8?q?=20=EB=8B=89=EB=84=A4=EC=9E=84=20=ED=85=8D=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=ED=95=84=EB=93=9C=20=ED=8C=A8=EB=94=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/example/designsystem/component/DPlayImageCheck.kt | 1 - .../main/java/com/example/onboarding/OnboardingProfileScreen.kt | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt index 1cad3a97..05816b76 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt @@ -86,7 +86,6 @@ fun DPlayImageCheck( ) } - Spacer(modifier = Modifier.weight(1f)) if (isChecked) { DplayBaseIcon( diff --git a/feature/onboarding/src/main/java/com/example/onboarding/OnboardingProfileScreen.kt b/feature/onboarding/src/main/java/com/example/onboarding/OnboardingProfileScreen.kt index 9b71d012..c3565f9a 100644 --- a/feature/onboarding/src/main/java/com/example/onboarding/OnboardingProfileScreen.kt +++ b/feature/onboarding/src/main/java/com/example/onboarding/OnboardingProfileScreen.kt @@ -172,7 +172,7 @@ fun OnboardingProfileScreen( onFocusChange = {}, placeholder = stringResource(R.string.placeholder_nickname), maxLength = TextFieldConstant.MAX_NICKNAME_LENGTH, - modifier = Modifier.padding(horizontal = 8.dp), + modifier = Modifier.padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.weight(1f)) From a0b9769b2aa65ac6b7c6ab386cdd8c40584e6cf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:03:17 +0900 Subject: [PATCH 16/19] =?UTF-8?q?[fix]=20#95=20=ED=94=84=EB=A1=9C=ED=95=84?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20=EB=8B=89=EB=84=A4=EC=9E=84=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=9D=B8=ED=92=8B=20=ED=8C=A8=EB=94=A9=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/com/example/editprofile/EditProfileScreen.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/feature/editprofile/src/main/java/com/example/editprofile/EditProfileScreen.kt b/feature/editprofile/src/main/java/com/example/editprofile/EditProfileScreen.kt index 31c2f5c1..aa2e59f1 100644 --- a/feature/editprofile/src/main/java/com/example/editprofile/EditProfileScreen.kt +++ b/feature/editprofile/src/main/java/com/example/editprofile/EditProfileScreen.kt @@ -162,7 +162,7 @@ fun EditProfileScreen( onFocusChange = {}, placeholder = stringResource(R.string.placeholder_nickname), maxLength = TextFieldConstant.MAX_NICKNAME_LENGTH, - modifier = Modifier.padding(horizontal = 8.dp), + modifier = Modifier.padding(horizontal = 16.dp), ) Spacer(modifier = Modifier.weight(1f)) From 029ac2cc4dac60e840c57e0821427ccba6998c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:05:43 +0900 Subject: [PATCH 17/19] ktlint format --- .../com/example/designsystem/component/DPlayImageCheck.kt | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt index 05816b76..c726f15a 100644 --- a/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt +++ b/core/designsystem/src/main/java/com/example/designsystem/component/DPlayImageCheck.kt @@ -45,8 +45,7 @@ fun DPlayImageCheck( .background(color = backgroundColor) .noRippleClickable( onClick = onClick, - ) - .padding( + ).padding( horizontal = 16.dp, vertical = 12.dp, ), @@ -65,7 +64,7 @@ fun DPlayImageCheck( Spacer(modifier = Modifier.width(12.dp)) Column( - modifier = Modifier.weight(1f) + modifier = Modifier.weight(1f), ) { Text( text = musicName, @@ -86,7 +85,6 @@ fun DPlayImageCheck( ) } - if (isChecked) { DplayBaseIcon( iconRes = R.drawable.ic_check_circle_darkgray_24, From 7ee2bc5a82485fe3c52c3830c7051ba9452fe24e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:15:48 +0900 Subject: [PATCH 18/19] =?UTF-8?q?[fix]=20#95=20=EA=B3=BC=EA=B1=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=A1=9D=20=ED=99=94=EB=A9=B4=20=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EB=A1=9C=EC=A7=81=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/src/main/java/com/example/record/RecordViewModel.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/feature/record/src/main/java/com/example/record/RecordViewModel.kt b/feature/record/src/main/java/com/example/record/RecordViewModel.kt index aec817fa..e12189f1 100644 --- a/feature/record/src/main/java/com/example/record/RecordViewModel.kt +++ b/feature/record/src/main/java/com/example/record/RecordViewModel.kt @@ -54,6 +54,7 @@ class RecordViewModel init { val now = YearMonth.now() + setDate(year = now.year, month = now.month.value) loadQuestions(year = now.year, month = now.month.value) } From 98c137e813d5b0b94bd7b01e62eddea816a27368 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=89=E1=85=B5=E1=86=AB=E1=84=86=E1=85=B5=E1=86=AB?= =?UTF-8?q?=E1=84=89=E1=85=A5=E1=86=A8?= <122257945+t1nm1ksun@users.noreply.github.com> Date: Sun, 1 Feb 2026 15:17:06 +0900 Subject: [PATCH 19/19] =?UTF-8?q?[fix]=20#95=20=EC=95=B1=EC=9D=B4=EB=A6=84?= =?UTF-8?q?=20=ED=95=9C=EA=B5=AD=EC=96=B4=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index db44d97f..6727d01a 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,5 @@ - Dplay + 디플레이 디플레이 오늘의 질문이 도착했어요 \ No newline at end of file