Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

뱃지 저장 화면 구현(저장 기능은 아직X) #100

Merged
merged 4 commits into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions app/src/main/java/com/whyranoid/walkie/KoinModules.kt
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ import com.whyranoid.presentation.viewmodel.UserPostsViewModel
import com.whyranoid.presentation.viewmodel.challenge.ChallengeCompleteViewModel
import com.whyranoid.presentation.viewmodel.challenge.ChallengeDetailViewModel
import com.whyranoid.presentation.viewmodel.challenge.ChallengeExitViewModel
import com.whyranoid.presentation.viewmodel.challenge.ChallengeImageSaveViewModel
import com.whyranoid.presentation.viewmodel.challenge.ChallengeMainViewModel
import com.whyranoid.walkie.walkiedialog.DialogViewModel
import com.whyranoid.walkie.walkiedialog.NetworkInterceptor
Expand All @@ -125,6 +126,7 @@ val viewModelModule =
viewModel { ChallengeDetailViewModel(get(), get(), get()) }
viewModel { ChallengeExitViewModel(get(), get()) }
viewModel { ChallengeCompleteViewModel(get()) }
viewModel { ChallengeImageSaveViewModel(get()) }
viewModel {
UserPageViewModel(
get(),
Expand Down Expand Up @@ -174,7 +176,7 @@ val dataSourceModule =
single<ChallengeDataSource> { ChallengeDataSourceImpl(get()) }
single<PostDataSource> { PostDataSourceImpl(get()) }
single<UserDataSource> { UserDataSourceImpl(get()) }
single<AccountDataSource> { AccountDataSourceImpl(get(),get()) }
single<AccountDataSource> { AccountDataSourceImpl(get(), get()) }
single<FollowDataSource> { FollowDataSourceImpl(get()) }
single<RunningControlDataSource> { RunningControlDataSourceImpl(get()) }
single<CommunityDataSource> { CommunityDataSourceImpl(get()) }
Expand All @@ -185,7 +187,7 @@ val useCaseModule =
single { GetNewChallengePreviewsUseCase(get()) }
single { GetChallengingPreviewsUseCase(get()) }
single { GetChallengeDetailUseCase(get(), get()) }
single { CompleteChallengeUseCase(get(), get())}
single { CompleteChallengeUseCase(get(), get()) }
single { GetChallengePreviewsByTypeUseCase(get(), get()) }
single { GetTopRankChallengePreviewsUseCase(get()) }
single { StartChallengeUseCase(get(), get()) }
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.whyranoid.presentation.component.bar

import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.whyranoid.presentation.R

@Composable
fun BasicBackButtonTopBar(
onClicked: () -> Unit
) {
Row {
IconButton(
modifier = Modifier
.padding(vertical = 19.dp)
.padding(start = 16.dp),
onClick = { onClicked() }) {
Icon(
painterResource(id = R.drawable.ic_back_arrow),
contentDescription = "back arrow"
)
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import com.whyranoid.presentation.screens.Screen.Companion.bottomNavigationItems
import com.whyranoid.presentation.screens.challenge.ChallengeCompleteScreen
import com.whyranoid.presentation.screens.challenge.ChallengeDetailScreen
import com.whyranoid.presentation.screens.challenge.ChallengeExitScreen
import com.whyranoid.presentation.screens.challenge.ChallengeImageSaveScreen
import com.whyranoid.presentation.screens.challenge.ChallengeMainScreen
import com.whyranoid.presentation.screens.community.CommentScreen
import com.whyranoid.presentation.screens.community.SearchFriendScreen
Expand Down Expand Up @@ -191,6 +192,15 @@ fun AppScreenContent(
ChallengeCompleteScreen(navController, challengeId)
}

composable(
Screen.ChallengeImageSaveScreen.route,
Screen.ChallengeImageSaveScreen.arguments,
) { backStackEntry ->
val arguments = requireNotNull(backStackEntry.arguments)
val challengeId = arguments.getLong("challengeId")
ChallengeImageSaveScreen(navController, challengeId)
}

composable(
Screen.UserPageScreen.route,
Screen.UserPageScreen.arguments,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,14 @@ sealed class Screen(
),
)

object ChallengeImageSaveScreen : Screen(
route = "ChallengeImageSave/{challengeId}",
arguments =
listOf(
navArgument("challengeId") { type = NavType.LongType },
),
)

object UserPageScreen : Screen(
route = "userPage/{$UID_ARGUMENT}/{$NICKNAME_ARGUMENT}/{$IS_FOLLOWING_ARGUMENT}",
arguments =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
Expand All @@ -18,12 +21,16 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import coil.compose.AsyncImage
import com.whyranoid.domain.util.EMPTY
import com.whyranoid.presentation.R
import com.whyranoid.presentation.component.bar.BasicBackButtonTopBar
import com.whyranoid.presentation.component.button.WalkieNegativeButton
import com.whyranoid.presentation.component.button.WalkiePositiveButton
import com.whyranoid.presentation.screens.Screen
import com.whyranoid.presentation.theme.WalkieTypography
import com.whyranoid.presentation.viewmodel.challenge.ChallengeCompleteViewModel
import org.koin.androidx.compose.koinViewModel
Expand All @@ -42,96 +49,110 @@ fun ChallengeCompleteScreen(
viewModel.getChallengeDetail(challengeId)
}

Column(
modifier = Modifier
.fillMaxWidth()
.fillMaxHeight()
.padding(20.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceBetween
) {

Scaffold(
topBar = {
BasicBackButtonTopBar {
navController.popBackStack()
}
}
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxWidth(),
.fillMaxWidth()
.fillMaxHeight()
.padding(20.dp)
.padding(paddingValues),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.SpaceBetween
) {
Text(
modifier = Modifier.padding(top = 126.dp),
text = "챌린지 성공!",
style = WalkieTypography.Title
)

Spacer(modifier = Modifier.height(56.dp))

AsyncImage(
model = state.challenge.getDataOrNull()?.badge?.imageUrl
?: "https://picsum.photos/250/250 ", contentDescription = "",
Column(
modifier = Modifier
// .size(180.dp)
,
contentScale = ContentScale.Crop
)

Spacer(modifier = Modifier.height(20.dp))

Text(
modifier = Modifier.fillMaxWidth(),
text = state.challenge.getDataOrNull()?.name ?: String.EMPTY,
style = WalkieTypography.Title,
textAlign = androidx.compose.ui.text.style.TextAlign.Center
)

Spacer(modifier = Modifier.height(8.dp))

Text(
modifier = Modifier.fillMaxWidth(),
text = "뱃지 획득!",
style = WalkieTypography.Title,
textAlign = androidx.compose.ui.text.style.TextAlign.Center
)

Spacer(modifier = Modifier.height(10.dp))

Text(
modifier = Modifier.fillMaxWidth(),
text = "마이페이지에서 확인해보세요",
style = WalkieTypography.Body1.copy(
color = Color(0xFF989898),
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Text(
modifier = Modifier.padding(top = 126.dp),
text = "챌린지 성공!",
style = WalkieTypography.Title
)

Spacer(modifier = Modifier.height(56.dp))

AsyncImage(
model = state.challenge.getDataOrNull()?.badge?.imageUrl
?: "https://picsum.photos/250/250 ", contentDescription = "",
modifier = Modifier
// .size(180.dp)
,
contentScale = ContentScale.Crop
)

Spacer(modifier = Modifier.height(20.dp))

Text(
modifier = Modifier.fillMaxWidth(),
text = state.challenge.getDataOrNull()?.name ?: String.EMPTY,
style = WalkieTypography.Title,
textAlign = androidx.compose.ui.text.style.TextAlign.Center
)
)
}

Column(
modifier = Modifier
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Spacer(modifier = Modifier.height(8.dp))

Text(text = "사진으로 저장하시겠어요?")
Text(
modifier = Modifier.fillMaxWidth(),
text = "뱃지 획득!",
style = WalkieTypography.Title,
textAlign = androidx.compose.ui.text.style.TextAlign.Center
)

Spacer(modifier = Modifier.height(10.dp))

Text(
modifier = Modifier.fillMaxWidth(),
text = "마이페이지에서 확인해보세요",
style = WalkieTypography.Body1.copy(
color = Color(0xFF989898),
textAlign = androidx.compose.ui.text.style.TextAlign.Center
)
)
}

Row(
Column(
modifier = Modifier
.padding(top = 20.dp)
.padding(horizontal = 20.dp)
.fillMaxWidth(),
horizontalAlignment = Alignment.CenterHorizontally,
) {
Box(modifier = Modifier.weight(.5f)) {
WalkieNegativeButton(text = "아니오") {
navController.popBackStack()
}
}

Spacer(modifier = Modifier.size(10.dp))

Box(modifier = Modifier.weight(.5f)) {
WalkiePositiveButton(text = "네 좋아요") {
Text(text = "사진으로 저장하시겠어요?")

Row(
modifier = Modifier
.padding(top = 20.dp)
.padding(horizontal = 20.dp)
) {
Box(modifier = Modifier.weight(.5f)) {
WalkieNegativeButton(text = "아니오") {
navController.popBackStack()
}
}

Spacer(modifier = Modifier.size(10.dp))

Box(modifier = Modifier.weight(.5f)) {
WalkiePositiveButton(text = "네 좋아요") {
navController.navigate(
Screen.ChallengeImageSaveScreen.route.replace(
"{challengeId}",
challengeId.toString()
)
)
}
}
}
}
}


}
}
}
Loading
Loading