라이브 방 상세 - 예약자/참여자 리스트 제거, 채널보기 버튼 액션 추가
This commit is contained in:
parent
f6d6f1de8d
commit
2e48dad913
|
@ -1,50 +0,0 @@
|
||||||
package kr.co.vividnext.sodalive.live.room.detail
|
|
||||||
|
|
||||||
import android.view.LayoutInflater
|
|
||||||
import android.view.ViewGroup
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import coil.load
|
|
||||||
import coil.transform.RoundedCornersTransformation
|
|
||||||
import kr.co.vividnext.sodalive.R
|
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemLiveRoomDetailUserBinding
|
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
|
||||||
|
|
||||||
class LiveRoomDetailAdapter(
|
|
||||||
private val onClick: (GetRoomDetailUser) -> Unit
|
|
||||||
) : RecyclerView.Adapter<LiveRoomDetailAdapter.ViewHolder>() {
|
|
||||||
|
|
||||||
val items = mutableListOf<GetRoomDetailUser>()
|
|
||||||
|
|
||||||
inner class ViewHolder(
|
|
||||||
private val binding: ItemLiveRoomDetailUserBinding
|
|
||||||
) : RecyclerView.ViewHolder(binding.root) {
|
|
||||||
fun bind(item: GetRoomDetailUser) {
|
|
||||||
binding.tvNickname.text = item.nickname
|
|
||||||
binding.ivProfile.load(item.profileImageUrl) {
|
|
||||||
crossfade(true)
|
|
||||||
placeholder(R.drawable.ic_place_holder)
|
|
||||||
transformations(RoundedCornersTransformation(23.4f.dpToPx()))
|
|
||||||
}
|
|
||||||
binding.root.setOnClickListener { onClick(item) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onCreateViewHolder(
|
|
||||||
parent: ViewGroup,
|
|
||||||
viewType: Int
|
|
||||||
): ViewHolder {
|
|
||||||
return ViewHolder(
|
|
||||||
ItemLiveRoomDetailUserBinding.inflate(
|
|
||||||
LayoutInflater.from(parent.context),
|
|
||||||
parent,
|
|
||||||
false
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
|
||||||
holder.bind(items[position])
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getItemCount() = items.count()
|
|
||||||
}
|
|
|
@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.live.room.detail
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Rect
|
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
|
@ -10,21 +9,17 @@ import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.webkit.URLUtil
|
import android.webkit.URLUtil
|
||||||
import android.widget.FrameLayout
|
import android.widget.FrameLayout
|
||||||
import android.widget.LinearLayout
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
|
||||||
import coil.load
|
import coil.load
|
||||||
import coil.transform.CircleCropTransformation
|
import coil.transform.CircleCropTransformation
|
||||||
import coil.transform.RoundedCornersTransformation
|
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import kr.co.vividnext.sodalive.R
|
import kr.co.vividnext.sodalive.R
|
||||||
|
import kr.co.vividnext.sodalive.common.Constants
|
||||||
import kr.co.vividnext.sodalive.common.LoadingDialog
|
import kr.co.vividnext.sodalive.common.LoadingDialog
|
||||||
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
import kr.co.vividnext.sodalive.common.SharedPreferenceManager
|
||||||
import kr.co.vividnext.sodalive.databinding.FragmentLiveRoomDetailBinding
|
import kr.co.vividnext.sodalive.databinding.FragmentLiveRoomDetailBinding
|
||||||
import kr.co.vividnext.sodalive.databinding.ItemLiveDetailUserSummaryBinding
|
import kr.co.vividnext.sodalive.explorer.profile.UserProfileActivity
|
||||||
import kr.co.vividnext.sodalive.extensions.dpToPx
|
|
||||||
import org.koin.android.ext.android.inject
|
import org.koin.android.ext.android.inject
|
||||||
|
|
||||||
class LiveRoomDetailFragment(
|
class LiveRoomDetailFragment(
|
||||||
|
@ -40,9 +35,6 @@ class LiveRoomDetailFragment(
|
||||||
|
|
||||||
private lateinit var binding: FragmentLiveRoomDetailBinding
|
private lateinit var binding: FragmentLiveRoomDetailBinding
|
||||||
|
|
||||||
private var isAllProfileOpen = false
|
|
||||||
|
|
||||||
private lateinit var adapter: LiveRoomDetailAdapter
|
|
||||||
private lateinit var loadingDialog: LoadingDialog
|
private lateinit var loadingDialog: LoadingDialog
|
||||||
private lateinit var roomDetail: GetRoomDetailResponse
|
private lateinit var roomDetail: GetRoomDetailResponse
|
||||||
|
|
||||||
|
@ -65,58 +57,10 @@ class LiveRoomDetailFragment(
|
||||||
val behavior = BottomSheetBehavior.from<View>(bottomSheet!!)
|
val behavior = BottomSheetBehavior.from<View>(bottomSheet!!)
|
||||||
behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
||||||
|
|
||||||
setupAdapter()
|
|
||||||
bindData()
|
bindData()
|
||||||
viewModel.getDetail(roomId) { dismiss() }
|
viewModel.getDetail(roomId) { dismiss() }
|
||||||
|
|
||||||
binding.ivClose.setOnClickListener { dismiss() }
|
binding.ivClose.setOnClickListener { dismiss() }
|
||||||
binding.tvOpenAllProfile.setOnClickListener {
|
|
||||||
isAllProfileOpen = !isAllProfileOpen
|
|
||||||
if (isAllProfileOpen) {
|
|
||||||
binding.llProfiles.visibility = View.GONE
|
|
||||||
binding.rvParticipate.visibility = View.VISIBLE
|
|
||||||
binding.tvParticipateExpression.visibility = View.VISIBLE
|
|
||||||
binding.tvOpenAllProfile.text = "닫기"
|
|
||||||
binding.tvOpenAllProfile.setCompoundDrawablesWithIntrinsicBounds(
|
|
||||||
R.drawable.ic_live_detail_top,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
binding.llProfiles.visibility = View.VISIBLE
|
|
||||||
binding.rvParticipate.visibility = View.GONE
|
|
||||||
binding.tvParticipateExpression.visibility = View.GONE
|
|
||||||
binding.tvOpenAllProfile.text = "펼쳐보기"
|
|
||||||
binding.tvOpenAllProfile.setCompoundDrawablesWithIntrinsicBounds(
|
|
||||||
R.drawable.ic_live_detail_bottom,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun setupAdapter() {
|
|
||||||
val recyclerView = binding.rvParticipate
|
|
||||||
adapter = LiveRoomDetailAdapter {}
|
|
||||||
|
|
||||||
recyclerView.layoutManager = GridLayoutManager(requireContext(), 5)
|
|
||||||
recyclerView.addItemDecoration(object : RecyclerView.ItemDecoration() {
|
|
||||||
override fun getItemOffsets(
|
|
||||||
outRect: Rect,
|
|
||||||
view: View,
|
|
||||||
parent: RecyclerView,
|
|
||||||
state: RecyclerView.State
|
|
||||||
) {
|
|
||||||
super.getItemOffsets(outRect, view, parent, state)
|
|
||||||
|
|
||||||
outRect.top = 13.3f.dpToPx().toInt()
|
|
||||||
outRect.bottom = 13.3f.dpToPx().toInt()
|
|
||||||
}
|
|
||||||
})
|
|
||||||
recyclerView.adapter = adapter
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun bindData() {
|
private fun bindData() {
|
||||||
|
@ -142,14 +86,6 @@ class LiveRoomDetailFragment(
|
||||||
private fun setRoomDetail(response: GetRoomDetailResponse) {
|
private fun setRoomDetail(response: GetRoomDetailResponse) {
|
||||||
binding.tvTitle.text = response.title
|
binding.tvTitle.text = response.title
|
||||||
binding.tvDate.text = response.beginDateTime
|
binding.tvDate.text = response.beginDateTime
|
||||||
binding.tvParticipate.text = response.numberOfParticipants.toString()
|
|
||||||
binding.tvTotal.text = "/${response.numberOfParticipantsTotal}"
|
|
||||||
|
|
||||||
binding.tvOpenAllProfile.visibility = if (response.numberOfParticipants <= 0) {
|
|
||||||
View.GONE
|
|
||||||
} else {
|
|
||||||
View.VISIBLE
|
|
||||||
}
|
|
||||||
|
|
||||||
if (response.price > 0) {
|
if (response.price > 0) {
|
||||||
binding.tvCan.text = response.price.toString()
|
binding.tvCan.text = response.price.toString()
|
||||||
|
@ -170,7 +106,6 @@ class LiveRoomDetailFragment(
|
||||||
}
|
}
|
||||||
|
|
||||||
setManagerProfile(manager = response.manager)
|
setManagerProfile(manager = response.manager)
|
||||||
setParticipantUserSummary(response.participatingUsers)
|
|
||||||
|
|
||||||
binding.tvTags.text = response.tags.joinToString(" ") { "#$it" }
|
binding.tvTags.text = response.tags.joinToString(" ") { "#$it" }
|
||||||
binding.tvContent.text = response.notice
|
binding.tvContent.text = response.notice
|
||||||
|
@ -179,7 +114,6 @@ class LiveRoomDetailFragment(
|
||||||
binding.ivShare2.setOnClickListener { shareRoom(response) }
|
binding.ivShare2.setOnClickListener { shareRoom(response) }
|
||||||
|
|
||||||
if (response.channelName.isNullOrBlank()) {
|
if (response.channelName.isNullOrBlank()) {
|
||||||
binding.tvParticipateExpression.text = "예약자"
|
|
||||||
when {
|
when {
|
||||||
response.manager.id == SharedPreferenceManager.userId -> {
|
response.manager.id == SharedPreferenceManager.userId -> {
|
||||||
binding.llStartDelete.visibility = View.VISIBLE
|
binding.llStartDelete.visibility = View.VISIBLE
|
||||||
|
@ -219,7 +153,6 @@ class LiveRoomDetailFragment(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.tvParticipateExpression.text = "참여자"
|
|
||||||
binding.tvReservationComplete.visibility = View.GONE
|
binding.tvReservationComplete.visibility = View.GONE
|
||||||
binding.tvParticipateNow.visibility = View.VISIBLE
|
binding.tvParticipateNow.visibility = View.VISIBLE
|
||||||
binding.tvReservation.visibility = View.GONE
|
binding.tvReservation.visibility = View.GONE
|
||||||
|
@ -229,9 +162,6 @@ class LiveRoomDetailFragment(
|
||||||
}
|
}
|
||||||
binding.llStartDelete.visibility = View.GONE
|
binding.llStartDelete.visibility = View.GONE
|
||||||
}
|
}
|
||||||
|
|
||||||
adapter.items.addAll(response.participatingUsers)
|
|
||||||
adapter.notifyDataSetChanged()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setManagerProfile(manager: GetRoomDetailManager) {
|
private fun setManagerProfile(manager: GetRoomDetailManager) {
|
||||||
|
@ -293,38 +223,16 @@ class LiveRoomDetailFragment(
|
||||||
|
|
||||||
if (manager.isCreator) {
|
if (manager.isCreator) {
|
||||||
binding.tvManagerProfile.visibility = View.VISIBLE
|
binding.tvManagerProfile.visibility = View.VISIBLE
|
||||||
binding.tvManagerProfile.setOnClickListener {}
|
binding.tvManagerProfile.setOnClickListener {
|
||||||
|
val intent = Intent(requireActivity(), UserProfileActivity::class.java)
|
||||||
|
intent.putExtra(Constants.EXTRA_USER_ID, manager.id)
|
||||||
|
startActivity(intent)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
binding.tvManagerProfile.visibility = View.GONE
|
binding.tvManagerProfile.visibility = View.GONE
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setParticipantUserSummary(participatingUsers: List<GetRoomDetailUser>) {
|
|
||||||
val userCount = if (participatingUsers.size > 10) {
|
|
||||||
10
|
|
||||||
} else {
|
|
||||||
participatingUsers.size
|
|
||||||
}
|
|
||||||
|
|
||||||
for (index in 0 until userCount) {
|
|
||||||
val user = participatingUsers[index]
|
|
||||||
val itemView = ItemLiveDetailUserSummaryBinding.inflate(layoutInflater)
|
|
||||||
itemView.ivProfile.load(user.profileImageUrl) {
|
|
||||||
crossfade(true)
|
|
||||||
placeholder(R.drawable.ic_place_holder)
|
|
||||||
transformations(RoundedCornersTransformation(16.7f.dpToPx()))
|
|
||||||
}
|
|
||||||
|
|
||||||
val lp = LinearLayout.LayoutParams(33.3f.dpToPx().toInt(), 33.3f.dpToPx().toInt())
|
|
||||||
if (index > 0) {
|
|
||||||
lp.setMargins(-16.7f.dpToPx().toInt(), 0, 0, 0)
|
|
||||||
}
|
|
||||||
itemView.root.layoutParams = lp
|
|
||||||
|
|
||||||
binding.llProfiles.addView(itemView.root)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun shareRoom(response: GetRoomDetailResponse) {
|
private fun shareRoom(response: GetRoomDetailResponse) {
|
||||||
viewModel.shareRoomLink(
|
viewModel.shareRoomLink(
|
||||||
response.roomId,
|
response.roomId,
|
||||||
|
|
|
@ -71,97 +71,8 @@
|
||||||
app:drawableEndCompat="@drawable/ic_can"
|
app:drawableEndCompat="@drawable/ic_can"
|
||||||
tools:ignore="RelativeOverlap"
|
tools:ignore="RelativeOverlap"
|
||||||
tools:text="300" />
|
tools:text="300" />
|
||||||
|
|
||||||
<View
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="1dp"
|
|
||||||
android:layout_below="@+id/tv_can"
|
|
||||||
android:layout_marginTop="8dp"
|
|
||||||
android:background="@color/color_88909090" />
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="13.3dp"
|
|
||||||
android:layout_marginTop="16.7dp"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintTop_toBottomOf="@+id/rl_date_and_can">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_participate_expression"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:text="참여자"
|
|
||||||
android:textColor="@color/color_eeeeee"
|
|
||||||
android:textSize="12sp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/ll_profiles"
|
|
||||||
android:layout_width="0dp"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentStart="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:layout_marginEnd="23.7dp"
|
|
||||||
android:layout_toStartOf="@+id/ll_participate"
|
|
||||||
android:gravity="center_vertical"
|
|
||||||
android:orientation="horizontal" />
|
|
||||||
|
|
||||||
<LinearLayout
|
|
||||||
android:id="@+id/ll_participate"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_alignParentEnd="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
android:gravity="center">
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_participate"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
|
||||||
android:textColor="@color/color_9970ff"
|
|
||||||
android:textSize="12sp"
|
|
||||||
tools:text="14" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_total"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
|
||||||
android:textColor="@color/color_bbbbbb"
|
|
||||||
android:textSize="12sp"
|
|
||||||
tools:text="/20" />
|
|
||||||
</LinearLayout>
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
<androidx.recyclerview.widget.RecyclerView
|
|
||||||
android:id="@+id/rv_participate"
|
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginHorizontal="13.3dp"
|
|
||||||
android:layout_marginTop="16.7dp"
|
|
||||||
android:visibility="gone" />
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/tv_open_all_profile"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_gravity="center"
|
|
||||||
android:layout_marginTop="13.3dp"
|
|
||||||
android:drawablePadding="6.7dp"
|
|
||||||
android:fontFamily="@font/gmarket_sans_medium"
|
|
||||||
android:gravity="center"
|
|
||||||
android:text="펼쳐보기"
|
|
||||||
android:textColor="@color/color_bbbbbb"
|
|
||||||
android:textSize="12sp"
|
|
||||||
app:drawableStartCompat="@drawable/ic_live_detail_bottom" />
|
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="1dp"
|
android:layout_height="1dp"
|
||||||
|
@ -348,7 +259,6 @@
|
||||||
android:background="@drawable/bg_round_corner_10_transparent_9970ff"
|
android:background="@drawable/bg_round_corner_10_transparent_9970ff"
|
||||||
android:fontFamily="@font/gmarket_sans_bold"
|
android:fontFamily="@font/gmarket_sans_bold"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingHorizontal="27dp"
|
|
||||||
android:paddingVertical="16dp"
|
android:paddingVertical="16dp"
|
||||||
android:text="수정"
|
android:text="수정"
|
||||||
android:textColor="@color/white"
|
android:textColor="@color/white"
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
|
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
|
||||||
android:id="@+id/iv_profile"
|
|
||||||
android:layout_width="33.3dp"
|
|
||||||
android:layout_height="33.3dp"
|
|
||||||
android:contentDescription="@null"
|
|
||||||
tools:src="@mipmap/ic_launcher" />
|
|
Loading…
Reference in New Issue