Skip to content
Open
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 @@ -10,10 +10,13 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.ssafy.gumi_life_project.R
import com.ssafy.gumi_life_project.data.local.AppPreferences
import com.ssafy.gumi_life_project.data.model.*
import com.ssafy.gumi_life_project.data.model.BoardItem
import com.ssafy.gumi_life_project.data.model.Comment
import com.ssafy.gumi_life_project.data.model.CommentDto
import com.ssafy.gumi_life_project.data.model.ReplyDto
import com.ssafy.gumi_life_project.databinding.FragmentBoardDetailBinding
import com.ssafy.gumi_life_project.ui.board.comment.CommentAdapter
import com.ssafy.gumi_life_project.ui.main.LoadingDialog
import com.ssafy.gumi_life_project.util.DebouncingClickListener
import com.ssafy.gumi_life_project.util.showDialog
import com.ssafy.gumi_life_project.util.template.BaseFragment
import dagger.hilt.android.AndroidEntryPoint
Expand Down Expand Up @@ -68,18 +71,22 @@ class BoardDetailFragment : BaseFragment<FragmentBoardDetailBinding>(

commentAdapter.onReportClick = {
viewModel.setReport(it)
val bottomSheetReport =ReportBottomSheet()
val bottomSheetReport = ReportBottomSheet()
bottomSheetReport.show(childFragmentManager, "ReportBottomSheet")
}

bindingNonNull.imageviewHeart.setOnClickListener {
if (boardItem.boardNo.isBlank()) return@setOnClickListener
if (likeStatus) {
viewModel.deleteLike(boardItem.boardNo)
} else {
viewModel.updateLike(boardItem.boardNo)
bindingNonNull.imageviewHeart.setOnClickListener(object : DebouncingClickListener() {
override fun onDebouncedClick(v: View) {
if (boardItem.boardNo.isBlank()) return
if (likeStatus) {
viewModel.deleteLike(boardItem.boardNo)
} else {
viewModel.updateLike(boardItem.boardNo)
}
}
}
})

initCreateCommentButton()
}


Expand Down Expand Up @@ -130,7 +137,11 @@ class BoardDetailFragment : BaseFragment<FragmentBoardDetailBinding>(
true
}
R.id.button_board_delete -> {
showDialog(requireContext(), getString(R.string.board_delete_notice), getString(R.string.board_delete_ok)) {
showDialog(
requireContext(),
getString(R.string.board_delete_notice),
getString(R.string.board_delete_ok)
) {
viewModel.deleteBoard(boardItem.boardNo, boardItem.writerId.toString())
}
true
Expand All @@ -146,18 +157,23 @@ class BoardDetailFragment : BaseFragment<FragmentBoardDetailBinding>(
}
}

fun writeComment(boardNo: String) {
val comment = bindingNonNull.edittextComment.text.toString()
if (comment == "") {
showToast(getString(R.string.board_write_textview_content_hint))
return
}
if (selectedCommentId != null) {
viewModel.writeReply(ReplyDto(boardNo, selectedCommentId!!, comment))
deselectComment()
} else {
viewModel.writeComment(CommentDto(boardNo, comment))
}
private fun initCreateCommentButton() {
bindingNonNull.imgPostComment.setOnClickListener(object : DebouncingClickListener() {
override fun onDebouncedClick(v: View) {
if(boardItem.boardNo.isBlank()) return
val comment = bindingNonNull.edittextComment.text.toString()
if (comment == "") {
showToast(getString(R.string.board_write_textview_content_hint))
return
}
if (selectedCommentId != null) {
viewModel.writeReply(ReplyDto(boardItem.boardNo, selectedCommentId!!, comment))
deselectComment()
} else {
viewModel.writeComment(CommentDto(boardItem.boardNo, comment))
}
}
})
}

private fun initObserver() {
Expand All @@ -167,7 +183,10 @@ class BoardDetailFragment : BaseFragment<FragmentBoardDetailBinding>(
showToast(it)
if (it == getString(R.string.board_delete_notice_success)) {
findNavController().navigate(R.id.action_boardDetailFragment_to_boardListFragment)
} else if(it == getString(R.string.comment_delete_notice_success) || it == getString(R.string.reply_delete_notice_success)) {
} else if (it == getString(R.string.comment_delete_notice_success) || it == getString(
R.string.reply_delete_notice_success
)
) {
viewModel.boardDetail.value?.boardDetail?.let { viewModel.getBoardDetail(it.boardNo) }
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
package com.ssafy.gumi_life_project.ui.board

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.ssafy.gumi_life_project.R
import com.ssafy.gumi_life_project.data.model.BoardWriteItem
import com.ssafy.gumi_life_project.data.model.BoardWriteResponseType
import com.ssafy.gumi_life_project.databinding.FragmentBoardWriteBinding
import com.ssafy.gumi_life_project.util.DebouncingClickListener
import com.ssafy.gumi_life_project.util.template.BaseFragment
import dagger.hilt.android.AndroidEntryPoint

Expand Down Expand Up @@ -41,15 +43,19 @@ class BoardWriteFragment : BaseFragment<FragmentBoardWriteBinding>(
}

private fun initListener() {
bindingNonNull.buttonWrite.setOnClickListener {
val title = bindingNonNull.edittextTitle.text.toString()
val content = bindingNonNull.edittextContent.text.toString()
if (title != "" && content != "") {
viewModel.writeBoard(BoardWriteItem(title, content))
} else {
showToast(getString(R.string.board_write_toast_message))
bindingNonNull.buttonWrite.setOnClickListener(
object : DebouncingClickListener() {
override fun onDebouncedClick(v: View) {
val title = bindingNonNull.edittextTitle.text.toString()
val content = bindingNonNull.edittextContent.text.toString()
if (title != "" && content != "") {
viewModel.writeBoard(BoardWriteItem(title, content))
} else {
showToast(getString(R.string.board_write_toast_message))
}
}
}
}
)
}

private fun initObserver() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.ssafy.gumi_life_project.util

import android.view.View

abstract class DebouncingClickListener(private val delayMillis: Long = 1000L) : View.OnClickListener {

private var lastClickTimes = mutableMapOf<View, Long>()

final override fun onClick(v: View) {
val currentTime = System.currentTimeMillis()
val lastClickTime = lastClickTimes[v] ?: 0L

if (currentTime - lastClickTime > delayMillis) {
lastClickTimes[v] = currentTime
onDebouncedClick(v)
}
}

abstract fun onDebouncedClick(v: View)
}
1 change: 0 additions & 1 deletion app/src/main/res/layout/fragment_board_detail.xml
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,6 @@
android:layout_height="40dp"
android:layout_gravity="center"
android:layout_marginEnd="8dp"
android:onClick="@{() -> boardDetail.writeComment(viewModel.boardDetail.boardDetail.boardNo)}"
android:padding="5dp"
app:srcCompat="@drawable/icon_write_comment"
app:tint="@color/main_color" />
Expand Down