Skip to content

Commit

Permalink
[Redesign] menus (#208)
Browse files Browse the repository at this point in the history
* refactor: material menus로 신고/수정/삭제 분리

* fix: 삭제 안되는거 수정

dialog import 수정, context를 this로 수정

* fix: 리뷰 삭제 후 리스트 재로딩
  • Loading branch information
HI-JIN2 authored Sep 1, 2024
1 parent 60b9c83 commit 4416f19
Show file tree
Hide file tree
Showing 7 changed files with 145 additions and 270 deletions.
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

0 comments on commit 4416f19

Please sign in to comment.