Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@ import androidx.activity.OnBackPressedCallback
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.activity.viewModels
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.data.datasource.local.DoSoptStorage
import org.sopt.dosopttemplate.data.entity.auth.AuthInfo
Expand Down Expand Up @@ -73,7 +77,7 @@ class LoginActivity : BindingActivity<ActivityLoginBinding>(R.layout.activity_lo
}

private fun observeLogin() {
loginViewModel.signInResult.observe(this) { uiState ->
loginViewModel.signInState.flowWithLifecycle(lifecycle).onEach { uiState ->
when (uiState) {
is UiState.Success -> {
setAutoLogin(uiState.data)
Expand All @@ -86,7 +90,7 @@ class LoginActivity : BindingActivity<ActivityLoginBinding>(R.layout.activity_lo

else -> {}
}
}
}.launchIn(lifecycleScope)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

launchIn은 어떤 기능을 하는건가요?? 못보던거 같은데

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저도 궁금해여

}

private fun setAutoLogin(signData: AuthInfo) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,33 +1,34 @@
package org.sopt.dosopttemplate.presentation.auth

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.sopt.dosopttemplate.data.entity.auth.AuthInfo
import org.sopt.dosopttemplate.data.repository.auth.AuthRepository
import org.sopt.dosopttemplate.util.UiState
import timber.log.Timber

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

log가 아니라 timber를 사용해야 하는 이유가 따로 있나요?? 릴리즈했을 땐 자동으로 사라지는건가여 timber는??

import javax.inject.Inject

@HiltViewModel
class LoginViewModel @Inject constructor(
private val authRepository: AuthRepository,
) : ViewModel() {

private val _signInResult = MutableLiveData<UiState<AuthInfo>>()
val signInResult: LiveData<UiState<AuthInfo>> = _signInResult
private val _signInState = MutableStateFlow<UiState<AuthInfo>>(UiState.Loading)
val signInState get() = _signInState.asStateFlow()

fun signIn(username: String, password: String) {
viewModelScope.launch {
authRepository.postSignInInfo(
username = username,
password = password,
).onSuccess { authInfo ->
_signInResult.value = UiState.Success(authInfo)
_signInState.value = UiState.Success(authInfo)
}.onFailure { throwable ->
_signInResult.value = throwable.message?.let { UiState.Failure(it) }
Timber.e(throwable.message)

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

다들 TImber를 엄청 좋아하시는구만

}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import androidx.activity.viewModels
import androidx.core.content.ContextCompat
import androidx.lifecycle.flowWithLifecycle
import androidx.lifecycle.lifecycleScope
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import org.sopt.dosopttemplate.R
import org.sopt.dosopttemplate.data.datasource.local.DoSoptStorage
import org.sopt.dosopttemplate.databinding.ActivitySignupBinding
Expand Down Expand Up @@ -76,7 +80,7 @@ class SignUpActivity : BindingActivity<ActivitySignupBinding>(R.layout.activity_
}

private fun observeSignUp() {
signUpViewModel.signUpResult.observe(this) { uiState ->
signUpViewModel.signUpState.flowWithLifecycle(lifecycle).onEach { uiState ->
when (uiState) {
is UiState.Success -> {
val intent = Intent(this, LoginActivity::class.java)
Expand All @@ -91,7 +95,7 @@ class SignUpActivity : BindingActivity<ActivitySignupBinding>(R.layout.activity_

else -> {}
}
}
}.launchIn(lifecycleScope)
}

private fun getSignUpInfo() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
package org.sopt.dosopttemplate.presentation.auth

import androidx.lifecycle.LiveData
import androidx.lifecycle.MediatorLiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.map
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.sopt.dosopttemplate.data.repository.auth.AuthRepository
import org.sopt.dosopttemplate.util.UiState
import org.sopt.dosopttemplate.util.extension.addSourceList
import timber.log.Timber
import java.util.regex.Pattern
import javax.inject.Inject

Expand All @@ -19,8 +21,8 @@ class SignUpViewModel @Inject constructor(
private val authRepository: AuthRepository,
) : ViewModel() {

private val _signUpResult = MutableLiveData<UiState<Boolean>>()
val signUpResult: LiveData<UiState<Boolean>> = _signUpResult
private val _signUpState = MutableStateFlow<UiState<Boolean>>(UiState.Loading)
val signUpState get() = _signUpState.asStateFlow()

val id = MutableLiveData("")
val pw = MutableLiveData("")
Expand All @@ -41,10 +43,10 @@ class SignUpViewModel @Inject constructor(
username = id.value.toString(),
password = pw.value.toString(),
nickname = nickname.value.toString()
).onSuccess { _signUpResult.value = UiState.Success(true) }
).onSuccess { _signUpState.value = UiState.Success(true) }

.onFailure { throwable ->
_signUpResult.value = throwable.message?.let { UiState.Failure(it) }
Timber.e(throwable.message)
}
}
}
Expand Down