package ani.dantotsu.profile.activity import android.view.View import android.view.ViewGroup import ani.dantotsu.R import ani.dantotsu.blurImage import ani.dantotsu.connections.anilist.api.Notification import ani.dantotsu.connections.anilist.api.NotificationType import ani.dantotsu.databinding.ItemNotificationBinding import ani.dantotsu.loadImage import ani.dantotsu.profile.activity.NotificationActivity.Companion.NotificationClickType import ani.dantotsu.setAnimation import ani.dantotsu.toPx import com.xwray.groupie.viewbinding.BindableItem class NotificationItem( private val notification: Notification, val clickCallback: (Int, Int?, NotificationClickType) -> Unit ) : BindableItem() { private lateinit var binding: ItemNotificationBinding override fun bind(viewBinding: ItemNotificationBinding, position: Int) { binding = viewBinding setAnimation(binding.root.context, binding.root) setBinding() } override fun getLayout(): Int { return R.layout.item_notification } override fun initializeViewBinding(view: View): ItemNotificationBinding { return ItemNotificationBinding.bind(view) } private fun image(user: Boolean = false, commentNotification: Boolean = false) { val cover = if (user) notification.user?.bannerImage ?: notification.user?.avatar?.medium else notification.media?.bannerImage ?: notification.media?.coverImage?.large blurImage(binding.notificationBannerImage, cover) val defaultHeight = 153.toPx val userHeight = 90.toPx val textMarginStart = 125.toPx if (user) { binding.notificationCover.visibility = View.GONE binding.notificationCoverUser.visibility = View.VISIBLE binding.notificationCoverUserContainer.visibility = View.VISIBLE if (commentNotification) { binding.notificationCoverUser.setImageResource(R.drawable.ic_dantotsu_round) binding.notificationCoverUser.scaleX = 1.4f binding.notificationCoverUser.scaleY = 1.4f } else { binding.notificationCoverUser.loadImage(notification.user?.avatar?.large) } binding.notificationBannerImage.layoutParams.height = userHeight binding.notificationGradiant.layoutParams.height = userHeight (binding.notificationTextContainer.layoutParams as ViewGroup.MarginLayoutParams).marginStart = userHeight } else { binding.notificationCover.visibility = View.VISIBLE binding.notificationCoverUser.visibility = View.VISIBLE binding.notificationCoverUserContainer.visibility = View.GONE binding.notificationCover.loadImage(notification.media?.coverImage?.large) binding.notificationBannerImage.layoutParams.height = defaultHeight binding.notificationGradiant.layoutParams.height = defaultHeight (binding.notificationTextContainer.layoutParams as ViewGroup.MarginLayoutParams).marginStart = textMarginStart } } private fun setBinding() { val notificationType: NotificationType = NotificationType.valueOf(notification.notificationType) binding.notificationText.text = ActivityItemBuilder.getContent(notification) binding.notificationDate.text = ActivityItemBuilder.getDateTime(notification.createdAt) when (notificationType) { NotificationType.ACTIVITY_MESSAGE -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.ACTIVITY_REPLY -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.FOLLOWING -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.userId ?: 0, null, NotificationClickType.USER ) } } NotificationType.ACTIVITY_MENTION -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.THREAD_COMMENT_MENTION -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } } NotificationType.THREAD_SUBSCRIBED -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } } NotificationType.THREAD_COMMENT_REPLY -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } } NotificationType.AIRING -> { binding.notificationCover.loadImage(notification.media?.coverImage?.large) image() binding.notificationBannerImage.setOnClickListener { clickCallback( notification.media?.id ?: 0, null, NotificationClickType.MEDIA ) } } NotificationType.ACTIVITY_LIKE -> { image(true) binding.notificationCover.loadImage(notification.user?.avatar?.large) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.ACTIVITY_REPLY_LIKE -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.THREAD_LIKE -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } } NotificationType.THREAD_COMMENT_LIKE -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } } NotificationType.ACTIVITY_REPLY_SUBSCRIBED -> { binding.notificationCover.loadImage(notification.user?.avatar?.large) image(true) binding.notificationCoverUser.setOnClickListener { clickCallback( notification.user?.id ?: 0, null, NotificationClickType.USER ) } binding.notificationBannerImage.setOnClickListener { clickCallback( notification.activityId ?: 0, null, NotificationClickType.ACTIVITY ) } } NotificationType.RELATED_MEDIA_ADDITION -> { binding.notificationCover.loadImage(notification.media?.coverImage?.large) image() binding.notificationBannerImage.setOnClickListener { clickCallback( notification.media?.id ?: 0, null, NotificationClickType.MEDIA ) } } NotificationType.MEDIA_DATA_CHANGE -> { binding.notificationCover.loadImage(notification.media?.coverImage?.large) image() binding.notificationBannerImage.setOnClickListener { clickCallback( notification.media?.id ?: 0, null, NotificationClickType.MEDIA ) } } NotificationType.MEDIA_MERGE -> { binding.notificationCover.loadImage(notification.media?.coverImage?.large) image() binding.notificationBannerImage.setOnClickListener { clickCallback( notification.media?.id ?: 0, null, NotificationClickType.MEDIA ) } } NotificationType.MEDIA_DELETION -> { binding.notificationCover.visibility = View.GONE } NotificationType.COMMENT_REPLY -> { image(user = true, commentNotification = true) if (notification.commentId != null && notification.mediaId != null) { binding.notificationBannerImage.setOnClickListener { clickCallback( notification.mediaId, notification.commentId, NotificationClickType.COMMENT ) } } } } } }