From c4f4490a564cb622b1e7ab20ef265556e8ccba27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A4=EC=B0=AC?= Date: Thu, 2 May 2024 17:30:13 +0900 Subject: [PATCH] Fix:[snsproject] format ktlint --- presentation/build.gradle.kts | 6 +- .../example/presentation/main/MainActivity.kt | 27 +++--- .../example/presentation/main/MainNavHost.kt | 1 - .../presentation/main/board/BoardCard.kt | 68 ++++++++------- .../presentation/main/board/BoardHeader.kt | 16 ++-- .../main/board/BoardOptionDialog.kt | 21 ++--- .../presentation/main/board/BoardScreen.kt | 27 +++--- .../presentation/main/board/BoardViewModel.kt | 86 ++++++++++--------- .../presentation/model/BoardCardModel.kt | 6 +- 9 files changed, 128 insertions(+), 130 deletions(-) diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts index d5aa6c2..b32257c 100644 --- a/presentation/build.gradle.kts +++ b/presentation/build.gradle.kts @@ -80,7 +80,7 @@ dependencies { // coil implementation(libs.coil.compose) - - //paging3 - implementation (libs.androidx.paging.compose.v321) + + // paging3 + implementation(libs.androidx.paging.compose.v321) } diff --git a/presentation/src/main/java/com/example/presentation/main/MainActivity.kt b/presentation/src/main/java/com/example/presentation/main/MainActivity.kt index 0b48f11..d6b5ee4 100644 --- a/presentation/src/main/java/com/example/presentation/main/MainActivity.kt +++ b/presentation/src/main/java/com/example/presentation/main/MainActivity.kt @@ -16,19 +16,21 @@ import dagger.hilt.android.AndroidEntryPoint @AndroidEntryPoint class MainActivity : AppCompatActivity() { - - - private val receiver = object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - intent?.let { - if(it.action == ACTION_POSTED){ - boardViewModel.load() + private val receiver = + object : BroadcastReceiver() { + override fun onReceive( + context: Context?, + intent: Intent?, + ) { + intent?.let { + if (it.action == ACTION_POSTED) { + boardViewModel.load() + } } } } - } - - private val boardViewModel : BoardViewModel by viewModels() + private val boardViewModel: BoardViewModel by viewModels() + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { @@ -36,13 +38,12 @@ class MainActivity : AppCompatActivity() { MainNavHost(boardViewModel) } } - + ContextCompat.registerReceiver( this, receiver, IntentFilter(ACTION_POSTED), - ContextCompat.RECEIVER_NOT_EXPORTED + ContextCompat.RECEIVER_NOT_EXPORTED, ) } - } diff --git a/presentation/src/main/java/com/example/presentation/main/MainNavHost.kt b/presentation/src/main/java/com/example/presentation/main/MainNavHost.kt index 84f257a..d3bbd99 100644 --- a/presentation/src/main/java/com/example/presentation/main/MainNavHost.kt +++ b/presentation/src/main/java/com/example/presentation/main/MainNavHost.kt @@ -9,7 +9,6 @@ import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController diff --git a/presentation/src/main/java/com/example/presentation/main/board/BoardCard.kt b/presentation/src/main/java/com/example/presentation/main/board/BoardCard.kt index e758e45..ec7ef09 100644 --- a/presentation/src/main/java/com/example/presentation/main/board/BoardCard.kt +++ b/presentation/src/main/java/com/example/presentation/main/board/BoardCard.kt @@ -23,7 +23,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.example.domain.model.Image import com.example.presentation.component.ImagePager import com.example.presentation.ui.theme.SnsProjectTheme @@ -35,31 +34,34 @@ fun BoardCard( images: List, text: String, onOptionClick: () -> Unit, - onReplyClick: () -> Unit + onReplyClick: () -> Unit, ) { Surface { - val pagerState = rememberPagerState( - pageCount = { images.size } - ) - + val pagerState = + rememberPagerState( + pageCount = { images.size }, + ) + Column( - modifier = Modifier - .padding(horizontal = 16.dp, vertical = 8.dp) - .fillMaxWidth() - .background(color = MaterialTheme.colorScheme.onPrimary, shape = RoundedCornerShape(16.dp)) + modifier = + Modifier + .padding(horizontal = 16.dp, vertical = 8.dp) + .fillMaxWidth() + .background(color = MaterialTheme.colorScheme.onPrimary, shape = RoundedCornerShape(16.dp)), ) { - //Header + // Header BoardHeader( modifier = Modifier.fillMaxWidth(), profileImageUrl = profileImageUrl, username = username, - onOptionClick = onOptionClick) - //ImagePager + onOptionClick = onOptionClick, + ) + // ImagePager if (images.isNotEmpty()) { ImagePager( modifier = Modifier.fillMaxWidth().aspectRatio(1f), images = images, - pagerState = pagerState + pagerState = pagerState, ) } var maxLines by remember { @@ -68,40 +70,42 @@ fun BoardCard( var showMore by remember { mutableStateOf(false) } - //content + // content Text( - modifier = Modifier - .padding(top = 4.dp) - .fillMaxWidth() - .padding(horizontal = 8.dp), + modifier = + Modifier + .padding(top = 4.dp) + .fillMaxWidth() + .padding(horizontal = 8.dp), text = text, maxLines = maxLines, overflow = TextOverflow.Ellipsis, onTextLayout = { textLayoutResult -> showMore = textLayoutResult.didOverflowHeight - } + }, ) - + if (showMore) { TextButton(onClick = { maxLines = Int.MAX_VALUE }) { Text( text = "더보기", - style = MaterialTheme.typography.labelLarge) + style = MaterialTheme.typography.labelLarge, + ) } } - - - //comment + + // comment TextButton( - modifier = Modifier - .padding(top = 8.dp) - .padding(horizontal = 8.dp) - .align(Alignment.End), - onClick = onReplyClick) { + modifier = + Modifier + .padding(top = 8.dp) + .padding(horizontal = 8.dp) + .align(Alignment.End), + onClick = onReplyClick, + ) { Text(text = "댓글") } } - } } @@ -115,7 +119,7 @@ private fun BoardCardPreview() { images = listOf(), text = "내용\n내용\n내용\n내용\n내용\n내용\n내용\n내용\n12312312내용\n내용\n12313", onOptionClick = {}, - onReplyClick = {} + onReplyClick = {}, ) } } diff --git a/presentation/src/main/java/com/example/presentation/main/board/BoardHeader.kt b/presentation/src/main/java/com/example/presentation/main/board/BoardHeader.kt index a1d603c..2e216b6 100644 --- a/presentation/src/main/java/com/example/presentation/main/board/BoardHeader.kt +++ b/presentation/src/main/java/com/example/presentation/main/board/BoardHeader.kt @@ -25,25 +25,25 @@ fun BoardHeader( modifier: Modifier, profileImageUrl: String? = null, username: String, - onOptionClick: () -> Unit + onOptionClick: () -> Unit, ) { Row( modifier = modifier, - verticalAlignment = Alignment.CenterVertically + verticalAlignment = Alignment.CenterVertically, ) { ProfileImage(modifier = Modifier.padding(start = 8.dp).size(36.dp), profileImageUrl = profileImageUrl, borderWidth = 1.dp) - + Text( modifier = Modifier.padding(horizontal = 8.dp), text = username, - style = MaterialTheme.typography.titleMedium + style = MaterialTheme.typography.titleMedium, ) - + Spacer(modifier = Modifier.weight(1f)) IconButton(onClick = onOptionClick) { Icon( imageVector = Icons.Filled.MoreVert, - contentDescription = "옵션" + contentDescription = "옵션", ) } } @@ -53,12 +53,12 @@ fun BoardHeader( @Composable private fun BoardHeaderPreview() { SnsProjectTheme { - Surface(color = Color.Gray){ + Surface(color = Color.Gray) { BoardHeader( Modifier, null, "이름", - {} + {}, ) } } diff --git a/presentation/src/main/java/com/example/presentation/main/board/BoardOptionDialog.kt b/presentation/src/main/java/com/example/presentation/main/board/BoardOptionDialog.kt index e85f490..3f4c700 100644 --- a/presentation/src/main/java/com/example/presentation/main/board/BoardOptionDialog.kt +++ b/presentation/src/main/java/com/example/presentation/main/board/BoardOptionDialog.kt @@ -2,11 +2,9 @@ package com.example.presentation.main.board import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable @@ -25,15 +23,14 @@ import com.example.presentation.ui.theme.SnsProjectTheme fun BoardOptionDialog( boardCardModel: BoardCardModel?, onDismissRequest: () -> Unit, - onBoardDelete: (BoardCardModel) -> Unit + onBoardDelete: (BoardCardModel) -> Unit, ) { - if (boardCardModel!=null) { + if (boardCardModel != null) { Dialog(onDismissRequest = onDismissRequest) { - Column( modifier = Modifier, verticalArrangement = Arrangement.Center, - horizontalAlignment = Alignment.CenterHorizontally + horizontalAlignment = Alignment.CenterHorizontally, ) { TextButton( modifier = Modifier.fillMaxWidth(0.8f), @@ -41,15 +38,15 @@ fun BoardOptionDialog( onBoardDelete(boardCardModel) onDismissRequest() }, - colors = ButtonDefaults.buttonColors( - containerColor = MaterialTheme.colorScheme.onSecondaryContainer, - contentColor = MaterialTheme.colorScheme.secondary - ) + colors = + ButtonDefaults.buttonColors( + containerColor = MaterialTheme.colorScheme.onSecondaryContainer, + contentColor = MaterialTheme.colorScheme.secondary, + ), ) { Text(text = "삭제") } } - } } } @@ -64,7 +61,7 @@ private fun BoardOptionDialogPreview() { BoardOptionDialog( boardCardModel = null, onDismissRequest = { visible = false }, - onBoardDelete = {} + onBoardDelete = {}, ) } } diff --git a/presentation/src/main/java/com/example/presentation/main/board/BoardScreen.kt b/presentation/src/main/java/com/example/presentation/main/board/BoardScreen.kt index 6aff8f3..4a1f1e8 100644 --- a/presentation/src/main/java/com/example/presentation/main/board/BoardScreen.kt +++ b/presentation/src/main/java/com/example/presentation/main/board/BoardScreen.kt @@ -12,7 +12,6 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.tooling.preview.Preview -import androidx.hilt.navigation.compose.hiltViewModel import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems import com.example.presentation.model.BoardCardModel @@ -21,36 +20,32 @@ import org.orbitmvi.orbit.compose.collectAsState import org.orbitmvi.orbit.compose.collectSideEffect @Composable -fun BoardScreen( - viewModel : BoardViewModel -) { +fun BoardScreen(viewModel: BoardViewModel) { val state = viewModel.collectAsState().value val items = state.boardCardModelFLow.collectAsLazyPagingItems() val context = LocalContext.current - var modelForDialog by remember { mutableStateOf(null) } - - viewModel.collectSideEffect {sideEffect -> - when(sideEffect) { + viewModel.collectSideEffect { sideEffect -> + when (sideEffect) { is BoardSideEffect.Toast -> Toast.makeText(context, sideEffect.message, Toast.LENGTH_SHORT).show() } } - + BoardScreen( boardCardModel = items, onOptionClick = { - modelForDialog = it + modelForDialog = it }, deletedBoardIds = state.deletedBoardIds, - onRelyClick = {} + onRelyClick = {}, ) BoardOptionDialog( boardCardModel = modelForDialog, onDismissRequest = { modelForDialog = null }, - onBoardDelete = viewModel::onBoardDelete - ) + onBoardDelete = viewModel::onBoardDelete, + ) } @Composable @@ -58,7 +53,7 @@ fun BoardScreen( boardCardModel: LazyPagingItems, deletedBoardIds: Set, onOptionClick: (BoardCardModel) -> Unit, - onRelyClick: (BoardCardModel) -> Unit + onRelyClick: (BoardCardModel) -> Unit, ) { Surface { LazyColumn(modifier = Modifier.fillMaxSize()) { @@ -66,7 +61,7 @@ fun BoardScreen( boardCardModel[it]?.boardId ?: it }) { index -> boardCardModel[index]?.run { - if(!deletedBoardIds.contains(this.boardId)){ + if (!deletedBoardIds.contains(this.boardId)) { BoardCard( username = username, images = images, @@ -74,7 +69,7 @@ fun BoardScreen( onOptionClick = { onOptionClick(this) }, - onReplyClick = { onRelyClick(this) } + onReplyClick = { onRelyClick(this) }, ) } } diff --git a/presentation/src/main/java/com/example/presentation/main/board/BoardViewModel.kt b/presentation/src/main/java/com/example/presentation/main/board/BoardViewModel.kt index 564487d..699d662 100644 --- a/presentation/src/main/java/com/example/presentation/main/board/BoardViewModel.kt +++ b/presentation/src/main/java/com/example/presentation/main/board/BoardViewModel.kt @@ -1,12 +1,8 @@ package com.example.presentation.main.board -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent import androidx.lifecycle.ViewModel import androidx.paging.PagingData import androidx.paging.map -import com.example.domain.model.ACTION_POSTED import com.example.domain.model.Board import com.example.domain.usecase.main.board.DeleteBoardUseCase import com.example.domain.usecase.main.board.GetBoardUseCase @@ -26,51 +22,57 @@ import org.orbitmvi.orbit.syntax.simple.reduce import org.orbitmvi.orbit.viewmodel.container @HiltViewModel -class BoardViewModel @Inject constructor( - private val getBoardUseCase: GetBoardUseCase, - private val deleteBoardUseCase: DeleteBoardUseCase -): ViewModel(), ContainerHost { - - override val container: Container = container( - initialState = BoardState(), - buildSettings = { - this.exceptionHandler = CoroutineExceptionHandler { _, throwable -> - intent { - postSideEffect(BoardSideEffect.Toast(throwable.message ?: "")) - } - } - } - ) - - init { - load() - } - - fun load() = intent { - val boardFlow = getBoardUseCase().getOrThrow() - val boardCardModelFlow = boardFlow.map { value: PagingData -> - value.map { board -> board.toUiModel() } - } - reduce { - state.copy(boardCardModelFLow = boardCardModelFlow) - } - } - - fun onBoardDelete(boardCardModel : BoardCardModel) = intent { - deleteBoardUseCase(boardCardModel.boardId).getOrThrow() - reduce { - state.copy( - deletedBoardIds = state.deletedBoardIds + boardCardModel.boardId +class BoardViewModel + @Inject + constructor( + private val getBoardUseCase: GetBoardUseCase, + private val deleteBoardUseCase: DeleteBoardUseCase, + ) : ViewModel(), ContainerHost { + override val container: Container = + container( + initialState = BoardState(), + buildSettings = { + this.exceptionHandler = + CoroutineExceptionHandler { _, throwable -> + intent { + postSideEffect(BoardSideEffect.Toast(throwable.message ?: "")) + } + } + }, ) + + init { + load() } + + fun load() = + intent { + val boardFlow = getBoardUseCase().getOrThrow() + val boardCardModelFlow = + boardFlow.map { value: PagingData -> + value.map { board -> board.toUiModel() } + } + reduce { + state.copy(boardCardModelFLow = boardCardModelFlow) + } + } + + fun onBoardDelete(boardCardModel: BoardCardModel) = + intent { + deleteBoardUseCase(boardCardModel.boardId).getOrThrow() + reduce { + state.copy( + deletedBoardIds = state.deletedBoardIds + boardCardModel.boardId, + ) + } + } } -} data class BoardState( val boardCardModelFLow: Flow> = emptyFlow(), - val deletedBoardIds: Set = emptySet() + val deletedBoardIds: Set = emptySet(), ) sealed interface BoardSideEffect { - class Toast(val message: String): BoardSideEffect + class Toast(val message: String) : BoardSideEffect } diff --git a/presentation/src/main/java/com/example/presentation/model/BoardCardModel.kt b/presentation/src/main/java/com/example/presentation/model/BoardCardModel.kt index 3438eb3..d2fb4ab 100644 --- a/presentation/src/main/java/com/example/presentation/model/BoardCardModel.kt +++ b/presentation/src/main/java/com/example/presentation/model/BoardCardModel.kt @@ -8,14 +8,14 @@ data class BoardCardModel( val boardId: Long, val images: List, val username: String, - val text: String + val text: String, ) -fun Board.toUiModel() : BoardCardModel { +fun Board.toUiModel(): BoardCardModel { return BoardCardModel( boardId = this.id, username = this.username, images = this.images, - text = this.content + text = this.content, ) }