From 3e6102336164129644b651686999c25a49a8ff1a Mon Sep 17 00:00:00 2001 From: Seungmin <39687846+peter-j0y@users.noreply.github.com> Date: Thu, 12 Sep 2024 20:39:01 +0900 Subject: [PATCH] =?UTF-8?q?:sparkles:=20=EC=A0=84=EC=B2=B4=20=EB=B1=83?= =?UTF-8?q?=EC=A7=80=20=ED=8E=98=EC=9D=B4=EC=A7=80=20UI=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84=20(#86)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/whyranoid/walkie/KoinModules.kt | 2 + .../account/AccountDataSourceImpl.kt | 2 + .../data/model/account/SignUpRequest.kt | 1 + .../data/model/account/UserInfoResponse.kt | 3 +- .../data/repository/AccountRepositoryImpl.kt | 2 +- .../domain/datasource/AccountDataSource.kt | 1 + .../domain/model/challenge/BadgeInfo.kt | 10 + presentation/build.gradle.kts | 2 +- .../component/badge/PlaceHolderBadge.kt | 10 +- .../component/button/WalkieNormalButton.kt | 54 ++++ .../presentation/reusable/BadgeItem.kt | 72 ++++++ .../presentation/reusable/DragComposable.kt | 147 +++++++++++ .../presentation/reusable/MainBadgeItem.kt | 69 ++++++ .../presentation/reusable/WalkieTitleBar.kt | 63 +++++ .../presentation/screens/AppScreen.kt | 5 + .../whyranoid/presentation/screens/Screen.kt | 4 + .../screens/mypage/MyPageScreen.kt | 15 +- .../screens/mypage/TotalBadgeScreen.kt | 231 ++++++++++++++++++ .../com/whyranoid/presentation/theme/Theme.kt | 1 + .../viewmodel/TotalBadgeViewModel.kt | 48 ++++ .../src/main/res/drawable/badge_test.png | Bin 0 -> 43230 bytes .../src/main/res/drawable/badge_test_2.png | Bin 0 -> 30023 bytes .../src/main/res/drawable/ic_back_arrow.xml | 9 + presentation/src/main/res/values/strings.xml | 6 +- 24 files changed, 744 insertions(+), 13 deletions(-) create mode 100644 domain/src/main/java/com/whyranoid/domain/model/challenge/BadgeInfo.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/component/button/WalkieNormalButton.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/reusable/BadgeItem.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/reusable/DragComposable.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/reusable/MainBadgeItem.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/reusable/WalkieTitleBar.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/screens/mypage/TotalBadgeScreen.kt create mode 100644 presentation/src/main/java/com/whyranoid/presentation/viewmodel/TotalBadgeViewModel.kt create mode 100644 presentation/src/main/res/drawable/badge_test.png create mode 100644 presentation/src/main/res/drawable/badge_test_2.png create mode 100644 presentation/src/main/res/drawable/ic_back_arrow.xml diff --git a/app/src/main/java/com/whyranoid/walkie/KoinModules.kt b/app/src/main/java/com/whyranoid/walkie/KoinModules.kt index 301e712a..d0328026 100644 --- a/app/src/main/java/com/whyranoid/walkie/KoinModules.kt +++ b/app/src/main/java/com/whyranoid/walkie/KoinModules.kt @@ -96,6 +96,7 @@ import com.whyranoid.presentation.viewmodel.SearchFriendViewModel import com.whyranoid.presentation.viewmodel.SelectHistoryViewModel import com.whyranoid.presentation.viewmodel.SignInViewModel import com.whyranoid.presentation.viewmodel.SplashViewModel +import com.whyranoid.presentation.viewmodel.TotalBadgeViewModel import com.whyranoid.presentation.viewmodel.UserPageViewModel import com.whyranoid.presentation.viewmodel.challenge.ChallengeDetailViewModel import com.whyranoid.presentation.viewmodel.challenge.ChallengeExitViewModel @@ -130,6 +131,7 @@ val viewModelModule = viewModel { CommunityScreenViewModel(get(), get(), get()) } viewModel { FollowingViewModel(get(), get(), get(), get(), get(), get()) } viewModel { SettingViewModel(get(), get()) } + viewModel { TotalBadgeViewModel(get(), get()) } } val repositoryModule = diff --git a/data/src/main/java/com/whyranoid/data/datasource/account/AccountDataSourceImpl.kt b/data/src/main/java/com/whyranoid/data/datasource/account/AccountDataSourceImpl.kt index 97bc1f16..3afda1ff 100644 --- a/data/src/main/java/com/whyranoid/data/datasource/account/AccountDataSourceImpl.kt +++ b/data/src/main/java/com/whyranoid/data/datasource/account/AccountDataSourceImpl.kt @@ -14,6 +14,7 @@ import java.io.File class AccountDataSourceImpl(private val accountService: AccountService) : AccountDataSource { override suspend fun signUp( + name: String, nickName: String, profileUrl: String?, authId: String, @@ -23,6 +24,7 @@ class AccountDataSourceImpl(private val accountService: AccountService) : Accoun return kotlin.runCatching { val request = SignUpRequest( userName = nickName, + name = name, profileImg = profileUrl ?: "", authId = authId, agreeGps = agreeGps, diff --git a/data/src/main/java/com/whyranoid/data/model/account/SignUpRequest.kt b/data/src/main/java/com/whyranoid/data/model/account/SignUpRequest.kt index a1b4f474..d111ef2c 100644 --- a/data/src/main/java/com/whyranoid/data/model/account/SignUpRequest.kt +++ b/data/src/main/java/com/whyranoid/data/model/account/SignUpRequest.kt @@ -2,6 +2,7 @@ package com.whyranoid.data.model.account data class SignUpRequest( val userName: String, + val name: String, val profileImg: String, val authId: String, val agreeGps: Boolean, diff --git a/data/src/main/java/com/whyranoid/data/model/account/UserInfoResponse.kt b/data/src/main/java/com/whyranoid/data/model/account/UserInfoResponse.kt index ae354f3e..fb3faaae 100644 --- a/data/src/main/java/com/whyranoid/data/model/account/UserInfoResponse.kt +++ b/data/src/main/java/com/whyranoid/data/model/account/UserInfoResponse.kt @@ -3,12 +3,13 @@ package com.whyranoid.data.model.account import com.whyranoid.domain.model.account.UserInfo data class UserInfoResponse ( + val name: String, val nickname: String, val profileImg: String? ) fun UserInfoResponse.toUserInfo() = UserInfo( - name = "", // TODO 수정 + name = name, nickname = nickname, profileImg = profileImg ) \ No newline at end of file diff --git a/data/src/main/java/com/whyranoid/data/repository/AccountRepositoryImpl.kt b/data/src/main/java/com/whyranoid/data/repository/AccountRepositoryImpl.kt index e3a466c8..613feb2e 100644 --- a/data/src/main/java/com/whyranoid/data/repository/AccountRepositoryImpl.kt +++ b/data/src/main/java/com/whyranoid/data/repository/AccountRepositoryImpl.kt @@ -38,7 +38,7 @@ class AccountRepositoryImpl( agreeSubscription: Boolean, ): Result { return kotlin.runCatching { - accountDataSource.signUp(nickName, profileUrl, authId, agreeGps, agreeSubscription) + accountDataSource.signUp(userName, nickName, profileUrl, authId, agreeGps, agreeSubscription) .onSuccess { uid -> accountDataStore.updateUId(uid) accountDataStore.updateAuthId(authId) diff --git a/domain/src/main/java/com/whyranoid/domain/datasource/AccountDataSource.kt b/domain/src/main/java/com/whyranoid/domain/datasource/AccountDataSource.kt index 22ad5805..8b8dd4be 100644 --- a/domain/src/main/java/com/whyranoid/domain/datasource/AccountDataSource.kt +++ b/domain/src/main/java/com/whyranoid/domain/datasource/AccountDataSource.kt @@ -5,6 +5,7 @@ import com.whyranoid.domain.model.account.UserInfo interface AccountDataSource { suspend fun signUp( + name: String, nickName: String, profileUrl: String?, authId: String, diff --git a/domain/src/main/java/com/whyranoid/domain/model/challenge/BadgeInfo.kt b/domain/src/main/java/com/whyranoid/domain/model/challenge/BadgeInfo.kt new file mode 100644 index 00000000..3aaf57b8 --- /dev/null +++ b/domain/src/main/java/com/whyranoid/domain/model/challenge/BadgeInfo.kt @@ -0,0 +1,10 @@ +package com.whyranoid.domain.model.challenge + +import androidx.annotation.DrawableRes + +data class BadgeInfo ( + val id: Int, + @DrawableRes val image: Int, + val name: String, + val receivedAt: String = "" +) \ No newline at end of file diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts index 04a8581a..701595be 100644 --- a/presentation/build.gradle.kts +++ b/presentation/build.gradle.kts @@ -19,7 +19,7 @@ android { defaultConfig { minSdk = 26 - targetSdk = 33 + targetSdk = 34 testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") diff --git a/presentation/src/main/java/com/whyranoid/presentation/component/badge/PlaceHolderBadge.kt b/presentation/src/main/java/com/whyranoid/presentation/component/badge/PlaceHolderBadge.kt index 7081fcf3..7138762d 100644 --- a/presentation/src/main/java/com/whyranoid/presentation/component/badge/PlaceHolderBadge.kt +++ b/presentation/src/main/java/com/whyranoid/presentation/component/badge/PlaceHolderBadge.kt @@ -19,16 +19,18 @@ import androidx.compose.ui.platform.LocalDensity import com.whyranoid.presentation.theme.WalkieColor @Composable -fun PlaceholderBadge() { +fun BadgePlaceHolder( + modifier: Modifier = Modifier +) { Box( contentAlignment = Alignment.Center, - modifier = Modifier + modifier = modifier .size(48.dp) .clip(CircleShape) .background(WalkieColor.GrayDisable) ) { val pxValue = LocalDensity.current.run { 2.dp.toPx() } - Canvas(modifier = Modifier.size(48.dp)) { + Canvas(modifier = modifier.size(48.dp)) { drawCircle( color = Color.Gray.copy(alpha = 0.3f), style = Stroke( @@ -44,6 +46,6 @@ fun PlaceholderBadge() { @Preview fun PlaceholderBadgePreview() { WalkieTheme { - PlaceholderBadge() + BadgePlaceHolder() } } \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/component/button/WalkieNormalButton.kt b/presentation/src/main/java/com/whyranoid/presentation/component/button/WalkieNormalButton.kt new file mode 100644 index 00000000..9bcdb83c --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/component/button/WalkieNormalButton.kt @@ -0,0 +1,54 @@ +package com.whyranoid.presentation.component.button + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Button +import androidx.compose.material.ButtonDefaults +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.whyranoid.presentation.theme.WalkieTheme + +@Composable +fun WalkieNormalButton( + buttonText: String, + onButtonClick: () -> Unit, +) { + Button( + onClick = { + onButtonClick() + }, + colors = ButtonDefaults.buttonColors( + contentColor = Color.Black, + disabledContentColor = Color.Black, + backgroundColor = Color(0xFFEEEEEE) + ), + modifier = Modifier + .fillMaxWidth() + .height(34.dp), + shape = RoundedCornerShape(7.dp), + elevation = null + ) { + Text( + text = buttonText, + style = TextStyle( + color = Color.Black, + fontSize = 14.sp + ) + ) + } +} + +@Preview +@Composable +fun WalkieNormalButtonPreview() { + WalkieTheme { + WalkieNormalButton("전체 뱃지 보기") {} + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/reusable/BadgeItem.kt b/presentation/src/main/java/com/whyranoid/presentation/reusable/BadgeItem.kt new file mode 100644 index 00000000..54c0fff8 --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/reusable/BadgeItem.kt @@ -0,0 +1,72 @@ +package com.whyranoid.presentation.reusable + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.whyranoid.domain.model.challenge.BadgeInfo +import com.whyranoid.presentation.R +import com.whyranoid.presentation.theme.WalkieTheme +import com.whyranoid.presentation.theme.WalkieTypography + +@Composable +fun BadgeItem( + badgeInfo: BadgeInfo +) { + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Box( + modifier = Modifier + .size(54.dp) + .align(Alignment.CenterHorizontally) + ) { + Image( + painter = painterResource(badgeInfo.image), + contentDescription = null + ) + } + + Spacer( + modifier = Modifier.height(4.dp) + ) + + Text( + text = badgeInfo.name, + textAlign = TextAlign.Center, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + style = WalkieTypography.Body2, + modifier = Modifier + .widthIn(max = 62.dp) + .heightIn(max = 24.dp) + ) + } +} + +@Preview +@Composable +private fun BadgePreview() { + WalkieTheme { + BadgeItem( + BadgeInfo( + 1, + R.drawable.badge_test_2, + "test" + ) + ) + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/reusable/DragComposable.kt b/presentation/src/main/java/com/whyranoid/presentation/reusable/DragComposable.kt new file mode 100644 index 00000000..2774de44 --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/reusable/DragComposable.kt @@ -0,0 +1,147 @@ +package com.whyranoid.presentation.reusable + +import android.util.Log +import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.boundsInWindow +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.zIndex + + +internal val LocalDragTargetInfo = compositionLocalOf { DragTargetInfo() } + +@Composable +fun DragTarget( + modifier: Modifier = Modifier, + dataToDrop: T, + currentState: DragTargetInfo, + content: @Composable (() -> Unit), + placeholder: @Composable (() -> Unit) +) { + var currentPosition by remember { mutableStateOf(Offset.Zero) } + var isDragging by remember { mutableStateOf(false) } + Log.d("sm.shin", "dragtarget: $dataToDrop") + currentState.dataToDrop = dataToDrop + + Box( + modifier = modifier + .zIndex(1f) + .onGloballyPositioned { + currentPosition = it.localToRoot(Offset.Zero) + } + .pointerInput(Unit) { + detectDragGesturesAfterLongPress( + onDragStart = { + Log.d("sm.shin", "onDragStart: $dataToDrop") + currentState.isDragging = true + currentState.dragPosition = currentPosition + currentState.draggableComposable = content + isDragging = true + }, onDrag = { change, dragAmount -> + change.consume() + currentState.dragOffset += Offset(dragAmount.x, dragAmount.y) + }, onDragEnd = { + currentState.isDragging = false + currentState.dragOffset = Offset.Zero + isDragging = false + }, onDragCancel = { + currentState.dragOffset = Offset.Zero + currentState.isDragging = false + isDragging = false + } + ) + } + ) { + if (isDragging) { + placeholder() + } else { + content() + } + } +} + +@Composable +fun LongPressDraggable( + modifier: Modifier = Modifier, + isDraggable: Boolean = true, + state: DragTargetInfo, + content: @Composable BoxScope.() -> Unit +) { + CompositionLocalProvider( + LocalDragTargetInfo provides state + ) { + Box( + modifier = modifier.fillMaxSize() + ) { + content() + if (state.isDragging && isDraggable) { + var targetSize by remember { + mutableStateOf(IntSize.Zero) + } + Box(modifier = Modifier + .graphicsLayer { + val offset = (state.dragPosition + state.dragOffset) + scaleX = 1.1f + scaleY = 1.1f + alpha = if (targetSize == IntSize.Zero) 0f else 1f + translationX = offset.x + translationY = offset.y + } + .onGloballyPositioned { + targetSize = it.size + } + ) { + state.draggableComposable?.invoke() + } + } + } + } +} + +@Composable +@Suppress("UNCHECKED_CAST") +fun DropTarget( + modifier: Modifier, + dragInfo: DragTargetInfo, + content: @Composable (BoxScope.(isInBound: Boolean, data: T?) -> Unit) +) { + val dragPosition = dragInfo.dragPosition + val dragOffset = dragInfo.dragOffset + var isCurrentDropTarget by remember { + mutableStateOf(false) + } + + Box(modifier = modifier.onGloballyPositioned { + it.boundsInWindow().let { rect -> + val offset = dragPosition + dragOffset + isCurrentDropTarget = rect.contains(Offset(offset.x + rect.width / 2, offset.y + rect.height / 2)) + } + } + ) { + val data = + if (isCurrentDropTarget && !dragInfo.isDragging) dragInfo.dataToDrop as T? else null + content(isCurrentDropTarget, data) + } +} + +class DragTargetInfo { + var isDragging: Boolean by mutableStateOf(false) + var dragPosition by mutableStateOf(Offset.Zero) + var dragOffset by mutableStateOf(Offset.Zero) + var draggableComposable by mutableStateOf<(@Composable () -> Unit)?>(null) + var dataToDrop by mutableStateOf(null) +} \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/reusable/MainBadgeItem.kt b/presentation/src/main/java/com/whyranoid/presentation/reusable/MainBadgeItem.kt new file mode 100644 index 00000000..0bae4ae4 --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/reusable/MainBadgeItem.kt @@ -0,0 +1,69 @@ +package com.whyranoid.presentation.reusable + +import android.util.Log +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.shape.CircleShape +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.res.painterResource +import androidx.compose.ui.unit.dp +import com.whyranoid.domain.model.challenge.BadgeInfo +import com.whyranoid.presentation.component.badge.BadgePlaceHolder + +@Composable +fun MainBadgeItem( + badgeInfo: BadgeInfo, + currentState: DragTargetInfo +) { + Log.d("sm.shin", "mainbadgeInfo: $badgeInfo") + Column( + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier + .wrapContentSize() + ) { + Box( + modifier = Modifier + .size(54.dp) + .align(Alignment.CenterHorizontally) + ) { + if (badgeInfo.image == null) { + BadgePlaceHolder( + modifier = Modifier + .size(45.dp) + .clip(CircleShape) + .background(Color(0xFFF7F7F7)) + .align(Alignment.Center) + ) + + } else { + DragTarget( + modifier = Modifier.size(54.dp), + dataToDrop = badgeInfo, + currentState = currentState, + content = { + Image( + painter = painterResource(id = badgeInfo.image), + contentDescription = null, + modifier = Modifier.size(54.dp) + ) + }, + placeholder = { + BadgePlaceHolder( + modifier = Modifier + .size(45.dp) + .align(Alignment.Center) + ) + } + ) + } + } + } +} diff --git a/presentation/src/main/java/com/whyranoid/presentation/reusable/WalkieTitleBar.kt b/presentation/src/main/java/com/whyranoid/presentation/reusable/WalkieTitleBar.kt new file mode 100644 index 00000000..c28f3a7e --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/reusable/WalkieTitleBar.kt @@ -0,0 +1,63 @@ +package com.whyranoid.presentation.reusable + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.whyranoid.presentation.R +import com.whyranoid.presentation.theme.WalkieTheme +import com.whyranoid.presentation.theme.WalkieTypography + +@Composable +fun WalkieTitleBar( + modifier: Modifier = Modifier, + title: String, + @DrawableRes backIcon: Int = R.drawable.ic_back_arrow, + trailings: @Composable BoxScope.() -> Unit = {}, + onBackClick: () -> Unit = {}, +) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = modifier + .fillMaxWidth() + .padding(vertical = 16.dp), + ) { + Icon( + painter = painterResource(id = backIcon), + contentDescription = null, + modifier = Modifier.clickable { onBackClick() } + ) + + Text( + text = title, + style = WalkieTypography.Title + ) + + Box { + trailings() + } + } +} + +@Preview +@Composable +private fun WalkieTitleBarPreview() { + WalkieTheme { + WalkieTitleBar( + title = "전체 뱃지" + ) + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/screens/AppScreen.kt b/presentation/src/main/java/com/whyranoid/presentation/screens/AppScreen.kt index 95113a72..85e58c13 100644 --- a/presentation/src/main/java/com/whyranoid/presentation/screens/AppScreen.kt +++ b/presentation/src/main/java/com/whyranoid/presentation/screens/AppScreen.kt @@ -35,6 +35,7 @@ import com.whyranoid.presentation.screens.challenge.ChallengeMainScreen import com.whyranoid.presentation.screens.community.CommentScreen import com.whyranoid.presentation.screens.community.SearchFriendScreen import com.whyranoid.presentation.screens.mypage.MyPageScreen +import com.whyranoid.presentation.screens.mypage.TotalBadgeScreen import com.whyranoid.presentation.screens.mypage.UserPageScreen import com.whyranoid.presentation.screens.mypage.addpost.AddPostScreen import com.whyranoid.presentation.screens.mypage.editprofile.EditProfileScreen @@ -147,6 +148,10 @@ fun AppScreenContent( MyPageScreen(navController) } + composable(Screen.TotalBadgeScreen.route) { + TotalBadgeScreen(navController) + } + composable(Screen.AddPostScreen.route) { AddPostScreen(navController = navController) } diff --git a/presentation/src/main/java/com/whyranoid/presentation/screens/Screen.kt b/presentation/src/main/java/com/whyranoid/presentation/screens/Screen.kt index 7959db44..19081061 100644 --- a/presentation/src/main/java/com/whyranoid/presentation/screens/Screen.kt +++ b/presentation/src/main/java/com/whyranoid/presentation/screens/Screen.kt @@ -47,6 +47,10 @@ sealed class Screen( R.drawable.ic_mypage_screen_selected, ) + object TotalBadgeScreen: Screen( + route = "totalBadgeScreen" + ) + object AddPostScreen : Screen( route = "addPostScreen", ) diff --git a/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/MyPageScreen.kt b/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/MyPageScreen.kt index 858693ca..11ea8e81 100644 --- a/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/MyPageScreen.kt +++ b/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/MyPageScreen.kt @@ -58,7 +58,7 @@ import androidx.navigation.NavController import androidx.navigation.NavGraph.Companion.findStartDestination import coil.compose.AsyncImage import com.whyranoid.domain.util.EMPTY -import com.whyranoid.presentation.component.badge.PlaceholderBadge +import com.whyranoid.presentation.component.badge.BadgePlaceHolder import com.whyranoid.presentation.component.bar.WalkieTopBar import com.whyranoid.presentation.reusable.TextWithCountSpaceBetween import com.whyranoid.presentation.screens.Screen @@ -97,7 +97,10 @@ fun MyPageScreen( UserPageContent( nickname = null, - state, + state = state, + onTotalBadgePageClicked = { + navController.navigate(Screen.TotalBadgeScreen.route) + }, onPostCreateClicked = { navController.navigate(Screen.AddPostScreen.route) }, @@ -158,6 +161,7 @@ fun MyPageScreen( fun UserPageContent( nickname: String? = null, // 상대방 페이지인 경우에 존재, 마이페이지일 경우 null state: UserPageState, + onTotalBadgePageClicked: () -> Unit = {}, onPostPreviewClicked: (id: Long) -> Unit = {}, onPostCreateClicked: () -> Unit = {}, onProfileEditClicked: () -> Unit = {}, @@ -204,6 +208,7 @@ fun UserPageContent( .clip(shape = CircleShape) .size(64.dp), ) + Spacer(modifier = Modifier.width(20.dp)) Column( @@ -307,7 +312,7 @@ fun UserPageContent( .size(56.dp), ) } - repeat(5 - badgeList.size) { PlaceholderBadge() } + repeat(5 - badgeList.size) { BadgePlaceHolder() } } // 마이페이지인 경우 @@ -319,8 +324,8 @@ fun UserPageContent( .fillMaxWidth() .padding(horizontal = 20.dp) .clip(RoundedCornerShape(12.dp)) - .clickable(enabled = badgeList.size >= 5) { - // TODO 전체 뱃지 페이지로 이동 + .clickable(enabled = true) { + onTotalBadgePageClicked() } .background(WalkieColor.GrayBackground) .padding(vertical = 8.dp), diff --git a/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/TotalBadgeScreen.kt b/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/TotalBadgeScreen.kt new file mode 100644 index 00000000..8499ee0f --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/screens/mypage/TotalBadgeScreen.kt @@ -0,0 +1,231 @@ +package com.whyranoid.presentation.screens.mypage + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.foundation.layout.wrapContentSize +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.ElevatedCard +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateListOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.navigation.NavController +import androidx.navigation.compose.rememberNavController +import com.whyranoid.domain.model.challenge.BadgeInfo +import com.whyranoid.presentation.R +import com.whyranoid.presentation.reusable.BadgeItem +import com.whyranoid.presentation.reusable.DragTargetInfo +import com.whyranoid.presentation.reusable.DropTarget +import com.whyranoid.presentation.reusable.LongPressDraggable +import com.whyranoid.presentation.reusable.MainBadgeItem +import com.whyranoid.presentation.reusable.WalkieTitleBar +import com.whyranoid.presentation.theme.WalkieTheme +import com.whyranoid.presentation.theme.WalkieTypography +import com.whyranoid.presentation.viewmodel.TotalBadgeViewModel +import org.koin.androidx.compose.koinViewModel + +@Composable +fun TotalBadgeScreen( + navController: NavController +) { + val viewModel = koinViewModel() + + val dragTargetInfo = remember { DragTargetInfo() } + + LongPressDraggable(state = dragTargetInfo) { + + // TODO remove + val mainBadgeList = remember { + mutableStateListOf( + BadgeInfo(1, R.drawable.badge_test, "badge 1"), + BadgeInfo(2, R.drawable.badge_test, "badge 2"), + BadgeInfo(3, R.drawable.badge_test, "badge 3"), + BadgeInfo(4, R.drawable.badge_test, "badge 4"), + BadgeInfo(5, R.drawable.badge_test, "badge 5") + ) + } + + val badgeList = remember { + mutableStateListOf( + BadgeInfo(6, R.drawable.badge_test_2, "badge 6"), + BadgeInfo(7, R.drawable.badge_test_2, "badge 7"), + BadgeInfo(8, R.drawable.badge_test_2, "badge 8"), + BadgeInfo(9, R.drawable.badge_test_2, "badge 9"), + BadgeInfo(10, R.drawable.badge_test_2, "badge 10"), + BadgeInfo(11, R.drawable.badge_test_2, "badge 11"), + BadgeInfo(11, R.drawable.badge_test_2, "badge 12"), + BadgeInfo(11, R.drawable.badge_test_2, "badge 13"), + ) + } + + fun changeBadge(mainBadge: BadgeInfo, badge: BadgeInfo) { + val mainBadgeIndex = mainBadgeList.indexOf(mainBadge) + val badgeIndex = badgeList.indexOf(badge) + + mainBadgeList[mainBadgeIndex] = badge + badgeList[badgeIndex] = mainBadge + } + + LazyColumn( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = 16.dp) + ) { + item { + WalkieTitleBar( + title = stringResource(id = R.string.total_badge_title), + onBackClick = { navController.popBackStack() } + ) + + Spacer(modifier = Modifier.height(10.dp)) + + Text( + text = stringResource(id = R.string.setting_main_badge_title), + style = WalkieTypography.SubTitle + ) + + Spacer(modifier = Modifier.height(8.dp)) + + Text( + text = stringResource(id = R.string.setting_main_badge_description), + style = WalkieTypography.Body2, + color = Color(0xFF808080) + ) + + Spacer(modifier = Modifier.height(16.dp)) + + ElevatedCard( + elevation = CardDefaults.cardElevation( + defaultElevation = 6.dp + ), + shape = RoundedCornerShape(8.dp) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 13.dp, vertical = 8.dp), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { + mainBadgeList.forEach { + MainBadgeItem( + badgeInfo = it, + currentState = dragTargetInfo, + ) + } + } + } + + Spacer(modifier = Modifier.height(16.dp)) + + Column( + modifier = Modifier + .clip(RoundedCornerShape(8.dp)) + .background(color = Color(0xFFF5F5F5), shape = RoundedCornerShape(8.dp)) + .fillMaxWidth() + .wrapContentHeight() + .padding(16.dp) + ) { + val badgeCountText = buildAnnotatedString { + withStyle( + SpanStyle( + color = Color(0xFFF45A00), + fontSize = 14.sp, + fontWeight = FontWeight.Bold + ) + ) { + append( + stringResource( + id = R.string.current_badge_count, + mainBadgeList.size + badgeList.size + ) + ) + } + append(" / ") + + withStyle( + SpanStyle( + fontWeight = FontWeight.Bold + ) + ) { + append("16") + } + + append(stringResource(id = R.string.total_badge_count)) + } + + Text( + text = badgeCountText, + style = WalkieTypography.Body2, + color = Color(0xFF9C9C9C) + ) + + Spacer(modifier = Modifier.height(12.dp)) + + val chunkedBadges = badgeList.chunked(4) // 뱃지를 4개씩 묶음 + + Column { + chunkedBadges.forEach { rowBadges -> + Row( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = 20.dp), + horizontalArrangement = Arrangement.SpaceBetween + ) { + rowBadges.forEach { badge -> + var currentInfo by remember { mutableStateOf(badge) } + + DropTarget( + dragInfo = dragTargetInfo, + modifier = Modifier.wrapContentSize() + ) {isInBound: Boolean, data: BadgeInfo? -> + if (isInBound && !dragTargetInfo.isDragging) { + if (dragTargetInfo.dataToDrop is BadgeInfo) { + changeBadge(dragTargetInfo.dataToDrop as BadgeInfo, currentInfo) + currentInfo = dragTargetInfo.dataToDrop as BadgeInfo + } + } + BadgeItem(currentInfo) + } + } + } + } + } + } + } + } + } +} + +@Preview +@Composable +private fun PreviewTotalBadgePage() { + WalkieTheme { + TotalBadgeScreen(navController = rememberNavController()) + } +} \ No newline at end of file diff --git a/presentation/src/main/java/com/whyranoid/presentation/theme/Theme.kt b/presentation/src/main/java/com/whyranoid/presentation/theme/Theme.kt index 8279bab1..32de03dc 100644 --- a/presentation/src/main/java/com/whyranoid/presentation/theme/Theme.kt +++ b/presentation/src/main/java/com/whyranoid/presentation/theme/Theme.kt @@ -28,6 +28,7 @@ private val LightColorScheme = lightColorScheme( secondary = WalkieColor.Secondary, tertiary = WalkieColor.Tertiary, surface = Color.White, + surfaceTint = Color.White /* Other default colors to override background = Color(0xFFFFFBFE), diff --git a/presentation/src/main/java/com/whyranoid/presentation/viewmodel/TotalBadgeViewModel.kt b/presentation/src/main/java/com/whyranoid/presentation/viewmodel/TotalBadgeViewModel.kt new file mode 100644 index 00000000..297a14cd --- /dev/null +++ b/presentation/src/main/java/com/whyranoid/presentation/viewmodel/TotalBadgeViewModel.kt @@ -0,0 +1,48 @@ +package com.whyranoid.presentation.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.whyranoid.domain.model.challenge.Badge +import com.whyranoid.domain.usecase.GetMyUidUseCase +import com.whyranoid.domain.usecase.GetUserBadgesUseCase +import com.whyranoid.presentation.model.UiState +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import org.orbitmvi.orbit.ContainerHost +import org.orbitmvi.orbit.syntax.simple.intent +import org.orbitmvi.orbit.syntax.simple.reduce +import org.orbitmvi.orbit.viewmodel.container + +sealed interface TotalBadgeSideEffect + +data class TotalBadgeState( + val badges: UiState> = UiState.Idle +) + +class TotalBadgeViewModel( + private val getUserBadgesUseCase: GetUserBadgesUseCase, + private val getMyUidUseCase: GetMyUidUseCase +): ViewModel(), ContainerHost { + + override val container = + container(TotalBadgeState()) + + init { + viewModelScope.launch(Dispatchers.IO) { + getMyUidUseCase().onSuccess { uid -> + getBadges(uid) + } + } + } + + private suspend fun getBadges(uid: Long) = intent { + val result = getUserBadgesUseCase(uid) + result.onSuccess { badges -> + reduce { + state.copy( + badges = UiState.Success(badges), + ) + } + } + } +} \ No newline at end of file diff --git a/presentation/src/main/res/drawable/badge_test.png b/presentation/src/main/res/drawable/badge_test.png new file mode 100644 index 0000000000000000000000000000000000000000..d57380ced427890e3601da3b9855980f189222c2 GIT binary patch literal 43230 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

Ns$PF<$Idjfo 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 + + diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml index 2ef84703..61c1a0aa 100644 --- a/presentation/src/main/res/values/strings.xml +++ b/presentation/src/main/res/values/strings.xml @@ -1,9 +1,13 @@ - 런닝 커뮤니티 챌린지 마이페이지 + 전체 뱃지 + 대표 뱃지 설정 + 뱃지를 꾹 누르면 대표 뱃지를 편집할 수 있어요. + %d + 개 획득 \ No newline at end of file