diff --git a/app/build.gradle b/app/build.gradle index 425837ec..4c2561ad 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -112,10 +112,7 @@ dependencies { implementation 'androidx.activity:activity-ktx:1.8.0' implementation 'androidx.fragment:fragment-ktx:1.6.1' -// implementation "androidx.security:security-crypto:1.0.0" - implementation 'com.github.bumptech.glide:glide:4.15.1' -// kapt 'com.github.bumptech.glide:compiler:4.12.0' implementation 'id.zelory:compressor:3.0.1' diff --git a/app/src/main/java/com/eatssu/android/ui/review/write/ReviewWriteRateActivity.kt b/app/src/main/java/com/eatssu/android/ui/review/write/ReviewWriteRateActivity.kt index 544aded5..1bdffe3b 100644 --- a/app/src/main/java/com/eatssu/android/ui/review/write/ReviewWriteRateActivity.kt +++ b/app/src/main/java/com/eatssu/android/ui/review/write/ReviewWriteRateActivity.kt @@ -27,7 +27,8 @@ import okhttp3.RequestBody.Companion.asRequestBody import okhttp3.RequestBody.Companion.toRequestBody import java.io.File -class ReviewWriteRateActivity : BaseActivity(ActivityReviewWriteRateBinding::inflate) { +class ReviewWriteRateActivity : + BaseActivity(ActivityReviewWriteRateBinding::inflate) { private lateinit var viewModel: UploadReviewViewModel private lateinit var reviewService: ReviewService @@ -45,7 +46,7 @@ class ReviewWriteRateActivity : BaseActivity(Act toolbarTitle.text = "리뷰 남기기" // 툴바 제목 설정 itemName = intent.getStringExtra("itemName").toString() - Log.d("post","고정메뉴${itemName}") + Log.d("post", "고정메뉴${itemName}") itemId = intent.getLongExtra("itemId", 0) @@ -66,10 +67,27 @@ class ReviewWriteRateActivity : BaseActivity(Act viewModel = ViewModelProvider(this, UploadReviewViewModelFactory(repository)) .get(UploadReviewViewModel::class.java) + + setupUI() + observeViewModel() + + } + + private fun setupUI() { binding.btnNextReview2.setOnClickListener { postReview() } binding.btnDelete.setOnClickListener { deleteImage() } } + private fun observeViewModel() { + viewModel.isUpload.observe(this) { isUpload -> + if (isUpload == true) { finish() } + + } + viewModel.toastMessage.observe(this) { message -> + Toast.makeText(this, message, Toast.LENGTH_SHORT).show() + } + } + private fun requestStoragePermission() { if (checkSelfPermission(android.Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED @@ -124,7 +142,7 @@ class ReviewWriteRateActivity : BaseActivity(Act } private fun deleteImage() { - Log.d("post",selectedImagePath.toString()) + Log.d("ReviewWriteRateActivity", selectedImagePath.toString()) if (selectedImagePath != null) { val imageFile = File(selectedImagePath) if (imageFile.exists()) { @@ -158,17 +176,16 @@ class ReviewWriteRateActivity : BaseActivity(Act // Make the file list nullable if (compressedPartsList == null) { viewModel.postReview(itemId, reviewData) - Log.d("post","사진 없는 리뷰") + Log.d("ReviewWriteRateActivity", "사진 없는 리뷰") } else { viewModel.postReview(itemId, compressedPartsList, reviewData) - Log.d("post","사진 있는 리뷰") + Log.d("ReviewWriteRateActivity", "사진 있는 리뷰") } } val resultIntent = Intent() setResult(RESULT_OK, resultIntent) - Log.d("post","리뷰 다씀") - finish() + Log.d("ReviewWriteRateActivity", "리뷰 다씀") } private suspend fun compressImage(fileList: List): List? { diff --git a/app/src/main/java/com/eatssu/android/ui/review/write/UploadReviewViewModel.kt b/app/src/main/java/com/eatssu/android/ui/review/write/UploadReviewViewModel.kt index ae9820a0..70bf6042 100644 --- a/app/src/main/java/com/eatssu/android/ui/review/write/UploadReviewViewModel.kt +++ b/app/src/main/java/com/eatssu/android/ui/review/write/UploadReviewViewModel.kt @@ -1,10 +1,12 @@ package com.eatssu.android.ui.review.write import android.util.Log +import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.eatssu.android.data.repository.ReviewRepository +import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import okhttp3.MultipartBody import okhttp3.RequestBody @@ -15,6 +17,12 @@ import retrofit2.Response class UploadReviewViewModel(private val repository: ReviewRepository) : ViewModel() { + private val _isUpload = MutableLiveData() + val isUpload: LiveData get() = _isUpload + + private val _toastMessage = MutableLiveData() + val toastMessage: LiveData get() = _toastMessage + /* private val _reviewMenuId = MutableLiveData() val reviewMenuId: LiveData = _reviewMenuId @@ -26,11 +34,7 @@ class UploadReviewViewModel(private val repository: ReviewRepository) : ViewMode val reviewData: LiveData = _reviewData*/ - val shouldStartActivity = MutableLiveData(false) - fun onClickEvent() { - shouldStartActivity.postValue(true) - } fun postReview( menuId: Long, @@ -42,26 +46,29 @@ class UploadReviewViewModel(private val repository: ReviewRepository) : ViewMode repository.writeReview( menuId, compressedPartsList, reviewData ).enqueue(object : Callback { - override fun onResponse( - call: Call, - response: Response - ) { - if (response.isSuccessful) { - // 정상적으로 통신이 성공된 경우 - Log.d("post", "onResponse 리뷰 작성 성공: " + response.body().toString()) - onClickEvent() - - } else { - // 통신이 실패한 경우(응답코드 3xx, 4xx 등) - Log.d("post", "onResponse 리뷰 작성 실패") - } - } + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful) { + handleSuccessResponse("리뷰 작성에 성공하였습니다.") + // 정상적으로 통신이 성공된 경우 + Log.d("post", "onResponse 리뷰 작성 성공: " + response.body().toString()) +// onClickEvent() - override fun onFailure(call: Call, t: Throwable) { - // 통신 실패 (인터넷 끊킴, 예외 발생 등 시스템적인 이유) - Log.d("post", "onFailure 에러: " + t.message.toString()) + } else { + // 통신이 실패한 경우(응답코드 3xx, 4xx 등) + handleErrorResponse("리뷰 작성에 실패했습니다.") + Log.d("post", "onResponse 리뷰 작성 실패") } - }) + } + + override fun onFailure(call: Call, t: Throwable) { + // 통신 실패 (인터넷 끊킴, 예외 발생 등 시스템적인 이유) + handleErrorResponse("리뷰 작성에 실패했습니다.") + Log.d("post", "onFailure 에러: " + t.message.toString()) + } + }) } } @@ -79,20 +86,42 @@ class UploadReviewViewModel(private val repository: ReviewRepository) : ViewMode response: Response ) { if (response.isSuccessful) { + handleSuccessResponse("리뷰 작성에 성공하였습니다.") // 정상적으로 통신이 성공된 경우 Log.d("post", "onResponse 리뷰 작성 성공: " + response.body().toString()) +// onClickEvent() } else { // 통신이 실패한 경우(응답코드 3xx, 4xx 등) - Log.d("post", "onResponse 리뷰 작성 실패"+response.code()) + handleErrorResponse("리뷰 작성에 실패했습니다.") + Log.d("post", "onResponse 리뷰 작성 실패") } } override fun onFailure(call: Call, t: Throwable) { // 통신 실패 (인터넷 끊킴, 예외 발생 등 시스템적인 이유) - Log.d("post", "onFailure 리뷰 작성 에러: " + t.message.toString()) + handleErrorResponse("리뷰 작성에 실패했습니다.") + Log.d("post", "onFailure 에러: " + t.message.toString()) } }) } } + + + private fun handleSuccessResponse(message: String) { + viewModelScope.launch(Dispatchers.Main) { + _toastMessage.value = message + _isUpload.value = true + + } + } + + + + private fun handleErrorResponse(message: String) { + viewModelScope.launch(Dispatchers.Main) { + _toastMessage.value = message + _isUpload.value = false + } + } } \ No newline at end of file