Skip to content

Commit

Permalink
Merge pull request #164 from YAPP-Github/feature/issue-163-home-none-…
Browse files Browse the repository at this point in the history
…login

[ISSUE-163] �홈 비로그인 관련 로직 변경
  • Loading branch information
hoyahozz authored Aug 1, 2022
2 parents 10e4cc6 + a326601 commit 2fa6f80
Show file tree
Hide file tree
Showing 5 changed files with 122 additions and 27 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import com.yapp.growth.presentation.theme.BackgroundColor1
class PlanzContract {

data class PlanzViewState(
val loginState: LoginState = LoginState.NONE,
val selectDayPlans: List<Plan.FixedPlan> = emptyList(),
val selectionDay: CalendarDay = CalendarDay.today(),
val userPlanStatus: UserPlanStatus = UserPlanStatus.UNKNOWN,
Expand All @@ -27,10 +28,12 @@ class PlanzContract {
data class MoveToMonitorPlan(val planId: Long): PlanzSideEffect()
object MoveToAlreadyConfirmPlan: PlanzSideEffect()
object MoveToFulledPlan: PlanzSideEffect()
object MoveToLogin: PlanzSideEffect()
}

sealed class PlanzEvent : ViewEvent {
data class OnPlanItemClicked(val planId: Int) : PlanzEvent()
object OnBottomNavigationClickedWhenNotLogin : PlanzEvent()
object OnBottomSheetExitClicked : PlanzEvent()
data class ShowBottomSheet(
val selectionDay: CalendarDay,
Expand All @@ -39,4 +42,8 @@ class PlanzContract {
data class GetUserPlanStatus(val planId: Long): PlanzEvent()
data class ChangeStatusBarColor(val color: Color): PlanzEvent()
}

enum class LoginState {
NONE, LOGIN
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,38 @@ import android.app.Activity
import android.net.Uri
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
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.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.material.BottomNavigation
import androidx.compose.material.BottomNavigationItem
import androidx.compose.material.ExperimentalMaterialApi
import androidx.compose.material.FabPosition
import androidx.compose.material.Icon
import androidx.compose.material.IconButton
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.ModalBottomSheetValue
import androidx.compose.material.Scaffold
import androidx.compose.material.Text
import androidx.compose.material.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
Expand Down Expand Up @@ -46,7 +68,13 @@ import com.yapp.growth.presentation.R
import com.yapp.growth.presentation.component.PlanzModalBottomSheetLayout
import com.yapp.growth.presentation.firebase.PLAN_ID_KEY_NAME
import com.yapp.growth.presentation.firebase.SchemeType
import com.yapp.growth.presentation.theme.*
import com.yapp.growth.presentation.theme.BackgroundColor1
import com.yapp.growth.presentation.theme.Gray500
import com.yapp.growth.presentation.theme.Gray900
import com.yapp.growth.presentation.theme.MainPurple900
import com.yapp.growth.presentation.theme.PlanzTypography
import com.yapp.growth.presentation.theme.Pretendard
import com.yapp.growth.presentation.ui.login.LoginActivity
import com.yapp.growth.presentation.ui.main.confirm.FixPlanScreen
import com.yapp.growth.presentation.ui.main.detail.DetailPlanScreen
import com.yapp.growth.presentation.ui.main.home.DayPlanItem
Expand Down Expand Up @@ -117,19 +145,32 @@ fun PlanzScreen(
currentDestination = currentDestination,
navigateToScreen = { navigationItem ->
navigateBottomNavigationScreen(
navController,
navigationItem,
intentToCreatePlan
navController = navController,
navigationItem = navigationItem,
loginState = viewState.loginState,
onNoneLoginBottomNavigationClicked = {
viewModel.setEvent(
PlanzContract.PlanzEvent.OnBottomNavigationClickedWhenNotLogin
)
},
moveToCreatePlan = intentToCreatePlan
)
}
)
}
},
floatingActionButton = {
if (bottomBarState) {
CreatePlanFAB(modifier = Modifier.padding(top = 12.dp)) {
intentToCreatePlan()
}
CreatePlanFAB(
modifier = Modifier.padding(top = 12.dp),
navigateToManageScreen = { intentToCreatePlan() },
loginState = viewState.loginState,
onNoneLoginBottomNavigationClicked = {
viewModel.setEvent(
PlanzContract.PlanzEvent.OnBottomNavigationClickedWhenNotLogin
)
},
)
}
},
isFloatingActionButtonDocked = true,
Expand All @@ -152,8 +193,12 @@ fun PlanzScreen(
)
},
showBottomSheet = { calendarDay, fixedPlans ->
viewModel.setEvent(PlanzContract.PlanzEvent.ShowBottomSheet(calendarDay,
fixedPlans))
viewModel.setEvent(
PlanzContract.PlanzEvent.ShowBottomSheet(
calendarDay,
fixedPlans
)
)
}
)
}
Expand Down Expand Up @@ -317,13 +362,17 @@ fun PlanzScreen(

LaunchedEffect(key1 = viewModel.effect) {
viewModel.effect.collect { effect ->
when(effect) {
when (effect) {
PlanzContract.PlanzSideEffect.MoveToAlreadyConfirmPlan -> {
navController.navigate(PlanzScreenRoute.ALREADY_CONFIRM_PLAN.route)
}
PlanzContract.PlanzSideEffect.MoveToFulledPlan -> {
navController.navigate(PlanzScreenRoute.FULLED_PLAN.route)
}
is PlanzContract.PlanzSideEffect.MoveToLogin -> {
LoginActivity.startActivity(context, null)
context.finish()
}
is PlanzContract.PlanzSideEffect.MoveToConfirmPlan -> {
navController.navigate(PlanzScreenRoute.CONFIRM_PLAN.route.plus("/${effect.planId}"))
}
Expand Down Expand Up @@ -402,12 +451,14 @@ fun PlanzBottomNavigation(
fun CreatePlanFAB(
modifier: Modifier = Modifier,
navigateToManageScreen: () -> Unit,
loginState: PlanzContract.LoginState,
onNoneLoginBottomNavigationClicked: () -> Unit,
) {
Column(
modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally,
) {
IconButton(onClick = { navigateToManageScreen() }) {
IconButton(onClick = if (loginState == PlanzContract.LoginState.NONE) onNoneLoginBottomNavigationClicked else navigateToManageScreen) {
Icon(
imageVector = ImageVector.vectorResource(id = R.drawable.ic_fab_create),
contentDescription = null,
Expand Down Expand Up @@ -484,8 +535,15 @@ fun PlanzPlanList(
fun navigateBottomNavigationScreen(
navController: NavHostController,
navigationItem: BottomNavigationItem,
loginState: PlanzContract.LoginState,
onNoneLoginBottomNavigationClicked: () -> Unit,
moveToCreatePlan: () -> Unit,
) {
if (loginState == PlanzContract.LoginState.NONE) {
onNoneLoginBottomNavigationClicked()
return
}

if (navigationItem == BottomNavigationItem.CREATE_PLAN) {
moveToCreatePlan()
} else {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package com.yapp.growth.presentation.ui.main

import androidx.lifecycle.viewModelScope
import com.yapp.growth.LoginSdk
import com.yapp.growth.base.BaseViewModel
import com.yapp.growth.domain.entity.UserPlanStatus
import com.yapp.growth.domain.onError
import com.yapp.growth.domain.onSuccess
import com.yapp.growth.domain.repository.UserRepository
import com.yapp.growth.domain.runCatching
import com.yapp.growth.presentation.ui.main.PlanzContract.PlanzEvent
import com.yapp.growth.presentation.ui.main.PlanzContract.PlanzSideEffect
import com.yapp.growth.presentation.ui.main.PlanzContract.PlanzViewState
Expand All @@ -16,10 +18,15 @@ import javax.inject.Inject
@HiltViewModel
class PlanzViewModel @Inject constructor(
private val repository: UserRepository,
private val kakaoLoginSdk: LoginSdk,
) : BaseViewModel<PlanzViewState, PlanzSideEffect, PlanzEvent>(
PlanzViewState()
) {

init {
checkValidLoginToken()
}

private fun getUserPlanStatus(planId: Long) = viewModelScope.launch {
repository.getUserPlanStatus(planId)
.onSuccess { status ->
Expand All @@ -37,6 +44,21 @@ class PlanzViewModel @Inject constructor(
}
}

private fun checkValidLoginToken() {
viewModelScope.launch {
runCatching {
val isValidLoginToken = kakaoLoginSdk.isValidAccessToken()
if (isValidLoginToken) {
updateState { copy(loginState = PlanzContract.LoginState.LOGIN) }
} else {
updateState { copy(loginState = PlanzContract.LoginState.NONE) }
}
}.onError {
updateState { copy(loginState = PlanzContract.LoginState.NONE) }
}
}
}

fun getUserName(): String {
return repository.getCachedUserInfo()?.userName ?: ""
}
Expand All @@ -46,6 +68,9 @@ class PlanzViewModel @Inject constructor(
is PlanzEvent.OnPlanItemClicked -> {
sendEffect({ PlanzSideEffect.NavigateDetailPlanScreen(event.planId) })
}
is PlanzEvent.OnBottomNavigationClickedWhenNotLogin -> {
sendEffect({ PlanzSideEffect.MoveToLogin })
}
is PlanzEvent.OnBottomSheetExitClicked -> {
sendEffect({ PlanzSideEffect.HideBottomSheet })
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -304,13 +304,14 @@ fun HomeInduceLogin(
cornersRadius = 12.dp,
shadowBlurRadius = 10.dp,
offsetY = 7.dp
),
)
) {
Box(
modifier = Modifier
.height(60.dp)
.fillMaxWidth()
.background(brush = MainGradient),
.background(brush = MainGradient)
.clickable { OnInduceLoginClick() },
contentAlignment = Alignment.Center,
) {
Row(
Expand All @@ -325,16 +326,12 @@ fun HomeInduceLogin(
color = Color.White,
style = MaterialTheme.typography.subtitle2,
)
IconButton(
Icon(
modifier = Modifier.size(6.dp, 12.dp),
onClick = { OnInduceLoginClick() },
) {
Icon(
tint = Color.Unspecified,
imageVector = ImageVector.vectorResource(R.drawable.ic_transparent_arrow_right),
contentDescription = null,
)
}
tint = Color.Unspecified,
imageVector = ImageVector.vectorResource(R.drawable.ic_transparent_arrow_right),
contentDescription = null,
)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,13 @@ import com.yapp.growth.domain.onSuccess
import com.yapp.growth.domain.runCatching
import com.yapp.growth.domain.usecase.GetFixedPlansUseCase
import com.yapp.growth.domain.usecase.GetUserInfoUseCase
import com.yapp.growth.presentation.R
import com.yapp.growth.presentation.ui.main.home.HomeContract.HomeEvent
import com.yapp.growth.presentation.ui.main.home.HomeContract.HomeSideEffect
import com.yapp.growth.presentation.ui.main.home.HomeContract.HomeViewState
import com.yapp.growth.presentation.ui.main.home.HomeContract.LoginState
import com.yapp.growth.presentation.ui.main.home.HomeContract.MonthlyPlanModeState
import com.yapp.growth.presentation.util.ResourceProvider
import com.yapp.growth.presentation.util.toDate
import com.yapp.growth.presentation.util.toFormatDate
import dagger.hilt.android.lifecycle.HiltViewModel
Expand All @@ -32,6 +34,7 @@ import javax.inject.Inject
class HomeViewModel @Inject constructor(
private val getFixedPlansUseCase: GetFixedPlansUseCase,
private val getUserInfoUseCase: GetUserInfoUseCase,
private val resourcesProvider: ResourceProvider,
private val kakaoLoginSdk: LoginSdk
) : BaseViewModel<HomeViewState, HomeSideEffect, HomeEvent>(
HomeViewState()
Expand All @@ -45,6 +48,10 @@ class HomeViewModel @Inject constructor(
initialValue = _currentDate.value
)

init {
updateState { copy(loadState = LoadState.LOADING) }
}

override fun handleEvents(event: HomeEvent) {
when (event) {
is HomeEvent.InitHomeScreen -> {
Expand Down Expand Up @@ -88,6 +95,7 @@ class HomeViewModel @Inject constructor(
updateState {
copy(
loginState = LoginState.NONE,
userName = resourcesProvider.getString(R.string.planz_title),
loadState = LoadState.SUCCESS
)
}
Expand Down

0 comments on commit 2fa6f80

Please sign in to comment.