diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt index b867f74a..92cecc37 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ActorAdaptor.kt @@ -14,9 +14,13 @@ import com.lagradost.cloudstream3.R import com.lagradost.cloudstream3.utils.UIHelper.setImage import kotlinx.android.synthetic.main.cast_item.view.* -class ActorAdaptor( - private val actors: MutableList, -) : RecyclerView.Adapter() { +class ActorAdaptor() : RecyclerView.Adapter() { + data class ActorMetaData( + var isInverted: Boolean, + val actor: ActorData, + ) + + private val actors: MutableList = mutableListOf() override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { return CardViewHolder( @@ -27,7 +31,10 @@ class ActorAdaptor( override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (holder) { is CardViewHolder -> { - holder.bind(actors[position]) + holder.bind(actors[position].actor, actors[position].isInverted, position) { + actors[position].isInverted = !actors[position].isInverted + this.notifyItemChanged(position) + } } } } @@ -36,7 +43,7 @@ class ActorAdaptor( return actors.size } - fun updateList(newList: List) { + private fun updateActorList(newList: List) { val diffResult = DiffUtil.calculateDiff( ActorDiffCallback(this.actors, newList) ) @@ -47,6 +54,18 @@ class ActorAdaptor( diffResult.dispatchUpdatesTo(this) } + fun updateList(newList: List) { + if (actors.size >= newList.size) { + updateActorList(newList.mapIndexed { i, data -> actors[i].copy(actor = data) }) + } else { + updateActorList(newList.mapIndexed { i, data -> + if (i < actors.size) + actors[i].copy(actor = data) + else ActorMetaData(isInverted = false, actor = data) + }) + } + } + private class CardViewHolder constructor( itemView: View, @@ -59,10 +78,21 @@ class ActorAdaptor( private val voiceActorImageHolder: View = itemView.voice_actor_image_holder private val voiceActorName: TextView = itemView.voice_actor_name - fun bind(card: ActorData) { - actorImage.setImage(card.actor.image) - actorName.text = card.actor.name - card.role?.let { + fun bind(actor: ActorData, isInverted: Boolean, position: Int, callback: (Int) -> Unit) { + val (mainImg, vaImage) = if (!isInverted || actor.voiceActor?.image.isNullOrBlank()) { + Pair(actor.actor.image, actor.voiceActor?.image) + } else { + Pair(actor.voiceActor?.image, actor.actor.image) + } + + itemView.setOnClickListener { + callback(position) + } + + actorImage.setImage(mainImg) + + actorName.text = actor.actor.name + actor.role?.let { actorExtra.context?.getString( when (it) { ActorRole.Main -> { @@ -79,31 +109,31 @@ class ActorAdaptor( actorExtra.isVisible = true actorExtra.text = text } - } ?: card.roleString?.let { + } ?: actor.roleString?.let { actorExtra.isVisible = true actorExtra.text = it } ?: run { actorExtra.isVisible = false } - if (card.voiceActor == null) { + if (actor.voiceActor == null) { voiceActorImageHolder.isVisible = false voiceActorName.isVisible = false } else { - voiceActorName.text = card.voiceActor.name - voiceActorImageHolder.isVisible = voiceActorImage.setImage(card.voiceActor.image) + voiceActorName.text = actor.voiceActor.name + voiceActorImageHolder.isVisible = voiceActorImage.setImage(vaImage) } } } } class ActorDiffCallback( - private val oldList: List, - private val newList: List + private val oldList: List, + private val newList: List ) : DiffUtil.Callback() { override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int) = - oldList[oldItemPosition].actor.name == newList[newItemPosition].actor.name + oldList[oldItemPosition].actor.actor.name == newList[newItemPosition].actor.actor.name override fun getOldListSize() = oldList.size diff --git a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt index edafc6da..c31fa4b6 100644 --- a/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt +++ b/app/src/main/java/com/lagradost/cloudstream3/ui/result/ResultFragment.kt @@ -673,7 +673,7 @@ class ResultFragment : Fragment(), PanelsChildGestureRegionObserver.GestureRegio result_cast_items?.let { PanelsChildGestureRegionObserver.Provider.get().register(it) } - result_cast_items?.adapter = ActorAdaptor(mutableListOf()) + result_cast_items?.adapter = ActorAdaptor() fixGrid() result_recommendations?.spanCount = 3 result_overlapping_panels?.setStartPanelLockState(OverlappingPanelsLayout.LockState.CLOSE) diff --git a/app/src/main/res/layout/cast_item.xml b/app/src/main/res/layout/cast_item.xml index 20ebbe78..8403940c 100644 --- a/app/src/main/res/layout/cast_item.xml +++ b/app/src/main/res/layout/cast_item.xml @@ -6,15 +6,16 @@ android:nextFocusLeft="@id/episode_poster" android:nextFocusRight="@id/result_episode_download" android:id="@+id/episode_holder" - + app:cardElevation="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" app:cardCornerRadius="@dimen/rounded_image_radius" - app:cardBackgroundColor="?attr/primaryBlackBackground" + app:cardBackgroundColor="@color/transparent" android:foreground="@drawable/outline_drawable" - android:layout_marginEnd="10dp"> + android:layout_margin="5dp"> diff --git a/app/src/main/res/layout/fragment_result.xml b/app/src/main/res/layout/fragment_result.xml index 6ae2d864..4d9d34d4 100644 --- a/app/src/main/res/layout/fragment_result.xml +++ b/app/src/main/res/layout/fragment_result.xml @@ -392,7 +392,7 @@ android:nextFocusRight="@id/result_search" android:nextFocusUp="@id/result_description" - android:nextFocusDown="@id/result_play_movie" + android:nextFocusDown="@id/result_cast_items" android:paddingTop="0dp" app:cornerRadius="4dp" app:icon="@drawable/ic_baseline_bookmark_24" @@ -411,6 +411,9 @@ tools:text="Cast: Joe Ligma" />