fix(live-room): 매니저 SNS 아이콘 노출 방식을 동적 렌더링으로 통일한다

This commit is contained in:
2026-03-24 13:35:15 +09:00
parent a893d85632
commit 08524bd79a
3 changed files with 92 additions and 60 deletions

View File

@@ -10,6 +10,7 @@ import android.view.View
import android.view.ViewGroup
import android.webkit.URLUtil
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.Toast
import androidx.recyclerview.widget.GridLayoutManager
@@ -44,6 +45,11 @@ class LiveRoomDetailFragment(
private val onClickCancel: () -> Unit
) : BottomSheetDialogFragment() {
private data class SnsItem(
val url: String,
val iconResId: Int
)
private val viewModel: LiveRoomDetailViewModel by inject()
private lateinit var binding: FragmentLiveRoomDetailBinding
@@ -273,41 +279,7 @@ class LiveRoomDetailFragment(
transformations(CircleCropTransformation())
}
if (
manager.kakaoOpenChatUrl.isNullOrBlank() ||
!URLUtil.isValidUrl(manager.kakaoOpenChatUrl)
) {
binding.ivManagerOpenChat.visibility = View.GONE
} else {
binding.ivManagerOpenChat.visibility = View.VISIBLE
binding.ivManagerOpenChat.setOnClickListener {
startActivity(Intent(Intent.ACTION_VIEW, manager.kakaoOpenChatUrl.toUri()))
}
}
if (
manager.instagramUrl.isNullOrBlank() ||
!URLUtil.isValidUrl(manager.instagramUrl)
) {
binding.ivManagerInstagram.visibility = View.GONE
} else {
binding.ivManagerInstagram.visibility = View.VISIBLE
binding.ivManagerInstagram.setOnClickListener {
startActivity(Intent(Intent.ACTION_VIEW, manager.instagramUrl.toUri()))
}
}
if (
manager.youtubeUrl.isNullOrBlank() ||
!URLUtil.isValidUrl(manager.youtubeUrl)
) {
binding.ivManagerYoutube.visibility = View.GONE
} else {
binding.ivManagerYoutube.visibility = View.VISIBLE
binding.ivManagerYoutube.setOnClickListener {
startActivity(Intent(Intent.ACTION_VIEW, manager.youtubeUrl.toUri()))
}
}
bindManagerSnsItems(manager)
if (manager.isCreator) {
binding.tvManagerProfile.visibility = View.VISIBLE
@@ -321,6 +293,66 @@ class LiveRoomDetailFragment(
}
}
private fun bindManagerSnsItems(manager: GetRoomDetailManager) {
val snsItems = listOf(
SnsItem(
url = manager.youtubeUrl?.trim().orEmpty(),
iconResId = R.drawable.ic_sns_youtube
),
SnsItem(
url = manager.instagramUrl?.trim().orEmpty(),
iconResId = R.drawable.ic_sns_instagram
),
SnsItem(
url = manager.xUrl?.trim().orEmpty(),
iconResId = R.drawable.ic_sns_x
),
SnsItem(
url = manager.fancimmUrl?.trim().orEmpty(),
iconResId = R.drawable.ic_sns_fancimm
),
SnsItem(
url = manager.kakaoOpenChatUrl?.trim().orEmpty(),
iconResId = R.drawable.ic_sns_kakao
)
).filter { item ->
item.url.isNotBlank() && URLUtil.isValidUrl(item.url)
}
binding.llManagerSnsIcons.removeAllViews()
binding.llManagerSnsIcons.visibility = if (snsItems.isEmpty()) {
View.GONE
} else {
View.VISIBLE
}
snsItems.forEachIndexed { index, item ->
val imageView = ImageView(requireContext()).apply {
setImageResource(item.iconResId)
layoutParams = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
).apply {
if (index > 0) {
marginStart = 8.dpToPx().toInt()
}
}
setOnClickListener {
openUrl(item.url)
}
}
binding.llManagerSnsIcons.addView(imageView)
}
}
private fun openUrl(url: String) {
val intent = Intent(Intent.ACTION_VIEW, url.toUri())
if (intent.resolveActivity(requireActivity().packageManager) != null) {
startActivity(intent)
}
}
private fun setParticipantUserSummary(participatingUsers: List<GetRoomDetailUser>) {
val userCount = if (participatingUsers.size > 10) {
10

View File

@@ -248,33 +248,11 @@
android:orientation="vertical">
<LinearLayout
android:id="@+id/ll_manager_sns_icons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/iv_manager_open_chat"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@null"
android:src="@drawable/ic_website_blue" />
<ImageView
android:id="@+id/iv_manager_instagram"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:contentDescription="@null"
android:src="@drawable/ic_instagram_blue" />
<ImageView
android:id="@+id/iv_manager_youtube"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:contentDescription="@null"
android:src="@drawable/ic_youtube_play_blue" />
</LinearLayout>
android:orientation="horizontal"
android:visibility="gone" />
<TextView
android:id="@+id/tv_manager_profile"