diff --git a/app/src/main/java/com/hsLink/hslink/core/designsystem/component/HsLinkDialog.kt b/app/src/main/java/com/hsLink/hslink/core/designsystem/component/HsLinkDialog.kt index 25daaef..7e3a60a 100644 --- a/app/src/main/java/com/hsLink/hslink/core/designsystem/component/HsLinkDialog.kt +++ b/app/src/main/java/com/hsLink/hslink/core/designsystem/component/HsLinkDialog.kt @@ -68,7 +68,7 @@ fun HsLinkDialog( Text( text = dismissText, color = HsLinkTheme.colors.Grey500, - style = HsLinkTheme.typography.btm_M, + style = HsLinkTheme.typography.btm_S, ) } @@ -86,7 +86,7 @@ fun HsLinkDialog( Text( text = confirmText, color = HsLinkTheme.colors.Common, - style = HsLinkTheme.typography.btm_M, + style = HsLinkTheme.typography.btm_S, ) } } diff --git a/app/src/main/java/com/hsLink/hslink/data/DummyDto.kt b/app/src/main/java/com/hsLink/hslink/data/DummyDto.kt deleted file mode 100644 index 6769236..0000000 --- a/app/src/main/java/com/hsLink/hslink/data/DummyDto.kt +++ /dev/null @@ -1,4 +0,0 @@ -package com.hsLink.hslink.data - -class DummyDto { -} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/di/DataSourceModule.kt b/app/src/main/java/com/hsLink/hslink/data/di/DataSourceModule.kt index f62552f..fa50490 100644 --- a/app/src/main/java/com/hsLink/hslink/data/di/DataSourceModule.kt +++ b/app/src/main/java/com/hsLink/hslink/data/di/DataSourceModule.kt @@ -1,6 +1,8 @@ package com.hsLink.hslink.data.di +import com.hsLink.hslink.data.remote.datasource.CommunityPostDataSource import com.hsLink.hslink.data.remote.datasource.PostDataSource +import com.hsLink.hslink.data.remote.datasourceimpl.CommunityPostDataSourceImpl import com.hsLink.hslink.data.remote.datasourceimpl.PostDataSourceImpl import dagger.Binds import dagger.Module @@ -14,4 +16,9 @@ interface DataSourceModule { abstract fun bindePostRemoteDataSource( postDataSourceImpl: PostDataSourceImpl, ): PostDataSource + + @Binds + abstract fun bindsPostLocalDataSource( + communityPostDataSourceImpl: CommunityPostDataSourceImpl, + ): CommunityPostDataSource } \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/di/NetworkModule.kt b/app/src/main/java/com/hsLink/hslink/data/di/NetworkModule.kt index 2ce4ae5..bd684e6 100644 --- a/app/src/main/java/com/hsLink/hslink/data/di/NetworkModule.kt +++ b/app/src/main/java/com/hsLink/hslink/data/di/NetworkModule.kt @@ -1,6 +1,7 @@ package com.hsLink.hslink.data.di import com.hsLink.hslink.BuildConfig +import com.hsLink.hslink.data.service.commuunity.CommunityPostService import com.hsLink.hslink.data.service.home.PostService import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import dagger.Module @@ -63,4 +64,9 @@ object NetworkModule { @Singleton fun providePostService(retrofit: Retrofit): PostService = retrofit.create(PostService::class.java) + + @Provides + @Singleton + fun provideCommunityPostService(retrofit: Retrofit): CommunityPostService = + retrofit.create(CommunityPostService::class.java) } \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/di/RepositoryModule.kt b/app/src/main/java/com/hsLink/hslink/data/di/RepositoryModule.kt index 1f898fc..029efd8 100644 --- a/app/src/main/java/com/hsLink/hslink/data/di/RepositoryModule.kt +++ b/app/src/main/java/com/hsLink/hslink/data/di/RepositoryModule.kt @@ -1,9 +1,11 @@ package com.hsLink.hslink.data.di +import com.hsLink.hslink.data.repositoryimpl.CommunityRepositoryImpl import com.hsLink.hslink.data.repositoryimpl.DummyRepositoryImpl -import com.hsLink.hslink.data.repositoryimpl.PostRepositoryImpl +import com.hsLink.hslink.data.repositoryimpl.home.PostRepositoryImpl import com.hsLink.hslink.domain.DummyRepository -import com.hsLink.hslink.domain.repository.PostRepository +import com.hsLink.hslink.domain.repository.community.CommunityRepository +import com.hsLink.hslink.domain.repository.home.PostRepository import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -23,4 +25,9 @@ interface RepositoryModule { postRepositoryImpl: PostRepositoryImpl, ): PostRepository + @Binds + fun bindsCommunityPostRepository( + communityPostRepositoryImpl: CommunityRepositoryImpl, + ): CommunityRepository + } \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/dto/DummyDto.kt b/app/src/main/java/com/hsLink/hslink/data/dto/DummyDto.kt new file mode 100644 index 0000000..83eae57 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/dto/DummyDto.kt @@ -0,0 +1,4 @@ +package com.hsLink.hslink.data.dto + +class DummyDto { +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/dto/request/PostRequestDto.kt b/app/src/main/java/com/hsLink/hslink/data/dto/request/PostRequestDto.kt index a37b0a9..b861d1e 100644 --- a/app/src/main/java/com/hsLink/hslink/data/dto/request/PostRequestDto.kt +++ b/app/src/main/java/com/hsLink/hslink/data/dto/request/PostRequestDto.kt @@ -1,4 +1,14 @@ package com.hsLink.hslink.data.dto.request -class PostRequestDto { -} \ No newline at end of file +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PostRequestDto ( + @SerialName("postType") + val postType: String, + @SerialName("title") + val title : String, + @SerialName("body") + val body : String +) diff --git a/app/src/main/java/com/hsLink/hslink/data/dto/response/CommunityPostResponseDto.kt b/app/src/main/java/com/hsLink/hslink/data/dto/response/CommunityPostResponseDto.kt new file mode 100644 index 0000000..3238825 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/dto/response/CommunityPostResponseDto.kt @@ -0,0 +1,18 @@ +package com.hsLink.hslink.data.dto.response + +import com.hsLink.hslink.domain.model.community.CommunityPostResponseEntity +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CommunityPostResponseDto ( + @SerialName("postId") + val postId: Int, +) + + +fun CommunityPostResponseDto.toEntity(): CommunityPostResponseEntity { + return CommunityPostResponseEntity( + postId = this.postId, + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/dto/response/PostResponseDto.kt b/app/src/main/java/com/hsLink/hslink/data/dto/response/PostResponseDto.kt index 81574ba..e422bdc 100644 --- a/app/src/main/java/com/hsLink/hslink/data/dto/response/PostResponseDto.kt +++ b/app/src/main/java/com/hsLink/hslink/data/dto/response/PostResponseDto.kt @@ -1,7 +1,7 @@ package com.hsLink.hslink.data.dto.response -import com.hsLink.hslink.domain.model.PostPopularEntity -import com.hsLink.hslink.domain.model.PostPromotionEntity +import com.hsLink.hslink.domain.model.home.PostPopularEntity +import com.hsLink.hslink.domain.model.home.PostPromotionEntity import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/app/src/main/java/com/hsLink/hslink/data/remote/datasource/CommunityPostDataSource.kt b/app/src/main/java/com/hsLink/hslink/data/remote/datasource/CommunityPostDataSource.kt new file mode 100644 index 0000000..6784ca2 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/remote/datasource/CommunityPostDataSource.kt @@ -0,0 +1,11 @@ +package com.hsLink.hslink.data.remote.datasource + +import com.hsLink.hslink.core.network.BaseResponse +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.data.dto.response.CommunityPostResponseDto + +interface CommunityPostDataSource { + suspend fun createCommunityPost( + request : PostRequestDto + ): BaseResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/remote/datasourceimpl/CommunityPostDataSourceImpl.kt b/app/src/main/java/com/hsLink/hslink/data/remote/datasourceimpl/CommunityPostDataSourceImpl.kt new file mode 100644 index 0000000..cb2ec8f --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/remote/datasourceimpl/CommunityPostDataSourceImpl.kt @@ -0,0 +1,19 @@ +package com.hsLink.hslink.data.remote.datasourceimpl + +import com.hsLink.hslink.core.network.BaseResponse +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.data.dto.response.CommunityPostResponseDto +import com.hsLink.hslink.data.remote.datasource.CommunityPostDataSource +import com.hsLink.hslink.data.service.commuunity.CommunityPostService +import javax.inject.Inject + +class CommunityPostDataSourceImpl @Inject constructor( + private val communityPostService: CommunityPostService +) : CommunityPostDataSource { + override suspend fun createCommunityPost( + request : PostRequestDto + ) : BaseResponse { + // TODO: Replace dummy token with real access token + return communityPostService.postCommunity(token = "", requestBody = request) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/CommunityRepositoryImpl.kt b/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/CommunityRepositoryImpl.kt new file mode 100644 index 0000000..f1d16d2 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/CommunityRepositoryImpl.kt @@ -0,0 +1,20 @@ +package com.hsLink.hslink.data.repositoryimpl + +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.data.dto.response.CommunityPostResponseDto +import com.hsLink.hslink.data.remote.datasourceimpl.CommunityPostDataSourceImpl +import com.hsLink.hslink.domain.repository.community.CommunityRepository +import javax.inject.Inject + +class CommunityRepositoryImpl @Inject constructor( + private val communityPostDataSourceImpl: CommunityPostDataSourceImpl, +) : CommunityRepository { + override suspend fun createCommunityPost(communityRequestDto: PostRequestDto): Result = runCatching { + val response = communityPostDataSourceImpl.createCommunityPost(communityRequestDto) + if (response.isSuccess) { + response.result + } else { + throw Exception(response.message) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/PostRepositoryImpl.kt b/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/home/PostRepositoryImpl.kt similarity index 80% rename from app/src/main/java/com/hsLink/hslink/data/repositoryimpl/PostRepositoryImpl.kt rename to app/src/main/java/com/hsLink/hslink/data/repositoryimpl/home/PostRepositoryImpl.kt index 4191f99..41ad244 100644 --- a/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/PostRepositoryImpl.kt +++ b/app/src/main/java/com/hsLink/hslink/data/repositoryimpl/home/PostRepositoryImpl.kt @@ -1,10 +1,10 @@ -package com.hsLink.hslink.data.repositoryimpl +package com.hsLink.hslink.data.repositoryimpl.home import com.hsLink.hslink.data.dto.response.toEntity import com.hsLink.hslink.data.remote.datasourceimpl.PostDataSourceImpl -import com.hsLink.hslink.domain.model.PostPopularEntity -import com.hsLink.hslink.domain.model.PostPromotionEntity -import com.hsLink.hslink.domain.repository.PostRepository +import com.hsLink.hslink.domain.model.home.PostPopularEntity +import com.hsLink.hslink.domain.model.home.PostPromotionEntity +import com.hsLink.hslink.domain.repository.home.PostRepository import javax.inject.Inject class PostRepositoryImpl @Inject constructor( diff --git a/app/src/main/java/com/hsLink/hslink/data/service/commuunity/CommunityPostService.kt b/app/src/main/java/com/hsLink/hslink/data/service/commuunity/CommunityPostService.kt new file mode 100644 index 0000000..7868e67 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/data/service/commuunity/CommunityPostService.kt @@ -0,0 +1,17 @@ +package com.hsLink.hslink.data.service.commuunity + +import com.hsLink.hslink.core.network.BaseResponse +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.data.dto.response.CommunityPostResponseDto +import retrofit2.http.Body +import retrofit2.http.Header +import retrofit2.http.POST + + +interface CommunityPostService { + @POST("posts") + suspend fun postCommunity( + @Header("Authorization") token: String, + @Body requestBody: PostRequestDto, + ): BaseResponse +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/domain/model/community/CommunityPostResponseEntity.kt b/app/src/main/java/com/hsLink/hslink/domain/model/community/CommunityPostResponseEntity.kt new file mode 100644 index 0000000..eab0cf2 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/domain/model/community/CommunityPostResponseEntity.kt @@ -0,0 +1,5 @@ +package com.hsLink.hslink.domain.model.community + +data class CommunityPostResponseEntity( + val postId: Int, +) \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/domain/model/PostResponseEntity.kt b/app/src/main/java/com/hsLink/hslink/domain/model/home/PostResponseEntity.kt similarity index 76% rename from app/src/main/java/com/hsLink/hslink/domain/model/PostResponseEntity.kt rename to app/src/main/java/com/hsLink/hslink/domain/model/home/PostResponseEntity.kt index adcf498..d091661 100644 --- a/app/src/main/java/com/hsLink/hslink/domain/model/PostResponseEntity.kt +++ b/app/src/main/java/com/hsLink/hslink/domain/model/home/PostResponseEntity.kt @@ -1,6 +1,4 @@ -package com.hsLink.hslink.domain.model - -import kotlinx.serialization.SerialName +package com.hsLink.hslink.domain.model.home data class PostPopularEntity ( val id: Int, diff --git a/app/src/main/java/com/hsLink/hslink/domain/repository/PostRepository.kt b/app/src/main/java/com/hsLink/hslink/domain/repository/PostRepository.kt deleted file mode 100644 index 00a9f02..0000000 --- a/app/src/main/java/com/hsLink/hslink/domain/repository/PostRepository.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.hsLink.hslink.domain.repository - -import com.hsLink.hslink.domain.model.PostPopularEntity -import com.hsLink.hslink.domain.model.PostPromotionEntity - -interface PostRepository { - suspend fun getPopularPost(): Result> - suspend fun getPromotionPost(): Result> -} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/domain/repository/community/CommunityRepository.kt b/app/src/main/java/com/hsLink/hslink/domain/repository/community/CommunityRepository.kt new file mode 100644 index 0000000..0a08789 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/domain/repository/community/CommunityRepository.kt @@ -0,0 +1,8 @@ +package com.hsLink.hslink.domain.repository.community + +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.data.dto.response.CommunityPostResponseDto + +interface CommunityRepository { + suspend fun createCommunityPost(communityRequestDto: PostRequestDto): Result +} diff --git a/app/src/main/java/com/hsLink/hslink/domain/repository/home/PostRepository.kt b/app/src/main/java/com/hsLink/hslink/domain/repository/home/PostRepository.kt new file mode 100644 index 0000000..a4a36f7 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/domain/repository/home/PostRepository.kt @@ -0,0 +1,9 @@ +package com.hsLink.hslink.domain.repository.home + +import com.hsLink.hslink.domain.model.home.PostPopularEntity +import com.hsLink.hslink.domain.model.home.PostPromotionEntity + +interface PostRepository { + suspend fun getPopularPost(): Result> + suspend fun getPromotionPost(): Result> +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/BoardSelectionField.kt b/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/BoardSelectionField.kt index 2990dc8..07a3556 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/BoardSelectionField.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/BoardSelectionField.kt @@ -83,6 +83,7 @@ fun BoardSelectionField( modifier = Modifier .fillMaxWidth() .background(HsLinkTheme.colors.Common) + .padding(horizontal = 16.dp) ) { BoardType.entries.forEach { board -> DropdownMenuItem( diff --git a/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/CommunityWriteButton.kt b/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/CommunityWriteButton.kt index fbcb8f6..6dcd658 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/CommunityWriteButton.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/community/component/write/CommunityWriteButton.kt @@ -48,7 +48,7 @@ fun CommunityWriteButton( .fillMaxWidth() .background(backColor, shape = RoundedCornerShape(8.dp)) .noRippleClickable(onClick = onClick) - .padding(vertical = 12.dp), + .padding(vertical = 12.dp, horizontal = 100.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically ) { diff --git a/app/src/main/java/com/hsLink/hslink/presentation/community/screen/write/CommunityWritingScreen.kt b/app/src/main/java/com/hsLink/hslink/presentation/community/screen/write/CommunityWritingScreen.kt index f4a0050..32e7275 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/community/screen/write/CommunityWritingScreen.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/community/screen/write/CommunityWritingScreen.kt @@ -19,6 +19,9 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.hsLink.hslink.R @@ -117,7 +120,12 @@ fun CommunityWritingScreen( verticalArrangement = Arrangement.spacedBy(8.dp) ) { Text( - text = "게시판 선택", + text = buildAnnotatedString { + append("게시판 선택 ") + withStyle(style = SpanStyle(color = HsLinkTheme.colors.Red500)) { + append("*") + } + }, color = HsLinkTheme.colors.Grey700, style = HsLinkTheme.typography.title_14Strong ) @@ -140,7 +148,12 @@ fun CommunityWritingScreen( verticalArrangement = Arrangement.spacedBy(8.dp) ) { Text( - text = "제목", + text = buildAnnotatedString { + append("제목 ") + withStyle(style = SpanStyle(color = HsLinkTheme.colors.Red500)) { + append("*") + } + }, color = HsLinkTheme.colors.Grey700, style = HsLinkTheme.typography.title_14Strong ) @@ -170,7 +183,12 @@ fun CommunityWritingScreen( verticalArrangement = Arrangement.spacedBy(8.dp) ) { Text( - text = "내용", + text = buildAnnotatedString { + append("글 작성 ") + withStyle(style = SpanStyle(color = HsLinkTheme.colors.Red500)) { + append("*") + } + }, color = HsLinkTheme.colors.Grey700, style = HsLinkTheme.typography.title_14Strong ) diff --git a/app/src/main/java/com/hsLink/hslink/presentation/community/state/CommunityContract.kt b/app/src/main/java/com/hsLink/hslink/presentation/community/state/CommunityContract.kt new file mode 100644 index 0000000..e24acd1 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/presentation/community/state/CommunityContract.kt @@ -0,0 +1,11 @@ +package com.hsLink.hslink.presentation.community.state + +import androidx.compose.runtime.Immutable +import com.hsLink.hslink.domain.model.community.CommunityPostResponseEntity + +@Immutable +data class CommunityContract ( + val isLoading: Boolean = false, + val error: String? = null, + val communityEntity: CommunityPostResponseEntity ? = null +) \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/presentation/community/viewmodel/CommunityViewModel.kt b/app/src/main/java/com/hsLink/hslink/presentation/community/viewmodel/CommunityViewModel.kt new file mode 100644 index 0000000..efe1b57 --- /dev/null +++ b/app/src/main/java/com/hsLink/hslink/presentation/community/viewmodel/CommunityViewModel.kt @@ -0,0 +1,39 @@ +package com.hsLink.hslink.presentation.community.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.hsLink.hslink.data.dto.request.PostRequestDto +import com.hsLink.hslink.domain.repository.community.CommunityRepository +import com.hsLink.hslink.presentation.community.state.CommunityContract +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class CommunityViewModel @Inject constructor( + private val repository: CommunityRepository +) : ViewModel(){ + + private val _state = MutableStateFlow(CommunityContract()) + val state: StateFlow = _state.asStateFlow() + + fun createPost(postType: String, title: String, body: String) { + viewModelScope.launch { + val request = PostRequestDto( + postType = postType, + title = title, + body = body + ) + repository.createCommunityPost(request) + .onSuccess { + // Handle success + } + .onFailure { + // Handle failure + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/hsLink/hslink/presentation/home/screen/HomeScreen.kt b/app/src/main/java/com/hsLink/hslink/presentation/home/screen/HomeScreen.kt index c45c1e7..5873a41 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/home/screen/HomeScreen.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/home/screen/HomeScreen.kt @@ -101,7 +101,8 @@ fun HomeScreen( ) { item { HsLinkTopBar( - modifier = Modifier, + modifier = Modifier + .padding(start = 12.dp), title = { Image( painter = painterResource(id = R.drawable.img_home_logo), diff --git a/app/src/main/java/com/hsLink/hslink/presentation/home/state/HomeContract.kt b/app/src/main/java/com/hsLink/hslink/presentation/home/state/HomeContract.kt index 249f312..5e7483b 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/home/state/HomeContract.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/home/state/HomeContract.kt @@ -1,8 +1,8 @@ package com.hsLink.hslink.presentation.home.state import androidx.compose.runtime.Immutable -import com.hsLink.hslink.domain.model.PostPopularEntity -import com.hsLink.hslink.domain.model.PostPromotionEntity +import com.hsLink.hslink.domain.model.home.PostPopularEntity +import com.hsLink.hslink.domain.model.home.PostPromotionEntity @Immutable data class HomeContract ( diff --git a/app/src/main/java/com/hsLink/hslink/presentation/home/viewmodel/HomeViewModel.kt b/app/src/main/java/com/hsLink/hslink/presentation/home/viewmodel/HomeViewModel.kt index aea83fa..aeb2c2d 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/home/viewmodel/HomeViewModel.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/home/viewmodel/HomeViewModel.kt @@ -2,7 +2,7 @@ package com.hsLink.hslink.presentation.home.viewmodel import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.hsLink.hslink.domain.repository.PostRepository +import com.hsLink.hslink.domain.repository.home.PostRepository import com.hsLink.hslink.presentation.home.state.HomeContract import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.MutableStateFlow diff --git a/app/src/main/java/com/hsLink/hslink/presentation/main/MainTab.kt b/app/src/main/java/com/hsLink/hslink/presentation/main/MainTab.kt index 2f87a0a..3b851c2 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/main/MainTab.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/main/MainTab.kt @@ -18,29 +18,29 @@ enum class MainTab( ) { HOME( - selectedIcon = R.drawable.ic_mypage, - unselectedIcon = R.drawable.ic_mypage, - contentDescription =R.string.bottom_navigation_item_home, + selectedIcon = R.drawable.ic_bottombar_home_on, + unselectedIcon = R.drawable.ic_bottombar_home_off, + contentDescription = R.string.bottom_navigation_item_home, route = Home ), SEARCH( - selectedIcon = R.drawable.ic_mypage, - unselectedIcon = R.drawable.ic_mypage, + selectedIcon = R.drawable.ic_bottombar_search_on, + unselectedIcon = R.drawable.ic_bottombar_search_off, contentDescription = R.string.bottom_navigation_item_search, route = Search ), COMMUNITY( - selectedIcon = R.drawable.ic_mypage, - unselectedIcon = R.drawable.ic_mypage, + selectedIcon = R.drawable.ic_bottombar_community_on, + unselectedIcon = R.drawable.ic_bottombar_community_off, contentDescription = R.string.bottom_navigation_item_community, route = Community ), MYPAGE( - selectedIcon = R.drawable.ic_mypage, - unselectedIcon = R.drawable.ic_mypage, + selectedIcon = R.drawable.ic_bottombar_mypage_on, + unselectedIcon = R.drawable.ic_bottombar_mypage_off, contentDescription = R.string.bottom_navigation_item_mypage, route = Mypage ); diff --git a/app/src/main/java/com/hsLink/hslink/presentation/main/component/MainBottomBar.kt b/app/src/main/java/com/hsLink/hslink/presentation/main/component/MainBottomBar.kt index 83f7d9e..d21840f 100644 --- a/app/src/main/java/com/hsLink/hslink/presentation/main/component/MainBottomBar.kt +++ b/app/src/main/java/com/hsLink/hslink/presentation/main/component/MainBottomBar.kt @@ -11,8 +11,8 @@ import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable @@ -50,6 +50,11 @@ fun MainBottomBar( Surface( color = Color.White, ) { + HorizontalDivider( + modifier = Modifier.fillMaxWidth(), + thickness = 1.dp, + color = HsLinkTheme.colors.Grey100, + ) Row( modifier = modifier .fillMaxWidth() @@ -82,7 +87,7 @@ private fun MainNavigationBarItem( modifier: Modifier = Modifier, ) { val iconRes = if (selected) tab.selectedIcon else tab.unselectedIcon - val textColor = if (selected) Color.Black else Color.Gray + val textColor = if (selected) HsLinkTheme.colors.DeepBlue500 else HsLinkTheme.colors.Grey700 Column( modifier = modifier @@ -98,7 +103,8 @@ private fun MainNavigationBarItem( ) Text( text = stringResource(tab.contentDescription), - style = MaterialTheme.typography.labelSmall + color = textColor, + style = HsLinkTheme.typography.caption_12Normal ) } } @@ -112,7 +118,7 @@ private fun MainBottomBarPreview() { isVisible = true, tabs = MainTab.entries.toImmutableList(), currentTab = currentTab, - onTabSelected = { } + onTabSelected = { } ) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_bottombar_community_off.xml b/app/src/main/res/drawable/ic_bottombar_community_off.xml new file mode 100644 index 0000000..3aae190 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_community_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_community_on.xml b/app/src/main/res/drawable/ic_bottombar_community_on.xml new file mode 100644 index 0000000..350e7b6 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_community_on.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_home_off.xml b/app/src/main/res/drawable/ic_bottombar_home_off.xml new file mode 100644 index 0000000..95b69f1 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_home_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_home_on.xml b/app/src/main/res/drawable/ic_bottombar_home_on.xml new file mode 100644 index 0000000..a391c51 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_home_on.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_mypage_off.xml b/app/src/main/res/drawable/ic_bottombar_mypage_off.xml new file mode 100644 index 0000000..ff29822 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_mypage_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_mypage_on.xml b/app/src/main/res/drawable/ic_bottombar_mypage_on.xml new file mode 100644 index 0000000..36fc1b8 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_mypage_on.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_search_off.xml b/app/src/main/res/drawable/ic_bottombar_search_off.xml new file mode 100644 index 0000000..724bea7 --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_search_off.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_bottombar_search_on.xml b/app/src/main/res/drawable/ic_bottombar_search_on.xml new file mode 100644 index 0000000..1e3b29c --- /dev/null +++ b/app/src/main/res/drawable/ic_bottombar_search_on.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8dfb7e0..f478765 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,10 +1,10 @@ hsLink - home - search - community - mypage + + 한성인 찾기 + 커뮤니티 + 마이페이지 전체보기