diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 32b8466..20454fb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -37,6 +37,8 @@
+
diff --git a/app/src/main/java/com/example/beering/data/ApiResultInterceptor.kt b/app/src/main/java/com/example/beering/data/ApiResultInterceptor.kt
index 36710b4..4985baf 100644
--- a/app/src/main/java/com/example/beering/data/ApiResultInterceptor.kt
+++ b/app/src/main/java/com/example/beering/data/ApiResultInterceptor.kt
@@ -15,7 +15,7 @@ import org.json.JSONObject
class ApiResultInterceptor(val context : Context) : Interceptor {
- // TODO : 나중에 다시 적용
+ // TODO : 나중에 다시 적용`
override fun intercept(chain: Interceptor.Chain): Response {
val request = chain.request()
val response = chain.proceed(request)
diff --git a/app/src/main/java/com/example/beering/feature/auth/join/ui/CompleteActivity.kt b/app/src/main/java/com/example/beering/feature/auth/join/ui/CompleteActivity.kt
index d79e5e3..25af4b2 100644
--- a/app/src/main/java/com/example/beering/feature/auth/join/ui/CompleteActivity.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/join/ui/CompleteActivity.kt
@@ -15,6 +15,7 @@ import com.example.beering.feature.MainActivity
import com.example.beering.feature.auth.login.domain.LoginUseCase
import com.example.beering.feature.auth.login.ui.LoginActivity
import com.example.beering.util.base.BaseActivity
+import com.example.beering.util.changeLogin
import com.google.android.material.snackbar.Snackbar
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@@ -38,6 +39,8 @@ class CompleteActivity : BaseActivity(ActivityJoinC
// UI를 업데이트합니다.
result
.onSuccess {
+ login.saveTokens(it.jwtInfo.accessToken, it.jwtInfo.refreshToken)
+ changeLogin(true)
val mIntent = Intent(this@CompleteActivity, MainActivity::class.java)
mIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK)
startActivity(mIntent)
diff --git a/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinActivity.kt b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinActivity.kt
index 941836f..4ba84a7 100644
--- a/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinActivity.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinActivity.kt
@@ -49,7 +49,9 @@ class JoinActivity: BaseActivity(ActivityJoinBinding::infla
binding.joinIdIv22.visibility = View.VISIBLE
binding.joinIdIv1.setOnClickListener {
- binding.joinIdEd.text.clear()
+ binding.joinIdEd.text.clear(
+
+ )
joinViewModel.setUserId("")
}
} else {
diff --git a/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinKakaoActivity.kt b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinKakaoActivity.kt
new file mode 100644
index 0000000..fa0d2e9
--- /dev/null
+++ b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinKakaoActivity.kt
@@ -0,0 +1,221 @@
+package com.example.beering.feature.auth.join.ui
+
+import android.content.Intent
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.viewModels
+import androidx.core.content.ContextCompat
+import androidx.core.view.marginTop
+import androidx.lifecycle.Observer
+import com.example.beering.R
+import com.example.beering.databinding.ActivityJoinBinding
+import com.example.beering.util.addStatusBarMarginTop
+import com.example.beering.util.base.BaseActivity
+import com.example.beering.util.dpToPx
+
+class JoinKakaoActivity: BaseActivity(ActivityJoinBinding::inflate) {
+ private val joinViewModel : JoinViewModel by viewModels { JoinViewModel.Factory }
+
+
+ override fun initAfterBinding() {
+ binding.joinHeaderCl.root.addStatusBarMarginTop(this)
+ joinViewModel.setIsKakako(true)
+ binding.joinHeaderCl.toolbarBackIv.setOnClickListener {
+ finish()
+ }
+
+ // ui재사용을 위한 초기 설정
+
+ binding.joinIdCl.visibility = View.GONE
+ binding.joinPasswordCl.visibility = View.GONE
+ binding.joinPasswordAgainCl.visibility = View.GONE
+
+ val layoutParamsNicknme = binding.joinNicknameCl.layoutParams as ViewGroup.MarginLayoutParams
+ layoutParamsNicknme.topMargin = 0
+ binding.joinNicknameCl.layoutParams = layoutParamsNicknme
+
+
+
+ val layoutParamsNextOn = binding.joinNextOnIv.layoutParams as ViewGroup.MarginLayoutParams
+ layoutParamsNextOn.topMargin = dpToPx(500, this)
+ binding.joinNextOnIv.layoutParams = layoutParamsNextOn
+
+ val layoutParamsNextOff = binding.joinNextOffIv.layoutParams as ViewGroup.MarginLayoutParams
+ layoutParamsNextOff.topMargin = dpToPx(500, this)
+ binding.joinNextOffIv.layoutParams = layoutParamsNextOff
+
+
+
+ val nicknameEdit = binding.joinNicknameEd
+ joinViewModel.name.observe(this, Observer{
+ if (it.isNotEmpty()) {
+ nicknameEdit.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.beering_black
+ )
+ )
+ binding.joinNicknameBar.setBackgroundColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.beering_black
+ )
+ )
+ binding.joinNicknameIv1.setImageResource(R.drawable.ic_delete_dark)
+
+ } else {
+ nicknameEdit.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ )
+ )
+ binding.joinNicknameBar.setBackgroundColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ )
+ )
+ binding.joinNicknameIv1.setImageResource(R.drawable.ic_delete_light)
+ binding.conditionText.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ ))
+ binding.check5.setImageResource(R.drawable.ic_check_light)
+ binding.conditionLength2.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ ))
+ binding.check6.setImageResource(R.drawable.ic_check_light)
+ binding.joinNicknameIv21.visibility = View.VISIBLE
+ }
+ })
+ joinViewModel.nicknameValidation.observe(this, Observer{
+ // 닉네임이 영어, 한글 문자, 그리고 숫자로만 이루어져 있는지 확인
+ if (it.characters) {
+ binding.conditionText.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.beering_black
+ )
+ )
+ binding.check5.setImageResource(R.drawable.ic_check_dark)
+ } else {
+ binding.conditionText.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ )
+ )
+ binding.check5.setImageResource(R.drawable.ic_check_light)
+ }
+
+ // 닉네임의 길이가 1에서 10자 사이인지 확인
+ if (it.length) {
+ binding.conditionLength2.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.beering_black
+ )
+ )
+ binding.check6.setImageResource(R.drawable.ic_check_dark)
+ } else {
+ binding.conditionLength2.setTextColor(
+ ContextCompat.getColor(
+ this@JoinKakaoActivity,
+ R.color.gray01
+ )
+ )
+ binding.check6.setImageResource(R.drawable.ic_check_light)
+ }
+ // 닉네임이 유효한지 확인
+ if (it.valid) {
+ binding.joinNicknameIv21.visibility = View.INVISIBLE
+ binding.joinNicknameIv22.visibility = View.VISIBLE
+ }else {
+ binding.joinNicknameIv21.visibility = View.VISIBLE
+ binding.joinNicknameIv22.visibility = View.GONE
+ }
+ }) // 닉네임 유효성 검사
+ joinViewModel.nicknameCheck.observe(this, Observer{
+ when(it!!){
+ JoinViewModel.Companion.DuplicationCheck.PROCEEDING -> {
+ binding.conditionText.visibility = View.VISIBLE
+ binding.conditionLength2.visibility = View.VISIBLE
+ binding.check5.visibility = View.VISIBLE
+ binding.check6.visibility = View.VISIBLE
+ binding.joinNicknameCheck.visibility = View.GONE
+ binding.joinNicknameUncheck.visibility = View.GONE
+ }
+ JoinViewModel.Companion.DuplicationCheck.UNCHECKED -> {
+ binding.conditionText.visibility = View.GONE
+ binding.conditionLength2.visibility = View.GONE
+ binding.check5.visibility = View.GONE
+ binding.check6.visibility = View.GONE
+ binding.joinNicknameCheck.visibility = View.GONE
+ binding.joinNicknameUncheck.visibility = View.VISIBLE
+ }
+ JoinViewModel.Companion.DuplicationCheck.CHECKED -> {
+ binding.conditionText.visibility = View.GONE
+ binding.conditionLength2.visibility = View.GONE
+ binding.check5.visibility = View.GONE
+ binding.check6.visibility = View.GONE
+ binding.joinNicknameCheck.visibility = View.VISIBLE
+ binding.joinNicknameUncheck.visibility = View.GONE
+ }
+ }
+
+ }) // 닉네임 중복여부
+ joinViewModel.validNext.observe(this, Observer {
+ when(it){
+ true -> binding.joinNextOnIv.visibility = View.VISIBLE
+ else -> binding.joinNextOnIv.visibility = View.GONE
+ }
+ })
+
+
+
+ // 닉네임
+ nicknameEdit.addTextChangedListener(object : TextWatcher {
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
+ joinViewModel.setName(nicknameEdit.text.toString())
+
+ }
+ override fun afterTextChanged(s: Editable?) {}
+ })
+
+ // 닉네임 x 버튼
+ binding.joinNicknameIv1.setOnClickListener {
+ binding.joinNicknameEd.text.clear()
+ joinViewModel.setName("")
+ }
+ // 닉네임 중복체크
+ binding.joinNicknameIv22.setOnClickListener {
+ joinViewModel.checkNickname()
+ }
+
+
+
+ binding.joinNextOnIv.setOnClickListener {
+ val mIntent = Intent(this, TermActivity::class.java)
+ mIntent.putExtra("name", joinViewModel.name.value)
+ startActivity(mIntent)
+ }
+
+
+
+
+
+
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinViewModel.kt b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinViewModel.kt
index 85181ee..3f377af 100644
--- a/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinViewModel.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/join/ui/JoinViewModel.kt
@@ -48,6 +48,8 @@ class JoinViewModel(
private val _snackBarEvent = MutableLiveData>()
val snackBarEvent : LiveData> = _snackBarEvent
+ var isKakao : Boolean
+
init{
_userId.value = ""
_password.value = ""
@@ -55,6 +57,7 @@ class JoinViewModel(
_name.value = ""
_idCheck.value = DuplicationCheck.PROCEEDING
_nicknameCheck.value = DuplicationCheck.PROCEEDING
+ isKakao = false
}
fun setUserId(id : String){
_userId.value = id
@@ -81,6 +84,10 @@ class JoinViewModel(
validNext()
}
+ fun setIsKakako(isKakao : Boolean){
+ this.isKakao = isKakao
+ }
+
fun validNext(){
if (pwValidation.value == null){
return
@@ -93,9 +100,29 @@ class JoinViewModel(
&& pwValidation.value!!.isConfirmed
&& nicknameCheck.value == DuplicationCheck.CHECKED
&& idCheck.value == DuplicationCheck.CHECKED)
+ if(isKakao){
+ validNextKakao()
+ } else {
+ if (pwValidation.value == null) {
+ return
+ }
+ _validNext.value = (pwValidation.value!!.valid
+ && pwValidation.value!!.isConfirmed
+ && nicknameCheck.value == DuplicationCheck.CHECKED
+ && idCheck.value == DuplicationCheck.CHECKED)
+
+ }
+ }
+
+
+
+
+ fun validNextKakao(){
+ _validNext.value = (nicknameCheck.value == DuplicationCheck.CHECKED)
}
fun checkId(){
+ // TODO : 이메일 형식인지 정규식 확인
val cleanEmail = userId.value!!.trim()
Log.d("userId", cleanEmail)
viewModelScope.launch {
@@ -120,6 +147,7 @@ class JoinViewModel(
}
fun checkNickname(){
+ // TODO : 이름 형식 안맞으면 활성화 x 되게
viewModelScope.launch {
validation.checkNickname(name.value!!)
.onSuccess {
diff --git a/app/src/main/java/com/example/beering/feature/auth/join/ui/TermActivity.kt b/app/src/main/java/com/example/beering/feature/auth/join/ui/TermActivity.kt
index f0721b2..419d636 100644
--- a/app/src/main/java/com/example/beering/feature/auth/join/ui/TermActivity.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/join/ui/TermActivity.kt
@@ -37,13 +37,14 @@ class TermActivity : BaseActivity(ActivityJoinTermBindi
binding.termCheckFirstCb.isChecked = it[0]
binding.termCheckSecondCb.isChecked = it[1]
binding.termCheckThirdCb.isChecked = it[2]
- if (it[0] && it[1] && it[2]){
+ binding.termCheckAllCb.isChecked = it[0] && it[1] && it[2]
+
+ if (it[0] && it[1]){
binding.termJoinOnIv.visibility = View.VISIBLE
- binding.termCheckAllCb.isChecked = true
} else {
binding.termJoinOnIv.visibility = View.GONE
- binding.termCheckAllCb.isChecked = false
}
+
})
termViewModel.intentFlag.observe(this, Observer {
it.getContentIfNotHandled()?.let{msg ->
diff --git a/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginActivity.kt b/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginActivity.kt
index eb427b7..c3929c0 100644
--- a/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginActivity.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginActivity.kt
@@ -13,6 +13,7 @@ import android.view.KeyEvent
import android.view.View
import android.view.animation.Animation
import android.view.animation.AnimationUtils
+import android.widget.EditText
import android.widget.Toast
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
@@ -29,6 +30,7 @@ import com.example.beering.util.changeLogin
import com.example.beering.util.getRetrofit
import com.example.beering.util.setMemberId
import com.example.beering.util.setToken
+import com.google.android.material.card.MaterialCardView
import com.google.android.material.snackbar.Snackbar
import com.kakao.sdk.auth.AuthApiClient
import com.kakao.sdk.auth.model.OAuthToken
@@ -239,6 +241,33 @@ class LoginActivity : AppCompatActivity() {
startActivity(intent)
}
+// binding.loginPasswordInvisibleIv.setOnClickListener {
+// binding.loginPasswordEd.inputType = InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD
+// binding.loginPasswordInvisibleIv.visibility = View.INVISIBLE
+// binding.loginPasswordVisibleIv.visibility = View.VISIBLE
+// }
+//
+// binding.loginPasswordVisibleIv.setOnClickListener {
+// binding.loginPasswordEd.inputType =
+// InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_VARIATION_PASSWORD
+// binding.loginPasswordInvisibleIv.visibility = View.VISIBLE
+// binding.loginPasswordVisibleIv.visibility = View.INVISIBLE
+// }
+
+
+ //객체 생성
+ val idEdit: EditText = binding.loginIdEd
+ val passwordEdit: EditText = binding.loginPasswordEd
+ val loginBtn: MaterialCardView = binding.loginBtnCv
+
+ //메시지 담을 변수
+ var id: String = ""
+ var password: String = ""
+
+
+ //버튼 비활성화
+// loginBtn.isEnabled = false
+
//EditText 값 있을때만 버튼 활성화
binding.loginIdEd.addTextChangedListener(object : TextWatcher {
// 입력 하기 전에 작동
@@ -305,3 +334,4 @@ class LoginActivity : AppCompatActivity() {
+
diff --git a/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginViewModel.kt b/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginViewModel.kt
index ca1eab4..face04e 100644
--- a/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginViewModel.kt
+++ b/app/src/main/java/com/example/beering/feature/auth/login/ui/LoginViewModel.kt
@@ -15,6 +15,7 @@ import com.example.beering.data.onSuccess
import com.example.beering.feature.auth.join.domain.UserValidationUseCase
import com.example.beering.feature.auth.join.ui.JoinViewModel
import com.example.beering.feature.auth.login.domain.LoginUseCase
+import com.example.beering.util.changeLogin
import kotlinx.coroutines.launch
class LoginViewModel(
@@ -50,6 +51,7 @@ class LoginViewModel(
login(id.value!!, pw.value!!)
.onSuccess {
login.saveTokens(it.jwtInfo.accessToken, it.jwtInfo.refreshToken)
+ changeLogin(true)
_loginSuccess.value = SingleLiveEvent(true)
}
.onFail{code, msg ->
diff --git a/app/src/main/java/com/example/beering/feature/home/HomeFragment.kt b/app/src/main/java/com/example/beering/feature/home/HomeFragment.kt
index e43fe08..9936de8 100644
--- a/app/src/main/java/com/example/beering/feature/home/HomeFragment.kt
+++ b/app/src/main/java/com/example/beering/feature/home/HomeFragment.kt
@@ -31,6 +31,7 @@ class HomeFragment: Fragment() {
savedInstanceState: Bundle?
): View? {
binding = FragmentHomeBinding.inflate(inflater, container, false)
+
val recyclerView: RecyclerView = binding.itemHomeRv
var homeService:ReviewsApiService? = null
diff --git a/app/src/main/java/com/example/beering/feature/search/DrinkSearchFragment.kt b/app/src/main/java/com/example/beering/feature/search/DrinkSearchFragment.kt
index 21e5d7f..cf66a0a 100644
--- a/app/src/main/java/com/example/beering/feature/search/DrinkSearchFragment.kt
+++ b/app/src/main/java/com/example/beering/feature/search/DrinkSearchFragment.kt
@@ -55,7 +55,7 @@ class DrinkSearchFragment : Fragment() {
// 0: 이름순, 1: 리뷰많은순, 2: 최저가순, 3: 평점순
var searchCountry : String? = null
- var searchTagList = mutableListOf() // 필터 태그
+ var searchTagList : MutableList? = null // 필터 태그
// 필터 하위 옵션
var searchSweetness: Int? = null // 와인 하위옵션
@@ -217,7 +217,7 @@ class DrinkSearchFragment : Fragment() {
}
- drinkSearchService.drinkSearch(null,binding.drinkSearchTopSearchEd.text.toString(), searchType, searchSort, searchPrice_min, searchPrice_max, searchCountry, searchTagList.joinToString(","), searchSweetness).enqueue(object : retrofit2.Callback {
+ drinkSearchService.drinkSearch(null,binding.drinkSearchTopSearchEd.text?.toString()?.takeIf { it.isNotEmpty() }, searchType, searchSort, searchPrice_min, searchPrice_max, searchCountry, null, searchSweetness).enqueue(object : retrofit2.Callback {
override fun onResponse(
call: Call,
response: Response
@@ -334,8 +334,8 @@ class DrinkSearchFragment : Fragment() {
getRetrofit().create(DrinkSearchApiService::class.java)
}
-
- drinkSearchService.drinkSearch(null,binding.drinkSearchTopSearchEd.text.toString(), searchType, searchSort, searchPrice_min, searchPrice_max, searchCountry, searchTagList.joinToString(","), searchSweetness).enqueue(object : retrofit2.Callback {
+ val searchTag = searchTagList?.joinToString(",")
+ drinkSearchService.drinkSearch(null,binding.drinkSearchTopSearchEd.text?.toString()?.takeIf { it.isNotEmpty() } , searchType, searchSort, searchPrice_min, searchPrice_max, searchCountry, searchTag , searchSweetness).enqueue(object : retrofit2.Callback {
override fun onResponse(
call: Call,
response: Response
diff --git a/app/src/main/java/com/example/beering/util/ApiClient.kt b/app/src/main/java/com/example/beering/util/ApiClient.kt
index 767d536..38d8ee3 100644
--- a/app/src/main/java/com/example/beering/util/ApiClient.kt
+++ b/app/src/main/java/com/example/beering/util/ApiClient.kt
@@ -32,7 +32,7 @@ class HeaderInterceptor constructor(private val token: String) : Interceptor {
@Throws(IOException::class)
override fun intercept(chain: Interceptor.Chain): Response {
- val token = "Bearer $token"
+ val token = "$token"
val newRequest = chain.request().newBuilder()
.addHeader("Authorization", token)
.build()
diff --git a/app/src/main/java/com/example/beering/util/base/BaseResponse.kt b/app/src/main/java/com/example/beering/util/base/BaseResponse.kt
index 8fc3302..a4bdb6d 100644
--- a/app/src/main/java/com/example/beering/util/base/BaseResponse.kt
+++ b/app/src/main/java/com/example/beering/util/base/BaseResponse.kt
@@ -6,5 +6,5 @@ data class BaseResponse (
@SerializedName("isSuccess") val isSuccess: Boolean,
@SerializedName("responseCode") val responseCode: Int,
@SerializedName("responseMessage") val responseMessage: String,
- @SerializedName("result") val result: T?
+ @SerializedName("result") val result: T?
)
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_join.xml b/app/src/main/res/layout/activity_join.xml
index f922316..a203c8d 100644
--- a/app/src/main/res/layout/activity_join.xml
+++ b/app/src/main/res/layout/activity_join.xml
@@ -520,7 +520,7 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/join_input_cl"/>
-
+
+ app:showAsAction="always"
+ />