한정판 콘텐츠 상세
- 해당 콘텐츠를 업로드 한 크리에이터가 콘텐츠 구매자를 볼 수 있는 UI 추가
This commit is contained in:
		| @@ -35,7 +35,7 @@ android { | |||||||
|         applicationId "kr.co.vividnext.sodalive" |         applicationId "kr.co.vividnext.sodalive" | ||||||
|         minSdk 23 |         minSdk 23 | ||||||
|         targetSdk 34 |         targetSdk 34 | ||||||
|         versionCode 158 |         versionCode 159 | ||||||
|         versionName "1.34.0" |         versionName "1.34.0" | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -0,0 +1,56 @@ | |||||||
|  | package kr.co.vividnext.sodalive.audio_content.detail | ||||||
|  |  | ||||||
|  | import android.annotation.SuppressLint | ||||||
|  | import android.view.LayoutInflater | ||||||
|  | import android.view.ViewGroup | ||||||
|  | import androidx.recyclerview.widget.RecyclerView | ||||||
|  | import coil.load | ||||||
|  | import coil.transform.CircleCropTransformation | ||||||
|  | import kr.co.vividnext.sodalive.R | ||||||
|  | import kr.co.vividnext.sodalive.databinding.ItemLiveRoomDetailUserBinding | ||||||
|  |  | ||||||
|  | class AudioContentBuyerAdapter : RecyclerView.Adapter<AudioContentBuyerAdapter.ViewHolder>() { | ||||||
|  |  | ||||||
|  |     private val items = mutableListOf<ContentBuyer>() | ||||||
|  |  | ||||||
|  |     inner class ViewHolder( | ||||||
|  |         private val binding: ItemLiveRoomDetailUserBinding | ||||||
|  |     ) : RecyclerView.ViewHolder(binding.root) { | ||||||
|  |         fun bind(item: ContentBuyer) { | ||||||
|  |             binding.tvNickname.text = item.nickname | ||||||
|  |             binding.ivProfile.load(item.profileImageUrl) { | ||||||
|  |                 crossfade(true) | ||||||
|  |                 placeholder(R.drawable.ic_place_holder) | ||||||
|  |                 transformations(CircleCropTransformation()) | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     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() | ||||||
|  |  | ||||||
|  |     @SuppressLint("NotifyDataSetChanged") | ||||||
|  |     fun addItems(buyerList: List<ContentBuyer>) { | ||||||
|  |         items.addAll(buyerList) | ||||||
|  |         notifyDataSetChanged() | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -81,6 +81,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin | |||||||
|     private var title = "" |     private var title = "" | ||||||
|  |  | ||||||
|     private lateinit var activityResultLauncher: ActivityResultLauncher<Intent> |     private lateinit var activityResultLauncher: ActivityResultLauncher<Intent> | ||||||
|  |     private lateinit var contentBuyerAdapter: AudioContentBuyerAdapter | ||||||
|     private lateinit var audioContent: GetAudioContentDetailResponse |     private lateinit var audioContent: GetAudioContentDetailResponse | ||||||
|     private lateinit var orderType: OrderType |     private lateinit var orderType: OrderType | ||||||
|     private lateinit var imm: InputMethodManager |     private lateinit var imm: InputMethodManager | ||||||
| @@ -298,6 +299,36 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin | |||||||
|  |  | ||||||
|             dialog.show(screenWidth - 26.7f.dpToPx().toInt()) |             dialog.show(screenWidth - 26.7f.dpToPx().toInt()) | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  |         setupBuyerList() | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     private fun setupBuyerList() { | ||||||
|  |         val recyclerView = binding.rvBuyer | ||||||
|  |         contentBuyerAdapter = AudioContentBuyerAdapter() | ||||||
|  |  | ||||||
|  |         recyclerView.layoutManager = LinearLayoutManager( | ||||||
|  |             this, | ||||||
|  |             LinearLayoutManager.HORIZONTAL, | ||||||
|  |             false | ||||||
|  |         ) | ||||||
|  |  | ||||||
|  |         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 = 6.7f.dpToPx().toInt() | ||||||
|  |                 outRect.bottom = 6.7f.dpToPx().toInt() | ||||||
|  |                 outRect.left = 6.7f.dpToPx().toInt() | ||||||
|  |                 outRect.right = 6.7f.dpToPx().toInt() | ||||||
|  |             } | ||||||
|  |         }) | ||||||
|  |         recyclerView.adapter = contentBuyerAdapter | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private fun donation(can: Int, message: String) { |     private fun donation(can: Int, message: String) { | ||||||
| @@ -924,8 +955,16 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin | |||||||
|  |  | ||||||
|                 binding.tvRemainingCount.text = "${response.remainingContentCount}" |                 binding.tvRemainingCount.text = "${response.remainingContentCount}" | ||||||
|             } |             } | ||||||
|  |  | ||||||
|  |             if (response.buyerList.isNotEmpty()) { | ||||||
|  |                 binding.rvBuyer.visibility = View.VISIBLE | ||||||
|  |                 binding.tvBuyerTitle.visibility = View.VISIBLE | ||||||
|  |                 contentBuyerAdapter.addItems(response.buyerList) | ||||||
|  |             } | ||||||
|         } else { |         } else { | ||||||
|             binding.rlLimitedEdition.visibility = View.GONE |             binding.rlLimitedEdition.visibility = View.GONE | ||||||
|  |             binding.rvBuyer.visibility = View.GONE | ||||||
|  |             binding.tvBuyerTitle.visibility = View.GONE | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -41,7 +41,8 @@ data class GetAudioContentDetailResponse( | |||||||
|     @SerializedName("isAvailablePin") val isAvailablePin: Boolean, |     @SerializedName("isAvailablePin") val isAvailablePin: Boolean, | ||||||
|     @SerializedName("creator") val creator: AudioContentCreator, |     @SerializedName("creator") val creator: AudioContentCreator, | ||||||
|     @SerializedName("previousContent") val previousContent: OtherContentResponse?, |     @SerializedName("previousContent") val previousContent: OtherContentResponse?, | ||||||
|     @SerializedName("nextContent") val nextContent: OtherContentResponse? |     @SerializedName("nextContent") val nextContent: OtherContentResponse?, | ||||||
|  |     @SerializedName("buyerList") val buyerList: List<ContentBuyer> | ||||||
| ) | ) | ||||||
|  |  | ||||||
| @Keep | @Keep | ||||||
| @@ -60,3 +61,9 @@ data class AudioContentCreator( | |||||||
|     @SerializedName("isFollow") var isFollow: Boolean, |     @SerializedName("isFollow") var isFollow: Boolean, | ||||||
|     @SerializedName("isNotify") var isNotify: Boolean |     @SerializedName("isNotify") var isNotify: Boolean | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @Keep | ||||||
|  | data class ContentBuyer( | ||||||
|  |     @SerializedName("nickname") val nickname: String, | ||||||
|  |     @SerializedName("profileImageUrl") val profileImageUrl: String | ||||||
|  | ) | ||||||
|   | |||||||
| @@ -534,6 +534,7 @@ | |||||||
|                     <TextView |                     <TextView | ||||||
|                         android:layout_width="wrap_content" |                         android:layout_width="wrap_content" | ||||||
|                         android:layout_height="wrap_content" |                         android:layout_height="wrap_content" | ||||||
|  |                         android:layout_centerVertical="true" | ||||||
|                         android:fontFamily="@font/gmarket_sans_medium" |                         android:fontFamily="@font/gmarket_sans_medium" | ||||||
|                         android:text="한정판" |                         android:text="한정판" | ||||||
|                         android:textColor="@color/color_3bb9f1" |                         android:textColor="@color/color_3bb9f1" | ||||||
| @@ -543,6 +544,7 @@ | |||||||
|                         android:layout_width="wrap_content" |                         android:layout_width="wrap_content" | ||||||
|                         android:layout_height="wrap_content" |                         android:layout_height="wrap_content" | ||||||
|                         android:layout_alignParentEnd="true" |                         android:layout_alignParentEnd="true" | ||||||
|  |                         android:layout_centerVertical="true" | ||||||
|                         android:orientation="horizontal" |                         android:orientation="horizontal" | ||||||
|                         tools:ignore="RelativeOverlap"> |                         tools:ignore="RelativeOverlap"> | ||||||
|  |  | ||||||
| @@ -589,10 +591,31 @@ | |||||||
|                     </LinearLayout> |                     </LinearLayout> | ||||||
|                 </RelativeLayout> |                 </RelativeLayout> | ||||||
|  |  | ||||||
|  |                 <TextView | ||||||
|  |                     android:id="@+id/tv_buyer_title" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginHorizontal="13.3dp" | ||||||
|  |                     android:layout_marginTop="13.3dp" | ||||||
|  |                     android:fontFamily="@font/gmarket_sans_bold" | ||||||
|  |                     android:text="구매자" | ||||||
|  |                     android:textColor="@color/color_eeeeee" | ||||||
|  |                     android:textSize="18.3sp" | ||||||
|  |                     android:visibility="gone" /> | ||||||
|  |  | ||||||
|  |                 <androidx.recyclerview.widget.RecyclerView | ||||||
|  |                     android:id="@+id/rv_buyer" | ||||||
|  |                     android:layout_width="match_parent" | ||||||
|  |                     android:layout_height="wrap_content" | ||||||
|  |                     android:layout_marginHorizontal="13.3dp" | ||||||
|  |                     android:layout_marginTop="13.3dp" | ||||||
|  |                     android:visibility="gone" /> | ||||||
|  |  | ||||||
|                 <FrameLayout |                 <FrameLayout | ||||||
|                     android:layout_width="match_parent" |                     android:layout_width="match_parent" | ||||||
|                     android:layout_height="wrap_content" |                     android:layout_height="wrap_content" | ||||||
|                     android:layout_marginHorizontal="13.3dp"> |                     android:layout_marginHorizontal="13.3dp" | ||||||
|  |                     android:layout_marginTop="13.3dp"> | ||||||
|  |  | ||||||
|                     <LinearLayout |                     <LinearLayout | ||||||
|                         android:layout_width="match_parent" |                         android:layout_width="match_parent" | ||||||
| @@ -603,7 +626,7 @@ | |||||||
|                             android:id="@+id/tv_tag" |                             android:id="@+id/tv_tag" | ||||||
|                             android:layout_width="match_parent" |                             android:layout_width="match_parent" | ||||||
|                             android:layout_height="wrap_content" |                             android:layout_height="wrap_content" | ||||||
|                             android:layout_marginTop="13.3dp" |                             android:layout_marginBottom="8dp" | ||||||
|                             android:textColor="@color/color_3bb9f1" |                             android:textColor="@color/color_3bb9f1" | ||||||
|                             android:textSize="12sp" |                             android:textSize="12sp" | ||||||
|                             android:visibility="gone" |                             android:visibility="gone" | ||||||
| @@ -613,7 +636,6 @@ | |||||||
|                             android:id="@+id/tv_detail" |                             android:id="@+id/tv_detail" | ||||||
|                             android:layout_width="match_parent" |                             android:layout_width="match_parent" | ||||||
|                             android:layout_height="wrap_content" |                             android:layout_height="wrap_content" | ||||||
|                             android:layout_marginTop="8dp" |  | ||||||
|                             android:ellipsize="end" |                             android:ellipsize="end" | ||||||
|                             android:fontFamily="@font/gmarket_sans_medium" |                             android:fontFamily="@font/gmarket_sans_medium" | ||||||
|                             android:lineSpacingExtra="5dp" |                             android:lineSpacingExtra="5dp" | ||||||
|   | |||||||
| @@ -1,7 +1,7 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> | <?xml version="1.0" encoding="utf-8"?> | ||||||
| <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" | ||||||
|     xmlns:tools="http://schemas.android.com/tools" |     xmlns:tools="http://schemas.android.com/tools" | ||||||
|     android:layout_width="match_parent" |     android:layout_width="wrap_content" | ||||||
|     android:layout_height="wrap_content" |     android:layout_height="wrap_content" | ||||||
|     android:gravity="center" |     android:gravity="center" | ||||||
|     android:orientation="vertical" |     android:orientation="vertical" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user