Skip to content

Commit

Permalink
[Feature/#9] ViewModel 적용
Browse files Browse the repository at this point in the history
  • Loading branch information
gaeun5744 committed Jun 2, 2023
1 parent 223fabc commit 4ee8105
Show file tree
Hide file tree
Showing 6 changed files with 126 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,11 @@ import org.android.go.sopt.databinding.ActivityLoginBinding
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.util.hideKeyboard
import org.android.go.sopt.present.viewModel.LoginViewModel
import org.android.go.sopt.util.makeToastMessage

class LoginActivity : AppCompatActivity() {
lateinit var binding: ActivityLoginBinding
private lateinit var id: String
private lateinit var password: String
private lateinit var name: String
private lateinit var speciality: String

private val logInService = ServicePool.loginPageService

private lateinit var resultLauncher: ActivityResultLauncher<Intent>
private val viewModel by viewModels<LoginViewModel>()

override fun onCreate(savedInstanceState: Bundle?) {
Expand Down Expand Up @@ -58,8 +52,6 @@ class LoginActivity : AppCompatActivity() {

private fun clickLogin() {
binding.btnLogin.setOnClickListener {


viewModel.login(
binding.etId.text.toString(),
binding.etPassword.text.toString()
Expand All @@ -80,36 +72,19 @@ class LoginActivity : AppCompatActivity() {
finish()

loginResult.message?.let {
Toast.makeText(
this@LoginActivity,
loginResult.message ?: "로그인 성공",
Toast.LENGTH_SHORT
).show()

makeToastMessage("로그인 성공")
}


}


}


private fun clickSignup() {
resultLauncher =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
id = result.data?.getStringExtra("id") ?: ""
password = result.data?.getStringExtra("password") ?: ""
name = result.data?.getStringExtra("name") ?: ""
speciality = result.data?.getStringExtra("speciality") ?: ""


}
}
binding.btnSignup.setOnClickListener {
val intent = Intent(this, SignUpActivity::class.java)
resultLauncher.launch(intent)
startActivity(intent)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,24 @@ import android.os.Bundle
import android.text.Editable
import android.view.MotionEvent
import android.widget.Toast
import androidx.activity.viewModels
import com.google.android.material.snackbar.Snackbar
import org.android.go.sopt.MainActivity
import org.android.go.sopt.RequestSignUpDto
import org.android.go.sopt.ResponseSignUpDto
import org.android.go.sopt.databinding.ActivitySignupBinding
import org.android.go.sopt.present.viewModel.LoginViewModel
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.util.hideKeyboard
import org.android.go.sopt.util.makeToastMessage
import retrofit2.Call
import retrofit2.Response
import android.text.TextWatcher as TextWatcher


class SignUpActivity : AppCompatActivity() {

private val singUpService = ServicePool.loginPageService
private val viewModel by viewModels<LoginViewModel>()

lateinit var binding: ActivitySignupBinding
override fun onCreate(savedInstanceState: Bundle?) {
Expand All @@ -45,44 +49,22 @@ class SignUpActivity : AppCompatActivity() {
canClickButton()
binding.btnSignup.setOnClickListener {
if (binding.etId.text.length in 6..10 && binding.etPassword.text.length in 8..12) {
with(binding){
viewModel.signUp(
etId.text.toString(),
etPassword.text.toString(),
etName.text.toString(),
etSpeciality.text.toString()
)
}

singUpService.signUp(
with(binding) {
RequestSignUpDto(
etId.text.toString(),
etPassword.text.toString(),
etName.text.toString(),
etSpeciality.text.toString()

)
}
).enqueue(object : retrofit2.Callback<ResponseSignUpDto> {
override fun onResponse(
call: Call<ResponseSignUpDto>,
response: Response<ResponseSignUpDto>
) {
if (response.isSuccessful) {
response.body()?.message?.let {
Toast.makeText(
this@SignUpActivity,
response.body()?.message ?: "회원가입 성공",
Toast.LENGTH_SHORT
).show()

}
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
setResult(RESULT_OK, intent)
finish()
} else {
Toast.makeText(this@SignUpActivity, "회원가입 실패", Toast.LENGTH_SHORT)
.show()
}
}

override fun onFailure(call: Call<ResponseSignUpDto>, t: Throwable) {
Toast.makeText(this@SignUpActivity, "서버 통신 실패", Toast.LENGTH_SHORT).show()
}
})
viewModel.signUpResult.observe(this){
makeToastMessage("회원가입 성공")
val intent = Intent(this@SignUpActivity, LoginActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)
finish()
}

} else {
Snackbar.make(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.activity.viewModels
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.recyclerview.selection.SelectionPredicates
import androidx.recyclerview.selection.SelectionTracker
import androidx.recyclerview.selection.StableIdKeyProvider
import androidx.recyclerview.selection.StorageStrategy
import androidx.recyclerview.widget.LinearLayoutManager
import org.android.go.sopt.MultiViewAdapter
import org.android.go.sopt.databinding.FragmentHomeBinding
import org.android.go.sopt.present.viewModel.LoginViewModel
import org.android.go.sopt.present.viewModel.MainPageViewModel
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.remote.remoteData.model.ResponseListUsersDto
import org.android.go.sopt.util.makeToastMessage
Expand All @@ -25,6 +29,7 @@ class HomeFragment : Fragment() {
get() = requireNotNull(_binding) { "앗 ! _binding이 null이다 !" }

private val getListUsersService = ServicePool.mainPageService
private val viewModel by viewModels<MainPageViewModel>()


override fun onCreateView(
Expand Down Expand Up @@ -70,27 +75,10 @@ class HomeFragment : Fragment() {
}

private fun getUserList() {
getListUsersService.getListUsers().enqueue(
object : retrofit2.Callback<ResponseListUsersDto> {
override fun onResponse(
call: Call<ResponseListUsersDto>,
response: Response<ResponseListUsersDto>
) {
if (response.isSuccessful) {
val userList = response.body()?.data
initAdapter(userList)

}else{
requireActivity().makeToastMessage("서버 실패")
}

}

override fun onFailure(call: Call<ResponseListUsersDto>, t: Throwable) {
requireActivity().makeToastMessage("서버 실패")
}
}
)
viewModel.gerUserList()
viewModel.userList.observe(this){
initAdapter(it.data)
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@ import android.view.View
import android.view.ViewGroup
import androidx.appcompat.app.AlertDialog
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import org.android.go.sopt.databinding.FragmentMyProfileBinding
import org.android.go.sopt.present.loginPage.LoginActivity
import org.android.go.sopt.present.loginPage.MySharedPreferences
import org.android.go.sopt.present.viewModel.LoginViewModel
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.remote.remoteData.model.MyProfileDto
import org.android.go.sopt.util.makeToastMessage
Expand All @@ -22,6 +24,7 @@ class MyProfileFragment : Fragment() {
get() = requireNotNull(_binding) { "앗 ! _binding이 null이다 !" }

private val myProfileService = ServicePool.loginPageService
private val viewModel by viewModels<LoginViewModel>()

override fun onCreateView( // 뷰를 만든다 << 이때 초기화하면 좋음
inflater: LayoutInflater,
Expand All @@ -46,22 +49,14 @@ class MyProfileFragment : Fragment() {
}

private fun getProfile() {
myProfileService.myProfile(
MySharedPreferences.getUserId(requireContext())
).enqueue(object : retrofit2.Callback<MyProfileDto> {
override fun onResponse(call: Call<MyProfileDto>, response: Response<MyProfileDto>) {
if (response.isSuccessful) {
binding.name.text = "이름 : ${response.body()?.data?.name}"
binding.specialty.text = "특기 : ${response.body()?.data?.skill}"
} else {
requireContext().makeToastMessage("서버 실패")
}
}

override fun onFailure(call: Call<MyProfileDto>, t: Throwable) {
requireContext().makeToastMessage("서버 실패")
}
})
viewModel.myProfile(MySharedPreferences.getUserId(requireContext()))

viewModel.myProfile.observe(this){
binding.name.text = "이름 : ${it.data.name}"
binding.specialty.text = "특기 : ${it.data.skill}"
}

}

private fun clickLogOut() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
package org.android.go.sopt.present.viewModel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.android.go.sopt.RequestSignUpDto
import org.android.go.sopt.ResponseSignUpDto
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.remote.remoteData.model.MyProfileDto
import org.android.go.sopt.remote.remoteData.model.RequestLogInDto
import org.android.go.sopt.remote.remoteData.model.ResponseLogInDto
import retrofit2.Call
Expand All @@ -11,10 +15,19 @@ import retrofit2.Response


class LoginViewModel:ViewModel() {
val loginResult: MutableLiveData<ResponseLogInDto> = MutableLiveData()
private val loginService = ServicePool.loginPageService


private val _loginResult = MutableLiveData<ResponseLogInDto>()
val loginResult :LiveData<ResponseLogInDto> get() = _loginResult

private val _signUpResult = MutableLiveData<ResponseSignUpDto>()
val signUpResult:LiveData<ResponseSignUpDto> get() = _signUpResult

private val _myProfile = MutableLiveData<MyProfileDto>()
val myProfile:LiveData<MyProfileDto> get() = _myProfile


fun login(id: String, password: String) {
loginService.login(
RequestLogInDto(
Expand All @@ -27,12 +40,12 @@ class LoginViewModel:ViewModel() {
response: Response<ResponseLogInDto>,
) {
if (response.isSuccessful) {
loginResult.value = response.body()
_loginResult.value = response.body()



} else {
// TODO: 에러 처리

}
}

Expand All @@ -42,6 +55,39 @@ class LoginViewModel:ViewModel() {
})
}

fun signUp(id:String, password:String, name:String, skill:String){
loginService.signUp(RequestSignUpDto(id,password,name,skill)).enqueue(object : Callback<ResponseSignUpDto>{
override fun onResponse(
call: Call<ResponseSignUpDto>,
response: Response<ResponseSignUpDto>
) {
if(response.isSuccessful){
_signUpResult.value = response.body()
}
}

override fun onFailure(call: Call<ResponseSignUpDto>, t: Throwable) {

}


})
}

fun myProfile(userId:String){
loginService.myProfile(userId).enqueue(object:Callback<MyProfileDto>{
override fun onResponse(call: Call<MyProfileDto>, response: Response<MyProfileDto>) {
if(response.isSuccessful){
_myProfile.value = response.body()
}
}

override fun onFailure(call: Call<MyProfileDto>, t: Throwable) {
}

})
}




Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package org.android.go.sopt.present.viewModel

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import org.android.go.sopt.remote.ServicePool
import org.android.go.sopt.remote.remoteData.model.ResponseListUsersDto
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class MainPageViewModel : ViewModel() {
private val mainPageService = ServicePool.mainPageService

private val _userList = MutableLiveData<ResponseListUsersDto>()
val userList: LiveData<ResponseListUsersDto> get() = _userList

fun gerUserList() {
mainPageService.getListUsers().enqueue(object : Callback<ResponseListUsersDto> {
override fun onResponse(
call: Call<ResponseListUsersDto>,
response: Response<ResponseListUsersDto>
) {
if (response.isSuccessful){
_userList.value = response.body()
}
}

override fun onFailure(call: Call<ResponseListUsersDto>, t: Throwable) {

}
})
}

}

0 comments on commit 4ee8105

Please sign in to comment.