Skip to content

Commit

Permalink
Merge pull request #100 from Team-Walkie/feat/save_badge_image_view
Browse files Browse the repository at this point in the history
뱃지 저장 화면 구현(저장 기능은 아직X)
  • Loading branch information
yonghanJu authored Feb 6, 2025
2 parents 06515a4 + ffcb61d commit 4f51f9b
Show file tree
Hide file tree
Showing 9 changed files with 300 additions and 73 deletions.
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

0 comments on commit 4f51f9b

Please sign in to comment.