Skip to content

Commit

Permalink
Merge pull request #79 from YAPP-Github/feature/jaino/#74
Browse files Browse the repository at this point in the history
#74 : 차단된 메세지 리스트업 및 차단 해제 구현
  • Loading branch information
jeongjaino authored Aug 6, 2024
2 parents d33361d + f55a9e4 commit c15b4e9
Show file tree
Hide file tree
Showing 31 changed files with 450 additions and 127 deletions.
5 changes: 5 additions & 0 deletions app/src/main/kotlin/com/bff/wespot/AppNavGraphs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import androidx.navigation.NavDestination.Companion.hierarchy
import androidx.navigation.NavGraph
import androidx.navigation.NavHostController
import com.bff.wespot.entire.screen.screen.destinations.AccountSettingScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.BlockListScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.EntireScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.NotificationSettingScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.RevokeConfirmScreenDestination
Expand All @@ -25,6 +26,7 @@ import com.bff.wespot.message.screen.destinations.MessageWriteScreenDestination
import com.bff.wespot.message.screen.destinations.ReceiverSelectionScreenDestination
import com.bff.wespot.message.screen.destinations.ReservedMessageScreenDestination
import com.bff.wespot.message.viewmodel.SendViewModel
import com.bff.wespot.navigation.Navigator
import com.bff.wespot.vote.screen.destinations.CharacterSettingScreenDestination
import com.bff.wespot.vote.screen.destinations.IndividualVoteScreenDestination
import com.bff.wespot.vote.screen.destinations.IntroductionScreenDestination
Expand Down Expand Up @@ -87,6 +89,7 @@ object AppNavGraphs {
AccountSettingScreenDestination,
RevokeScreenDestination,
RevokeConfirmScreenDestination,
BlockListScreenDestination,
).routedIn(this)
.associateBy { it.route }
}
Expand Down Expand Up @@ -144,6 +147,7 @@ fun DestinationScopeWithNoDependencies<*>.currentNavigator(): CommonNavGraphNavi
@Composable
internal fun AppNavigation(
navController: NavHostController,
navigator: Navigator,
modifier: Modifier = Modifier,
) {
val engine = rememberNavHostEngine(
Expand All @@ -163,6 +167,7 @@ internal fun AppNavigation(
modifier = modifier,
dependenciesContainerBuilder = {
dependency(currentNavigator())
dependency(navigator)
dependency(sendViewModel)
dependency(votingViewModel)
},
Expand Down
7 changes: 7 additions & 0 deletions app/src/main/kotlin/com/bff/wespot/CommonNavGraphNavigator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.bff.wespot

import androidx.navigation.NavController
import com.bff.wespot.entire.screen.screen.AccountSettingNavigator
import com.bff.wespot.entire.screen.screen.BlockListNavigator
import com.bff.wespot.entire.screen.screen.EntireNavigator
import com.bff.wespot.entire.screen.screen.NotificationSettingNavigator
import com.bff.wespot.entire.screen.screen.SettingNavigator
import com.bff.wespot.entire.screen.screen.destinations.AccountSettingScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.BlockListScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.NotificationSettingScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.RevokeConfirmScreenDestination
import com.bff.wespot.entire.screen.screen.destinations.RevokeScreenDestination
Expand Down Expand Up @@ -61,6 +63,7 @@ class CommonNavGraphNavigator(
AccountSettingNavigator,
RevokeNavigator,
RevokeConfirmNavigator,
BlockListNavigator,
VotingNavigator,
VoteResultNavigator,
VoteStorageNavigator,
Expand Down Expand Up @@ -139,6 +142,10 @@ class CommonNavGraphNavigator(
navController.navigate(IndividualVoteScreenDestination(args) within navGraph)
}

override fun navigateToBlockListScreen() {
navController.navigate(BlockListScreenDestination within navGraph)
}

override fun navigateToCharacterScreen() {
navController.navigate(CharacterSettingScreenDestination within navGraph)
}
Expand Down
11 changes: 8 additions & 3 deletions app/src/main/kotlin/com/bff/wespot/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,27 +40,32 @@ import com.bff.wespot.designsystem.component.header.WSTopBar
import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotTheme
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.navigation.Navigator
import com.ramcosta.composedestinations.navigation.navigate
import com.ramcosta.composedestinations.spec.NavGraphSpec
import dagger.hilt.android.AndroidEntryPoint
import timber.log.Timber
import javax.inject.Inject

@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@Inject
lateinit var navigator: Navigator

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

setContent {
WeSpotTheme {
MainScreen()
MainScreen(navigator)
}
}
}
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun MainScreen() {
private fun MainScreen(navigator: Navigator) {
val navController = rememberNavController()

val checkScreen by navController.checkCurrentScreen()
Expand Down Expand Up @@ -118,7 +123,7 @@ private fun MainScreen() {
}
},
) {
AppNavigation(navController = navController, modifier = Modifier.padding(it))
AppNavigation(navController = navController, navigator, modifier = Modifier.padding(it))
}
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.bff.wespot.model.message

data class Sender(
val id: Int,
val backgroundColor: String,
val iconUrl: String,
) {
constructor() : this(-1, "", "")
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.bff.wespot.model.message.response

import com.bff.wespot.model.message.Sender
import com.bff.wespot.model.user.response.User
import java.time.LocalDateTime

data class BlockedMessage(
val id: Int,
val senderName: String,
val senderProfile: Sender,
val receiver: User,
val content: String,
val receivedAt: LocalDateTime?,
val isRead: Boolean,
val isReported: Boolean,
val isBlocked: Boolean,
) {
constructor() : this(-1, "", Sender(), User(), "", LocalDateTime.MIN, false, false, false)
}
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ fun IntroductionScreen(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 20.dp),
contentAlignment = Alignment.CenterEnd
contentAlignment = Alignment.CenterEnd,
) {
LetterCountIndicator(currentCount = introduction.length, maxCount = 20)
}
Expand Down
111 changes: 111 additions & 0 deletions core/ui/src/main/kotlin/com/bff/wespot/ui/ReservedMessageItem.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.bff.wespot.ui

import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.FilterChip
import androidx.compose.material3.FilterChipDefaults
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import coil.compose.AsyncImage
import coil.request.ImageRequest
import com.bff.wespot.designsystem.theme.Gray400
import com.bff.wespot.designsystem.theme.Gray600
import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.util.hexToColor

@Composable
fun ReservedMessageItem(
title: String,
subTitle: String,
backgroundColor: String,
iconUrl: String,
chipText: String,
chipEnabled: Boolean = true,
chipDisabledText: String = "",
onClick: () -> Unit,
) {
Column {
Row(
modifier = Modifier.padding(start = 18.dp, end = 18.dp, top = 12.dp),
verticalAlignment = Alignment.CenterVertically,
) {
Box(
modifier = Modifier
.size(42.dp)
.clip(CircleShape)
.background(
runCatching {
hexToColor(backgroundColor)
}.getOrDefault(WeSpotThemeManager.colors.cardBackgroundColor),
),
contentAlignment = Alignment.Center,
) {
AsyncImage(
model = ImageRequest.Builder(LocalContext.current)
.data(iconUrl)
.crossfade(true)
.build(),
contentDescription = stringResource(com.bff.wespot.ui.R.string.user_character_image),
)
}

Column(
modifier = Modifier
.padding(horizontal = 10.dp)
.weight(1f),
) {
Text(
text = title,
style = StaticTypeScale.Default.body6,
color = WeSpotThemeManager.colors.txtSubColor,
)

Text(
text = subTitle,
style = StaticTypeScale.Default.body6,
color = WeSpotThemeManager.colors.txtTitleColor,
)
}

FilterChip(
shape = WeSpotThemeManager.shapes.extraLarge,
onClick = { onClick() },
selected = false,
label = {
Text(
text = if (chipEnabled) chipText else chipDisabledText,
style = StaticTypeScale.Default.body6,
)
},
enabled = chipEnabled,
border = null,
colors = FilterChipDefaults.filterChipColors(
containerColor = WeSpotThemeManager.colors.secondaryBtnColor,
labelColor = Color(0xFFF7F7F8),
disabledContainerColor = Gray600,
disabledLabelColor = Gray400,
),
)
}

HorizontalDivider(
modifier = Modifier.padding(top = 24.dp, start = 24.dp, end = 24.dp),
thickness = 1.dp,
color = WeSpotThemeManager.colors.cardBackgroundColor,
)
}
}
5 changes: 2 additions & 3 deletions core/ui/src/main/kotlin/com/bff/wespot/ui/WSListItem.kt
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.bff.wespot.ui

import android.graphics.Color.parseColor
import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
Expand All @@ -21,7 +20,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
Expand All @@ -32,6 +30,7 @@ import com.bff.wespot.designsystem.theme.StaticTypeScale
import com.bff.wespot.designsystem.theme.WeSpotTheme
import com.bff.wespot.designsystem.theme.WeSpotThemeManager
import com.bff.wespot.designsystem.util.OrientationPreviews
import com.bff.wespot.util.hexToColor

@Composable
fun WSListItem(
Expand Down Expand Up @@ -69,7 +68,7 @@ fun WSListItem(
.clip(CircleShape)
.background(
if (backgroundColor.isNotEmpty()) {
Color(parseColor(backgroundColor))
hexToColor(backgroundColor)
} else {
WeSpotThemeManager.colors.cardBackgroundColor
},
Expand Down
4 changes: 0 additions & 4 deletions core/ui/src/main/res/values/string.xml

This file was deleted.

4 changes: 3 additions & 1 deletion core/ui/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="user_character_image">User Character Image</string>
<string name="message_edit">수정하기</string>
<string name="school_icon">school icon</string>
<string name="select_character">%1$s님을 잘 나타낼 수 있는 \n캐릭터를 선택해 주세요</string>
<string name="character">캐릭터 고르기</string>
<string name="background">배경 색 고르기</string>
<string name="complete">선택 완료</string>
<string name="introduce_to_friend">친구들에게 %1$s을 소개하는 한 줄을 작성해주세요</string>
<string name="introduction_placeholder">안녕 나는 1반의 비타민</string>
<string name="edit_complete">작성 완료</string>
</resources>
</resources>
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.bff.wespot.data.remote.model.message.response

import com.bff.wespot.data.remote.extensions.toISOLocalDateTime
import com.bff.wespot.data.remote.model.user.response.UserDto
import com.bff.wespot.model.message.response.BlockedMessage
import kotlinx.serialization.Serializable

@Serializable
data class BlockedMessageListDto(
val messages: List<BlockedMessageDto>,
)

@Serializable
data class BlockedMessageDto(
val id: Int,
val senderName: String,
val senderProfile: SenderDto,
val receiver: UserDto,
val content: String,
val receivedAt: String?,
val isRead: Boolean,
val isReported: Boolean,
val isBlocked: Boolean,
) {
fun toBlockedMessage(): BlockedMessage = BlockedMessage(
id = id,
senderName = senderName,
senderProfile = senderProfile.toSender(),
receiver = receiver.toUser(),
content = content,
receivedAt = receivedAt?.toISOLocalDateTime(),
isRead = isRead,
isReported = isReported,
isBlocked = isBlocked,
)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package com.bff.wespot.data.remote.model.message.response

import com.bff.wespot.model.message.Sender
import kotlinx.serialization.Serializable

@Serializable
data class SenderDto (
val id: Int,
val backgroundColor: String,
val iconUrl: String,
) {
fun toSender(): Sender = Sender(
id = id,
backgroundColor = backgroundColor,
iconUrl = iconUrl,
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ package com.bff.wespot.data.remote.source.message

import com.bff.wespot.data.remote.model.message.request.MessageTypeDto
import com.bff.wespot.data.remote.model.message.request.SentMessageDto
import com.bff.wespot.data.remote.model.message.response.BlockedMessageListDto
import com.bff.wespot.data.remote.model.message.response.MessageDto
import com.bff.wespot.data.remote.model.message.response.MessageIdDto
import com.bff.wespot.data.remote.model.message.response.MessageListDto
import com.bff.wespot.data.remote.model.message.response.MessageStatusDto
import com.bff.wespot.model.message.response.Message

interface MessageDataSource {
suspend fun getMessageList(
Expand All @@ -20,4 +22,6 @@ interface MessageDataSource {
suspend fun editMessage(messageId: Int, sentMessageDto: SentMessageDto): Result<Unit>

suspend fun getMessage(messageId: Int): Result<MessageDto>

suspend fun getBlockedMessage(cursorId: Int): Result<BlockedMessageListDto>
}
Loading

0 comments on commit c15b4e9

Please sign in to comment.