diff --git a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/SeriesContentCardView.kt b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/SeriesContentCardView.kt index a84a7b6e..a21ecadc 100644 --- a/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/SeriesContentCardView.kt +++ b/app/src/main/java/kr/co/vividnext/sodalive/v2/widget/SeriesContentCardView.kt @@ -21,6 +21,7 @@ class SeriesContentCardView @JvmOverloads constructor( private var thumbnailContainer: FrameLayout? = null private var thumbnail: ImageView? = null + private var adultBadge: ImageView? = null private var originalTag: View? = null private var labelContainer: LinearLayout? = null private var titleText: TextView? = null @@ -34,6 +35,7 @@ class SeriesContentCardView @JvmOverloads constructor( super.onFinishInflate() thumbnailContainer = findViewById(R.id.fl_series_thumbnail_container) thumbnail = findViewById(R.id.iv_series_content_thumbnail) + adultBadge = findViewById(R.id.iv_series_content_adult_badge) originalTag = findViewById(R.id.include_series_original_tag) labelContainer = findViewById(R.id.ll_series_content_label) titleText = findViewById(R.id.tv_series_content_title) @@ -59,6 +61,7 @@ class SeriesContentCardView @JvmOverloads constructor( } requireNotNull(titleText).setTextAppearance(size.titleStyleRes) + updateAdultBadge(size) requireNotNull(creatorText).apply { setTextAppearance(size.creatorStyleRes) layoutParams = LayoutParams( @@ -82,8 +85,44 @@ class SeriesContentCardView @JvmOverloads constructor( requireNotNull(originalTag).visibility = if (isVisible) VISIBLE else GONE } + fun setAdultVisible(isVisible: Boolean) { + requireNotNull(adultBadge).visibility = if (isVisible) VISIBLE else GONE + } + fun thumbnailView(): ImageView = requireNotNull(thumbnail) + private fun updateAdultBadge(size: SeriesContentCardSize) { + val spec = when (size) { + SeriesContentCardSize.Large -> AdultBadgeSpec( + sizeDp = 24, + marginDp = 8, + paddingDp = 4, + iconResId = R.drawable.ic_new_shield_large + ) + + SeriesContentCardSize.Small -> AdultBadgeSpec( + sizeDp = 18, + marginDp = 6, + paddingDp = 2, + iconResId = R.drawable.ic_new_shield_small + ) + } + requireNotNull(adultBadge).apply { + layoutParams = FrameLayout.LayoutParams(spec.sizeDp.dpToPx(), spec.sizeDp.dpToPx()).apply { + gravity = android.view.Gravity.TOP or android.view.Gravity.END + topMargin = spec.marginDp.dpToPx() + marginEnd = spec.marginDp.dpToPx() + } + setPadding( + spec.paddingDp.dpToPx(), + spec.paddingDp.dpToPx(), + spec.paddingDp.dpToPx(), + spec.paddingDp.dpToPx() + ) + setImageResource(spec.iconResId) + } + } + private fun setThumbnailOutline() { requireNotNull(thumbnailContainer).apply { clipToOutline = true @@ -112,4 +151,11 @@ class SeriesContentCardView @JvmOverloads constructor( private companion object { const val TITLE_CREATOR_GAP_DP = 2 } + + private data class AdultBadgeSpec( + val sizeDp: Int, + val marginDp: Int, + val paddingDp: Int, + val iconResId: Int + ) } diff --git a/app/src/main/res/layout/view_series_content_card.xml b/app/src/main/res/layout/view_series_content_card.xml index f9af1fb8..bcce0889 100644 --- a/app/src/main/res/layout/view_series_content_card.xml +++ b/app/src/main/res/layout/view_series_content_card.xml @@ -19,6 +19,19 @@ android:contentDescription="@null" android:scaleType="centerCrop" /> + + () + return LayoutInflater.from(context).inflate(R.layout.view_series_content_card, null, false) as SeriesContentCardView + } + + private fun SeriesContentCardView.adultBadge(): ImageView = findViewById(R.id.iv_series_content_adult_badge) + + private fun Int.dpToPx(): Int { + val context = ApplicationProvider.getApplicationContext() + return (this * context.resources.displayMetrics.density).toInt() + } +}