Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Redesign] menus #208

Merged
merged 3 commits into from
Sep 1, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ class MyReviewAdapter(private val dataList: List<Review>) :
fun bind(position: Int) {
binding.tvReviewItemComment.text = dataList[position].content
binding.tvReviewItemDate.text = dataList[position].writeDate
binding.tvMenuName.text = dataList[position].menu
// binding.tvMenuName.text = dataList[position].menu
binding.rbRate.rating = dataList[position].mainGrade.toFloat()
binding.tvWriterNickname.text = MySharedPreferences.getUserName(binding.root.context)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.eatssu.android.ui.review.list

import android.app.AlertDialog
import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.view.View
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
Expand All @@ -12,6 +14,7 @@ import com.eatssu.android.data.enums.MenuType
import com.eatssu.android.data.repository.ReviewRepository
import com.eatssu.android.data.service.ReviewService
import com.eatssu.android.databinding.ActivityReviewBinding
import com.eatssu.android.ui.review.delete.DeleteViewModel
import com.eatssu.android.ui.review.write.ReviewWriteRateActivity
import com.eatssu.android.ui.review.write.menu.ReviewWriteMenuActivity
import com.eatssu.android.util.RetrofitImpl.retrofit
Expand All @@ -27,6 +30,7 @@ class ReviewActivity :
// private val viewModel: ReviewViewModel by viewModels()

private lateinit var reviewViewModel: ReviewViewModel
private lateinit var deleteViewModel: DeleteViewModel

private lateinit var reviewService: ReviewService
private lateinit var reviewRepository: ReviewRepository
Expand Down Expand Up @@ -65,6 +69,9 @@ class ReviewActivity :
)[ReviewViewModel::class.java]

binding.viewModel = reviewViewModel

deleteViewModel = ViewModelProvider(this).get(DeleteViewModel::class.java)

}

private fun lodeData() {
Expand Down Expand Up @@ -143,7 +150,9 @@ class ReviewActivity :
Log.d("ReviewActivity", "리뷰가 있음")
binding.llNonReview.visibility = View.INVISIBLE
binding.rvReview.visibility = View.VISIBLE
reviewAdapter = it.reviewList?.let { review -> ReviewAdapter(review) }
reviewAdapter = it.reviewList?.let { review ->
ReviewAdapter(review) { reviewId -> delete(reviewId) }
}

binding.rvReview.apply {
adapter = reviewAdapter
Expand Down Expand Up @@ -181,20 +190,41 @@ class ReviewActivity :
}
}

fun delete(reviewId: Long) {

AlertDialog.Builder(this).apply {
setTitle("리뷰 삭제")
setMessage("작성한 리뷰를 삭제하시겠습니까?")
setNegativeButton("취소") { _, _ ->
deleteViewModel.handleErrorResponse("삭제를 취소하였습니다.")
}
setPositiveButton("삭제") { _, _ ->
deleteViewModel.postData(reviewId)
}
}.create().show()

observeViewModel()
//TODO 삭제하고 리뷰리스트 다시 불러오기

}

private fun observeViewModel() {
deleteViewModel.toastMessage.observe(this) { result ->
Toast.makeText(this, result, Toast.LENGTH_SHORT).show()
}
}

override fun onRestart() {
super.onRestart()
Log.d("post", "onRestart")

lodeData()
bindData()
}

override fun onResume() {
super.onResume()
Log.d("post", "onResume")

lodeData()
bindData()
}

}
151 changes: 63 additions & 88 deletions app/src/main/java/com/eatssu/android/ui/review/list/ReviewAdapter.kt
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
package com.eatssu.android.ui.review.list

import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import androidx.annotation.MenuRes
import androidx.appcompat.widget.PopupMenu
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide
import com.eatssu.android.R
import com.eatssu.android.data.model.Review
import com.eatssu.android.databinding.ItemOthersReviewBinding
import com.eatssu.android.databinding.ItemReviewBinding
import com.eatssu.android.ui.review.delete.MyReviewDialogActivity
import com.eatssu.android.ui.review.modify.ModifyReviewActivity
import com.eatssu.android.ui.review.report.ReportActivity


class ReviewAdapter(private val dataList: List<Review>) :
class ReviewAdapter(
private val dataList: List<Review>,
private val callBackReviewId: (Long) -> Unit
) :
RecyclerView.Adapter<RecyclerView.ViewHolder>() {

inner class ViewHolder(private val binding: ItemReviewBinding) :
Expand All @@ -26,7 +33,7 @@ class ReviewAdapter(private val dataList: List<Review>) :
binding.tvWriterNickname.text = writerNickname
binding.tvReviewItemComment.text = content
binding.tvReviewItemDate.text = writeDate
binding.tvMenuName.text = menu
// binding.tvMenuName.text = menu

binding.rbRate.rating = mainGrade.toFloat()
}
Expand All @@ -53,115 +60,83 @@ class ReviewAdapter(private val dataList: List<Review>) :
// binding.cvPhotoReview.visibility = View.GONE
}


binding.btnDetail.setOnClickListener {
binding.btnDetail.setOnClickListener { v: View ->
if (data.isWriter) {
val intent =
Intent(binding.btnDetail.context, MyReviewDialogActivity::class.java)
intent.putExtra("reviewId", data.reviewId)
intent.putExtra("menu", data.menu)
intent.putExtra("content", data.content)
intent.putExtra("mainGrade", data.mainGrade)
intent.putExtra("amountGrade", data.amountGrade)
intent.putExtra("tasteGrade", data.tasteGrade)

Log.d("ReviewFixedActivity", "전전:" + data.reviewId)
Log.d("ReviewFixedActivity", "전전:" + data.menu)
Log.d("ReviewFixedActivity", "전전:" + data.content)
//// Timber.d("내용: "+data.content)
ContextCompat.startActivity(binding.btnDetail.context, intent, null)
showMenu(binding.root.context, v, R.menu.menu_my_review, data)
} else {
showMenu(binding.root.context, v, R.menu.menu_other_review, data)
}
}
}
}

inner class OthersViewHolder(private val binding: ItemOthersReviewBinding) :
RecyclerView.ViewHolder(binding.root) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val binding =
ItemReviewBinding.inflate(LayoutInflater.from(parent.context), parent, false)

fun bind(position: Int) {
return ViewHolder(binding)

val data = dataList[position].apply {
binding.tvWriterNickname.text = writerNickname
binding.tvReviewItemComment.text = content
binding.tvReviewItemDate.text = writeDate
}

binding.rbRate.rating = mainGrade.toFloat()
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolder -> holder.bind(position)
}
}


if (data.imgUrl?.size != 0) {
Glide.with(itemView)
.load(data.imgUrl?.get(0))
.into(binding.ivReviewPhoto)
binding.ivReviewPhoto.visibility = View.VISIBLE
binding.cvPhotoReview.visibility = View.VISIBLE
private fun showMenu(holdercontext: Context, v: View, @MenuRes menuRes: Int, data: Review) {
val popup = PopupMenu(holdercontext, v)
popup.menuInflater.inflate(menuRes, popup.menu)

if (data.imgUrl?.get(0) == "") {
binding.ivReviewPhoto.visibility = View.GONE
binding.cvPhotoReview.visibility = View.GONE
}
if (data.imgUrl?.get(0) == null) {
binding.ivReviewPhoto.visibility = View.GONE
binding.cvPhotoReview.visibility = View.GONE
}
} else {
binding.ivReviewPhoto.visibility = View.GONE
binding.cvPhotoReview.visibility = View.GONE
}
popup.setOnMenuItemClickListener { menuItem: MenuItem ->
// Respond to menu item click.
when (menuItem.itemId) {
R.id.report -> {
val intent =
Intent(holdercontext, ReportActivity::class.java)
intent.putExtra("reviewId", data.reviewId)
intent.putExtra("menu", data.menu)
ContextCompat.startActivity(holdercontext, intent, null)

true
}

binding.tvReviewItemReport.setOnClickListener {
if (!data.isWriter) {
R.id.fix -> {
val intent =
Intent(binding.tvReviewItemReport.context, ReportActivity::class.java)
Intent(holdercontext, ModifyReviewActivity::class.java)
intent.putExtra("reviewId", data.reviewId)
intent.putExtra("menu", data.menu)
ContextCompat.startActivity(binding.tvReviewItemReport.context, intent, null)
intent.putExtra("content", data.content)
intent.putExtra("mainGrade", data.mainGrade)
intent.putExtra("amountGrade", data.amountGrade)
intent.putExtra("tasteGrade", data.tasteGrade)

Log.d("ReviewFixedActivity", "전전:" + data.reviewId)
Log.d("ReviewFixedActivity", "전전:" + data.menu)
Log.d("ReviewFixedActivity", "전전:" + data.content)
//// Timber.d("내용: "+data.content)
ContextCompat.startActivity(holdercontext, intent, null)
true
}
}
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return when (viewType) {
VIEW_TYPE_MY_REVIEW -> {
val binding =
ItemReviewBinding.inflate(LayoutInflater.from(parent.context), parent, false)
ViewHolder(binding)
}
R.id.delete -> {
callBackReviewId(data.reviewId)
true
}

VIEW_TYPE_OTHERS_REVIEW -> {
val othersBinding = ItemOthersReviewBinding.inflate(
LayoutInflater.from(parent.context),
parent,
false
)
OthersViewHolder(othersBinding)
else -> {
true
}
}

else -> throw IllegalArgumentException("Invalid view type")
}
}

override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (holder) {
is ViewHolder -> holder.bind(position)
is OthersViewHolder -> holder.bind(position)
}
}

override fun getItemViewType(position: Int): Int {
return if (dataList[position].isWriter) {
VIEW_TYPE_MY_REVIEW
} else {
VIEW_TYPE_OTHERS_REVIEW
popup.setOnDismissListener {
// Respond to popup being dismissed.
}
// Show the popup menu.
popup.show()
}

override fun getItemCount(): Int = dataList.size

companion object {
private const val VIEW_TYPE_MY_REVIEW = 1
private const val VIEW_TYPE_OTHERS_REVIEW = 2
}
}
Loading
Loading