diff --git a/app/build.gradle b/app/build.gradle
index f989348b..36c7a443 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -58,6 +58,7 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
+ implementation 'com.google.firebase:firebase-firestore-ktx:24.10.2'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 6cc7580a..0a19083a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -7,6 +7,9 @@
+
+
+
>
+
+ @Multipart
+ @POST("/api/v1/privacy/insert")
+ suspend fun savePrivacy(
+ @Part profileImage: MultipartBody.Part,
+ @Part categories:List,
+ @PartMap params:MutableMap
+ )
+ :Response>
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupRequest.kt b/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupRequest.kt
new file mode 100644
index 00000000..9ef9921f
--- /dev/null
+++ b/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupRequest.kt
@@ -0,0 +1,10 @@
+package com.umc.ttoklip.data.model.signup
+
+data class SignupRequest(
+ val street:String,
+ val nickname:String,
+ val category:ArrayList,
+ val profileImage:String,
+ val independentYear:Int,
+ val independentMonth:Int
+)
diff --git a/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupResponse.kt b/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupResponse.kt
index 36d7e7b9..eecbcad9 100644
--- a/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupResponse.kt
+++ b/app/src/main/java/com/umc/ttoklip/data/model/signup/SignupResponse.kt
@@ -2,4 +2,4 @@ package com.umc.ttoklip.data.model.signup
data class SignupResponse(
val message:String
-)
\ No newline at end of file
+)
diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
index 1b8ebc0a..24502b07 100644
--- a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
+++ b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepository.kt
@@ -1,10 +1,15 @@
package com.umc.ttoklip.data.repository.signup
-import com.umc.ttoklip.data.model.login.LoginRequest
-import com.umc.ttoklip.data.model.login.LoginResponse
+import com.umc.ttoklip.data.model.signup.SignupRequest
import com.umc.ttoklip.data.model.signup.SignupResponse
import com.umc.ttoklip.module.NetworkResult
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
interface SignupRepository {
suspend fun checkNickname(nick:String): NetworkResult
+ suspend fun savePrivacy(photo: MultipartBody.Part,
+ info:MutableMap
+ ,cate:List)
+ : NetworkResult
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
index 0cd5e654..c140793a 100644
--- a/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
+++ b/app/src/main/java/com/umc/ttoklip/data/repository/signup/SignupRepositoryImpl.kt
@@ -2,15 +2,23 @@ package com.umc.ttoklip.data.repository.signup
import com.umc.ttoklip.data.api.SignupApi
import com.umc.ttoklip.data.model.ResponseBody
+import com.umc.ttoklip.data.model.signup.SignupRequest
import com.umc.ttoklip.data.model.signup.SignupResponse
import com.umc.ttoklip.module.NetworkResult
import com.umc.ttoklip.module.handleApi
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
+import retrofit2.http.Part
import javax.inject.Inject
class SignupRepositoryImpl @Inject constructor(
private val api: SignupApi
): SignupRepository {
override suspend fun checkNickname(nick: String): NetworkResult {
- return handleApi({api.nickCheck(nick)}){response: ResponseBody ->response.result}
+ return handleApi({api.nickCheck(nick)}) {response: ResponseBody ->response.result}
+ }
+
+ override suspend fun savePrivacy(photo:MultipartBody.Part,info:MutableMap,cate:List): NetworkResult {
+ return handleApi({api.savePrivacy(photo,cate,info)}) {response: ResponseBody ->response.result}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/intro/SplashActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/intro/SplashActivity.kt
index 48ed999f..8805e36f 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/intro/SplashActivity.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/intro/SplashActivity.kt
@@ -4,6 +4,7 @@ import android.content.Intent
import android.os.Handler
import android.os.Looper
import com.umc.ttoklip.R
+import com.umc.ttoklip.TtoklipApplication
import com.umc.ttoklip.databinding.ActivitySplashBinding
import com.umc.ttoklip.presentation.MainActivity
import com.umc.ttoklip.presentation.base.BaseActivity
@@ -15,10 +16,15 @@ class SplashActivity:BaseActivity(R.layout.activity_splas
handler.postDelayed({
val spf=getSharedPreferences("first", MODE_PRIVATE)
val firstRun=spf.getBoolean("firstRun",true)
+ val jwt=TtoklipApplication.prefs.getString("jwt","")
+ val isFirstLogin=TtoklipApplication.prefs.getBoolean("isFirstLogin",true)
if(firstRun){
startActivity(Intent(this, IntroActivity::class.java))
finish()
- }else{
+ }else if(jwt.isNotEmpty()&&!isFirstLogin){
+ startActivity(Intent(this,MainActivity::class.java))
+ finish()
+ } else{
startActivity(Intent(this, LoginActivity::class.java))
finish()
}
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt
index e84099a9..56efe850 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginActivity.kt
@@ -32,6 +32,8 @@ class LoginActivity : BaseActivity(R.layout.activity_login
private val viewModel: LoginViewModel by viewModels()
override fun initView() {
+ loginActivity=this
+
viewModel.initIsLogin()
binding.loginNaverBtn.setOnClickListener {
val oauthLoginCallback = object : OAuthLoginCallback {
@@ -80,6 +82,8 @@ class LoginActivity : BaseActivity(R.layout.activity_login
} else if (token != null) {
Log.i("카카오로그인", "카카오톡으로 로그인 성공")
val loginRequest = LoginRequest("${token.accessToken}", "kakao")
+ //임시 토큰확인용
+// Log.i("KAKAO-LOGIN","${token.accessToken}")
viewModel.postLogin(loginRequest)
}
}
@@ -89,10 +93,15 @@ class LoginActivity : BaseActivity(R.layout.activity_login
}
}
+ companion object{
+ var loginActivity:LoginActivity?=null
+ }
+
private fun startactivity() {
- //회원가입 만들기용 임시
+// 회원가입 만들기용 임시
// val intent = Intent(this, SignupActivity::class.java)
// startActivity(intent)
+// Log.i("JWT",TtoklipApplication.prefs.getString("jwt",""))
//이쪽이 진짜
if (viewModel.isFirstLogin.value) {
@@ -100,8 +109,8 @@ class LoginActivity : BaseActivity(R.layout.activity_login
startActivity(intent)
} else {
startActivity(Intent(this, MainActivity::class.java))
+ finish()
}
- finish()
}
override fun onBackPressed() {
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginViewModel.kt
index f54924db..e675e28a 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/login/LoginViewModel.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/login/LoginViewModel.kt
@@ -33,6 +33,7 @@ class LoginViewModel @Inject constructor(
loginRepository.postLogin(request)
.onSuccess {
TtoklipApplication.prefs.setString("jwt",it.jwtToken)
+ TtoklipApplication.prefs.setBoolean("isFirstLogin",it.ifFirstLogin)
_isFirstLogin.value=it.ifFirstLogin
_isLogin.value=true
}.onFail {
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt
index d431ce00..27235860 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/LocationActivity.kt
@@ -7,8 +7,10 @@ import android.location.Address
import android.location.Geocoder
import android.os.Build
import android.widget.SeekBar
+import androidx.activity.viewModels
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
+import androidx.fragment.app.viewModels
import com.naver.maps.geometry.LatLng
import com.naver.maps.map.LocationTrackingMode
import com.naver.maps.map.MapFragment
@@ -23,12 +25,16 @@ import com.umc.ttoklip.databinding.ActivityLocationBinding
import com.umc.ttoklip.presentation.MainActivity
import com.umc.ttoklip.presentation.base.BaseActivity
import com.umc.ttoklip.presentation.login.LoginActivity
+import dagger.hilt.android.AndroidEntryPoint
import java.util.Locale
+@AndroidEntryPoint
class LocationActivity :
BaseActivity(R.layout.activity_location),
OnMapReadyCallback {
+ private val viewModel: SignupViewModel by viewModels()
+
private lateinit var naverMap: NaverMap
private lateinit var locationSource: FusedLocationSource
private lateinit var uiSetting: UiSettings
@@ -39,9 +45,9 @@ class LocationActivity :
Manifest.permission.ACCESS_COARSE_LOCATION
)
private lateinit var range: String
- private lateinit var circle:CircleOverlay
+ private lateinit var circle: CircleOverlay
- private var locationok:Boolean=false
+ private var locationok: Boolean = false
override fun initView() {
@@ -49,7 +55,7 @@ class LocationActivity :
ActivityCompat.requestPermissions(this, PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE)
}
initMapView()
- circle= CircleOverlay()
+ circle = CircleOverlay()
range = getString(R.string.range_500m)
binding.locationRangeDescTv.text =
@@ -69,7 +75,7 @@ class LocationActivity :
} else {
setRange15km()
}
- if(locationok) setcircle()
+ if (locationok) setcircle()
}
override fun onStartTrackingTouch(seekBar: SeekBar?) = Unit
@@ -86,13 +92,28 @@ class LocationActivity :
setRange15km()
}
}
- if(locationok) setcircle()
+ if (locationok) setcircle()
}
})
binding.locationNextBtn.setOnClickListener {
- if (locationok){
- startActivity(Intent(this,MainActivity::class.java))
+ if (locationok) {
+ val bundle = intent.getBundleExtra("userInfo")
+ if (bundle != null) {
+ viewModel.saveUserStreet(address)
+ viewModel.saveUserInfoAt4(
+ bundle.getString("nickname")!!,
+ bundle.getStringArrayList("interest")!!,
+ bundle.getString("imageUri")!!,
+ bundle.getInt("independentCareerYear")!!,
+ bundle.getInt("independentCareerMonth")!!)
+ }
+ viewModel.savePrivacy()
+ startActivity(Intent(this, MainActivity::class.java))
+ val loginActivity=LoginActivity.loginActivity
+ loginActivity?.finish()
+ val signupActivity=SignupActivity.signupActivity
+ signupActivity?.finish()
finish()
}
}
@@ -115,19 +136,19 @@ class LocationActivity :
it.latitude,
it.longitude
)
- circle.center= LatLng(it.latitude,it.longitude)
- locationok=true
+ circle.center = LatLng(it.latitude, it.longitude)
+ locationok = true
setcircle()
nextok()
}
}
- private fun setcircle(){
- if(range=="500m")circle.radius=500.0
- else if(range=="1km")circle.radius=1000.0
- else circle.radius=1500.0
- circle.color=ContextCompat.getColor(this, R.color.yellow_trans30)
- circle.map=naverMap
+ private fun setcircle() {
+ if (range == "500m") circle.radius = 500.0
+ else if (range == "1km") circle.radius = 1000.0
+ else circle.radius = 1500.0
+ circle.color = ContextCompat.getColor(this, R.color.yellow_trans30)
+ circle.map = naverMap
}
private fun hasPermission(): Boolean {
@@ -141,13 +162,13 @@ class LocationActivity :
return true
}
- private fun nextok(){
- if(locationok){
- binding.locationNextBtn.isClickable=true
+ private fun nextok() {
+ if (locationok) {
+ binding.locationNextBtn.isClickable = true
binding.locationNextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_yellow)
binding.locationNextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_700)
- }else{
- binding.locationNextBtn.isClickable=false
+ } else {
+ binding.locationNextBtn.isClickable = false
binding.locationNextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black)
binding.locationNextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_500)
}
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt
index 883999f4..28b1b534 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupActivity.kt
@@ -1,21 +1,19 @@
package com.umc.ttoklip.presentation.signup
import android.view.View
-import androidx.fragment.app.Fragment
-import androidx.navigation.NavController
-import androidx.navigation.Navigation
import androidx.navigation.fragment.NavHostFragment
import androidx.navigation.fragment.findNavController
import com.umc.ttoklip.R
import com.umc.ttoklip.databinding.ActivitySignupBinding
import com.umc.ttoklip.presentation.base.BaseActivity
-import com.umc.ttoklip.presentation.mypage.InputIndependentCareerDialogFragment
-import dagger.hilt.EntryPoint
+import com.umc.ttoklip.presentation.login.LoginActivity
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SignupActivity:BaseActivity(R.layout.activity_signup) {
override fun initView() {
+ signupActivity=this
+
val navHostFragment = supportFragmentManager.findFragmentById(R.id.signup_frm)as NavHostFragment
var navController=navHostFragment.findNavController()
binding.signupBackIb.setOnClickListener {
@@ -49,4 +47,8 @@ class SignupActivity:BaseActivity(R.layout.activity_signu
binding.signupBackIb.visibility= View.INVISIBLE
binding.signupCancelIb.visibility= View.VISIBLE
}
+
+ companion object{
+ var signupActivity: SignupActivity?=null
+ }
}
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
index 74031beb..80e68394 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/SignupViewModel.kt
@@ -1,68 +1,139 @@
package com.umc.ttoklip.presentation.signup
+import android.net.Uri
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.umc.ttoklip.TtoklipApplication
-import com.umc.ttoklip.data.model.login.LoginRequest
+import com.umc.ttoklip.data.model.signup.SignupRequest
import com.umc.ttoklip.data.repository.signup.SignupRepositoryImpl
+import com.umc.ttoklip.module.onError
import com.umc.ttoklip.module.onFail
import com.umc.ttoklip.module.onSuccess
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
+import okhttp3.MediaType
+import okhttp3.MediaType.Companion.toMediaTypeOrNull
+import okhttp3.MultipartBody
+import okhttp3.RequestBody
+import okhttp3.RequestBody.Companion.asRequestBody
+import okhttp3.RequestBody.Companion.toRequestBody
+import okhttp3.ResponseBody
+import java.io.File
import javax.inject.Inject
+import javax.inject.Singleton
@HiltViewModel
class SignupViewModel @Inject constructor(
private val signupRepository: SignupRepositoryImpl
) : ViewModel() {
+ private val _nickcheckbtn=MutableStateFlow(false)
+ val nickcheckbtn:StateFlow
+ get() = _nickcheckbtn
private val _nickok = MutableStateFlow(false)
val nickok: StateFlow
get() = _nickok
+ private var _independentCareerok = MutableStateFlow(false)
+ val independentCareerok: StateFlow
+ get() = _independentCareerok
+ private var _interestok = MutableStateFlow(false)
+ val interestok: StateFlow
+ get() = _interestok
+
fun nickCheck(nick: String) {
viewModelScope.launch {
signupRepository.checkNickname(nick)
.onSuccess {
Log.i("nick check", "성공")
- _nickok.value=true
+ _nickok.value = true
}.onFail {
Log.d("nick check", "실패")
- _nickok.value=false
+ _nickok.value = false
}
}
}
+ fun nickcheckclick(){
+ viewModelScope.launch {
+ _nickcheckbtn.value=true
+ }
+ }
+
+ fun independentCheck(indendentok: Boolean) {
+ viewModelScope.launch {
+ _independentCareerok.value = indendentok
+ }
+ }
- private val _nickname = MutableStateFlow("")
+ fun interestCheck(interestok: Boolean) {
+ viewModelScope.launch {
+ _interestok.value = interestok
+ }
+ }
+
+ private var _nickname = MutableStateFlow("")
val nickname: StateFlow
get() = _nickname
- private val _categories = MutableStateFlow>(ArrayList())
+ private var _categories = MutableStateFlow>(ArrayList())
val categories: StateFlow>
get() = _categories
- private val _profileImage=MutableStateFlow("")
- val profileImage:StateFlow
+ private var _profileImage = MutableStateFlow("")
+ val profileImage: StateFlow
get() = _profileImage
- private val _independenctYear=MutableStateFlow(0)
- val independentYear:StateFlow
+ private var _independenctYear = MutableStateFlow(0)
+ val independenctYear: StateFlow
get() = _independenctYear
- private val _independenctMonth=MutableStateFlow(0)
- val independentMonth:StateFlow
+ private var _independenctMonth = MutableStateFlow(0)
+ val independenctMonth: StateFlow
get() = _independenctMonth
- fun saveUserInfo(
- nick: String,
- categories: ArrayList,
- profileImage: String,
- independentYear: Int,
- independentMonth: Int
+ fun saveUserInfoAt4(
+ unick: String,
+ ucategories: ArrayList,
+ uprofileImage: String,
+ uindependentYear: Int,
+ uindependentMonth: Int
) {
- _nickname.value=nick
- _categories.value=categories
- _profileImage.value=profileImage
- _independenctYear.value=independentYear
- _independenctMonth.value=independentMonth
- TtoklipApplication.prefs.setString("nickname",nick)
+ _nickname.value = unick
+ _categories.value = ucategories
+ _profileImage.value = uprofileImage
+ _independenctYear.value = uindependentYear
+ _independenctMonth.value = uindependentMonth
+ TtoklipApplication.prefs.setString("nickname", unick)
+ }
+
+ private var street: String = ""
+ fun saveUserStreet(ustreet: String) {
+ street = ustreet
+ }
+
+ fun savePrivacy() {
+ viewModelScope.launch {
+ val file = File(profileImage.value)
+ val requestBody = file.asRequestBody("image/jpeg".toMediaTypeOrNull())
+ val fileToUpload =
+ MultipartBody.Part.createFormData("profileImage", file.name+".jpg", requestBody)
+
+ val cate=ArrayList()
+ for (c in categories.value) {
+ cate.add(MultipartBody.Part.createFormData("categories",c))
+ }
+
+ val requestMap= hashMapOf()
+ requestMap["street"] = street.toRequestBody("text/plain".toMediaTypeOrNull())
+ requestMap["nickname"] = nickname.value.toRequestBody("text/plain".toMediaTypeOrNull())
+ requestMap["independentYear"] = independenctYear.value.toString().toRequestBody("text/plain".toMediaTypeOrNull())
+ requestMap["independentMonth"] = independenctMonth.value.toString().toRequestBody("text/plain".toMediaTypeOrNull())
+ signupRepository.savePrivacy(fileToUpload, requestMap,cate)
+ .onSuccess {
+ Log.i("USERSAVE", "성공")
+ }.onFail {
+ Log.d("USERSAVE", "실패")
+ }.onError {
+ Log.d("USERSAVE ERROR", it.toString())
+ }
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt
index 65a4e4dc..accce65f 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup4Fragment.kt
@@ -1,59 +1,88 @@
package com.umc.ttoklip.presentation.signup.fragments
+import android.content.Context
+import android.database.Cursor
+import android.net.Uri
+import android.os.Bundle
+import android.provider.MediaStore
+import android.util.Log
import android.view.View
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.ContextCompat
import androidx.fragment.app.viewModels
+import androidx.lifecycle.Lifecycle
+import androidx.lifecycle.lifecycleScope
+import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.fragment.findNavController
+import com.bumptech.glide.Glide
import com.google.android.material.chip.Chip
import com.umc.ttoklip.R
import com.umc.ttoklip.databinding.FragmentSignup4Binding
import com.umc.ttoklip.presentation.base.BaseFragment
+import com.umc.ttoklip.presentation.honeytip.dialog.ImageDialogFragment
import com.umc.ttoklip.presentation.mypage.ChooseMainInterestDialogFragment
import com.umc.ttoklip.presentation.mypage.InputIndependentCareerDialogFragment
import com.umc.ttoklip.presentation.signup.SignupActivity
import com.umc.ttoklip.presentation.signup.SignupViewModel
import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+import java.io.File
@AndroidEntryPoint
class Signup4Fragment : BaseFragment(R.layout.fragment_signup4) {
private val viewModel: SignupViewModel by viewModels()
- private lateinit var interestArray:ArrayList
+ private lateinit var interestArray: ArrayList
- private var independentCareerYear:Int? =null
- private var independentCareerMonth: Int? =null
+ private var independentCareerYear: Int? = null
+ private var independentCareerMonth: Int? = null
- private var nickok:Boolean=false
- private var independentCareerNotNull:Boolean=false
- private var interestNotNull:Boolean=false
+ private var nickcheckbtn: Boolean = false
override fun initObserver() {
+ lifecycleScope.launch {
+ repeatOnLifecycle(Lifecycle.State.STARTED) {
+ launch {
+ viewModel.nickcheckbtn.collect{
+ if(it){
+ delay(100)
+ viewModel.nickok.collect {
+ if (it) {
+ binding.signup4NickokTv.visibility = View.VISIBLE
+ binding.signup4NicknotokTv.visibility = View.GONE
+ } else {
+ binding.signup4NickokTv.visibility = View.GONE
+ binding.signup4NicknotokTv.visibility = View.VISIBLE
+ }
+ nextok()
+ }
+ }
+ }
+ }
+ }
+ }
}
override fun initView() {
- interestArray=ArrayList()
+ interestArray = ArrayList()
val activity = activity as SignupActivity
activity?.setProg(2)
binding.signup4NickcheckButton.setOnClickListener {
- //닉네임 확인 로직
viewModel.nickCheck(binding.signup4NicknameEt.text.toString())
- if(viewModel.nickok.value){
- binding.signup4NickokTv.visibility = View.VISIBLE
- binding.signup4NicknotokTv.visibility = View.GONE
- nickok=true
- }else{
- binding.signup4NickokTv.visibility = View.GONE
- binding.signup4NicknotokTv.visibility = View.VISIBLE
- nickok=false
- }
- nextok()
+ viewModel.nickcheckclick()
}
- if(independentCareerYear!=null||independentCareerMonth!=null){
+ if (independentCareerYear != null || independentCareerMonth != null) {
if (independentCareerYear != ZERO_CAREER && independentCareerMonth != ZERO_CAREER) {
binding.signup4IndependenceEt.text =
- getString(R.string.my_independent_career_base_format, independentCareerYear, independentCareerMonth)
+ getString(
+ R.string.my_independent_career_base_format,
+ independentCareerYear,
+ independentCareerMonth
+ )
} else if (independentCareerYear != ZERO_CAREER) {
binding.signup4IndependenceEt.text =
getString(R.string.my_independent_career_year_format, independentCareerYear)
@@ -64,11 +93,18 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
binding.signup4IndependenceEt.text =
getString(R.string.my_independent_career_month_format, ZERO_CAREER)
}
- binding.signup4IndependenceEt.setTextColor(ContextCompat.getColor(activity,R.color.black))
+ binding.signup4IndependenceEt.setTextColor(
+ ContextCompat.getColor(
+ activity,
+ R.color.black
+ )
+ )
+ viewModel.independentCheck(true)
+ nextok()
}
binding.signup4IndependenceEt.setOnClickListener {
- independentCareerNotNull=true
+ viewModel.independentCheck(true)
val bottomSheet = InputIndependentCareerDialogFragment { year, month ->
if (year != ZERO_CAREER && month != ZERO_CAREER) {
binding.signup4IndependenceEt.text =
@@ -83,19 +119,24 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
binding.signup4IndependenceEt.text =
getString(R.string.my_independent_career_month_format, ZERO_CAREER)
}
- independentCareerYear=year
- independentCareerMonth=month
+ independentCareerYear = year
+ independentCareerMonth = month
}
bottomSheet.show(activity.supportFragmentManager, bottomSheet.tag)
- binding.signup4IndependenceEt.setTextColor(ContextCompat.getColor(activity,R.color.black)
+ binding.signup4IndependenceEt.setTextColor(
+ ContextCompat.getColor(
+ activity,
+ R.color.black
+ )
)
-
+ viewModel.independentCheck(true)
nextok()
}
binding.signup4InterestGroup.setOnClickListener {
binding.signup4InterestDescTv.visibility = View.GONE
binding.signup4InterestIconIv.visibility = View.GONE
+ viewModel.interestCheck(false)
//chip 클릭해야 발생
val bottomSheet = ChooseMainInterestDialogFragment { interests ->
binding.signup4InterestGroup.removeAllViews()
@@ -109,36 +150,90 @@ class Signup4Fragment : BaseFragment(R.layout.fragment_s
chip.setChipStrokeColorResource(R.color.yellow)
binding.signup4InterestGroup.addView(chip)
- interestArray.add(interest)
+ val interestType=
+ if (interest.equals("집안일"))"HOUSEWORK"
+ else if(interest.equals("요리"))"RECIPE"
+ else if(interest.equals("안전한 생활"))"SAFE_LIVING"
+ else if(interest.equals("사기"))"FRAUD"
+ else "WELFARE_POLICY"
+ interestArray.add(interestType)
}
- interestNotNull=true
+ if (interests.isNotEmpty()) viewModel.interestCheck(true)
+ nextok()
}
bottomSheet.show(activity.supportFragmentManager, bottomSheet.tag)
+ }
- nextok()
+ binding.signup4CameraIv.setOnClickListener {
+ setProfileImage(activity)
+ }
+ binding.signup4ProfileImageIv.setOnClickListener {
+ setProfileImage(activity)
}
binding.signup4NextBtn.setOnClickListener {
- if(nickok&&independentCareerNotNull&&interestNotNull){
- viewModel.saveUserInfo(
- binding.signup4NicknameEt.text.toString(),
- interestArray,
- binding.signup4ProfileImageIv.resources.toString(),
- independentCareerYear!!,
- independentCareerMonth!!
- )
- findNavController().navigate(R.id.action_signup4_fragment_to_signup5_fragment)
+ if (
+ viewModel.independentCareerok.value &&
+ viewModel.interestok.value &&
+ viewModel.nickok.value
+ ) {
+ val bundle= Bundle()
+ bundle.putString("nickname",binding.signup4NicknameEt.text.toString())
+ bundle.putStringArrayList("interest",interestArray)
+ bundle.putString("imageUri",imageSource)
+ bundle.putInt("independentCareerYear",independentCareerYear!!)
+ bundle.putInt("independentCareerMonth",independentCareerMonth!!)
+
+ findNavController().navigate(R.id.action_signup4_fragment_to_signup5_fragment,bundle)
+ }
+ }
+ }
+
+ private lateinit var imageSource:String
+ private val pickMedia= registerForActivityResult(ActivityResultContracts.PickVisualMedia()){ uri ->
+ if (uri!=null) {
+ Glide.with(this).load(uri)
+ .circleCrop()
+ .into(binding.signup4ProfileImageIv)
+ imageSource=getRealPathFromUri(uri,requireContext())
+ } else {
+ Log.d("PhotoPicker", "No media selected")
+ }
+ }
+ private fun setProfileImage(activity: SignupActivity) {
+ val imageDialog = ImageDialogFragment()
+ imageDialog.setDialogClickListener(object : ImageDialogFragment.DialogClickListener {
+ override fun onClick() {
+ pickMedia.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ })
+ imageDialog.show(activity.supportFragmentManager, imageDialog.toString())
+ }
+ fun getRealPathFromUri(contentUri: Uri, context: Context): String {
+ var cursor: Cursor? = null
+ try {
+ val proj = arrayOf(MediaStore.Video.Media.DATA)
+ cursor = context.contentResolver.query(contentUri, proj, null, null, null)
+ val columnIndex = cursor?.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)
+ if (cursor != null && cursor.moveToFirst()) {
+ return cursor.getString(columnIndex!!)
}
+ } finally {
+ cursor?.close()
}
+ return ""
}
- private fun nextok(){
- if(nickok&&independentCareerNotNull&&interestNotNull){
- binding.signup4NextBtn.isClickable=true
+ private fun nextok() {
+ if (viewModel.nickok.value &&
+ viewModel.independentCareerok.value &&
+ viewModel.interestok.value
+ ) {
+ binding.signup4NextBtn.isClickable = true
binding.signup4NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_yellow)
binding.signup4NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_700)
- }else{
- binding.signup4NextBtn.isClickable=false
+ } else {
+ binding.signup4NextBtn.isClickable = false
binding.signup4NextBtn.setBackgroundResource(R.drawable.rectangle_corner_10_strok_1_black)
binding.signup4NextBtn.setTextAppearance(R.style.TextAppearance_App_16sp_500)
}
diff --git a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt
index 7e5f673f..a466c830 100644
--- a/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt
+++ b/app/src/main/java/com/umc/ttoklip/presentation/signup/fragments/Signup5Fragment.kt
@@ -1,17 +1,27 @@
package com.umc.ttoklip.presentation.signup.fragments
import android.content.Intent
+import android.os.Bundle
import android.widget.SeekBar
+import androidx.activity.viewModels
import androidx.core.content.ContextCompat
+import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
+import androidx.lifecycle.ViewModelProvider
import com.umc.ttoklip.R
+import com.umc.ttoklip.data.model.signup.SignupRequest
import com.umc.ttoklip.databinding.FragmentSignup5Binding
import com.umc.ttoklip.presentation.MainActivity
import com.umc.ttoklip.presentation.base.BaseFragment
+import com.umc.ttoklip.presentation.login.LoginActivity
import com.umc.ttoklip.presentation.signup.DirectLocationActivity
import com.umc.ttoklip.presentation.signup.LocationActivity
import com.umc.ttoklip.presentation.signup.SignupActivity
+import com.umc.ttoklip.presentation.signup.SignupViewModel
+import dagger.hilt.android.AndroidEntryPoint
class Signup5Fragment: BaseFragment(R.layout.fragment_signup5) {
+
private lateinit var range: String
override fun initObserver() {
@@ -56,13 +66,24 @@ class Signup5Fragment: BaseFragment(R.layout.fragment_si
})
binding.signup5LocationBtn.setOnClickListener {
- startActivity(Intent(activity, LocationActivity::class.java))
+ val bbundle= requireArguments()
+ val abundle=Bundle()
+ abundle.putString("nickname",bbundle.getString("nickname"))
+ abundle.putStringArrayList("interest",bbundle.getStringArrayList("interest"))
+ abundle.putString("imageUri",bbundle.getString("imageUri"))
+ abundle.putInt("independentCareerYear",bbundle.getInt("independentCareerYear"))
+ abundle.putInt("independentCareerMonth",bbundle.getInt("independentCareerMonth"))
+ val intent=Intent(activity, LocationActivity::class.java)
+ intent.putExtra("userInfo",abundle)
+ startActivity(intent)
}
binding.signup5LocationDirectEt.setOnClickListener {
startActivity(Intent(activity, DirectLocationActivity::class.java))
}
binding.signup5NextBtn.setOnClickListener {
startActivity(Intent(activity, MainActivity::class.java))
+ val loginActivity=LoginActivity.loginActivity
+ loginActivity?.finish()
activity.finish()
}
}
diff --git a/app/src/main/java/com/umc/ttoklip/util/PreferenceUtil.kt b/app/src/main/java/com/umc/ttoklip/util/PreferenceUtil.kt
index 3bab1f94..88f54d79 100644
--- a/app/src/main/java/com/umc/ttoklip/util/PreferenceUtil.kt
+++ b/app/src/main/java/com/umc/ttoklip/util/PreferenceUtil.kt
@@ -12,4 +12,10 @@ class PreferenceUtil(context:Context) {
fun setString(key:String,str:String){
prefs.edit().putString(key,str).apply()
}
+ fun getBoolean(key:String,defValue:Boolean):Boolean{
+ return prefs.getBoolean(key,defValue)
+ }
+ fun setBoolean(key:String,boolean:Boolean){
+ prefs.edit().putBoolean(key,boolean).apply()
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/oval_gray40.xml b/app/src/main/res/drawable/oval_gray40.xml
new file mode 100644
index 00000000..fc0e9325
--- /dev/null
+++ b/app/src/main/res/drawable/oval_gray40.xml
@@ -0,0 +1,5 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_signup4.xml b/app/src/main/res/layout/fragment_signup4.xml
index 5a42a03c..9671e124 100644
--- a/app/src/main/res/layout/fragment_signup4.xml
+++ b/app/src/main/res/layout/fragment_signup4.xml
@@ -66,11 +66,10 @@
android:layout_width="95dp"
android:layout_height="95dp"
android:layout_marginTop="20dp"
- android:src="@drawable/oval_stroke_1"
+ android:src="@drawable/oval_gray40"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:tint="@color/gray40" />
+ app:layout_constraintTop_toTopOf="parent"/>