Skip to content

Commit

Permalink
[Refactor] 프로필 수정 코드 일부 간략화, 추가 리팩토링 예정
Browse files Browse the repository at this point in the history
  • Loading branch information
wjdtkdgns777 committed Jan 9, 2024
1 parent 624b538 commit 2467927
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 89 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,13 @@ import androidx.activity.result.contract.ActivityResultContracts
import androidx.databinding.DataBindingUtil
import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels
import androidx.lifecycle.Observer
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.example.pathfinder.R
import com.example.pathfinder.data.model.Results
import com.example.pathfinder.databinding.FragmentProjectBinding
import com.example.pathfinder.data.model.Project
import com.example.pathfinder.ui.project.viewmodel.ProjectViewModel
import com.example.pathfinder.ui.project.viewModel.ProjectViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import com.example.pathfinder.data.model.Comment
import com.example.pathfinder.data.model.Results
import com.example.pathfinder.data.model.Project
import com.example.pathfinder.databinding.ActivityBoardInsideBinding
import com.example.pathfinder.ui.project.viewmodel.ProjectViewModel
import com.example.pathfinder.ui.project.viewModel.ProjectViewModel
import com.example.pathfinder.utils.Common.Companion.formatDate
import dagger.hilt.android.AndroidEntryPoint

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import androidx.databinding.DataBindingUtil
import com.example.pathfinder.R
import com.example.pathfinder.data.model.ProjectRequest
import com.example.pathfinder.databinding.ActivityProjectWriteBinding
import com.example.pathfinder.ui.project.viewmodel.ProjectViewModel
import com.example.pathfinder.ui.project.viewModel.ProjectViewModel
import com.example.pathfinder.utils.FBAuth
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package com.example.pathfinder.ui.project.viewmodel
package com.example.pathfinder.ui.project.viewModel

import androidx.lifecycle.ViewModel
import androidx.lifecycle.asLiveData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.provider.MediaStore
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import com.bumptech.glide.Glide
Expand All @@ -16,97 +15,61 @@ import com.google.firebase.ktx.Firebase

class EditUserProfileActivity : AppCompatActivity() {

// Firebase 인증 인스턴스 초기화
private lateinit var auth: FirebaseAuth

// Data Binding 인스턴스
private lateinit var binding: ActivityModifyBinding

// 갤러리에서 이미지를 선택하고 결과를 받는 데 사용하는 ActivityResultLauncher
private val pickImageLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
result.data?.data?.let { uri ->
binding.userImage.setImageURI(uri) // 선택된 이미지로 UI 업데이트
}
private val pickImageLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
if (result.resultCode == Activity.RESULT_OK) {
result.data?.data?.let { uri ->
binding.userImage.setImageURI(uri)
}
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityModifyBinding.inflate(layoutInflater)
setContentView(binding.root)

initializeUI()
setListeners()
auth = Firebase.auth
setupUI()
}

// UI 컴포넌트를 초기화하는 메서드
private fun initializeUI() {
auth = Firebase.auth // Firebase 인증 인스턴스 가져오기

// 현재 로그인한 사용자 정보로 UI 업데이트
private fun setupUI() {
auth.currentUser?.let { user ->
Glide.with(this).load(user.photoUrl).circleCrop().into(binding.userImage)
binding.updateName.setText(user.displayName)
binding.updateEmail.setText(user.email)
}
}

// 버튼들에 대한 리스너를 설정하는 메서드
private fun setListeners() {
binding.buttonBack.setOnClickListener { onBackPressed() } // '뒤로 가기' 버튼
binding.btnComplete.setOnClickListener { updateProfile() } // '완료' 버튼
binding.changeImage.setOnClickListener { openGallery() } // '이미지 변경' 버튼
binding.buttonBack.setOnClickListener { onBackPressed() }
binding.btnComplete.setOnClickListener { updateProfile() }
binding.changeImage.setOnClickListener { openGallery() }
}

// 갤러리를 여는 메서드
private fun openGallery() {
val galleryIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI)
pickImageLauncher.launch(galleryIntent)
}

// 사용자 프로필을 업데이트하는 메서드
private fun updateProfile() {
val user = auth.currentUser ?: return

val newUserName = binding.updateName.text.toString()
val newEmail = binding.updateEmail.text.toString()
val newPassword = binding.updatePassword.text.toString()

var updatesCount = 0
var completedUpdates = 0
user.updateProfile(userProfileChangeRequest {
displayName = binding.updateName.text.toString().takeIf { it.isNotEmpty() }
}).addOnCompleteListener { showUpdateResult(it.isSuccessful) }

// 사용자 이름 업데이트
if (newUserName.isNotEmpty()) {
updatesCount++
user.updateProfile(userProfileChangeRequest { displayName = newUserName })
.addOnCompleteListener { checkCompletion(++completedUpdates, updatesCount) }
}
user.updateEmail(binding.updateEmail.text.toString()).addOnCompleteListener { showUpdateResult(it.isSuccessful) }

// 사용자 이메일 업데이트
if (newEmail.isNotEmpty()) {
updatesCount++
user.updateEmail(newEmail)
.addOnCompleteListener { checkCompletion(++completedUpdates, updatesCount) }
}
user.updatePassword(binding.updatePassword.text.toString()).addOnCompleteListener { showUpdateResult(it.isSuccessful) }
}

// 사용자 비밀번호 업데이트
if (newPassword.isNotEmpty()) {
updatesCount++
user.updatePassword(newPassword)
.addOnCompleteListener { checkCompletion(++completedUpdates, updatesCount) }
}
private fun showUpdateResult(success: Boolean) {
if (success) {

// 업데이트가 없을 경우 액티비티 종료
if (updatesCount == 0) finish()
}
finish()
} else {

// 업데이트 완료 여부를 확인하는 메서드
private fun checkCompletion(completedUpdates: Int, totalUpdates: Int) {
if (completedUpdates == totalUpdates) {
setResult(Activity.RESULT_OK)
finish() // 모든 업데이트가 완료되면 액티비티 종료
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint

class UserProfileFragment : Fragment() {
private lateinit var binding: FragmentUserProfileBinding
private val user = Firebase.auth.currentUser
Expand Down
25 changes: 0 additions & 25 deletions app/src/main/res/layout/custom_tab.xml

This file was deleted.

0 comments on commit 2467927

Please sign in to comment.